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: 22686 $
00030  * $Author: rjongbloed $
00031  * $Date: 2009-05-21 09:11:49 +0000 (Thu, 21 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 19
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   OpalCmdAlerting,              
00382   OpalMessageTypeCount
00383 } OpalMessageType;
00384 
00385 
00389 typedef enum OpalSilenceDetectMode {
00390   OpalSilenceDetectNoChange,  
00391   OpalSilenceDetectDisabled,  
00392   OpalSilenceDetectFixed,     
00393   OpalSilenceDetectAdaptive   
00394 } OpalSilenceDetectMode;
00395 
00396 
00400 typedef enum OpalEchoCancelMode {
00401   OpalEchoCancelNoChange,   
00402   OpalEchoCancelDisabled,   
00403   OpalEchoCancelEnabled     
00404 } OpalEchoCancelMode;
00405 
00406 
00414 typedef int (*OpalMediaDataFunction)(
00415   const char * token,   
00417   const char * stream,  
00421   const char * format,  
00422   void * userData,      
00423   void * data,          
00424   int size              
00425 );
00426 
00427 
00444 typedef int (*OpalMessageAvailableFunction)(
00445   const OpalMessage * message  
00446 );
00447 
00448 
00452 typedef enum OpalMediaDataType {
00453   OpalMediaDataNoChange,      
00454   OpalMediaDataPayloadOnly,   
00456   OpalMediaDataWithHeader     
00458 } OpalMediaDataType;
00459 
00460 
00474 typedef struct OpalParamGeneral {
00475   const char * m_audioRecordDevice;   
00476   const char * m_audioPlayerDevice;   
00477   const char * m_videoInputDevice;    
00478   const char * m_videoOutputDevice;   
00479   const char * m_videoPreviewDevice;  
00480   const char * m_mediaOrder;          
00483   const char * m_mediaMask;           
00486   const char * m_autoRxMedia;         
00488   const char * m_autoTxMedia;         
00490   const char * m_natRouter;           
00492   const char * m_stunServer;          
00494   unsigned     m_tcpPortBase;         
00496   unsigned     m_tcpPortMax;          
00498   unsigned     m_udpPortBase;         
00500   unsigned     m_udpPortMax;          
00502   unsigned     m_rtpPortBase;         
00504   unsigned     m_rtpPortMax;          
00506   unsigned     m_rtpTypeOfService;    
00508   unsigned     m_rtpMaxPayloadSize;   
00510   unsigned     m_minAudioJitter;      
00514   unsigned     m_maxAudioJitter;      
00518   OpalSilenceDetectMode m_silenceDetectMode; 
00521   unsigned     m_silenceThreshold;    
00523   unsigned     m_signalDeadband;      
00525   unsigned     m_silenceDeadband;     
00527   unsigned     m_silenceAdaptPeriod;  
00530   OpalEchoCancelMode m_echoCancellation; 
00532   unsigned     m_audioBuffers;        
00535   OpalMediaDataFunction m_mediaReadData;   
00537   OpalMediaDataFunction m_mediaWriteData;  
00539   OpalMediaDataType     m_mediaDataHeader; 
00542   OpalMessageAvailableFunction m_messageAvailable; 
00546   const char * m_mediaOptions;        
00553   unsigned     m_audioBufferTime;     
00556   unsigned m_manualAlerting;          
00562 } OpalParamGeneral;
00563 
00564 
00567 typedef struct OpalProductDescription {
00568   const char * m_vendor;              
00571   const char * m_name;                
00574   const char * m_version;             
00577   unsigned     m_t35CountryCode;      
00582   unsigned     m_t35Extension;        
00587   unsigned     m_manufacturerCode;    
00593 } OpalProductDescription;
00594 
00595 
00610 typedef struct OpalParamProtocol {
00611   const char * m_prefix;              
00614   const char * m_userName;            
00617   const char * m_displayName;         
00619   OpalProductDescription m_product;   
00620   const char * m_interfaceAddresses;  
00625 } OpalParamProtocol;
00626 
00627 
00628 #define OPAL_MWI_EVENT_PACKAGE             "message-summary"
00629 #define OPAL_LINE_APPEARANCE_EVENT_PACKAGE "dialog;sla;ma"
00630 
00690 typedef struct OpalParamRegistration {
00691   const char * m_protocol;      
00693   const char * m_identifier;    
00699   const char * m_hostName;      
00703   const char * m_authUserName;  
00704   const char * m_password;      
00705   const char * m_adminEntity;   
00708   unsigned     m_timeToLive;    
00710   unsigned     m_restoreTime;   
00713   const char * m_eventPackage;  
00721 } OpalParamRegistration;
00722 
00723 
00727 typedef enum OpalRegistrationStates {
00728   OpalRegisterSuccessful,   
00729   OpalRegisterRemoved,      
00733   OpalRegisterFailed,       
00735   OpalRegisterRetrying,     
00737   OpalRegisterRestored,     
00738 } OpalRegistrationStates;
00739 
00740 
00744 typedef struct OpalStatusRegistration {
00745   const char * m_protocol;    
00747   const char * m_serverName;  
00750   const char * m_error;       
00754   OpalRegistrationStates m_status; 
00755   OpalProductDescription m_product; 
00756 } OpalStatusRegistration;
00757 
00758 
00793 typedef struct OpalParamSetUpCall {
00794   const char * m_partyA;      
00808   const char * m_partyB;      
00820   const char * m_callToken;   
00825   const char * m_alertingType;
00844   const char * m_protocolCallId;  
00847 } OpalParamSetUpCall;
00848 
00849 
00853 typedef struct OpalStatusIncomingCall {
00854   const char * m_callToken;         
00855   const char * m_localAddress;      
00856   const char * m_remoteAddress;     
00857   const char * m_remotePartyNumber; 
00858   const char * m_remoteDisplayName; 
00859   const char * m_calledAddress;     
00860   const char * m_calledPartyNumber; 
00861   OpalProductDescription m_product; 
00862   const char * m_alertingType;
00874   const char * m_protocolCallId;  
00876 } OpalStatusIncomingCall;
00877 
00878 
00883 typedef enum OpalMediaStates {
00884   OpalMediaStateNoChange,   
00885   OpalMediaStateOpen,       
00887   OpalMediaStateClose,      
00889   OpalMediaStatePause,      
00891   OpalMediaStateResume      
00893 } OpalMediaStates;
00894 
00895 
00902 typedef struct OpalStatusMediaStream {
00903   const char    * m_callToken;   
00904   const char    * m_identifier;  
00907   const char    * m_type;        
00912   const char    * m_format;      
00916   OpalMediaStates m_state;       
00919 } OpalStatusMediaStream;
00920 
00921 
00924 typedef struct OpalParamSetUserData {
00925   const char    * m_callToken;   
00926   void *        m_userData;      
00927 } OpalParamSetUserData;
00928 
00929 
00935 typedef struct OpalStatusUserInput {
00936   const char * m_callToken;   
00937   const char * m_userInput;   
00938   unsigned     m_duration;    
00943 } OpalStatusUserInput;
00944 
00945 
00949 typedef struct OpalStatusMessageWaiting {
00950   const char * m_party;     
00951   const char * m_type;      
00952   const char * m_extraInfo; 
00955 } OpalStatusMessageWaiting;
00956 
00957 
00962 typedef enum OpalLineAppearanceStates {
00963   OpalLineTerminated,  
00964   OpalLineTrying,      
00965   OpalLineProceeding,  
00966   OpalLineRinging,     
00967   OpalLineConnected,   
00968   OpalLineSubcribed,   
00969   OpalLineUnsubcribed, 
00971   OpalLineIdle = OpalLineTerminated // Kept for backward compatibility
00972 } OpalLineAppearanceStates;
00973 
00974 
00978 typedef struct OpalStatusLineAppearance {
00979   const char *             m_line;       
00980   OpalLineAppearanceStates m_state;      
00981   int                      m_appearance; 
00984   const char *             m_callId;     
00988   const char *             m_partyA;     
00989   const char *             m_partyB;     
00990 } OpalStatusLineAppearance;
00991 
00992 
00995 typedef struct OpalParamRecording {
00996   const char * m_callToken;  
00997   const char * m_file;       
00999   unsigned     m_channels;   
01002 } OpalParamRecording;
01003 
01004 
01008 typedef struct OpalStatusCallCleared {
01009   const char * m_callToken;   
01010   const char * m_reason;      
01015 } OpalStatusCallCleared;
01016 
01017 
01022 typedef enum OpalCallEndReason {
01023   OpalCallEndedByLocalUser,         
01024   OpalCallEndedByNoAccept,          
01025   OpalCallEndedByAnswerDenied,      
01026   OpalCallEndedByRemoteUser,        
01027   OpalCallEndedByRefusal,           
01028   OpalCallEndedByNoAnswer,          
01029   OpalCallEndedByCallerAbort,       
01030   OpalCallEndedByTransportFail,     
01031   OpalCallEndedByConnectFail,       
01032   OpalCallEndedByGatekeeper,        
01033   OpalCallEndedByNoUser,            
01034   OpalCallEndedByNoBandwidth,       
01035   OpalCallEndedByCapabilityExchange,
01036   OpalCallEndedByCallForwarded,     
01037   OpalCallEndedBySecurityDenial,    
01038   OpalCallEndedByLocalBusy,         
01039   OpalCallEndedByLocalCongestion,   
01040   OpalCallEndedByRemoteBusy,        
01041   OpalCallEndedByRemoteCongestion,  
01042   OpalCallEndedByUnreachable,       
01043   OpalCallEndedByNoEndPoint,        
01044   OpalCallEndedByHostOffline,       
01045   OpalCallEndedByTemporaryFailure,  
01046   OpalCallEndedByQ931Cause,         
01047   OpalCallEndedByDurationLimit,     
01048   OpalCallEndedByInvalidConferenceID, 
01049   OpalCallEndedByNoDialTone,        
01050   OpalCallEndedByNoRingBackTone,    
01051   OpalCallEndedByOutOfService,      
01052   OpalCallEndedByAcceptingCallWaiting, 
01053   OpalCallEndedWithQ931Code = 0x100  
01054 } OpalCallEndReason;
01055 
01056 
01059 typedef struct OpalParamCallCleared {
01060   const char      * m_callToken;  
01061   OpalCallEndReason m_reason;     
01063 } OpalParamCallCleared;
01064 
01065 
01069 struct OpalMessage {
01070   OpalMessageType m_type;   
01071   union {
01072     const char *             m_commandError;       
01073     OpalParamGeneral         m_general;            
01074     OpalParamProtocol        m_protocol;           
01075     OpalParamRegistration    m_registrationInfo;   
01076     OpalStatusRegistration   m_registrationStatus; 
01077     OpalParamSetUpCall       m_callSetUp;          
01078     const char *             m_callToken;          
01079     OpalStatusIncomingCall   m_incomingCall;       
01080     OpalStatusUserInput      m_userInput;          
01081     OpalStatusMessageWaiting m_messageWaiting;     
01082     OpalStatusLineAppearance m_lineAppearance;     
01083     OpalStatusCallCleared    m_callCleared;        
01084     OpalParamCallCleared     m_clearCall;          
01085     OpalStatusMediaStream    m_mediaStream;        
01086     OpalParamSetUserData     m_setUserData;        
01087     OpalParamRecording       m_recording;          
01088   } m_param;
01089 };
01090 
01091 
01092 #ifdef __cplusplus
01093 };
01094 #endif
01095 
01096 #endif // OPAL_OPAL_H
01097 
01098 

Generated on Mon Aug 3 20:50:24 2009 for OPAL by  doxygen 1.5.1