VXItel.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 VXITEL_H
  23. #define VXITEL_H
  24. #include "VXItypes.h"                  /* For VXIchar definition */
  25. #include "VXIvalue.h"
  26. #include "VXIheaderPrefix.h"
  27. #ifdef VXITEL_EXPORTS
  28. #define VXITEL_API SYMBOL_EXPORT_DECL
  29. #else
  30. #define VXITEL_API SYMBOL_IMPORT_DECL
  31. #endif
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35. /**
  36.  * defgroup VXItel Telephony interface
  37.  *
  38.  * Abstract interface for telephony functionality.
  39.  *
  40.  * VXItel provides the telephony functions for the VXI.  The transfer
  41.  * type is split into bridge and blind transfers.  These platform
  42.  * functions are platform and generally location dependant.
  43.  */
  44. /*@{*/
  45. /**
  46.  * @name Properties
  47.  * Keys identifying properties in a VXIMap passed to VXItelInterface::TransferBlind,
  48.  * VXItelInterface::TransferBridge, and VXItelInterface::TransferConsultation.
  49.  */
  50. /*@{*/
  51. /**
  52.  * VXIInteger containing the connecttimeout property (in milliseconds).
  53.  */
  54. #define TEL_CONNECTTIMEOUT      L"vxi.tel.connecttimeout"
  55. /**
  56.  * VXIInteger containing the maxcalltime property (in milliseconds).
  57.  */
  58. #define TEL_MAX_CALL_TIME       L"vxi.tel.maxcalltime"
  59. /**
  60.  * VXIString containing the aai information.
  61.  */
  62. #define TEL_TRANSFER_DATA       L"vxi.tel.transfer.aai"
  63. /**
  64.  * VXIString containing the type information.
  65.  */
  66. #define TEL_TRANSFER_TYPE       L"vxi.tel.transfer.type"
  67. /*@}*/
  68. /**
  69.  * @name Return keys
  70.  * Keys identifying properties in a VXIMap returned by calls to
  71.  * VXItelInterface::TransferConsultation and VXItelInterface::TransferBridge.
  72.  */
  73. /*@{*/
  74. /**
  75.  * VXIInteger containing the transfer duration in milliseconds.
  76.  */
  77. #define TEL_TRANSFER_DURATION   L"vxi.tel.transfer.duration"
  78. /**
  79.  * VXIInteger containing the status of the transfer, as defined by VXItelTransferStatus.
  80.  */
  81. #define TEL_TRANSFER_STATUS     L"vxi.tel.transfer.status"
  82. /*@}*/
  83. /**
  84.  * Result codes for the telephony interface 
  85.  *
  86.  * Result codes less then zero are severe errors (likely to be
  87.  * platform faults), those greater then zero are warnings (likely to
  88.  * be application issues) 
  89.  */
  90. typedef enum VXItelResult {
  91.   /** Fatal error, terminate call    */
  92.   VXItel_RESULT_FATAL_ERROR        = -100,
  93.   /** Low-level telephony library error */
  94.   VXItel_RESULT_DRIVER_ERROR       =  -50,
  95.   /** I/O error                      */
  96.   VXItel_RESULT_IO_ERROR           =   -8,
  97.   /** Out of memory                  */
  98.   VXItel_RESULT_OUT_OF_MEMORY      =   -7,
  99.   /** System error, out of service   */
  100.   VXItel_RESULT_SYSTEM_ERROR       =   -6,
  101.   /** Errors from platform services  */
  102.   VXItel_RESULT_PLATFORM_ERROR     =   -5,
  103.   /** Return buffer too small        */
  104.   VXItel_RESULT_BUFFER_TOO_SMALL   =   -4,
  105.   /** Property name is not valid    */
  106.   VXItel_RESULT_INVALID_PROP_NAME  =   -3,
  107.   /** Property value is not valid   */
  108.   VXItel_RESULT_INVALID_PROP_VALUE =   -2,
  109.   /** Invalid function argument      */
  110.   VXItel_RESULT_INVALID_ARGUMENT   =   -1,
  111.   /** Success                        */
  112.   VXItel_RESULT_SUCCESS            =    0,
  113.   /** Normal failure, nothing logged */
  114.   VXItel_RESULT_FAILURE            =    1,
  115.   /** Non-fatal non-specific error   */
  116.   VXItel_RESULT_NON_FATAL_ERROR    =    2,
  117.   /** Operation is not supported     */
  118.   VXItel_RESULT_TIMEOUT            =    3,
  119.   /** Call is not allowed to the destination */
  120.   VXItel_RESULT_CONNECTION_NO_AUTHORIZATION = 4,
  121.   /** The destination URI is malformed */
  122.   VXItel_RESULT_CONNECTION_BAD_DESTINATION  = 5,    
  123.   /** The platform is not able to place a call to the destination */
  124.   VXItel_RESULT_CONNECTION_NO_ROUTE         = 6,
  125.   /** The platform cannot allocate resources to place the call. */
  126.   VXItel_RESULT_CONNECTION_NO_RESOURCE      = 7,
  127.   /** The platform does not support the URI format. */
  128.   VXItel_RESULT_UNSUPPORTED_URI             = 8,
  129.   /** Operation is not supported     */
  130.   VXItel_RESULT_UNSUPPORTED                 =  100
  131. } VXItelResult;
  132. /**
  133.  * Telephony line status
  134.  *
  135.  * A line status of Active indicates that the line is currently
  136.  * occupied. It may be in a call or in a transfer.
  137.  */
  138. typedef enum VXItelStatus
  139. {
  140.   /** In a call */
  141.   VXItel_STATUS_ACTIVE,
  142.   /** Not in call */
  143.   VXItel_STATUS_INACTIVE
  144. } VXItelStatus;
  145. /**
  146.  * Result codes for transfer requests
  147.  */
  148. typedef enum VXItelTransferStatus {
  149.   /** The endpoint refused the call. */
  150.   VXItel_TRANSFER_BUSY,
  151.   /** There was no answer within the specified time. */
  152.   VXItel_TRANSFER_NOANSWER,
  153.   /** Some intermediate network refused the call. */
  154.   VXItel_TRANSFER_NETWORK_BUSY,
  155.   /** The call completed and was terminated by the caller. */
  156.   VXItel_TRANSFER_NEAR_END_DISCONNECT,
  157.   /** The call completed and was terminated by the callee. */
  158.   VXItel_TRANSFER_FAR_END_DISCONNECT,
  159.   /** The call completed and was terminated by the network. */
  160.   VXItel_TRANSFER_NETWORK_DISCONNECT, 
  161.   /** The call duration exceeded the value of maxtime attribute and was
  162.      terminated by the platform. */
  163.   VXItel_TRANSFER_MAXTIME_DISCONNECT,
  164.   /** 
  165.    * The call is connected.
  166.    * This should only be used for consultation type transfers,
  167.    * as bridges transfers don't expect it, and will set the field
  168.    * var to "unknown".
  169.    */
  170.   VXItel_TRANSFER_CONNECTED,
  171.   /**
  172.    * The call was terminated due to the caller hanging up.
  173.    */
  174.   VXItel_TRANSFER_CALLER_HANGUP,
  175.   /** 
  176.    * This value may be returned if the outcome of the transfer is unknown,
  177.    * for instance if the platform does not support reporting the outcome of
  178.    * transfer completion.  OpenVXI will treat this status as a successful
  179.    * transfer.
  180.    */
  181.   VXItel_TRANSFER_UNKNOWN
  182. } VXItelTransferStatus;
  183. /**
  184.  * Abstract interface for telephony functionality.
  185.  *
  186.  * VXItel provides the telephony functions for the VXI.  The transfer
  187.  * type is split into the bridge and blind transfers.  These platform
  188.  * functions are very platform and generally location dependant.
  189.  *
  190.  * There is one telephony interface per thread/line. 
  191.  */
  192. typedef struct VXItelInterface {
  193.   /**
  194.    * Get the VXI interface version implemented
  195.    *
  196.    * @return  VXIint32 for the version number. The high high word is 
  197.    *          the major version number, the low word is the minor version 
  198.    *          number, using the native CPU/OS byte order. The current
  199.    *          version is VXI_CURRENT_VERSION as defined in VXItypes.h.
  200.    */ 
  201.   VXIint32 (*GetVersion)(void);
  202.   
  203.   /**
  204.    * Get the name of the implementation
  205.    *
  206.    * @return  Implementation defined string that must be different from
  207.    *          all other implementations. The recommended name is one
  208.    *          where the interface name is prefixed by the implementator's
  209.    *          Internet address in reverse order, such as com.xyz.rec for
  210.    *          VXIrec from xyz.com. This is similar to how VoiceXML 1.0
  211.    *          recommends defining application specific error types.
  212.    */
  213.   const VXIchar* (*GetImplementationName)(void);
  214.   /**
  215.    * Reset for a new session.
  216.    *
  217.    * This must be called for each new session, allowing for
  218.    * call specific handling to occur. For some implementations, this
  219.    * can be a no-op.  For others runtime binding of resources or other 
  220.    * call start specific handling may be done on this call. 
  221.    *
  222.    * @param pThis <b>[IN]</b> the VXItel object for which the session
  223.    *                          is starting.
  224.    * @param args  <b>[IN]</b> Implementation defined input and output
  225.    *                    arguments for the new session
  226.    *
  227.    * @return VXItel_RESULT_SUCCESS on success 
  228.    */
  229.   VXItelResult (*BeginSession)(struct VXItelInterface  *pThis,  
  230.                                  VXIMap                  *args);
  231.   /**
  232.    * Performs cleanup at the end of a call session.
  233.    *
  234.    * This must be called at the termination of a call, allowing for
  235.    * call specific termination to occur. For some implementations, 
  236.    * this can be a no-op. For others runtime resources may be released
  237.    * or other adaptation may be completed.
  238.    *
  239.    * @param pThis <b>[IN]</b> the VXItel object for which the session is
  240.    *                          ending.
  241.    * @param args  <b>[IN]</b> Implementation defined input and output
  242.    *                          arguments for ending the session.
  243.    *
  244.    * @return VXItel_RESULT_SUCCESS on success
  245.    */
  246.   VXItelResult (*EndSession)(struct VXItelInterface  *pThis, 
  247.                              VXIMap                  *args);
  248.   /**
  249.    * Queries the status of the line.
  250.    * 
  251.    * Returns information about the line during an execution.  
  252.    * Use to determine if the line is up or down.
  253.    * 
  254.    * @param pThis <b>[IN]</b> the VXItel object for which the status is queried.
  255.    * @param status <b>[OUT]</b> A pointer to a pre-allocated holder for the status.
  256.    *
  257.    * @return VXItel_RESULT_SUCCESS if the status is queried successfully.
  258.    *         VXItel_RESULT_INVALID_ARGUMENT if pThis is NULL or status is NULL.
  259.    */
  260.   VXItelResult (*GetStatus)(struct VXItelInterface * pThis,
  261.                             VXItelStatus *status);
  262.   /**
  263.    * Immediately disconnects the caller on this line.
  264.    *
  265.    * Disconnect the line. This sends the hardware into the 
  266.    * out-of-service state where it will no longer generate events.
  267.    *
  268.    * @param pThis <b>[IN]</b> the VXItel object for which the call is to be rejected.
  269.    * @param namelist <b>[IN]</b> a map of namelist values (or NULL if namelist wasn't specified).
  270.    *
  271.    * @return VXItel_SUCCESS if operation succeeds
  272.    */
  273.   VXItelResult (*Disconnect)(struct VXItelInterface *  pThis, const VXIMap *namelist);
  274.   /**
  275.    * Performs a blind transfer.
  276.    *
  277.    * Perform a blind transfer into the network.  The implementation
  278.    * will be platform dependant.  This call blocks for only as long
  279.    * as it takes to initate the transfer.  It does not wait for a
  280.    * connection result.<p>
  281.    *
  282.    * @param pThis <b>[IN]</b> the VXItel object for which the transfer is
  283.    *                          to be performed.
  284.    * @param properties <b>[IN]</b> termination character, length, timeouts...
  285.    *                                 TEL_TRANSFER_DATA = aai info<br>
  286.    * @param transferDestination <b>[IN]</b> identifier of transfer location (e.g. a
  287.    *                                 phone number to dial or a SIP URL).
  288.    * @param resp <b>[OUT]</b> Key/value containing the result.  Basic keys:<br>
  289.    *                   TEL_TRANSFER_STATUS - The only valid status values are
  290.    *                                         VXItel_TRANSFER_CALLER_HANGUP and
  291.    *                                         VXItel_TRANSFER_UNKNOWN
  292.    *
  293.    * @return VXItel_SUCCESS if operation succeeds,<br>
  294.    *         VXItel_RESULT_CONNECTION_NO_AUTHORIZATION,<br>
  295.    *         VXItel_RESULT_CONNECTION_BAD_DESTINATION,<br>
  296.    *         VXItel_RESULT_CONNECTION_NO_ROUTE,<br>
  297.    *         VXItel_RESULT_CONNECTION_NO_RESOURCE,<br>
  298.    *         VXItel_RESULT_UNSUPPORTED,<br>
  299.    *         VXItel_RESULT_OUT_OF_MEMORY,<br>
  300.    *         VXItel_RESULT_FAILURE
  301.    */
  302.   VXItelResult (*TransferBlind)(struct VXItelInterface *  pThis,
  303.         const VXIMap *properties,
  304.         const VXIchar *transferDestination,
  305.         VXIMap **resp);
  306.   /**
  307.    * Performs a bridge transfer.
  308.    *
  309.    * Perform a bridge transfer into the network.  The implementation
  310.    * will be platform dependant.  This call should block while the 
  311.    * connection is active.<p>
  312.    *
  313.    * The platform is responsible for stopping any audio that is still
  314.    * playing.  This would be done either when the callee answers, or,
  315.    * if the platform allows the caller to hear the network audio, when 
  316.    * the transfer is started.<p>
  317.    *
  318.    * <b>NOTE:</b> This is called only if VXIrecInterface::HotwordTransfer returns
  319.    * VXItel_RESULT_UNSUPPORTED.
  320.    *
  321.    * @param pThis      <b>[IN]</b> the VXItel object for which the transfer is
  322.    *                               to be performed.
  323.    * @param properties <b>[IN]</b> termination character, length, timeouts...<br>
  324.    *                                 TEL_TRANSFER_DATA = aai info<br>
  325.    *                                 TEL_MAX_CALL_TIME = VXIInteger<br>
  326.    *                                 TEL_CONNECTTIMEOUT = VXIInteger
  327.    * @param transferDestination <b>[IN]</b> identifier of transfer location (e.g. a
  328.    *                                 phone number to dial or a SIP URL).
  329.    * @param resp <b>[OUT]</b> Key/value containing the result.  Basic keys:<br>
  330.    *                   TEL_TRANSFER_DURATION - length of the call in ms<br>
  331.    *                   TEL_TRANSFER_STATUS - see VXItelTransferStatus
  332.    *
  333.    * @return VXItel_SUCCESS if operation succeeds,<br>
  334.    *         VXItel_RESULT_CONNECTION_NO_AUTHORIZATION,<br>
  335.    *         VXItel_RESULT_CONNECTION_BAD_DESTINATION,<br>
  336.    *         VXItel_RESULT_CONNECTION_NO_ROUTE,<br>
  337.    *         VXItel_RESULT_CONNECTION_NO_RESOURCE,<br>
  338.    *         VXItel_RESULT_UNSUPPORTED,<br>
  339.    *         VXItel_RESULT_OUT_OF_MEMORY,<br>
  340.    *         VXItel_RESULT_FAILURE
  341.    */
  342.   VXItelResult (*TransferBridge)(struct VXItelInterface *  pThis,
  343.          const VXIMap *properties,
  344.          const VXIchar* transferDestination,
  345.          VXIMap **resp);
  346.   /**
  347.    * Performs a consultation transfer.
  348.    *
  349.    * Perform a consultation transfer into the network.  The implementation
  350.    * will be platform dependant.  This call should block until the 
  351.    * connection is completed (the callee answers, or otherwise ends in
  352.    * no answer, busy, etc...).<p>
  353.    *
  354.    * The platform is responsible for stopping any audio that is still
  355.    * playing.  This would be done either when the callee answers, or,
  356.    * if the platform allows the caller to hear the network audio, when 
  357.    * the transfer is started.<p>
  358.    *
  359.    * <b>NOTE:</b> This is called only if VXIrecInterface::HotwordTransfer returns
  360.    * VXItel_RESULT_UNSUPPORTED.
  361.    *
  362.    * @param pThis      <b>[IN]</b> the VXItel object for which the transfer is
  363.    *                               to be performed.
  364.    * @param properties <b>[IN]</b> termination character, length, timeouts...<br>
  365.    *                                 TEL_TRANSFER_DATA = aai info<br>
  366.    *                                 TEL_MAX_CALL_TIME = VXIInteger<br>
  367.    *                                 TEL_CONNECTTIMEOUT = VXIInteger
  368.    * @param transferDestination <b>[IN]</b> identifier of transfer location (e.g. a
  369.    *                                 phone number to dial or a SIP URL).
  370.    * @param resp <b>[OUT]</b> Key/value containing the result.  Basic keys:<br>
  371.    *                          TEL_TRANSFER_DURATION - length of the call in ms<br>
  372.    *                          TEL_TRANSFER_STATUS - see VXItelTransferStatus
  373.    *
  374.    * @return VXItel_SUCCESS if operation succeeds,<br>
  375.    *         VXItel_RESULT_CONNECTION_NO_AUTHORIZATION,<br>
  376.    *         VXItel_RESULT_CONNECTION_BAD_DESTINATION,<br>
  377.    *         VXItel_RESULT_CONNECTION_NO_ROUTE,<br>
  378.    *         VXItel_RESULT_CONNECTION_NO_RESOURCE,<br>
  379.    *         VXItel_RESULT_UNSUPPORTED,<br>
  380.    *         VXItel_RESULT_OUT_OF_MEMORY,<br>
  381.    *         VXItel_RESULT_FAILURE
  382.    */
  383.   VXItelResult (*TransferConsultation)(struct VXItelInterface *  pThis,
  384.          const VXIMap *properties,
  385.          const VXIchar* transferDestination,
  386.          VXIMap **resp);
  387. } VXItelInterface;
  388. /*@}*/
  389. #ifdef __cplusplus
  390. }
  391. #endif
  392. #include "VXIheaderSuffix.h"
  393. #endif  /* include guard */