ptevent.cpp
来自「基于sipfoundy 公司开发的sipx协议API」· C++ 代码 · 共 476 行
CPP
476 行
//// Copyright (C) 2004, 2005 Pingtel Corp.// //// $$//////////////////////////////////////////////////////////////////////////////// SYSTEM INCLUDES#include <assert.h>#include <stdlib.h>#include <string.h>// APPLICATION INCLUDES#include "ptapi/PtEvent.h"#include "ptapi/PtMultiCallMetaEvent.h"#include "ptapi/PtSingleCallMetaEvent.h"#include "tao/TaoClientTask.h"// EXTERNAL FUNCTIONS// EXTERNAL VARIABLES// CONSTANTS// STATIC VARIABLE INITIALIZATIONS/* //////////////////////////// PUBLIC //////////////////////////////////// *//* ============================ CREATORS ================================== */// Default ConstructorPtEvent::PtEvent(int eventId, int metaCode, int numOldCalls, const char* callId, TaoClientTask *pClient, int sipResponseCode, const char* sipResponseText, const char** pMetaEventCallIds, const char* newCallId, PtEventCause cause, int isLocal) :mIsLocal(isLocal),mEventId((PtEventId)eventId),mEventCause(cause),mMetaCode((PtMetaCode)metaCode),mNumOldCalls(numOldCalls),mpClient(pClient),mSipResponseCode(sipResponseCode){ if (sipResponseText) mSipResponseText = sipResponseText; if (callId) mCallId = callId; if (newCallId) mNewCallId = newCallId ; if (numOldCalls > 0 && pMetaEventCallIds != NULL) { for(int i = 0; i < numOldCalls; i++) { mOldCallIds[i] = strdup(pMetaEventCallIds[i]) ; } }}// Copy constructorPtEvent::PtEvent(const PtEvent& rPtEvent){ mMetaCode = rPtEvent.mMetaCode; mEventId = rPtEvent.mEventId; mEventCause = rPtEvent.mEventCause; mNumOldCalls = rPtEvent.mNumOldCalls; mpClient = rPtEvent.mpClient; mCallId = rPtEvent.mCallId; mNewCallId = rPtEvent.mNewCallId; mIsLocal = rPtEvent.mIsLocal; mSipResponseCode = rPtEvent.mSipResponseCode; mSipResponseText = rPtEvent.mSipResponseText; if (mNumOldCalls > 0) { for(int i = 0; i < mNumOldCalls; i++) { mOldCallIds[i] = strdup(rPtEvent.mOldCallIds[i]) ; } }}// DestructorPtEvent::~PtEvent(){ for(int i = 0; i < mNumOldCalls; i++) { free(mOldCallIds[i]) ; }}/* ============================ MANIPULATORS ============================== */// Assignment operatorPtEvent&PtEvent::operator=(const PtEvent& rhs){ if (this == &rhs) // handle the assignment to self case return *this; mMetaCode = rhs.mMetaCode; mEventId = rhs.mEventId; mEventCause = rhs.mEventCause; mNumOldCalls = rhs.mNumOldCalls; mpClient = rhs.mpClient; mCallId = rhs.mCallId; mNewCallId = rhs.mNewCallId; mIsLocal = rhs.mIsLocal; mSipResponseCode = rhs.mSipResponseCode; mSipResponseText = rhs.mSipResponseText; if (mNumOldCalls > 0) { for(int i = 0; i < mNumOldCalls; i++) { mOldCallIds[i] = strdup(rhs.mOldCallIds[i]); } } return *this;}void PtEvent::setEventId(PtEventId eventId){ mEventId = eventId;}void PtEvent::setMetaCode(PtMetaCode metaCode){ mMetaCode = metaCode;}void PtEvent::setEventCallId(const char* callId){ mCallId = callId;}void PtEvent::setEventSipResponseCode(int sipResponseCode){ mSipResponseCode = sipResponseCode;}void PtEvent::setEventSipResponseText(const char* sipResponseText){ mSipResponseText = sipResponseText;}void PtEvent::setEventNewCallId(const char* newCallId){ mNewCallId = newCallId;}void PtEvent::setEventOldCallIds(int numOldCalls, UtlString* oldCallIds){ mNumOldCalls = numOldCalls; if (mNumOldCalls > 0 && oldCallIds) { for(int i = 0; i < mNumOldCalls; i++) { mOldCallIds[i] = strdup(oldCallIds[i].data()); } }}void PtEvent::setEventCause(PtEventCause cause){ mEventCause = cause;}void PtEvent::setEventLocal(int isLocal){ mIsLocal = isLocal;}/* ============================ ACCESSORS ================================= */// Return the event identifier.PtStatus PtEvent::getId(PtEventId& rId){ /* algorithms: PT_SUCCESS if success PT_PROVIDER_UNAVALAIBLE if provider unavailable */ rId = mEventId; if (mEventId == PROVIDER_SHUTDOWN || mEventId == PROVIDER_OUT_OF_SERVICE) return PT_PROVIDER_UNAVAILABLE; else return PT_SUCCESS;}PtStatus PtEvent::getCause(PtEventCause& rCause){ rCause = mEventCause; return PT_SUCCESS;}PtStatus PtEvent::getMetaCode(int& rMetaCode){ rMetaCode = mMetaCode; return PT_SUCCESS;}PtStatus PtEvent::getMetaEvent(PtBoolean& rMetaEventExists, PtMetaEvent*& pEvent) const{ PtEventId eventId; rMetaEventExists = TRUE; switch (mMetaCode) { case META_CALL_STARTING: eventId = CALL_META_CALL_STARTING_STARTED; break; case META_CALL_PROGRESS: eventId = SINGLECALL_META_PROGRESS_STARTED; break; case META_CALL_ADDITIONAL_PARTY: eventId = CALL_META_ADD_PARTY_STARTED; break; case META_CALL_REMOVING_PARTY: eventId = CALL_META_REMOVE_PARTY_STARTED; break; case META_CALL_ENDING: eventId = CALL_META_CALL_ENDING_STARTED; break; case META_CALL_MERGING: eventId = MULTICALL_META_MERGE_STARTED; break; case META_CALL_TRANSFERRING: eventId = MULTICALL_META_TRANSFER_STARTED; break; case META_SNAPSHOT: eventId = SINGLECALL_META_SNAPSHOT_STARTED; break; default: case META_UNKNOWN: case META_EVENT_NONE: rMetaEventExists = FALSE; return PT_SUCCESS; } if (eventId < SINGLECALL_META_PROGRESS_STARTED) { // MultiCallMetaEvent pEvent = (PtMetaEvent*) new PtMultiCallMetaEvent(eventId, mMetaCode, mpClient, mSipResponseCode, mSipResponseText, mCallId.data(), mNewCallId.data(), (const char**) mOldCallIds, mNumOldCalls); } else { pEvent = (PtMetaEvent *) new PtSingleCallMetaEvent(eventId, mMetaCode, mpClient, mSipResponseCode, mSipResponseText, mCallId.data()); } return PT_SUCCESS;}PtStatus PtEvent::getSipResponseCode(int& responseCode, UtlString& responseText){ responseCode = mSipResponseCode; responseText = mSipResponseText; return PT_SUCCESS;}/* ============================ INQUIRY =================================== */int PtEvent::isLocal() const{ return mIsLocal;}PtBoolean PtEvent::isCallEvent(int eventId){ int id1 = (int)CALL_ACTIVE; int id2 = (int)CALL_EVENT_TRANSMISSION_ENDED; int id3 = (int)MULTICALL_META_MERGE_STARTED; int id4 = (int)CALL_META_REMOVE_PARTY_ENDED; PtBoolean isEvent = ((eventId >= id1) && (eventId <= id2)) || ((eventId >= id3) && (eventId <= id4)); return isEvent;}PtBoolean PtEvent::isConnectionEvent(int eventId){ int id1 = (int)CONNECTION_ALERTING; int id2 = (int)CONNECTION_UNKNOWN; int id3 = (int)CONNECTION_DIALING; int id4 = (int)CONNECTION_QUEUED; PtBoolean isEvent = ((eventId >= id1) && (eventId <= id2)) || ((eventId >= id3) && (eventId <= id4)); return isEvent;}PtBoolean PtEvent::isTerminalEvent(int eventId){ return (eventId == TERMINAL_EVENT_TRANSMISSION_ENDED);}PtBoolean PtEvent::isTerminalComponentEvent(int eventId){ int id1 = (int)PHONE_BUTTON_INFO_CHANGED; int id2 = (int)PHONE_RINGER_INFO_CHANGED; PtBoolean isEvent = ((eventId >= id1) && (eventId <= id2)); return isEvent;}PtBoolean PtEvent::isTerminalConnectionEvent(int eventId){ int id1 = (int)TERMINAL_CONNECTION_ACTIVE; int id2 = (int)TERMINAL_CONNECTION_UNKNOWN; int id3 = (int)TERMINAL_CONNECTION_BRIDGED; int id4 = (int)TERMINAL_CONNECTION_IDLE; PtBoolean isEvent = ((eventId >= id1) && (eventId <= id2)) || ((eventId >= id3) && (eventId <= id4)); return isEvent;}PT_IMPLEMENT_CLASS_INFO(PtEvent, PT_NO_PARENT_CLASS)// To see if the 2 events are the same.PtBoolean PtEvent::isSame(const PtEvent& rEvent){ return (mMetaCode == rEvent.mMetaCode && mEventId == rEvent.mEventId && mEventCause == rEvent.mEventCause);}PtBoolean PtEvent::isStateTransitionAllowed(int newState, int oldState){ PtBoolean isAllowed = TRUE; if (newState == oldState) return FALSE; switch (oldState) { case CONNECTION_CREATED: if (newState == CONNECTION_NETWORK_ALERTING || newState == CONNECTION_DISCONNECTED) { isAllowed = FALSE; } break; case CONNECTION_QUEUED: case CONNECTION_OFFERED: if (newState != CONNECTION_ALERTING && newState != CONNECTION_ESTABLISHED && newState != CONNECTION_DISCONNECTED && newState != CONNECTION_FAILED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_ALERTING: if (newState != CONNECTION_ESTABLISHED && newState != CONNECTION_DISCONNECTED && newState != CONNECTION_FAILED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_ESTABLISHED: if (newState != CONNECTION_DISCONNECTED && newState != CONNECTION_FAILED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_FAILED: if (newState != CONNECTION_DISCONNECTED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_DISCONNECTED: if (newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_INITIATED: if (newState != CONNECTION_DIALING && newState != CONNECTION_ESTABLISHED && newState != CONNECTION_DISCONNECTED && newState != CONNECTION_FAILED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_DIALING: if (newState != CONNECTION_ESTABLISHED && newState != CONNECTION_DISCONNECTED && newState != CONNECTION_FAILED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_NETWORK_REACHED: if (newState != CONNECTION_NETWORK_ALERTING && newState != CONNECTION_ESTABLISHED && newState != CONNECTION_DISCONNECTED && newState != CONNECTION_FAILED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; case CONNECTION_NETWORK_ALERTING: if (newState != CONNECTION_ESTABLISHED && newState != CONNECTION_DISCONNECTED && newState != CONNECTION_FAILED && newState != CONNECTION_UNKNOWN) { isAllowed = FALSE; } break; default: case CONNECTION_UNKNOWN: break; } return isAllowed;}/* //////////////////////////// PROTECTED ///////////////////////////////// */// protected constructor.//PtEvent::PtEvent(PtEventId eventId, PtEventCause cause)//{// mEventId = eventId;// mEventCause = cause;//}/* //////////////////////////// PRIVATE /////////////////////////////////// *//* ============================ FUNCTIONS ================================= */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?