?? cpcallmanager.h
字號:
// // // Copyright (C) 2005-2006 SIPez LLC.// Licensed to SIPfoundry under a Contributor Agreement.// // Copyright (C) 2004-2006 SIPfoundry Inc.// Licensed by SIPfoundry under the LGPL license.// // Copyright (C) 2004-2006 Pingtel Corp.// Licensed to SIPfoundry under a Contributor Agreement.// // $$//////////////////////////////////////////////////////////////////////////////// Author: Dan Petrie (dpetrie AT SIPez DOT com)#ifndef _CpCallManager_h_#define _CpCallManager_h_// SYSTEM INCLUDES//#include <...>// APPLICATION INCLUDES#include <os/OsServerTask.h>#include <os/OsRWMutex.h>#include "os/OsProtectEvent.h"#include "os/OsQueuedEvent.h"#include "ptapi/PtEvent.h"#include "ptapi/PtDefs.h"#include "net/SipMessage.h"#include "net/SipContactDb.h"#include "net/SipDialog.h"// DEFINES// MACROS// EXTERNAL FUNCTIONS// EXTERNAL VARIABLES// CONSTANTS// STRUCTS// TYPEDEFS// FORWARD DECLARATIONSclass CpCall;class CpMediaInterface;class PtAddressForwarding;class SipSession;class SipDialog;#ifndef EXCLUDE_STREAMINGclass MpStreamPlayer;class MpStreamPlaylistPlayer;#endifclass OsEvent;//! Abstract call manager/*! There are three major components to the call management system: *\par * Call management methods *\par * Call model events *\par * Abstract media control interface. * \par * The call management methods provide the means to perform call * control operations and poll call state. The call model events * provide the means to listen for call model state changes. The * abstract media control interface provides the means to override * the media subsystem. * \par * Due to the transient nature of the objects in the call model, * handles or names are used to represent the actual objects. * Operations are performed on these objects via the Call Manager * by naming the object(s) when invoking a method. * /par * The INFINITY.0 APIs above use the same call model used in JTAPI *(as defined by the Enterprise Computer Telephony Forum). The * primary objects defined in this model are: *\par * call *\par * connection *\par * address *\par * terminal *\par * terminal connection. * \par * A call contains zero or more connections. A connection is * associated with an address (that is, a SIP URL). A terminal * connection is the relationship between a connection and a * terminal. * \par * Call Model state changes are notified through an event handler. * The event handler is a sub-class of TaoAdaptor that implements * the handleMessage method. This method must implement actions or * state caching of events of interest to the application. The * events that are notified from the call manager subsystem are * enumerated in PtEvent. */class CpCallManager : public OsServerTask{/* //////////////////////////// PUBLIC //////////////////////////////////// */public:#ifndef DOXYGEN_SHOULD_SKIP_THIS enum EventSubTypes { CP_UNSPECIFIED = SipMessage::NET_UNSPECIFIED, CP_SIP_MESSAGE = SipMessage::NET_SIP_MESSAGE, CP_CALL_EXITED, CP_DIAL_STRING, CP_FOCUS_CALL, CP_HOLD_CALL, CP_OFF_HOLD_CALL, CP_DEQUEUED_CALL, CP_MGCP_MESSAGE, CP_MGCP_CAPS_MESSAGE, CP_YIELD_FOCUS, //10 CP_GET_FOCUS, CP_CREATE_CALL, CP_GET_CALLS, CP_CONNECT, CP_SINGLE_CALL_TRANSFER, CP_BLIND_TRANSFER, CP_CONSULT_TRANSFER, CP_TRANSFER_CONNECTION, CP_TRANSFER_CONNECTION_STATUS, CP_TRANSFEREE_CONNECTION, //20 CP_TRANSFEREE_CONNECTION_STATUS, CP_DROP, CP_DROP_CONNECTION, CP_FORCE_DROP_CONNECTION, CP_ANSWER_CONNECTION, CP_ACCEPT_CONNECTION, CP_REJECT_CONNECTION, CP_REDIRECT_CONNECTION, CP_GET_NUM_CONNECTIONS, CP_GET_CONNECTIONS, //30 CP_GET_CALLED_ADDRESSES, CP_GET_CALLING_ADDRESSES, CP_START_TONE_TERM_CONNECTION, CP_STOP_TONE_TERM_CONNECTION, CP_PLAY_AUDIO_TERM_CONNECTION, CP_STOP_AUDIO_TERM_CONNECTION, CP_GET_NUM_TERM_CONNECTIONS, CP_GET_TERM_CONNECTIONS, CP_IS_LOCAL_TERM_CONNECTION, CP_HOLD_TERM_CONNECTION, //40 CP_UNHOLD_TERM_CONNECTION, CP_UNHOLD_LOCAL_TERM_CONNECTION, CP_HOLD_LOCAL_TERM_CONNECTION, CP_OFFERING_EXPIRED, CP_RINGING_EXPIRED, CP_GET_CALLSTATE, CP_GET_CONNECTIONSTATE, CP_GET_TERMINALCONNECTIONSTATE, CP_GET_SESSION, CP_GET_INVITE, //50 CP_HOLD_ALL_TERM_CONNECTIONS, CP_UNHOLD_ALL_TERM_CONNECTIONS, CP_CANCEL_TIMER, CP_GET_NEXT_CSEQ, CP_SET_PREMIUM_SOUND_CALL, CP_ADD_TONE_LISTENER, CP_REMOVE_TONE_LISTENER, CP_ENABLE_DTMF_EVENT, CP_DISABLE_DTMF_EVENT, CP_REMOVE_DTMF_EVENT, //60 CP_EZRECORD, CP_PLAY_BUFFER_TERM_CONNECTION, CP_CREATE_PLAYER, CP_DESTROY_PLAYER, CP_CREATE_PLAYLIST_PLAYER, CP_DESTROY_PLAYLIST_PLAYER, CP_CREATE_QUEUE_PLAYER, CP_DESTROY_QUEUE_PLAYER, CP_RENEGOTIATE_CODECS_CONNECTION, CP_RENEGOTIATE_CODECS_ALL_CONNECTIONS, //70 CP_SET_CODEC_CPU_LIMIT, CP_GET_CODEC_CPU_COST, CP_GET_CODEC_CPU_LIMIT, CP_SET_INBOUND_CODEC_CPU_LIMIT, CP_STOPRECORD, CP_SET_OUTBOUND_LINE, CP_GET_LOCAL_CONTACTS, CP_OUTGOING_INFO, CP_GET_MEDIA_CONNECTION_ID, CP_ENABLE_STUN, //80 CP_GET_CAN_ADD_PARTY, CP_SPLIT_CONNECTION, CP_JOIN_CONNECTION, CP_CONSULT_TRANSFER_ADDRESS, CP_SEND_SIP_REQUEST, CP_NEW_PASSERTED_ID, CP_SET_MEDIA_PROPERTY };/* enum metaEventType { META_EVENT_NONE = 0, META_EVENT_TRANSFER, META_EVENT_CONFERENCE, META_EVENT_MERGE, META_EVENT_CALL_START, META_EVENT_CALL_END, META_EVENT_CALL_PROGRESS, META_EVENT_CALL_ADDITIONAL_PARTY, META_EVENT_CALL_REMOVING_PARTY, META_EVENT_SNAPSHOT, META_EVENT_UNKNOWN };*/#endif // DOXYGEN_SHOULD_SKIP_THIS enum CallTypes { SIP_CALL = 0, MGCP_CALL }; enum CallHoldType { NEAR_END_HOLD = 0, FAR_END_HOLD }; enum CpStatus { CP_SUCCESS = 0, CP_FAILED, CP_INVALID_IP_ADDRESS, CP_INVALID_SIP_DIRECTORY_SERVER, CP_INVALID_SIP_URL };/* ============================ CREATORS ================================== */ //! Default constructor CpCallManager(const char* taskName, const char* callIdPrefix, int rtpPortStart = 8766, int rtpPortEnd = -1, const char* localAddress = NULL, const char* publicAddress = NULL); //! Destructor virtual ~CpCallManager();/* ============================ MANIPULATORS ============================== */ static void getEventSubTypeString(EventSubTypes type, UtlString& typeString); //! Set the default address for the local connection. /*! This is used to set the calling ID information when * making an outbound call. */ virtual void setOutboundLine(const char* lineUrl) = 0; /** @name For internal use only * These should be private methods, but due to the structure * of how they are used they must be public. */ //@{ //! For internal use only virtual UtlBoolean handleMessage(OsMsg& eventMessage) = 0; //! For internal use only virtual void getNewCallId(UtlString* callId); //! Generate a new Call-Id with the specified prefix. static void getNewCallId(const char* callIdPrefix, UtlString* callId); //! For internal use only void getNewSessionId(UtlString* sessionId); //! For internal use only int getNewMetaEventId(); //@} //! Register a TAO (telephony application objects) listener for //! call and connection events. virtual OsStatus addTaoListener(OsServerTask* pListener, char* callId = NULL, int ConnectId = 0, int mask = 0) = 0; /** @name Call Operations */ //@{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -