00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
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
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