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

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 _VXIINTERPRETER_H
  23. #define _VXIINTERPRETER_H
  24. #include "VXItypes.h"                  /* For VXIchar */
  25. #include "VXIvalue.h"                  /* For VXIValue */
  26. #ifdef __cplusplus
  27. struct VXIcacheInterface;
  28. struct VXIinetInterface;
  29. struct VXIjsiInterface;
  30. struct VXIlogInterface;
  31. struct VXIobjectInterface;
  32. struct VXIpromptInterface;
  33. struct VXIrecInterface;
  34. struct VXItelInterface;
  35. #else
  36. #include "VXIcache.h"
  37. #include "VXIinet.h"
  38. #include "VXIjsi.h"
  39. #include "VXIlog.h"
  40. #include "VXIobject.h"
  41. #include "VXIprompt.h"
  42. #include "VXIrec.h"
  43. #include "VXItel.h"
  44. #endif
  45. #include "VXIheaderPrefix.h"
  46. #ifdef VXI_EXPORTS
  47. #define VXI_INTERPRETER SYMBOL_EXPORT_DECL
  48. #else
  49. #define VXI_INTERPRETER SYMBOL_IMPORT_DECL
  50. #endif
  51. #ifdef __cplusplus
  52. extern "C" {
  53. #endif
  54. /**
  55.   defgroup VXI Interpreter interface
  56.   
  57.   The OpenSpeech Browser core is the OpenVXI.  The
  58.   VXIinterpreter interface implements the VXI interface function to run
  59.   the interface. In addition a set of process and thread initialization
  60.   routines are provided to set-up and destroy the interpreter per thread.
  61.  */
  62. /*@{*/
  63. /**
  64.  * VXI Runtime property for the URI to the beep audio (See SetProperties).
  65.  * The VXIValue passed should be of type VXIString.  The default is empty.
  66.  */
  67. #define VXI_BEEP_AUDIO L"vxi.property.beep.uri"
  68. /**
  69.  * VXI Runtime property for the URI to the platform defaults script (See SetProperties).
  70.  * The VXIValue passed should be of type VXIString.  The default is to use
  71.  * an internal defaults script.
  72.  */
  73. #define VXI_PLATFORM_DEFAULTS L"vxi.property.platform.defaults"
  74. /**
  75.  * VXI Runtime property for the behavior of the interpreter when the 
  76.  * ?access-control? PI is missing from a document fetched by <data>
  77.  * (See SetProperties).
  78.  * The VXIValue passed should be of type VXIInteger, and contain non-zero
  79.  * to allow access, or 0 to deny access.  The default is 0.
  80.  */
  81. #define VXI_DEFAULT_ACCESS_CONTROL L"vxi.property.defaultaccesscontrol"
  82. /*
  83.  * Future:
  84.  */
  85. //L"vxi.property.maxLoopIterations"
  86. //L"vxi.property.maxDocuments"
  87. //L"vxi.property.maxExeStackDepth"
  88. /*
  89.  * VXI Runtime property for the size of the parsed document cache.
  90.  * The VXIValue passed should be of type VXIInteger, continaing the size
  91.  * of the cache in kB.
  92.  */
  93. #define VXI_DOC_MEMORY_CACHE  L"vxi.property.cache.size"
  94. /**
  95.  * Result codes for interface methods.
  96.  *
  97.  * Result codes less then zero are severe errors (likely to be
  98.  * platform faults), those greater then zero are warnings (likely to
  99.  * be application issues)
  100.  */
  101. typedef enum VXIinterpreterResult {
  102.   /** Fatal error, terminate call    */
  103.   VXIinterp_RESULT_FATAL_ERROR          = -100,
  104.   /** Out of memory                  */
  105.   VXIinterp_RESULT_OUT_OF_MEMORY        =   -7,
  106.   /** Errors from platform services  */
  107.   VXIinterp_RESULT_PLATFORM_ERROR       =   -5,
  108.   /** Property name is not valid     */
  109.   VXIinterp_RESULT_INVALID_PROP_NAME    =   -3,
  110.   /** Property value is not valid    */
  111.   VXIinterp_RESULT_INVALID_PROP_VALUE   =   -2,
  112.   /** Invalid function argument      */
  113.   VXIinterp_RESULT_INVALID_ARGUMENT     =   -1,
  114.   /** Success                        */
  115.   VXIinterp_RESULT_SUCCESS              =    0,
  116.   /** Normal failure */
  117.   VXIinterp_RESULT_FAILURE              =    1,
  118.   /** Run call aborted */
  119.   VXIinterp_RESULT_STOPPED              =    3,
  120.   /** Document fetch timeout         */
  121.   VXIinterp_RESULT_FETCH_TIMEOUT        =   51,
  122.   /** Unable to open or read from URI */
  123.   VXIinterp_RESULT_FETCH_ERROR          =   52,
  124.   /** Not a valid VoiceXML document  */
  125.   VXIinterp_RESULT_INVALID_DOCUMENT     =   53,
  126.   /** Operation is not supported     */
  127.   VXIinterp_RESULT_UNSUPPORTED          =  100
  128. } VXIinterpreterResult;
  129. /**
  130.  * Structure containing all the interfaces required by the VXI.
  131.  *
  132.  * This structure must be allocated and all the pointers filled
  133.  * with created and initialized resources before creating the VXI
  134.  * interface.
  135.  */
  136. typedef struct VXIresources {
  137.   /** log interface */
  138.   VXIlogInterface    * log;
  139.   /** Internet interface */
  140.   VXIinetInterface   * inet;
  141.   /** ECMAScript interface */
  142.   VXIjsiInterface    * jsi;
  143.   /** Recognizer interface */
  144.   VXIrecInterface    * rec;
  145.   /** Prompt interface */
  146.   VXIpromptInterface * prompt;
  147.   /** Telephony interface */
  148.   VXItelInterface    * tel;
  149.   /** Object interface. May be NULL in which case objects will not function. */
  150.   VXIobjectInterface * object;
  151.   /** Cache interface. May be NULL, but VXI performance will be reduced. */
  152.   VXIcacheInterface  * cache;
  153. } VXIresources;
  154. /**
  155.  * VXIinterpreter interface for VoiceXML execution
  156.  *
  157.  * Abstract interface for the VoiceXML intepreter, simply provides a
  158.  * single method for running the intepreter on a document and getting
  159.  * the document result.<p>
  160.  *
  161.  * There is one intepreter interface per thread/line.
  162.  */
  163. typedef struct VXIinterpreterInterface {
  164.   /**
  165.    * Get the VXI interface version implemented
  166.    *
  167.    * @return  VXIint32 for the version number. The high high word is
  168.    *          the major version number, the low word is the minor version
  169.    *          number, using the native CPU/OS byte order. The current
  170.    *          version is VXI_CURRENT_VERSION as defined in VXItypes.h.
  171.    */
  172.   VXIint32 (*GetVersion)(void);
  173.   /**
  174.    * Get the name of the implementation
  175.    *
  176.    * @return  Implementation defined string that must be different from
  177.    *          all other implementations. The recommended name is one
  178.    *          where the interface name is prefixed by the implementator's
  179.    *          Internet address in reverse order, such as com.xyz.rec for
  180.    *          VXIrec from xyz.com. This is similar to how VoiceXML 1.0
  181.    *          recommends defining application specific error types.
  182.    */
  183.   const VXIchar* (*GetImplementationName)(void);
  184.   /**
  185.    * Run a VoiceXML document and optionally return the result
  186.    *
  187.    * @param name    [IN] Name of the VoiceXML document to fetch and
  188.    *                  execute, may be a URL or a platform dependant path.
  189.    *                  See the Open() method in VXIinet.h for details
  190.    *                  about supported names, however for URLs this
  191.    *                  must always be an absolute URL and any query arguments
  192.    *                  must be embedded.
  193.    * @param sessionScript [IN] A series of ECMAScript expressions which will
  194.    *                  be evaluated by the VXI to populate the session scope 
  195.    *                  in ECMAScript.
  196.    * @param result  [OUT] (Optional, pass NULL if not desired.) Return
  197.    *                  value for the VoiceXML document (from <exit/>), this
  198.    *                  is allocated on success and when there is an
  199.    *                  exit value (a NULL pointer is returned otherwise),
  200.    *                  the caller is responsible for destroying the returned
  201.    *                  value by calling VXIValueDestroy().
  202.    *
  203.    * @return         [From normal operation]<br>
  204.    *                 VXIinterp_RESULT_SUCCESS on success<br>
  205.    *                 VXIinterp_RESULT_FAILURE if normal error occured<br>
  206.    *                 VXIinterp_RESULT_STOPPED if aborted by Stop<br>
  207.    *                 [During initialization from defaults]<br>
  208.    *                 VXIinterp_RESULT_FETCH_TIMEOUT<br>
  209.    *                 VXIinterp_RESULT_FETCH_ERROR<br>
  210.    *                 VXIinterp_RESULT_INVALID_DOCUMENT<br>
  211.    *                 [Serious errors]<br>
  212.    *                 VXIinterp_RESULT_FATAL_ERROR<br>
  213.    *                 VXIinterp_RESULT_OUT_OF_MEMORY<br>
  214.    *                 VXIinterp_RESULT_PLATFORM_ERROR<br>
  215.    *                 VXIinterp_RESULT_INVALID_ARGUMENT
  216.    */
  217.   VXIinterpreterResult (*Run)(struct VXIinterpreterInterface  *pThis,
  218.                               const VXIchar                   *name,
  219.                               const VXIchar                   *sessionScript,
  220.                               VXIValue                       **result);
  221.   /**
  222.    * Specify runtime properties for the VoiceXML interpreter.
  223.    *
  224.    * @param props   [IN] Map containing a list of properties.  Currently these
  225.    *                  are:
  226.    *                    - VXI_BEEP_AUDIO             URI for the beep audio
  227.    *                    - VXI_PLATFORM_DEFAULTS      URI for the platform defaults
  228.    *                    - VXI_DEFAULT_ACCESS_CONTROL
  229.    *
  230.    * @return         VXIinterp_RESULT_SUCCESS on success<br>
  231.    *                 VXIinterp_RESULT_INVALID_PROP_NAME<br>
  232.    *                 VXIinterp_RESULT_INVALID_PROP_VALUE<br>
  233.    *                 VXIinterp_RESULT_INVALID_ARGUMENT
  234.    */
  235.   VXIinterpreterResult (*SetProperties)(struct VXIinterpreterInterface *pThis,
  236.                                         const VXIMap                   *props);
  237.   /**
  238.    * Load and parse an VXML document.  This tests the validity.
  239.    *
  240.    * @param name    [IN] Name of the VoiceXML document to fetch and
  241.    *                  execute, may be a URL or a platform dependant path.
  242.    *                  See the Open( ) method in VXIinet.h for details
  243.    *                  about supported names, however for URLs this
  244.    *                  must always be an absolute URL and any query arguments
  245.    *                  must be embedded.
  246.    *
  247.    * @return        VXIinterp_RESULT_SUCCESS if document exists and is valid<br>
  248.    *                VXIinterp_RESULT_FAILURE if document is invalid VXML<br>
  249.    *                VXIinterp_RESULT_FETCH_ERROR if document retrieval failed<br>
  250.    *                VXIinterp_RESULT_FETCH_TIMEOUT<br>
  251.    *                VXIinterp_RESULT_INVALID_ARGUMENT<br>
  252.    *                VXIinterp_RESULT_FATAL_ERROR<br>
  253.    *                VXIinterp_RESULT_OUT_OF_MEMORY
  254.    */
  255.   VXIinterpreterResult (*Validate)(struct VXIinterpreterInterface  *pThis,
  256.                                    const VXIchar *name);
  257.   /**
  258.    * In the interpreter is running and doStop == TRUE, this will cause the
  259.    * in progress Run to return as soon as possible with 
  260.    * VXIinterp_RESULT_STOPPED.  If doStop == FALSE, this clears any pending
  261.    * stop request.
  262.    *
  263.    * NOTE: if the interpreter encounters an error before noticing the request
  264.    * or while servicing the request, the actual return value from Run may not
  265.    * something other than VXIinterp_RESULT_STOPPED.
  266.    *
  267.    * @return         VXIinterp_RESULT_SUCCESS on success<br>
  268.    *                 VXIinterp_RESULT_INVALID_ARGUMENT
  269.    */
  270.   VXIinterpreterResult (*RequestStop)(struct VXIinterpreterInterface  *pThis,
  271.                                       VXIbool doStop);
  272.   /**
  273.    * Trigger an event.
  274.    *
  275.    * NOTE: This should not be used by the integration layer to produce
  276.    *       events in response to a call into one of the interfaces.
  277.    *
  278.    * @param event    [IN] VoiceXML event to generate during Run.
  279.    * @param message  [IN] Corresponding message string; may be NULL.
  280.    *
  281.    * @return         VXIinterp_RESULT_SUCCESS on success<br>
  282.    *                 VXIinterp_RESULT_INVALID_ARGUMENT
  283.    */
  284.   VXIinterpreterResult (*InsertEvent)(struct VXIinterpreterInterface *pThis,
  285.                                       const VXIchar                  *event,
  286.                                       const VXIchar                  *message);
  287.   /**
  288.    * Clear the event queue
  289.    *
  290.    * NOTE: this function must be called by the integration to clear the event(s)
  291.    * in case of error occurs and the event(s) is no longer valid.  The interpreter
  292.    * will not clear the queue to avoid race condition.
  293.    *
  294.    * @return         VXIinterp_RESULT_SUCCESS on success<br>
  295.    *                 VXIinterp_RESULT_INVALID_ARGUMENT
  296.    */
  297.   VXIinterpreterResult (*ClearEventQueue)(struct VXIinterpreterInterface *pThis);
  298. } VXIinterpreterInterface;
  299. /**
  300.  * Per-process initialization for VXIinterpreter.
  301.  * This function should be called once at process startup.
  302.  *
  303.  * @param log            [IN] VXI Logging interface used for error/diagnostic
  304.  *                             logging, only used for the duration of this
  305.  *                             function call
  306.  * @param  diagLogBase   [IN] Base tag number for diagnostic logging purposes.
  307.  *                             All diagnostic tags for the VXI will start at
  308.  *                             this ID and increase upwards.
  309.  * @param  props         [IN]
  310.  *
  311.  * @return     VXIinterp_RESULT_SUCCESS if resources may be created.
  312.  * @return     VXIinterp_RESULT_FAILURE if interface is unavailable.
  313.  */
  314. VXI_INTERPRETER
  315. VXIinterpreterResult VXIinterpreterInit(VXIlogInterface  *log,
  316.                                         VXIunsigned       diagLogBase,
  317.                                         const VXIMap     *props);
  318. /**
  319.  * Per-process de-initialization for VXIinterpreter.
  320.  * This function should be called once per process shutdown, after
  321.  * all the interfaces for the process are destroyed.
  322.  *
  323.  * @param log [IN] VXI Logging interface used for error/diagnostic logging,
  324.  *                  only used for the duration of this function call
  325.  */
  326. VXI_INTERPRETER void VXIinterpreterShutDown(VXIlogInterface  *log);
  327. /**
  328.  * Create an interface to the VoiceXML interpreter.
  329.  * Create a VXI interface given an interface structure that
  330.  * contains all the resources required for the VXI.
  331.  *
  332.  * @param resource [IN] A pointer to a structure containing all the
  333.  *                       interfaces requires by the VXI
  334.  * @param pThis    [IN] A pointer to the VXI interface that is to be
  335.  *                       allocated.  The pointer will be set if this call
  336.  *                       is successful.
  337.  *
  338.  * @return     VXIinterp_RESULT_SUCCESS if interface is available for use<br>
  339.  *             VXIinterp_RESULT_OUT_OF_MEMORY if low memory is suspected<br>
  340.  *             VXIinterp_RESULT_INVALID_ARGUMENT
  341.  */
  342. VXI_INTERPRETER VXIinterpreterResult
  343. VXIinterpreterCreateResource(VXIresources *resource,
  344.                              VXIinterpreterInterface ** pThis);
  345. /**
  346.  * Destroy and de-allocate a VXI interface.
  347.  * 
  348.  * Destroy an interface returned from VXIinterpreterCreateResource.
  349.  * The pointer is set to NULL on success.
  350.  *
  351.  * @param pThis [IN] The pointer to the interface to be destroyed.
  352.  */
  353. VXI_INTERPRETER void
  354. VXIinterpreterDestroyResource(VXIinterpreterInterface ** pThis);
  355. /*@}*/
  356. #ifdef __cplusplus
  357. }
  358. #endif
  359. #include "VXIheaderSuffix.h"
  360. #endif  /* include guard */