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: 23980 $
00030  * $Author: rjongbloed $
00031  * $Date: 2010-01-24 19:30:23 -0600 (Sun, 24 Jan 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 21
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   OpalMessageTypeCount
00405 } OpalMessageType;
00406 
00407 
00411 typedef enum OpalSilenceDetectMode {
00412   OpalSilenceDetectNoChange,  
00413   OpalSilenceDetectDisabled,  
00414   OpalSilenceDetectFixed,     
00415   OpalSilenceDetectAdaptive   
00416 } OpalSilenceDetectMode;
00417 
00418 
00422 typedef enum OpalEchoCancelMode {
00423   OpalEchoCancelNoChange,   
00424   OpalEchoCancelDisabled,   
00425   OpalEchoCancelEnabled     
00426 } OpalEchoCancelMode;
00427 
00428 
00443 typedef int (*OpalMediaDataFunction)(
00444   const char * token,   
00446   const char * stream,  
00450   const char * format,  
00451   void * userData,      
00452   void * data,          
00453   int size              
00454 );
00455 
00456 
00473 typedef int (*OpalMessageAvailableFunction)(
00474   const OpalMessage * message  
00475 );
00476 
00477 
00485 typedef enum OpalMediaDataType {
00486   OpalMediaDataNoChange,      
00487   OpalMediaDataPayloadOnly,   
00489   OpalMediaDataWithHeader     
00491 } OpalMediaDataType;
00492 
00493 
00511 typedef enum OpalMediaTiming {
00512   OpalMediaTimingNoChange,      
00513   OpalMediaTimingSynchronous,   
00515   OpalMediaTimingAsynchronous   
00517 } OpalMediaTiming;
00518 
00519 
00535 typedef struct OpalParamGeneral {
00536   const char * m_audioRecordDevice;   
00537   const char * m_audioPlayerDevice;   
00538   const char * m_videoInputDevice;    
00539   const char * m_videoOutputDevice;   
00540   const char * m_videoPreviewDevice;  
00541   const char * m_mediaOrder;          
00544   const char * m_mediaMask;           
00547   const char * m_autoRxMedia;         
00549   const char * m_autoTxMedia;         
00551   const char * m_natRouter;           
00553   const char * m_stunServer;          
00555   unsigned     m_tcpPortBase;         
00557   unsigned     m_tcpPortMax;          
00559   unsigned     m_udpPortBase;         
00561   unsigned     m_udpPortMax;          
00563   unsigned     m_rtpPortBase;         
00565   unsigned     m_rtpPortMax;          
00567   unsigned     m_rtpTypeOfService;    
00569   unsigned     m_rtpMaxPayloadSize;   
00571   unsigned     m_minAudioJitter;      
00575   unsigned     m_maxAudioJitter;      
00579   OpalSilenceDetectMode m_silenceDetectMode; 
00582   unsigned     m_silenceThreshold;    
00584   unsigned     m_signalDeadband;      
00586   unsigned     m_silenceDeadband;     
00588   unsigned     m_silenceAdaptPeriod;  
00591   OpalEchoCancelMode m_echoCancellation; 
00593   unsigned     m_audioBuffers;        
00596   OpalMediaDataFunction m_mediaReadData;   
00598   OpalMediaDataFunction m_mediaWriteData;  
00600   OpalMediaDataType     m_mediaDataHeader; 
00603   OpalMessageAvailableFunction m_messageAvailable; 
00607   const char * m_mediaOptions;        
00616   unsigned     m_audioBufferTime;     
00619   unsigned m_manualAlerting;          
00625   OpalMediaTiming m_mediaTiming;      
00628 } OpalParamGeneral;
00629 
00630 
00633 typedef struct OpalProductDescription {
00634   const char * m_vendor;              
00637   const char * m_name;                
00640   const char * m_version;             
00643   unsigned     m_t35CountryCode;      
00648   unsigned     m_t35Extension;        
00653   unsigned     m_manufacturerCode;    
00659 } OpalProductDescription;
00660 
00661 
00678 typedef struct OpalParamProtocol {
00679   const char * m_prefix;              
00682   const char * m_userName;            
00685   const char * m_displayName;         
00687   OpalProductDescription m_product;   
00688   const char * m_interfaceAddresses;  
00693 } OpalParamProtocol;
00694 
00695 
00697 #define OPAL_MWI_EVENT_PACKAGE             "message-summary"
00698 
00700 #define OPAL_LINE_APPEARANCE_EVENT_PACKAGE "dialog;sla;ma"
00701 
00763 typedef struct OpalParamRegistration {
00764   const char * m_protocol;      
00766   const char * m_identifier;    
00772   const char * m_hostName;      
00776   const char * m_authUserName;  
00777   const char * m_password;      
00778   const char * m_adminEntity;   
00781   unsigned     m_timeToLive;    
00783   unsigned     m_restoreTime;   
00786   const char * m_eventPackage;  
00794 } OpalParamRegistration;
00795 
00796 
00800 typedef enum OpalRegistrationStates {
00801   OpalRegisterSuccessful,   
00802   OpalRegisterRemoved,      
00806   OpalRegisterFailed,       
00808   OpalRegisterRetrying,     
00810   OpalRegisterRestored,     
00811 } OpalRegistrationStates;
00812 
00813 
00817 typedef struct OpalStatusRegistration {
00818   const char * m_protocol;    
00820   const char * m_serverName;  
00823   const char * m_error;       
00827   OpalRegistrationStates m_status; 
00828   OpalProductDescription m_product; 
00829 } OpalStatusRegistration;
00830 
00831 
00868 typedef struct OpalParamSetUpCall {
00869   const char * m_partyA;      
00883   const char * m_partyB;      
00895   const char * m_callToken;   
00900   const char * m_alertingType;
00919   const char * m_protocolCallId;  
00922 } OpalParamSetUpCall;
00923 
00924 
00928 typedef struct OpalStatusIncomingCall {
00929   const char * m_callToken;         
00930   const char * m_localAddress;      
00931   const char * m_remoteAddress;     
00932   const char * m_remotePartyNumber; 
00933   const char * m_remoteDisplayName; 
00934   const char * m_calledAddress;     
00935   const char * m_calledPartyNumber; 
00936   OpalProductDescription m_product; 
00937   const char * m_alertingType;
00949   const char * m_protocolCallId;  
00951 } OpalStatusIncomingCall;
00952 
00953 
00958 typedef enum OpalMediaStates {
00959   OpalMediaStateNoChange,   
00960   OpalMediaStateOpen,       
00962   OpalMediaStateClose,      
00964   OpalMediaStatePause,      
00966   OpalMediaStateResume      
00968 } OpalMediaStates;
00969 
00970 
00977 typedef struct OpalStatusMediaStream {
00978   const char    * m_callToken;   
00979   const char    * m_identifier;  
00982   const char    * m_type;        
00987   const char    * m_format;      
00991   OpalMediaStates m_state;       
00994 } OpalStatusMediaStream;
00995 
00996 
00999 typedef struct OpalParamSetUserData {
01000   const char    * m_callToken;   
01001   void *        m_userData;      
01002 } OpalParamSetUserData;
01003 
01004 
01010 typedef struct OpalStatusUserInput {
01011   const char * m_callToken;   
01012   const char * m_userInput;   
01013   unsigned     m_duration;    
01018 } OpalStatusUserInput, OpalParamUserInput;
01019 
01020 
01024 typedef struct OpalStatusMessageWaiting {
01025   const char * m_party;     
01026   const char * m_type;      
01027   const char * m_extraInfo; 
01030 } OpalStatusMessageWaiting;
01031 
01032 
01037 typedef enum OpalLineAppearanceStates {
01038   OpalLineTerminated,  
01039   OpalLineTrying,      
01040   OpalLineProceeding,  
01041   OpalLineRinging,     
01042   OpalLineConnected,   
01043   OpalLineSubcribed,   
01044   OpalLineUnsubcribed, 
01046   OpalLineIdle = OpalLineTerminated // Kept for backward compatibility
01047 } OpalLineAppearanceStates;
01048 
01049 
01053 typedef struct OpalStatusLineAppearance {
01054   const char *             m_line;       
01055   OpalLineAppearanceStates m_state;      
01056   int                      m_appearance; 
01059   const char *             m_callId;     
01063   const char *             m_partyA;     
01064   const char *             m_partyB;     
01065 } OpalStatusLineAppearance;
01066 
01067 
01071 typedef enum OpalVideoRecordMixMode {
01072   OpalSideBySideLetterbox, 
01076   OpalSideBySideScaled,    
01080   OpalStackedPillarbox,    
01084   OpalStackedScaled,       
01088 } OpalVideoRecordMixMode;
01089 
01090 
01093 typedef struct OpalParamRecording {
01094   const char * m_callToken;  
01095   const char * m_file;       
01097   unsigned     m_channels;   
01100   const char * m_audioFormat; 
01104   const char * m_videoFormat; 
01108   unsigned     m_videoWidth;  
01109   unsigned     m_videoHeight; 
01110   unsigned     m_videoRate;   
01111   OpalVideoRecordMixMode m_videoMixing; 
01112 } OpalParamRecording;
01113 
01114 
01118 typedef struct OpalStatusCallCleared {
01119   const char * m_callToken;   
01120   const char * m_reason;      
01125 } OpalStatusCallCleared;
01126 
01127 
01132 typedef enum OpalCallEndReason {
01133   OpalCallEndedByLocalUser,         
01134   OpalCallEndedByNoAccept,          
01135   OpalCallEndedByAnswerDenied,      
01136   OpalCallEndedByRemoteUser,        
01137   OpalCallEndedByRefusal,           
01138   OpalCallEndedByNoAnswer,          
01139   OpalCallEndedByCallerAbort,       
01140   OpalCallEndedByTransportFail,     
01141   OpalCallEndedByConnectFail,       
01142   OpalCallEndedByGatekeeper,        
01143   OpalCallEndedByNoUser,            
01144   OpalCallEndedByNoBandwidth,       
01145   OpalCallEndedByCapabilityExchange,
01146   OpalCallEndedByCallForwarded,     
01147   OpalCallEndedBySecurityDenial,    
01148   OpalCallEndedByLocalBusy,         
01149   OpalCallEndedByLocalCongestion,   
01150   OpalCallEndedByRemoteBusy,        
01151   OpalCallEndedByRemoteCongestion,  
01152   OpalCallEndedByUnreachable,       
01153   OpalCallEndedByNoEndPoint,        
01154   OpalCallEndedByHostOffline,       
01155   OpalCallEndedByTemporaryFailure,  
01156   OpalCallEndedByQ931Cause,         
01157   OpalCallEndedByDurationLimit,     
01158   OpalCallEndedByInvalidConferenceID, 
01159   OpalCallEndedByNoDialTone,        
01160   OpalCallEndedByNoRingBackTone,    
01161   OpalCallEndedByOutOfService,      
01162   OpalCallEndedByAcceptingCallWaiting, 
01163   OpalCallEndedWithQ931Code = 0x100  
01164 } OpalCallEndReason;
01165 
01166 
01169 typedef struct OpalParamCallCleared {
01170   const char      * m_callToken;  
01171   OpalCallEndReason m_reason;     
01173 } OpalParamCallCleared;
01174 
01175 
01179 struct OpalMessage {
01180   OpalMessageType m_type;   
01181   union {
01182     const char *             m_commandError;       
01183     OpalParamGeneral         m_general;            
01184     OpalParamProtocol        m_protocol;           
01185     OpalParamRegistration    m_registrationInfo;   
01186     OpalStatusRegistration   m_registrationStatus; 
01187     OpalParamSetUpCall       m_callSetUp;          
01188     const char *             m_callToken;          
01189     OpalStatusIncomingCall   m_incomingCall;       
01190     OpalStatusUserInput      m_userInput;          
01191     OpalStatusMessageWaiting m_messageWaiting;     
01192     OpalStatusLineAppearance m_lineAppearance;     
01193     OpalStatusCallCleared    m_callCleared;        
01194     OpalParamCallCleared     m_clearCall;          
01195     OpalStatusMediaStream    m_mediaStream;        
01196     OpalParamSetUserData     m_setUserData;        
01197     OpalParamRecording       m_recording;          
01198   } m_param;
01199 };
01200 
01201 
01202 #ifdef __cplusplus
01203 };
01204 #endif
01205 
01206 #if defined(__cplusplus) || defined(DOC_PLUS_PLUS)
01207 
01209 class OpalMessagePtr
01210 {
01211   public:
01212     OpalMessagePtr(OpalMessageType type = OpalIndCommandError);
01213     ~OpalMessagePtr();
01214 
01215     OpalMessageType GetType() const;
01216     void SetType(OpalMessageType type);
01217 
01218     const char               * GetCallToken() const;          
01219     void                       SetCallToken(const char * token);
01220 
01221     const char               * GetCommandError() const;       
01222 
01223     OpalParamGeneral         * GetGeneralParams() const;      
01224     OpalParamProtocol        * GetProtocolParams() const;     
01225     OpalParamRegistration    * GetRegistrationInfo() const;   
01226     OpalStatusRegistration   * GetRegistrationStatus() const; 
01227     OpalParamSetUpCall       * GetCallSetUp() const;          
01228     OpalStatusIncomingCall   * GetIncomingCall() const;       
01229     OpalStatusUserInput      * GetUserInput() const;          
01230     OpalStatusMessageWaiting * GetMessageWaiting() const;     
01231     OpalStatusLineAppearance * GetLineAppearance() const;     
01232     OpalStatusCallCleared    * GetCallCleared() const;        
01233     OpalParamCallCleared     * GetClearCall() const;          
01234     OpalStatusMediaStream    * GetMediaStream() const;        
01235     OpalParamSetUserData     * GetSetUserData() const;        
01236     OpalParamRecording       * GetRecording() const;          
01237 
01238   protected:
01239     OpalMessage * m_message;
01240 
01241   private:
01242     OpalMessagePtr(const OpalMessagePtr &) { }
01243     void operator=(const OpalMessagePtr &) { }
01244 
01245   friend class OpalContext;
01246 };
01247 
01248 
01249 #ifdef GetMessage
01250 #undef GetMessage
01251 #endif
01252 #ifdef SendMessage
01253 #undef SendMessage
01254 #endif
01255 
01256 
01264 class OpalContext
01265 {
01266   public:
01268     OpalContext();
01269 
01271     virtual ~OpalContext();
01272 
01275     unsigned Initialise(
01276       const char * options,  
01277       unsigned version = OPAL_C_API_VERSION 
01278     );
01279 
01281     bool IsInitialised() const { return m_handle != NULL; }
01282 
01284     void ShutDown();
01285 
01287     bool GetMessage(
01288       OpalMessagePtr & message,
01289       unsigned timeout = 0
01290     );
01291 
01293     bool SendMessage(
01294       const OpalMessagePtr & message,  
01295       OpalMessagePtr & response        
01296     );
01297 
01298 
01300     bool SetUpCall(
01301       OpalMessagePtr & response,       
01302       const char * partyB,             
01303       const char * partyA = NULL,      
01304       const char * alertingType = NULL 
01305     );
01306 
01308     bool AnswerCall(
01309       const char * callToken           
01310     );
01311 
01313     bool ClearCall(
01314       const char * callToken,          
01315       OpalCallEndReason reason = OpalCallEndedByLocalUser  
01316     );
01317 
01319     bool SendUserInput(
01320       const char * callToken,     
01321       const char * userInput,     
01322       unsigned     duration = 0   
01323     );
01324 
01325   protected:
01326     OpalHandle m_handle;
01327 };
01328 
01329 #endif
01330 
01331 #endif // OPAL_OPAL_H
01332 
01333 

Generated on Mon Feb 21 20:19:21 2011 for OPAL by  doxygen 1.4.7