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 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
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
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