VXIjsi.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:16k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef _VXIJSI_H
  23. #define _VXIJSI_H
  24. #include "VXItypes.h"                  /* For VXIchar, VXIint, etc.  */
  25. #include "VXIvalue.h"                  /* For VXIValue */
  26. #include "VXIheaderPrefix.h"
  27. #ifdef VXIJSI_EXPORTS
  28. #define VXIJSI_API SYMBOL_EXPORT_DECL
  29. #else
  30. #define VXIJSI_API SYMBOL_IMPORT_DECL
  31. #endif
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35. #ifdef __cplusplus
  36. struct VXIjsiContext;
  37. #else
  38. typedef struct VXIjsiContext { void * dummy; } VXIjsiContext;
  39. #endif
  40. /**
  41.  * defgroup VXIjsi ECMAScript Interface
  42.  */
  43. /*@{*/
  44. /**
  45.  * Result codes for interface methods
  46.  *
  47.  * Result codes less then zero are severe errors (likely to be
  48.  * platform faults), those greater then zero are warnings (likely to
  49.  * be application issues)
  50.  */
  51. typedef enum VXIjsiResult {
  52.   /** Fatal error, terminate call    */
  53.   VXIjsi_RESULT_FATAL_ERROR       =  -100,
  54.   /** I/O error                      */
  55.   VXIjsi_RESULT_IO_ERROR           =   -8,
  56.   /** Out of memory                  */
  57.   VXIjsi_RESULT_OUT_OF_MEMORY      =   -7,
  58.   /** System error, out of service   */
  59.   VXIjsi_RESULT_SYSTEM_ERROR       =   -6,
  60.   /** Errors from platform services  */
  61.   VXIjsi_RESULT_PLATFORM_ERROR     =   -5,
  62.   /** Return buffer too small        */
  63.   VXIjsi_RESULT_BUFFER_TOO_SMALL   =   -4,
  64.   /** Property name is not valid    */
  65.   VXIjsi_RESULT_INVALID_PROP_NAME  =   -3,
  66.   /** Property value is not valid   */
  67.   VXIjsi_RESULT_INVALID_PROP_VALUE =   -2,
  68.   /** Invalid function argument      */
  69.   VXIjsi_RESULT_INVALID_ARGUMENT   =   -1,
  70.   /** Success                        */
  71.   VXIjsi_RESULT_SUCCESS            =    0,
  72.   /** Normal failure, nothing logged */
  73.   VXIjsi_RESULT_FAILURE            =    1,
  74.   /** Non-fatal non-specific error   */
  75.   VXIjsi_RESULT_NON_FATAL_ERROR    =    2,
  76.   /** ECMAScript syntax error        */
  77.   VXIjsi_RESULT_SYNTAX_ERROR       =   50,
  78.   /** ECMAScript exception thrown    */
  79.   VXIjsi_RESULT_SCRIPT_EXCEPTION   =   51,
  80.   /** ECMAScript security violation  */
  81.   VXIjsi_RESULT_SECURITY_VIOLATION =   52,
  82.   /** Operation is not supported     */
  83.   VXIjsi_RESULT_UNSUPPORTED        =  100
  84. } VXIjsiResult;
  85. /**
  86.  * Attributes for scope name
  87.  *
  88.  */
  89. typedef enum VXIjsiScopeAttr {
  90.   /* The scope chain will be created as a real object */
  91.   VXIjsi_NATIVE_SCOPE            =   1,
  92.   /* Assign an alternative name to the currently active scope */
  93.   VXIjsi_ALIAS_SCOPE             =   2
  94. } VXIjsiScopeAttr;
  95. /**
  96.  * Abstract interface for interacting with a ECMAScript (JavaScript)
  97.  * engine.  This provides functionality for creating ECMAScript
  98.  * execution contexts, manipulating ECMAScript scopes, manipulating
  99.  * variables within those scopes, and evaluating ECMAScript
  100.  * expressions/scripts. <p>
  101.  *
  102.  * There is one ECMAScript interface per thread/line.
  103.  */
  104. typedef struct VXIjsiInterface {
  105.   /**
  106.    * Get the VXI interface version implemented
  107.    *
  108.    * @return  VXIint32 for the version number. The high high word is
  109.    *          the major version number, the low word is the minor version
  110.    *          number, using the native CPU/OS byte order. The current
  111.    *          version is VXI_CURRENT_VERSION as defined in VXItypes.h.
  112.    */
  113.   VXIint32 (*GetVersion)(void);
  114.   /**
  115.    * Get the name of the implementation
  116.    *
  117.    * @return  Implementation defined string that must be different from
  118.    *          all other implementations. The recommended name is one
  119.    *          where the interface name is prefixed by the implementator's
  120.    *          Internet address in reverse order, such as com.xyz.rec for
  121.    *          VXIrec from xyz.com. This is similar to how VoiceXML 1.0
  122.    *          recommends defining application specific error types.
  123.    */
  124.   const VXIchar* (*GetImplementationName)(void);
  125.   /**
  126.    * Create and initialize a new script context
  127.    *
  128.    * This creates a new context. Currently one context is created per
  129.    * thread, but the implementation must support the ability to have
  130.    * multiple contexts per thread.
  131.    *
  132.    * @param context  [OUT] Newly created context
  133.    *
  134.    * @return VXIjsi_RESULT_SUCCESS on success
  135.    */
  136.   VXIjsiResult (*CreateContext)(struct VXIjsiInterface  *pThis,
  137.                                 VXIjsiContext          **context);
  138.   /**
  139.    * Destroy a script context, clean up storage if required
  140.    *
  141.    * @param context  [IN] Context to destroy
  142.    *
  143.    * @return VXIjsi_RESULT_SUCCESS on success
  144.    */
  145.   VXIjsiResult (*DestroyContext)(struct VXIjsiInterface  *pThis,
  146.                                  VXIjsiContext          **context);
  147.   /**
  148.    * Create a script variable relative to the current scope, initialized
  149.    * to an expression
  150.    *
  151.    * NOTE: When there is an expression, the expression is evaluated,
  152.    *  then the value of the evaluated expression (the final
  153.    *  sub-expression) assigned. Thus an expression of "1; 2;" actually
  154.    *  assigns 2 to the variable.
  155.    *
  156.    * @param context  [IN] ECMAScript context to create the variable within
  157.    * @param name     [IN] Name of the variable to create
  158.    * @param expr     [IN] Expression to set the initial value of the variable
  159.    *                      (if NULL or empty the variable is set to ECMAScript
  160.    *                      Undefined as required for VoiceXML 1.0 &lt;var&gt;)
  161.    *
  162.    * @return VXIjsi_RESULT_SUCCESS on success
  163.    */
  164.   VXIjsiResult (*CreateVarExpr)(struct VXIjsiInterface *pThis,
  165.                                 VXIjsiContext          *context,
  166.                                 const VXIchar          *name,
  167.                                 const VXIchar          *expr);
  168.   /**
  169.    * Create a script variable relative to the current scope, initialized
  170.    *  to a VXIValue based value
  171.    *
  172.    * @param context  [IN] ECMAScript context to create the variable within
  173.    * @param name     [IN] Name of the variable to create
  174.    * @param value    [IN] VXIValue based value to set the initial value of
  175.    *                      the variable (if NULL the variable is set to
  176.    *                      ECMAScript Undefined as required for VoiceXML 1.0
  177.    *                      &lt;var&gt;). VXIMap is used to pass ECMAScript objects.
  178.    *
  179.    * @return VXIjsi_RESULT_SUCCESS on success
  180.    */
  181.   VXIjsiResult (*CreateVarValue)(struct VXIjsiInterface *pThis,
  182.                                  VXIjsiContext          *context,
  183.                                  const VXIchar          *name,
  184.                                  const VXIValue         *value);
  185.   /**
  186.    * Create a script variable to a DOMDocument relative to the current scope,
  187.    * initialized to a DOMDocument.
  188.    *
  189.    * NOTE: Implementors must be aware of the exact contents of the VXIPtr
  190.    *       passed by the interpreter.  i.e., If the interpreter uses
  191.    *       a Xerces DOMDocument, so must the implementation of this
  192.    *       interface.
  193.    *
  194.    * @param context  [IN] ECMAScript context to set the variable within
  195.    * @param name     [IN] Name of the variable to set
  196.    * @param doc      [IN] DOMDocument to be assigned.  The implementation
  197.    *                      MUST NOT delete the contained document, as it
  198.    *                      is owned by the interpreter.
  199.    *
  200.    * @return VXIjsi_RESULT_SUCCESS on success
  201.    */
  202.   VXIjsiResult (*CreateVarDOM)(struct VXIjsiInterface *pThis,
  203.                              VXIjsiContext          *context,
  204.                              const VXIchar          *name,
  205.  VXIPtr                 *doc );
  206.   /**
  207.    * Set a script variable to an expression relative to the current scope
  208.    *
  209.    * NOTE: The expression is evaluated, then the value of the
  210.    *  evaluated expression (the final sub-expression) assigned. Thus
  211.    *  an expression of "1; 2;" actually assigns 2 to the variable.
  212.    *
  213.    * @param context  [IN] ECMAScript context to set the variable within
  214.    * @param name     [IN] Name of the variable to set
  215.    * @param expr     [IN] Expression to be assigned
  216.    *
  217.    * @return VXIjsi_RESULT_SUCCESS on success
  218.    */
  219.   VXIjsiResult (*SetVarExpr)(struct VXIjsiInterface *pThis,
  220.                              VXIjsiContext          *context,
  221.                              const VXIchar          *name,
  222.                              const VXIchar          *expr);
  223.   /**
  224.     * set a script variable read-only to the current scope
  225.     *  
  226.     * @param context  [IN] ECMAScript context in which the variable
  227.     *                      has been created
  228.     * @param name     [IN] Name of the variable to set as read only.
  229.     *
  230.     * @return VXIjsi_RESULT_SUCCESS on success
  231.     */
  232.    VXIjsiResult (*SetReadOnly)(struct VXIjsiInterface *pThis,
  233.                                VXIjsiContext          *context,
  234.                                const VXIchar          *name);
  235.   /**
  236.    * Set a script variable to a value relative to the current scope
  237.    *
  238.    * @param context  [IN] ECMAScript context to set the variable within
  239.    * @param name     [IN] Name of the variable to set
  240.    * @param value    [IN] VXIValue based value to be assigned. VXIMap is
  241.    *                      used to pass ECMAScript objects.
  242.    *
  243.    * @return VXIjsi_RESULT_SUCCESS on success
  244.    */
  245.   VXIjsiResult (*SetVarValue)(struct VXIjsiInterface *pThis,
  246.                               VXIjsiContext          *context,
  247.                               const VXIchar          *name,
  248.                               const VXIValue         *value);
  249.   /**
  250.    * Get the value of a variable
  251.    *
  252.    * @param context  [IN]  ECMAScript context to get the variable from
  253.    * @param name     [IN]  Name of the variable to get
  254.    * @param value    [OUT] Value of the variable, returned as the VXI
  255.    *                       type that most closely matches the variable's
  256.    *                       ECMAScript type. This function allocates this
  257.    *                       for return on success (returns a NULL pointer
  258.    *                       otherwise), the caller is responsible for
  259.    *                       destroying it via VXIValueDestroy( ). VXIMap
  260.    *                       is used to return ECMAScript objects.
  261.    *
  262.    * @return VXIjsi_RESULT_SUCCESS on success, VXIjsi_RESULT_FAILURE if the
  263.    *         variable has a ECMAScript value of Null,
  264.    *         VXIjsi_RESULT_NON_FATAL_ERROR if the variable is not
  265.    *         defined (ECMAScript Undefined), or another error code for
  266.    *         severe errors
  267.    */
  268.   VXIjsiResult (*GetVar)(struct VXIjsiInterface  *pThis,
  269.                          const VXIjsiContext     *context,
  270.                          const VXIchar           *name,
  271.                          VXIValue               **value);
  272.   /**
  273.    * Check whether a variable is defined (not ECMAScript Undefined)
  274.    *
  275.    * NOTE: A variable with a ECMAScript Null value is considered defined
  276.    *
  277.    * @param context  [IN]  ECMAScript context to check the variable in
  278.    * @param name     [IN]  Name of the variable to check
  279.    *
  280.    * @return VXIjsi_RESULT_SUCCESS on success (variable is defined),
  281.    *         VXIjsi_RESULT_FAILURE if the variable has value undefined,
  282.    *         VXIjsi_RESULT_NON_FATAL_ERROR if the variable does not exist,
  283.    *         or another error code for severe errors
  284.    */
  285.   VXIjsiResult (*CheckVar)(struct VXIjsiInterface *pThis,
  286.                            const VXIjsiContext    *context,
  287.                            const VXIchar          *name);
  288.   /**
  289.    * Execute a script, optionally returning any execution result
  290.    *
  291.    * @param context  [IN]  ECMAScript context to execute within
  292.    * @param expr     [IN]  Buffer containing the script text
  293.    * @param value    [OUT] Result of the script execution, returned
  294.    *                       as the VXI type that most closely matches
  295.    *                       the variable's ECMAScript type. Pass NULL
  296.    *                       if the result is not desired. Otherwise
  297.    *                       this function allocates this for return on
  298.    *                       success when there is a return value (returns
  299.    *                       a NULL pointer otherwise), the caller is
  300.    *                       responsible for destroying it via
  301.    *                       VXIValueDestroy( ). VXIMap is used to return
  302.    *                       ECMAScript objects.
  303.    *
  304.    * @return VXIjsi_RESULT_SUCCESS on success
  305.    */
  306.   VXIjsiResult (*Eval)(struct VXIjsiInterface  *pThis,
  307.                        VXIjsiContext           *context,
  308.                        const VXIchar           *expr,
  309.                        VXIValue               **result);
  310.   /**
  311.    * Push a new context onto the scope chain (add a nested scope)
  312.    *
  313.    * @param context  [IN] ECMAScript context to push the scope onto
  314.    * @param name     [IN] Name of the scope, used to permit referencing
  315.    *                      variables from an explicit scope within the
  316.    *                      scope chain, such as "myscope.myvar" to access
  317.    *                      "myvar" within a scope named "myscope"
  318.    * @param attr     [IN] Attribute that defines how the scope will be pushed.
  319.    *                      The possible values are: 
  320.    *                      VXIjsi_NATIVE_SCOPE: create a real scope
  321.    *                                           and link to the scope chain
  322.    *                      VXIjsi_ALIAS_SCOPE: create an alias for the currently active
  323.    *                                          scope. If PopScope() is called later it
  324.    *                                          will be an NO-OP
  325.    *
  326.    * @return VXIjsi_RESULT_SUCCESS on success
  327.    */
  328.   VXIjsiResult (*PushScope)(struct VXIjsiInterface *pThis,
  329.                             VXIjsiContext          *context,
  330.                             const VXIchar          *name,
  331.                             const VXIjsiScopeAttr   attr);
  332.   
  333.   /**
  334.    * Pop a context from the scope chain (remove a nested scope)
  335.    *
  336.    * @param context  [IN] ECMAScript context to pop the scope from
  337.    *
  338.    * @return VXIjsi_RESULT_SUCCESS on success
  339.    */
  340.   VXIjsiResult (*PopScope)(struct VXIjsiInterface *pThis,
  341.                            VXIjsiContext          *context);
  342.   /**
  343.    * Reset the scope chain to the global scope (pop all nested scopes)
  344.    *
  345.    * @param context  [IN] ECMAScript context to pop the scopes from
  346.    *
  347.    * @return VXIjsi_RESULT_SUCCESS on success
  348.    */
  349.   VXIjsiResult (*ClearScopes)(struct VXIjsiInterface *pThis,
  350.                               VXIjsiContext          *context);
  351.   /**
  352.    * Returns a VXIMap containing info on the last error.
  353.    * The returned map is only valid if a previous call resulted in
  354.    * an error.  Additionally, the map may be destroyed when the
  355.    * the next call happens, so shoul not be retained.<br>
  356.    *
  357.    * Keys:<br>
  358.    *   lineNumber<br>
  359.    *   message<br>
  360.    *
  361.    * @return VXIMap containing error information, or NULL.
  362.    */
  363.   const VXIMap *(*GetLastError)(struct VXIjsiInterface *pThis, VXIjsiContext *context);
  364. } VXIjsiInterface;
  365. /*@}*/
  366. #ifdef __cplusplus
  367. }
  368. #endif
  369. #include "VXIheaderSuffix.h"
  370. #endif  /* include guard */