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

📄 taoprovideradaptor.cpp

📁 基于sipfoundy 公司开发的sipx协议API
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//// Copyright (C) 2004, 2005 Pingtel Corp.// //// $$//////////////////////////////////////////////////////////////////////////////#include <assert.h>#ifdef TEST#include "utl/UtlMemCheck.h"#endif#ifdef __pingtel_on_posix__#include <stdlib.h>#endif#include "net/Url.h"#include "tao/TaoProviderAdaptor.h"#include "tao/TaoTransportTask.h"#include "tao/TaoString.h"#include "tao/TaoProviderListener.h"#include "ptapi/PtProvider.h"#include "cp/CallManager.h"#include "ps/PsPhoneTask.h"//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////TaoProviderAdaptor::TaoProviderAdaptor(CpCallManager *pCallMgr,                                                                           TaoTransportTask*& rpSvrTransport,                                                                           TaoMessage& rMsg,                                                                           const UtlString& name,                                                                           const int maxRequestQMsgs)        : TaoAdaptor("TaoProviderAdaptor-%d", maxRequestQMsgs),        mpCallMgrTask(pCallMgr),        mpMediaTask(NULL),        mpPhoneTask(NULL),        mpTimerTask(NULL){        mpSvrTransport = rpSvrTransport;        parseMessage(rMsg);        mpCallDb  = new TaoObjectMap();        mpCallCnt = new TaoReference();        mpProviderListenerDb  = new TaoObjectMap();        mpProviderListenerCnt = new TaoReference();        startAdaptor();}TaoProviderAdaptor::~TaoProviderAdaptor(){        mState = PtProvider::OUT_OF_SERVICE;        if (mpCallDb)        {                delete mpCallDb;                mpCallDb = 0;        }        if (mpCallDb)        {                delete mpCallDb;                mpCallDb = 0;        }        if (mpCallCnt)        {                delete mpCallCnt;                mpCallCnt = 0;        }        if (mpProviderListenerDb)        {                delete mpProviderListenerDb;                mpProviderListenerDb = 0;        }        if (mpProviderListenerCnt)        {                delete mpProviderListenerCnt;                mpProviderListenerCnt = 0;        }}void TaoProviderAdaptor::startAdaptor(){        if (!isStarted())        {                start();        }        mState = PtProvider::IN_SERVICE;}////////////////////////////////////////////////////////UtlBoolean TaoProviderAdaptor::handleMessage(OsMsg& rMsg){        UtlBoolean handled = FALSE;        switch (((TaoMessage&)rMsg).getCmd())        {        case TaoMessage::GET_PROVIDER:                if (TAO_SUCCESS == providerGetProvider((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::GET_ADDRESS:                if (TAO_SUCCESS == providerGetAddress((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::GET_ADDRESSES:                if (TAO_SUCCESS == providerGetAddresses((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::GET_TERMINAL:                if (TAO_SUCCESS == providerGetTerminal((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::CREATE_CALL:                if (TAO_SUCCESS == providerCreateCall((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::GET_TERMINALS:                if (TAO_SUCCESS == providerGetTerminals((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::GET_CALLS:                if (TAO_SUCCESS == providerGetCalls((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::GET_STATE:                if (TAO_SUCCESS == providerGetState((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::GET_PROVIDER_LISTENERS:                if (TAO_SUCCESS == providerGetProviderListeners((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::ADD_PROVIDER_LISTENER:                if (TAO_SUCCESS == providerAddProviderListener((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::REMOVE_PROVIDER_LISTENER:                if (TAO_SUCCESS == providerRemoveProviderListener((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::NUM_ADDRESSES:                if (TAO_SUCCESS == providerNumAddresses((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::NUM_TERMINALS:                if (TAO_SUCCESS == providerNumTerminals((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::NUM_CALLS:                if (TAO_SUCCESS == providerNumCalls((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::NUM_PROVIDER_LISTENERS:                if (TAO_SUCCESS == providerNumProviderListeners((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::SHUTDOWN:                if (TAO_SUCCESS == providerShutdown((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        case TaoMessage::CREATE_CALL_RESULT:                if (TAO_SUCCESS == getCreateCall((TaoMessage&)rMsg))                {                        handled = TRUE;                }                break;        default://         assert(FALSE);          break;        }        return handled;}TaoStatus TaoProviderAdaptor::providerGetProvider(TaoMessage& rMsg){        // UtlString argList = rMsg.getArgList();        int              argCnt = rMsg.getArgCnt();        if (argCnt != 2)                return TAO_FAILURE;        TaoString arg(rMsg.getArgList(), TAOMESSAGE_DELIMITER);        UtlString  login = arg[0];        UtlString  pass  = arg[1];        UtlString               value;        TaoObjHandle    clientSocket = rMsg.getSocket();        TaoMessage*             pMsg;        pMsg = new TaoMessage(TaoMessage::RESPONSE_PROVIDER,                                                                                TaoMessage::GET_PROVIDER,                                                                                rMsg.getMsgID(),                                                                                OS_SUCCESS,                                                                                clientSocket,                                                                                0,                                                                                "");        if (mpSvrTransport->postMessage(*pMsg))        {                delete pMsg;                return TAO_SUCCESS;        }        return TAO_FAILURE;}TaoStatus TaoProviderAdaptor::providerGetAddress(TaoMessage& rMsg){   int argCnt = rMsg.getArgCnt();   if (argCnt != 1)      return TAO_FAILURE;   UtlString value;   TaoObjHandle objId = TAO_FAILURE;   UtlString     strPhoneURL = rMsg.getArgList();   int iAvailableAddresses = 0 ;   int actual = 0;   int iMaxAddressesRequested = mpCallMgrTask->getNumLines();   UtlString** arrayAddresses = new UtlString*[iMaxAddressesRequested];   for (int j=0; j<iMaxAddressesRequested; j++)   {      arrayAddresses[j] = new UtlString("");   }   mpCallMgrTask->getOutboundAddresses(iMaxAddressesRequested,         iAvailableAddresses, arrayAddresses);   actual = ((iMaxAddressesRequested < iAvailableAddresses) ?            iMaxAddressesRequested : iAvailableAddresses);   if (actual > 0)   {                for (int i = 0; i < actual; i++)                {            Url identityUrl(*arrayAddresses[i]);            Url phoneURL(strPhoneURL);            UtlString strIdentity;            UtlString strPhone;            identityUrl.getUri(strIdentity);            phoneURL.getUri(strPhone);            if(strPhone.compareTo(strIdentity,UtlString::ignoreCase) == 0)            {               value = identityUrl.toString();               break;            }        }   }   if( arrayAddresses != NULL )   {      for (int i=0; i<iMaxAddressesRequested; i++)      {         delete arrayAddresses[i] ;         arrayAddresses[i] = NULL ;      }      delete[] arrayAddresses ;   }   TaoObjHandle clientSocket = rMsg.getSocket();   TaoMessage* pMsg = new TaoMessage(TaoMessage::RESPONSE_PROVIDER,                                                                         TaoMessage::GET_ADDRESS,                                                                         rMsg.getMsgID(),                                                                         (TaoObjHandle)objId,                                                                         clientSocket,                                                                         iAvailableAddresses,                                                                         value);   if (mpSvrTransport->postMessage(*pMsg))   {      delete pMsg;      return TAO_SUCCESS;   }   return TAO_FAILURE;}TaoStatus TaoProviderAdaptor::providerGetAddresses(TaoMessage& rMsg){   int  argCnt = rMsg.getArgCnt();        if (argCnt != 1)                return TAO_FAILURE;   UtlString argList;   int iAvailableAddresses = 0 ;   int actual = 0;   int iMaxAddressesRequested = mpCallMgrTask->getNumLines();   if( iMaxAddressesRequested == 0)      return TAO_FAILURE;   UtlString** arrayAddresses = new UtlString*[iMaxAddressesRequested];   for (int j=0; j<iMaxAddressesRequested; j++)   {      arrayAddresses[j] = new UtlString("");   }   mpCallMgrTask->getOutboundAddresses(iMaxAddressesRequested, iAvailableAddresses, arrayAddresses);   actual = ((iMaxAddressesRequested < iAvailableAddresses) ? iMaxAddressesRequested : iAvailableAddresses);   if (actual > 0)   {                for (int i = 0; i < actual; i++)                {            argList += *arrayAddresses[i] ;                        if (i < (actual - 1))                        {                                argList += TAOMESSAGE_DELIMITER;                        }                }        }   if( arrayAddresses != NULL )   {      for (int i=0; i<iMaxAddressesRequested; i++)      {         delete arrayAddresses[i] ;         arrayAddresses[i] = NULL ;      }      delete[] arrayAddresses ;   }        TaoObjHandle clientSocket = rMsg.getSocket();        TaoMessage*     pMsg = new TaoMessage(TaoMessage::RESPONSE_PROVIDER,                                                                        TaoMessage::GET_ADDRESSES,                                                                        rMsg.getMsgID(),                                                                        iAvailableAddresses,                                                                        clientSocket,                                                                        actual,                                                                        argList);        if (mpSvrTransport->postMessage(*pMsg))        {                delete pMsg;                return TAO_SUCCESS;        }        return TAO_FAILURE;}TaoStatus TaoProviderAdaptor::providerGetTerminal(TaoMessage& rMsg){        int     argCnt = rMsg.getArgCnt();        if (argCnt != 1)                return TAO_FAILURE;        TaoObjHandle objId = rMsg.getTaoObjHandle();        UtlString        name = rMsg.getArgList();        UtlString        value ="localterminal";        TaoObjHandle clientSocket = rMsg.getSocket();        TaoMessage*     pMsg = new TaoMessage(TaoMessage::RESPONSE_PROVIDER,                                                                        TaoMessage::GET_TERMINAL,                                                                        rMsg.getMsgID(),                                                                        objId,                                                                        clientSocket,                                                                        1,                                                                        value);        if (mpSvrTransport->postMessage(*pMsg))        {                delete pMsg;                return TAO_SUCCESS;        }        return TAO_FAILURE;}TaoStatus TaoProviderAdaptor::providerGetTerminals(TaoMessage& rMsg){        int     argCnt = rMsg.getArgCnt();

⌨️ 快捷键说明

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