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: 22553 $
00030  * $Author: csoutheren $
00031  * $Date: 2009-05-07 08:56:06 +0000 (Thu, 07 May 2009) $
00032  */
00033 
00034 #ifndef OPAL_OPAL_H
00035 #define OPAL_OPAL_H
00036 
00037 #ifdef __cplusplus
00038 extern "C" {
00039 #endif
00040 
00058 #ifdef _WIN32
00059   #define OPAL_EXPORT __stdcall
00060 #else
00061   #define OPAL_EXPORT
00062 #endif
00063 
00064 typedef struct OpalHandleStruct * OpalHandle;
00065 
00066 typedef struct OpalMessage OpalMessage;
00067 
00068 
00069 #define OPAL_C_API_VERSION 18
00070 
00071 
00073 
00122 OpalHandle OPAL_EXPORT OpalInitialise(unsigned * version, const char * options);
00123 
00127 #define OPAL_INITIALISE_FUNCTION   "OpalInitialise"
00128 
00132 typedef OpalHandle (OPAL_EXPORT *OpalInitialiseFunction)(unsigned * version, const char * options);
00133 
00134 
00136 
00143 void OPAL_EXPORT OpalShutDown(OpalHandle opal);
00144 
00148 #define OPAL_SHUTDOWN_FUNCTION     "OpalShutDown"
00149 
00153 typedef void (OPAL_EXPORT *OpalShutDownFunction)(OpalHandle opal);
00154 
00155 
00157 
00192 OpalMessage * OPAL_EXPORT OpalGetMessage(OpalHandle opal, unsigned timeout);
00193 
00197 #define OPAL_GET_MESSAGE_FUNCTION  "OpalGetMessage"
00198 
00202 typedef OpalMessage * (OPAL_EXPORT *OpalGetMessageFunction)(OpalHandle opal, unsigned timeout);
00203 
00204 
00206 
00245 OpalMessage * OPAL_EXPORT OpalSendMessage(OpalHandle opal, const OpalMessage * message);
00246 
00250 typedef OpalMessage * (OPAL_EXPORT *OpalSendMessageFunction)(OpalHandle opal, const OpalMessage * message);
00251 
00255 #define OPAL_SEND_MESSAGE_FUNCTION "OpalSendMessage"
00256 
00257 
00259 
00263 void OPAL_EXPORT OpalFreeMessage(OpalMessage * message);
00264 
00268 #define OPAL_FREE_MESSAGE_FUNCTION "OpalFreeMessage"
00269 
00273 typedef void (OPAL_EXPORT *OpalFreeMessageFunction)(OpalMessage * message);
00274 
00275 
00277 
00278 #define OPAL_PREFIX_H323  "h323"
00279 #define OPAL_PREFIX_SIP   "sip"
00280 #define OPAL_PREFIX_IAX2  "iax2"
00281 #define OPAL_PREFIX_PCSS  "pc"
00282 #define OPAL_PREFIX_LOCAL "local"
00283 #define OPAL_PREFIX_POTS  "pots"
00284 #define OPAL_PREFIX_PSTN  "pstn"
00285 #define OPAL_PREFIX_IVR   "ivr"
00286 
00287 #define OPAL_PREFIX_ALL OPAL_PREFIX_H323  " " \
00288                         OPAL_PREFIX_SIP   " " \
00289                         OPAL_PREFIX_IAX2  " " \
00290                         OPAL_PREFIX_PCSS  " " \
00291                         OPAL_PREFIX_LOCAL " " \
00292                         OPAL_PREFIX_POTS  " " \
00293                         OPAL_PREFIX_PSTN  " " \
00294                         OPAL_PREFIX_IVR
00295 
00296 
00299 typedef enum OpalMessageType {
00300   OpalIndCommandError,          
00303   OpalCmdSetGeneralParameters,  
00305   OpalCmdSetProtocolParameters, 
00308   OpalCmdRegistration,          
00312   OpalIndRegistration,          
00317   OpalCmdSetUpCall,             
00321   OpalIndIncomingCall,          
00324   OpalCmdAnswerCall,            
00328   OpalCmdClearCall,             
00333   OpalIndAlerting,              
00337   OpalIndEstablished,           
00341   OpalIndUserInput,             
00344   OpalIndCallCleared,           
00347   OpalCmdHoldCall,              
00349   OpalCmdRetrieveCall,          
00351   OpalCmdTransferCall,          
00354   OpalCmdUserInput,             
00356   OpalIndMessageWaiting,        
00359   OpalIndMediaStream,           
00362   OpalCmdMediaStream,           
00364   OpalCmdSetUserData,           
00365   OpalIndLineAppearance,        
00368   OpalCmdStartRecording,        
00370   OpalCmdStopRecording,         
00372   OpalIndProceeding,            
00380   OpalMessageTypeCount
00381 } OpalMessageType;
00382 
00383 
00387 typedef enum OpalSilenceDetectMode {
00388   OpalSilenceDetectNoChange,  
00389   OpalSilenceDetectDisabled,  
00390   OpalSilenceDetectFixed,     
00391   OpalSilenceDetectAdaptive   
00392 } OpalSilenceDetectMode;
00393 
00394 
00398 typedef enum OpalEchoCancelMode {
00399   OpalEchoCancelNoChange,   
00400   OpalEchoCancelDisabled,   
00401   OpalEchoCancelEnabled     
00402 } OpalEchoCancelMode;
00403 
00404 
00412 typedef int (*OpalMediaDataFunction)(
00413   const char * token,   
00415   const char * stream,  
00419   const char * format,  
00420   void * userData,      
00421   void * data,          
00422   int size              
00423 );
00424 
00425 
00442 typedef int (*OpalMessageAvailableFunction)(
00443   const OpalMessage * message  
00444 );
00445 
00446 
00450 typedef enum OpalMediaDataType {
00451   OpalMediaDataNoChange,      
00452   OpalMediaDataPayloadOnly,   
00454   OpalMediaDataWithHeader     
00456 } OpalMediaDataType;
00457 
00458 
00472 typedef struct OpalParamGeneral {
00473   const char * m_audioRecordDevice;   
00474   const char * m_audioPlayerDevice;   
00475   const char * m_videoInputDevice;    
00476   const char * m_videoOutputDevice;   
00477   const char * m_videoPreviewDevice;  
00478   const char * m_mediaOrder;          
00481   const char * m_mediaMask;           
00484   const char * m_autoRxMedia;         
00486   const char * m_autoTxMedia;         
00488   const char * m_natRouter;           
00490   const char * m_stunServer;          
00492   unsigned     m_tcpPortBase;         
00494   unsigned     m_tcpPortMax;          
00496   unsigned     m_udpPortBase;         
00498   unsigned     m_udpPortMax;          
00500   unsigned     m_rtpPortBase;         
00502   unsigned     m_rtpPortMax;          
00504   unsigned     m_rtpTypeOfService;    
00506   unsigned     m_rtpMaxPayloadSize;   
00508   unsigned     m_minAudioJitter;      
00512   unsigned     m_maxAudioJitter;      
00516   OpalSilenceDetectMode m_silenceDetectMode; 
00519   unsigned     m_silenceThreshold;    
00521   unsigned     m_signalDeadband;      
00523   unsigned     m_silenceDeadband;     
00525   unsigned     m_silenceAdaptPeriod;  
00528   OpalEchoCancelMode m_echoCancellation; 
00530   unsigned     m_audioBuffers;        
00531   OpalMediaDataFunction m_mediaReadData;   
00533   OpalMediaDataFunction m_mediaWriteData;  
00535   OpalMediaDataType     m_mediaDataHeader; 
00538   OpalMessageAvailableFunction m_messageAvailable; 
00542   const char * m_mediaOptions;        
00549 } OpalParamGeneral;
00550 
00551 
00554 typedef struct OpalProductDescription {
00555   const char * m_vendor;              
00558   const char * m_name;                
00561   const char * m_version;             
00564   unsigned     m_t35CountryCode;      
00569   unsigned     m_t35Extension;        
00574   unsigned     m_manufacturerCode;    
00580 } OpalProductDescription;
00581 
00582 
00597 typedef struct OpalParamProtocol {
00598   const char * m_prefix;              
00601   const char * m_userName;            
00604   const char * m_displayName;         
00606   OpalProductDescription m_product;   
00607   const char * m_interfaceAddresses;  
00612 } OpalParamProtocol;
00613 
00614 
00615 #define OPAL_MWI_EVENT_PACKAGE             "message-summary"
00616 #define OPAL_LINE_APPEARANCE_EVENT_PACKAGE "dialog;sla;ma"
00617 
00677 typedef struct OpalParamRegistration {
00678   const char * m_protocol;      
00680   const char * m_identifier;    
00686   const char * m_hostName;      
00690   const char * m_authUserName;  
00691   const char * m_password;      
00692   const char * m_adminEntity;   
00695   unsigned     m_timeToLive;    
00697   unsigned     m_restoreTime;   
00700   const char * m_eventPackage;  
00708 } OpalParamRegistration;
00709 
00710 
00714 typedef enum OpalRegistrationStates {
00715   OpalRegisterSuccessful,   
00716   OpalRegisterRemoved,      
00720   OpalRegisterFailed,       
00722   OpalRegisterRetrying,     
00724   OpalRegisterRestored,     
00725 } OpalRegistrationStates;
00726 
00727 
00731 typedef struct OpalStatusRegistration {
00732   const char * m_protocol;    
00734   const char * m_serverName;  
00737   const char * m_error;       
00741   OpalRegistrationStates m_status; 
00742   OpalProductDescription m_product; 
00743 } OpalStatusRegistration;
00744 
00745 
00780 typedef struct OpalParamSetUpCall {
00781   const char * m_partyA;      
00795   const char * m_partyB;      
00807   const char * m_callToken;   
00812   const char * m_alertingType;
00831   const char * m_protocolCallId;  
00834 } OpalParamSetUpCall;
00835 
00836 
00840 typedef struct OpalStatusIncomingCall {
00841   const char * m_callToken;         
00842   const char * m_localAddress;      
00843   const char * m_remoteAddress;     
00844   const char * m_remotePartyNumber; 
00845   const char * m_remoteDisplayName; 
00846   const char * m_calledAddress;     
00847   const char * m_calledPartyNumber; 
00848   OpalProductDescription m_product; 
00849   const char * m_alertingType;
00861   const char * m_protocolCallId;  
00863 } OpalStatusIncomingCall;
00864 
00865 
00870 typedef enum OpalMediaStates {
00871   OpalMediaStateNoChange,   
00872   OpalMediaStateOpen,       
00874   OpalMediaStateClose,      
00876   OpalMediaStatePause,      
00878   OpalMediaStateResume      
00880 } OpalMediaStates;
00881 
00882 
00889 typedef struct OpalStatusMediaStream {
00890   const char    * m_callToken;   
00891   const char    * m_identifier;  
00894   const char    * m_type;        
00899   const char    * m_format;      
00903   OpalMediaStates m_state;       
00906 } OpalStatusMediaStream;
00907 
00908 
00911 typedef struct OpalParamSetUserData {
00912   const char    * m_callToken;   
00913   void *        m_userData;      
00914 } OpalParamSetUserData;
00915 
00916 
00922 typedef struct OpalStatusUserInput {
00923   const char * m_callToken;   
00924   const char * m_userInput;   
00925   unsigned     m_duration;    
00930 } OpalStatusUserInput;
00931 
00932 
00936 typedef struct OpalStatusMessageWaiting {
00937   const char * m_party;     
00938   const char * m_type;      
00939   const char * m_extraInfo; 
00942 } OpalStatusMessageWaiting;
00943 
00944 
00949 typedef enum OpalLineAppearanceStates {
00950   OpalLineTerminated,  
00951   OpalLineTrying,      
00952   OpalLineProceeding,  
00953   OpalLineRinging,     
00954   OpalLineConnected,   
00955   OpalLineSubcribed,   
00956   OpalLineUnsubcribed, 
00958   OpalLineIdle = OpalLineTerminated // Kept for backward compatibility
00959 } OpalLineAppearanceStates;
00960 
00961 
00965 typedef struct OpalStatusLineAppearance {
00966   const char *             m_line;       
00967   OpalLineAppearanceStates m_state;      
00968   int                      m_appearance; 
00971   const char *             m_callId;     
00975   const char *             m_partyA;     
00976   const char *             m_partyB;     
00977 } OpalStatusLineAppearance;
00978 
00979 
00982 typedef struct OpalParamRecording {
00983   const char * m_callToken;  
00984   const char * m_file;       
00986   unsigned     m_channels;   
00989 } OpalParamRecording;
00990 
00991 
00995 typedef struct OpalStatusCallCleared {
00996   const char * m_callToken;   
00997   const char * m_reason;      
01002 } OpalStatusCallCleared;
01003 
01004 
01009 typedef enum OpalCallEndReason {
01010   OpalCallEndedByLocalUser,         
01011   OpalCallEndedByNoAccept,          
01012   OpalCallEndedByAnswerDenied,      
01013   OpalCallEndedByRemoteUser,        
01014   OpalCallEndedByRefusal,           
01015   OpalCallEndedByNoAnswer,          
01016   OpalCallEndedByCallerAbort,       
01017   OpalCallEndedByTransportFail,     
01018   OpalCallEndedByConnectFail,       
01019   OpalCallEndedByGatekeeper,        
01020   OpalCallEndedByNoUser,            
01021   OpalCallEndedByNoBandwidth,       
01022   OpalCallEndedByCapabilityExchange,
01023   OpalCallEndedByCallForwarded,     
01024   OpalCallEndedBySecurityDenial,    
01025   OpalCallEndedByLocalBusy,         
01026   OpalCallEndedByLocalCongestion,   
01027   OpalCallEndedByRemoteBusy,        
01028   OpalCallEndedByRemoteCongestion,  
01029   OpalCallEndedByUnreachable,       
01030   OpalCallEndedByNoEndPoint,        
01031   OpalCallEndedByHostOffline,       
01032   OpalCallEndedByTemporaryFailure,  
01033   OpalCallEndedByQ931Cause,         
01034   OpalCallEndedByDurationLimit,     
01035   OpalCallEndedByInvalidConferenceID, 
01036   OpalCallEndedByNoDialTone,        
01037   OpalCallEndedByNoRingBackTone,    
01038   OpalCallEndedByOutOfService,      
01039   OpalCallEndedByAcceptingCallWaiting, 
01040   OpalCallEndedWithQ931Code = 0x100  
01041 } OpalCallEndReason;
01042 
01043 
01046 typedef struct OpalParamCallCleared {
01047   const char      * m_callToken;  
01048   OpalCallEndReason m_reason;     
01050 } OpalParamCallCleared;
01051 
01052 
01056 struct OpalMessage {
01057   OpalMessageType m_type;   
01058   union {
01059     const char *             m_commandError;       
01060     OpalParamGeneral         m_general;            
01061     OpalParamProtocol        m_protocol;           
01062     OpalParamRegistration    m_registrationInfo;   
01063     OpalStatusRegistration   m_registrationStatus; 
01064     OpalParamSetUpCall       m_callSetUp;          
01065     const char *             m_callToken;          
01066     OpalStatusIncomingCall   m_incomingCall;       
01067     OpalStatusUserInput      m_userInput;          
01068     OpalStatusMessageWaiting m_messageWaiting;     
01069     OpalStatusLineAppearance m_lineAppearance;     
01070     OpalStatusCallCleared    m_callCleared;        
01071     OpalParamCallCleared     m_clearCall;          
01072     OpalStatusMediaStream    m_mediaStream;        
01073     OpalParamSetUserData     m_setUserData;        
01074     OpalParamRecording       m_recording;          
01075   } m_param;
01076 };
01077 
01078 
01079 #ifdef __cplusplus
01080 };
01081 #endif
01082 
01083 #endif // OPAL_OPAL_H
01084 
01085 

Generated on Mon Feb 1 00:25:53 2010 for OPAL by  doxygen 1.5.1