⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 presencedialinserver.cpp

📁 基于sipfoundy 公司开发的sipx协议API
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// // // Copyright (C) 2005 SIPfoundry Inc.// Licensed by SIPfoundry under the LGPL license.// // Copyright (C) 2005 Pingtel Corp.// Licensed to SIPfoundry under a Contributor Agreement.// // $$////////////////////////////////////////////////////////////////////////////// SYSTEM INCLUDES// APPLICATION INCLUDES#include <cp/PresenceDialInServer.h>#include <utl/UtlHashMapIterator.h>#include <utl/UtlVoidPtr.h>#include <tao/TaoMessage.h>#include <tao/TaoString.h>#include <cp/CallManager.h>#include <net/SipDialog.h>#include <os/OsFS.h>#include <xmlparser/tinyxml.h>#include <os/OsDateTime.h>#include <os/OsTimer.h>#include <os/OsEventMsg.h>#include "ConfirmationTone.h"#include "DialTone.h"#include "BusyTone.h"// EXTERNAL FUNCTIONS// EXTERNAL VARIABLES// CONSTANTS#define TAO_OFFER_PARAM_CALLID             0#define TAO_OFFER_PARAM_ADDRESS            2#define TAO_OFFER_PARAM_LOCAL_CONNECTION   6#define SECONDS_DELAY 1#define CONFIG_SETTING_SIGN_IN_CODE        "SIP_PRESENCE_SIGN_IN_CODE"#define CONFIG_SETTING_SIGN_OUT_CODE       "SIP_PRESENCE_SIGN_OUT_CODE"#define CONFIG_SETTING_SIGN_IN_AUDIO       "SIP_PRESENCE_SIGN_IN_CONFIRMATION_AUDIO"#define CONFIG_SETTING_SIGN_OUT_AUDIO      "SIP_PRESENCE_SIGN_OUT_CONFIRMATION_AUDIO"#define CONFIG_SETTING_ERROR_AUDIO         "SIP_PRESENCE_ERROR_AUDIO"//#define DEBUGGING 1// STATIC VARIABLE INITIALIZATIONS// Private class to contain an incoming call for given callIdclass CallContainer : public UtlString{public:    CallContainer(UtlString& callId, UtlString& address, OsMsgQ* incomingQ);    virtual ~CallContainer();    // parent UtlString contains the resourceId and eventTypeKey    UtlString mCallId;    UtlString mAddress;    OsQueuedEvent* mQueuedEvent;    OsTimer* mTimer;private:    //! DISALLOWED accendental copying    CallContainer(const CallContainer& rCallContainer);    CallContainer& operator=(const CallContainer& rhs);};CallContainer::CallContainer(UtlString& callId, UtlString& address, OsMsgQ* incomingQ){   mCallId = callId;   mAddress = address;      mQueuedEvent = new OsQueuedEvent(*incomingQ, (int)this);   mTimer = new OsTimer(*mQueuedEvent);}CallContainer::~CallContainer(){   if (mQueuedEvent)   {      delete mQueuedEvent;   }      if (mTimer)   {      delete mTimer;   }}/* //////////////////////////// PUBLIC //////////////////////////////////// *//* ============================ CREATORS ================================== */// ConstructorPresenceDialInServer::PresenceDialInServer(CallManager* callManager,                                           OsConfigDb* configFile)   : mLock(OsBSem::Q_PRIORITY, OsBSem::FULL){   mpCallManager = callManager;   if (configFile->get(CONFIG_SETTING_SIGN_IN_CODE, mSignInFC) != OS_SUCCESS)   {      mSignInFC  = DEFAULT_SIGNIN_FEATURE_CODE;   }   if (configFile->get(CONFIG_SETTING_SIGN_OUT_CODE, mSignOutFC) != OS_SUCCESS)   {      mSignOutFC = DEFAULT_SIGNOUT_FEATURE_CODE;   }   if (configFile->get(CONFIG_SETTING_SIGN_IN_AUDIO, mSignInConfirmationAudio) != OS_SUCCESS)   {      mSignInConfirmationAudio = NULL;   }   if (configFile->get(CONFIG_SETTING_SIGN_OUT_AUDIO, mSignOutConfirmationAudio) != OS_SUCCESS)   {      mSignOutConfirmationAudio = NULL;   }   if (configFile->get(CONFIG_SETTING_ERROR_AUDIO, mErrorAudio) != OS_SUCCESS)   {      mErrorAudio = NULL;   }   OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: configuration for PresenceDialIn:");    OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: signInFeatureCode = %s", mSignInFC.data());    OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: signOutFeatureCode = %s", mSignOutFC.data());    OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: signInConfirmationAudio = %s",                 (mSignInConfirmationAudio == NULL ? "confirmation tone" : mSignInConfirmationAudio.data()));    OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: signOutConfirmationAudio = %s",                 (mSignOutConfirmationAudio == NULL ? "dial tone" : mSignOutConfirmationAudio.data()));    OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: errorAudio = %s",                 (mErrorAudio == NULL ? "busy tone" : mErrorAudio.data()));       mpIncomingQ = getMessageQueue();   }//DestructorPresenceDialInServer::~PresenceDialInServer(){   if (!mStateChangeNotifiers.isEmpty())   {      mStateChangeNotifiers.destroyAll();   }  }/* ============================ MANIPULATORS ============================== */UtlBoolean PresenceDialInServer::handleMessage(OsMsg& rMsg){   SipDialog sipDialog;   UtlString sipDialogContent;   Url requestUrl;   UtlString entity;   UtlString featureCode;   Url contactUrl;   UtlString contact;       int msgType = rMsg.getMsgType();    int msgSubType = rMsg.getMsgSubType();   // React to telephony events   if(msgSubType == TaoMessage::EVENT)   {      TaoMessage* taoMessage = dynamic_cast <TaoMessage*> (&rMsg);      int taoEventId = taoMessage->getTaoObjHandle();      UtlString argList(taoMessage->getArgList());      TaoString arg(argList, TAOMESSAGE_DELIMITER);#ifdef DEBUGGING      dumpTaoMessageArgs(taoEventId, arg) ;#endif              UtlBoolean localConnection = atoi(arg[TAO_OFFER_PARAM_LOCAL_CONNECTION]);      UtlString  callId = arg[TAO_OFFER_PARAM_CALLID] ;      UtlString  address = arg[TAO_OFFER_PARAM_ADDRESS] ;      switch (taoEventId)       {         case PtEvent::CONNECTION_OFFERED:            mpCallManager->acceptConnection(callId, address);            mpCallManager->answerTerminalConnection(callId, address, "*");            mpCallManager->getSipDialog(callId, address, sipDialog);#ifdef DEBUGGING                        sipDialog.toString(sipDialogContent);            OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: sipDialog = %s",                           sipDialogContent.data());#endif                        sipDialog.getRemoteRequestUri(entity);                        OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: Call arrived: callId %s address %s requestUrl %s",                           callId.data(), address.data(), entity.data());            if (entity.isNull())            {               OsSysLog::add(FAC_SIP, PRI_WARNING, "PresenceDialInServer:: Call arrived: callId %s address %s without requestUrl",                              callId.data(), address.data());            }            break;         case PtEvent::CONNECTION_ESTABLISHED:            if (localConnection)             {               mpCallManager->getSipDialog(callId, address, sipDialog);#ifdef DEBUGGING                           sipDialog.toString(sipDialogContent);               OsSysLog::add(FAC_SIP, PRI_DEBUG, "PresenceDialInServer:: sipDialog = %s",                              sipDialogContent.data());#endif                           sipDialog.getRemoteRequestUri(entity);               OsSysLog::add(FAC_SIP, PRI_DEBUG, "Call connected: callId %s address %s with request %s",                             callId.data(), address.data(), entity.data());               if (entity.isNull())               {                  OsSysLog::add(FAC_SIP, PRI_WARNING, "PresenceDialInServer:: Call connected: callId %s address %s without requestUrl", 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -