opal.h

Go to the documentation of this file.
00001 /*
00002  * opal.h
00003  *
00004  * "C" language interface for OPAL
00005  *
00006  * Open Phone Abstraction Library (OPAL)
00007  *
00008  * Copyright (c) 2008 Vox Lucida
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open Phone Abstraction Library.
00021  *
00022  * The Initial Developer of the Original Code is Vox Lucida (Robert Jongbloed)
00023  *
00024  * This code was initially written with the assisance of funding from
00025  * Stonevoice. http://www.stonevoice.com.
00026  *
00027  * Contributor(s): ______________________________________.
00028  *
00029  * $Revision: 24591 $
00030  * $Author: rjongbloed $
00031  * $Date: 2010-07-26 03:42:19 -0500 (Mon, 26 Jul 2010) $
00032  */
00033 
00034 #ifndef OPAL_OPAL_H
00035 #define OPAL_OPAL_H
00036 
00037 #include <stdlib.h>
00038 
00039 
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043 
00070 #ifdef _WIN32
00071   #define OPAL_EXPORT __stdcall
00072 #else
00073   #define OPAL_EXPORT
00074 #endif
00075 
00077 typedef struct OpalHandleStruct * OpalHandle;
00078 
00079 
00080 typedef struct OpalMessage OpalMessage;
00081 
00083 #define OPAL_C_API_VERSION 22
00084 
00085 
00087 
00138 OpalHandle OPAL_EXPORT OpalInitialise(unsigned * version, const char * options);
00139 
00143 #define OPAL_INITIALISE_FUNCTION   "OpalInitialise"
00144 
00148 typedef OpalHandle (OPAL_EXPORT *OpalInitialiseFunction)(unsigned * version, const char * options);
00149 
00150 
00152 
00161 void OPAL_EXPORT OpalShutDown(OpalHandle opal);
00162 
00166 #define OPAL_SHUTDOWN_FUNCTION     "OpalShutDown"
00167 
00171 typedef void (OPAL_EXPORT *OpalShutDownFunction)(OpalHandle opal);
00172 
00173 
00175 
00212 OpalMessage * OPAL_EXPORT OpalGetMessage(OpalHandle opal, unsigned timeout);
00213 
00217 #define OPAL_GET_MESSAGE_FUNCTION  "OpalGetMessage"
00218 
00222 typedef OpalMessage * (OPAL_EXPORT *OpalGetMessageFunction)(OpalHandle opal, unsigned timeout);
00223 
00224 
00226 
00267 OpalMessage * OPAL_EXPORT OpalSendMessage(OpalHandle opal, const OpalMessage * message);
00268 
00272 typedef OpalMessage * (OPAL_EXPORT *OpalSendMessageFunction)(OpalHandle opal, const OpalMessage * message);
00273 
00277 #define OPAL_SEND_MESSAGE_FUNCTION "OpalSendMessage"
00278 
00279 
00281 
00285 void OPAL_EXPORT OpalFreeMessage(OpalMessage * message);
00286 
00290 #define OPAL_FREE_MESSAGE_FUNCTION "OpalFreeMessage"
00291 
00295 typedef void (OPAL_EXPORT *OpalFreeMessageFunction)(OpalMessage * message);
00296 
00297 
00299 
00300 #define OPAL_PREFIX_H323  "h323"    
00301 #define OPAL_PREFIX_SIP   "sip"     
00302 #define OPAL_PREFIX_IAX2  "iax2"    
00303 #define OPAL_PREFIX_PCSS  "pc"      
00304 #define OPAL_PREFIX_LOCAL "local"   
00305 #define OPAL_PREFIX_POTS  "pots"    
00306 #define OPAL_PREFIX_PSTN  "pstn"    
00307 #define OPAL_PREFIX_IVR   "ivr"     
00308 
00309 #define OPAL_PREFIX_ALL OPAL_PREFIX_H323  " " \
00310                         OPAL_PREFIX_SIP   " " \
00311                         OPAL_PREFIX_IAX2  " " \
00312                         OPAL_PREFIX_PCSS  " " \
00313                         OPAL_PREFIX_LOCAL " " \
00314                         OPAL_PREFIX_POTS  " " \
00315                         OPAL_PREFIX_PSTN  " " \
00316                         OPAL_PREFIX_IVR
00317 
00318 
00321 typedef enum OpalMessageType {
00322   OpalIndCommandError,          
00325   OpalCmdSetGeneralParameters,  
00327   OpalCmdSetProtocolParameters, 
00330   OpalCmdRegistration,          
00334   OpalIndRegistration,          
00339   OpalCmdSetUpCall,             
00343   OpalIndIncomingCall,          
00346   OpalCmdAnswerCall,            
00350   OpalCmdClearCall,             
00355   OpalIndAlerting,              
00359   OpalIndEstablished,           
00363   OpalIndUserInput,             
00366   OpalIndCallCleared,           
00369   OpalCmdHoldCall,              
00371   OpalCmdRetrieveCall,          
00373   OpalCmdTransferCall,          
00376   OpalCmdUserInput,             
00378   OpalIndMessageWaiting,        
00381   OpalIndMediaStream,           
00384   OpalCmdMediaStream,           
00386   OpalCmdSetUserData,           
00387   OpalIndLineAppearance,        
00390   OpalCmdStartRecording,        
00392   OpalCmdStopRecording,         
00394   OpalIndProceeding,            
00402   OpalCmdAlerting,              
00404   OpalIndOnHold,                
00406   OpalIndOffHold,               
00408   OpalIndTransferCall,          
00411   OpalIndCompletedIVR,          
00415 // Always add new messages to ethe end to maintain backward compatibility
00416   OpalMessageTypeCount
00417 } OpalMessageType;
00418 
00419 
00423 typedef enum OpalSilenceDetectMode {
00424   OpalSilenceDetectNoChange,  
00425   OpalSilenceDetectDisabled,  
00426   OpalSilenceDetectFixed,     
00427   OpalSilenceDetectAdaptive   
00428 } OpalSilenceDetectMode;
00429 
00430 
00434 typedef enum OpalEchoCancelMode {
00435   OpalEchoCancelNoChange,   
00436   OpalEchoCancelDisabled,   
00437   OpalEchoCancelEnabled     
00438 } OpalEchoCancelMode;
00439 
00440 
00455 typedef int (*OpalMediaDataFunction)(
00456   const char * token,   
00458   const char * stream,  
00462   const char * format,  
00463   void * userData,      
00464   void * data,          
00465   int size              
00466 );
00467 
00468 
00485 typedef int (*OpalMessageAvailableFunction)(
00486   const OpalMessage * message  
00487 );
00488 
00489 
00497 typedef enum OpalMediaDataType {
00498   OpalMediaDataNoChange,      
00499   OpalMediaDataPayloadOnly,   
00501   OpalMediaDataWithHeader     
00503 } OpalMediaDataType;
00504 
00505 
00523 typedef enum OpalMediaTiming {
00524   OpalMediaTimingNoChange,      
00525   OpalMediaTimingSynchronous,   
00527   OpalMediaTimingAsynchronous   
00529 } OpalMediaTiming;
00530 
00531 
00547 typedef struct OpalParamGeneral {
00548   const char * m_audioRecordDevice;   
00549   const char * m_audioPlayerDevice;   
00550   const char * m_videoInputDevice;    
00551   const char * m_videoOutputDevice;   
00552   const char * m_videoPreviewDevice;  
00553   const char * m_mediaOrder;          
00556   const char * m_mediaMask;           
00559   const char * m_autoRxMedia;         
00563   const char * m_autoTxMedia;         
00567   const char * m_natRouter;           
00569   const char * m_stunServer;          
00571   unsigned     m_tcpPortBase;         
00573   unsigned     m_tcpPortMax;          
00575   unsigned     m_udpPortBase;         
00577   unsigned     m_udpPortMax;          
00579   unsigned     m_rtpPortBase;         
00581   unsigned     m_rtpPortMax;          
00583   unsigned     m_rtpTypeOfService;    
00585   unsigned     m_rtpMaxPayloadSize;   
00587   unsigned     m_minAudioJitter;      
00591   unsigned     m_maxAudioJitter;      
00595   OpalSilenceDetectMode m_silenceDetectMode; 
00598   unsigned     m_silenceThreshold;    
00600   unsigned     m_signalDeadband;      
00602   unsigned     m_silenceDeadband;     
00604   unsigned     m_silenceAdaptPeriod;  
00607   OpalEchoCancelMode m_echoCancellation; 
00609   unsigned     m_audioBuffers;        
00612   OpalMediaDataFunction m_mediaReadData;   
00614   OpalMediaDataFunction m_mediaWriteData;  
00616   OpalMediaDataType     m_mediaDataHeader; 
00619   OpalMessageAvailableFunction m_messageAvailable; 
00623   const char * m_mediaOptions;        
00632   unsigned     m_audioBufferTime;     
00635   unsigned m_manualAlerting;          
00641   OpalMediaTiming m_mediaTiming;      
00644 } OpalParamGeneral;
00645 
00646 
00649 typedef struct OpalProductDescription {
00650   const char * m_vendor;              
00653   const char * m_name;                
00656   const char * m_version;             
00659   unsigned     m_t35CountryCode;      
00664   unsigned     m_t35Extension;        
00669   unsigned     m_manufacturerCode;    
00675 } OpalProductDescription;
00676 
00677 
00681 typedef enum OpalUserInputModes {
00682   OpalUserInputDefault,   
00683   OpalUserInputAsQ931,    
00684   OpalUserInputAsString,  
00685   OpalUserInputAsTone,    
00686   OpalUserInputAsRFC2833, 
00687   OpalUserInputInBand,    
00688 } OpalUserInputModes;
00689 
00690 
00707 typedef struct OpalParamProtocol {
00708   const char * m_prefix;              
00711   const char * m_userName;            
00714   const char * m_displayName;         
00716   OpalProductDescription m_product;   
00717   const char * m_interfaceAddresses;  
00725   OpalUserInputModes m_userInputMode; 
00728 } OpalParamProtocol;
00729 
00730 
00732 #define OPAL_MWI_EVENT_PACKAGE             "message-summary"
00733 
00735 #define OPAL_LINE_APPEARANCE_EVENT_PACKAGE "dialog;sla;ma"
00736 
00798 typedef struct OpalParamRegistration {
00799   const char * m_protocol;      
00801   const char * m_identifier;    
00807   const char * m_hostName;      
00811   const char * m_authUserName;  
00812   const char * m_password;      
00813   const char * m_adminEntity;   
00816   unsigned     m_timeToLive;    
00818   unsigned     m_restoreTime;   
00821   const char * m_eventPackage;  
00829 } OpalParamRegistration;
00830 
00831 
00835 typedef enum OpalRegistrationStates {
00836   OpalRegisterSuccessful,   
00837   OpalRegisterRemoved,      
00841   OpalRegisterFailed,       
00843   OpalRegisterRetrying,     
00845   OpalRegisterRestored,     
00846 } OpalRegistrationStates;
00847 
00848 
00852 typedef struct OpalStatusRegistration {
00853   const char * m_protocol;    
00855   const char * m_serverName;  
00858   const char * m_error;       
00862   OpalRegistrationStates m_status; 
00863   OpalProductDescription m_product; 
00864 } OpalStatusRegistration;
00865 
00866 
00903 typedef struct OpalParamSetUpCall {
00904   const char * m_partyA;      
00918   const char * m_partyB;      
00930   const char * m_callToken;   
00935   const char * m_alertingType;
00954   const char * m_protocolCallId;  
00957 } OpalParamSetUpCall;
00958 
00959 
00963 typedef struct OpalStatusIncomingCall {
00964   const char * m_callToken;         
00965   const char * m_localAddress;      
00966   const char * m_remoteAddress;     
00967   const char * m_remotePartyNumber; 
00968   const char * m_remoteDisplayName; 
00969   const char * m_calledAddress;     
00970   const char * m_calledPartyNumber; 
00971   OpalProductDescription m_product; 
00972   const char * m_alertingType;
00984   const char * m_protocolCallId;  
00986   const char * m_referredByAddress; 
00987   const char * m_redirectingNumber; 
00988 } OpalStatusIncomingCall;
00989 
00990 
00995 typedef enum OpalMediaStates {
00996   OpalMediaStateNoChange,   
00997   OpalMediaStateOpen,       
00999   OpalMediaStateClose,      
01001   OpalMediaStatePause,      
01003   OpalMediaStateResume      
01005 } OpalMediaStates;
01006 
01007 
01014 typedef struct OpalStatusMediaStream {
01015   const char    * m_callToken;   
01016   const char    * m_identifier;  
01019   const char    * m_type;        
01024   const char    * m_format;      
01028   OpalMediaStates m_state;       
01031 } OpalStatusMediaStream;
01032 
01033 
01036 typedef struct OpalParamSetUserData {
01037   const char    * m_callToken;   
01038   void *        m_userData;      
01039 } OpalParamSetUserData;
01040 
01041 
01047 typedef struct OpalStatusUserInput {
01048   const char * m_callToken;   
01049   const char * m_userInput;   
01050   unsigned     m_duration;    
01055 } OpalStatusUserInput, OpalParamUserInput;
01056 
01057 
01061 typedef struct OpalStatusMessageWaiting {
01062   const char * m_party;     
01063   const char * m_type;      
01064   const char * m_extraInfo; 
01067 } OpalStatusMessageWaiting;
01068 
01069 
01074 typedef enum OpalLineAppearanceStates {
01075   OpalLineTerminated,  
01076   OpalLineTrying,      
01077   OpalLineProceeding,  
01078   OpalLineRinging,     
01079   OpalLineConnected,   
01080   OpalLineSubcribed,   
01081   OpalLineUnsubcribed, 
01083   OpalLineIdle = OpalLineTerminated // Kept for backward compatibility
01084 } OpalLineAppearanceStates;
01085 
01086 
01090 typedef struct OpalStatusLineAppearance {
01091   const char *             m_line;       
01092   OpalLineAppearanceStates m_state;      
01093   int                      m_appearance; 
01096   const char *             m_callId;     
01100   const char *             m_partyA;     
01101   const char *             m_partyB;     
01102 } OpalStatusLineAppearance;
01103 
01104 
01108 typedef enum OpalVideoRecordMixMode {
01109   OpalSideBySideLetterbox, 
01113   OpalSideBySideScaled,    
01117   OpalStackedPillarbox,    
01121   OpalStackedScaled,       
01125 } OpalVideoRecordMixMode;
01126 
01127 
01130 typedef struct OpalParamRecording {
01131   const char * m_callToken;  
01132   const char * m_file;       
01134   unsigned     m_channels;   
01137   const char * m_audioFormat; 
01141   const char * m_videoFormat; 
01145   unsigned     m_videoWidth;  
01146   unsigned     m_videoHeight; 
01147   unsigned     m_videoRate;   
01148   OpalVideoRecordMixMode m_videoMixing; 
01149 } OpalParamRecording;
01150 
01151 
01155 typedef struct OpalStatusTransferCall {
01156   const char * m_callToken;       
01157   const char * m_protocolCallId;  
01159   const char * m_result;          
01174   const char * m_info;    
01178 } OpalStatusTransferCall;
01179 
01180 
01184 typedef struct OpalStatusCallCleared {
01185   const char * m_callToken;   
01186   const char * m_reason;      
01191 } OpalStatusCallCleared;
01192 
01193 
01198 typedef enum OpalCallEndReason {
01199   OpalCallEndedByLocalUser,         
01200   OpalCallEndedByNoAccept,          
01201   OpalCallEndedByAnswerDenied,      
01202   OpalCallEndedByRemoteUser,        
01203   OpalCallEndedByRefusal,           
01204   OpalCallEndedByNoAnswer,          
01205   OpalCallEndedByCallerAbort,       
01206   OpalCallEndedByTransportFail,     
01207   OpalCallEndedByConnectFail,       
01208   OpalCallEndedByGatekeeper,        
01209   OpalCallEndedByNoUser,            
01210   OpalCallEndedByNoBandwidth,       
01211   OpalCallEndedByCapabilityExchange,
01212   OpalCallEndedByCallForwarded,     
01213   OpalCallEndedBySecurityDenial,    
01214   OpalCallEndedByLocalBusy,         
01215   OpalCallEndedByLocalCongestion,   
01216   OpalCallEndedByRemoteBusy,        
01217   OpalCallEndedByRemoteCongestion,  
01218   OpalCallEndedByUnreachable,       
01219   OpalCallEndedByNoEndPoint,        
01220   OpalCallEndedByHostOffline,       
01221   OpalCallEndedByTemporaryFailure,  
01222   OpalCallEndedByQ931Cause,         
01223   OpalCallEndedByDurationLimit,     
01224   OpalCallEndedByInvalidConferenceID, 
01225   OpalCallEndedByNoDialTone,        
01226   OpalCallEndedByNoRingBackTone,    
01227   OpalCallEndedByOutOfService,      
01228   OpalCallEndedByAcceptingCallWaiting, 
01229   OpalCallEndedWithQ931Code = 0x100  
01230 } OpalCallEndReason;
01231 
01232 
01235 typedef struct OpalParamCallCleared {
01236   const char      * m_callToken;  
01237   OpalCallEndReason m_reason;     
01239 } OpalParamCallCleared;
01240 
01241 
01245 struct OpalMessage {
01246   OpalMessageType m_type;   
01247   union {
01248     const char *             m_commandError;       
01249     OpalParamGeneral         m_general;            
01250     OpalParamProtocol        m_protocol;           
01251     OpalParamRegistration    m_registrationInfo;   
01252     OpalStatusRegistration   m_registrationStatus; 
01253     OpalParamSetUpCall       m_callSetUp;          
01254     const char *             m_callToken;          
01255     OpalStatusIncomingCall   m_incomingCall;       
01256     OpalStatusUserInput      m_userInput;          
01257     OpalStatusMessageWaiting m_messageWaiting;     
01258     OpalStatusLineAppearance m_lineAppearance;     
01259     OpalStatusCallCleared    m_callCleared;        
01260     OpalParamCallCleared     m_clearCall;          
01261     OpalStatusMediaStream    m_mediaStream;        
01262     OpalParamSetUserData     m_setUserData;        
01263     OpalParamRecording       m_recording;          
01264     OpalStatusTransferCall   m_transferStatus;     
01265   } m_param;
01266 };
01267 
01268 
01269 #ifdef __cplusplus
01270 };
01271 #endif
01272 
01273 #if defined(__cplusplus) || defined(DOC_PLUS_PLUS)
01274 
01276 class OpalMessagePtr
01277 {
01278   public:
01279     OpalMessagePtr(OpalMessageType type = OpalIndCommandError);
01280     ~OpalMessagePtr();
01281 
01282     OpalMessageType GetType() const;
01283     void SetType(OpalMessageType type);
01284 
01285     const char               * GetCallToken() const;          
01286     void                       SetCallToken(const char * token);
01287 
01288     const char               * GetCommandError() const;       
01289 
01290     OpalParamGeneral         * GetGeneralParams() const;      
01291     OpalParamProtocol        * GetProtocolParams() const;     
01292     OpalParamRegistration    * GetRegistrationInfo() const;   
01293     OpalStatusRegistration   * GetRegistrationStatus() const; 
01294     OpalParamSetUpCall       * GetCallSetUp() const;          
01295     OpalStatusIncomingCall   * GetIncomingCall() const;       
01296     OpalStatusUserInput      * GetUserInput() const;          
01297     OpalStatusMessageWaiting * GetMessageWaiting() const;     
01298     OpalStatusLineAppearance * GetLineAppearance() const;     
01299     OpalStatusCallCleared    * GetCallCleared() const;        
01300     OpalParamCallCleared     * GetClearCall() const;          
01301     OpalStatusMediaStream    * GetMediaStream() const;        
01302     OpalParamSetUserData     * GetSetUserData() const;        
01303     OpalParamRecording       * GetRecording() const;          
01304     OpalStatusTransferCall   * GetTransferStatus() const;     
01305 
01306   protected:
01307     OpalMessage * m_message;
01308 
01309   private:
01310     OpalMessagePtr(const OpalMessagePtr &) { }
01311     void operator=(const OpalMessagePtr &) { }
01312 
01313   friend class OpalContext;
01314 };
01315 
01316 
01317 #ifdef GetMessage
01318 #undef GetMessage
01319 #endif
01320 #ifdef SendMessage
01321 #undef SendMessage
01322 #endif
01323 
01324 
01332 class OpalContext
01333 {
01334   public:
01336     OpalContext();
01337 
01339     virtual ~OpalContext();
01340 
01343     unsigned Initialise(
01344       const char * options,  
01345       unsigned version = OPAL_C_API_VERSION 
01346     );
01347 
01349     bool IsInitialised() const { return m_handle != NULL; }
01350 
01352     void ShutDown();
01353 
01355     bool GetMessage(
01356       OpalMessagePtr & message,
01357       unsigned timeout = 0
01358     );
01359 
01361     bool SendMessage(
01362       const OpalMessagePtr & message,  
01363       OpalMessagePtr & response        
01364     );
01365 
01366 
01368     bool SetUpCall(
01369       OpalMessagePtr & response,       
01370       const char * partyB,             
01371       const char * partyA = NULL,      
01372       const char * alertingType = NULL 
01373     );
01374 
01376     bool AnswerCall(
01377       const char * callToken           
01378     );
01379 
01381     bool ClearCall(
01382       const char * callToken,          
01383       OpalCallEndReason reason = OpalCallEndedByLocalUser  
01384     );
01385 
01387     bool SendUserInput(
01388       const char * callToken,     
01389       const char * userInput,     
01390       unsigned     duration = 0   
01391     );
01392 
01393   protected:
01394     OpalHandle m_handle;
01395 };
01396 
01397 #endif
01398 
01399 #endif // OPAL_OPAL_H
01400 
01401 

Generated on Sun Nov 21 20:20:50 2010 for OPAL by  doxygen 1.4.7