ptcall.cpp
来自「基于sipfoundy 公司开发的sipx协议API」· C++ 代码 · 共 1,686 行 · 第 1/4 页
CPP
1,686 行
TaoString params(arg, TAOMESSAGE_DELIMITER); int cnt = params.getCnt(); rc = (PtStatus)atoi(params[2]); if (cnt >= 2 && rc == PT_SUCCESS) { rSrcConnection = PtConnection(mpClient, params[0], mCallId.data()); rDstConnection = PtConnection(mpClient, params[1], mCallId.data()); } EVENT_TRACE("Exiting PtCall::consult:\n") ; return rc;}PtStatus PtCall::drop(){ EVENT_TRACE("Entering PtCall::drop:\n") ; unsigned int transactionId = mpTransactionCnt->add(); OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::DROP, transactionId, 0, (TaoObjHandle)pe, 1, mCallId); mpClient->sendRequest(msg); int rc; if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; } pe->getEventData((int &)rc);#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::DROP);#endif mpEventMgr->release(pe); mState = INVALID; EVENT_TRACE("Exiting PtCall::drop:\n") ; return PT_SUCCESS;}// Sets the CPU codec limit for this call.PtStatus PtCall::setCodecCPULimit(const int limit, const UtlBoolean bAutoRenegotiate){ EVENT_TRACE("Entering PtCall::setCodecCPULimit:\n") ; unsigned int transactionId = mpTransactionCnt->add(); char buff[MAXIMUM_INTEGER_STRING_LENGTH]; UtlString arg(mCallId) ; // Add Limit arg += TAOMESSAGE_DELIMITER ; sprintf(buff, "%d", limit) ; arg += buff ; // Add Auto Renegotiate arg += TAOMESSAGE_DELIMITER ; sprintf(buff, "%d", bAutoRenegotiate) ; arg += buff ; OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::SET_CODEC_CPU_LIMIT, transactionId, 0, (TaoObjHandle)pe, 3, arg); mpClient->sendRequest(msg); if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; }#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::SET_CODEC_CPU_LIMIT);#endif mpEventMgr->release(pe); EVENT_TRACE("Exiting PtCall::setCodecCPULimit:\n") ; return PT_SUCCESS;}// Forces the renegotation of all connections for this call.PtStatus PtCall::forceCodecRenegotiation(){ EVENT_TRACE("Entering PtCall::forceCodecRenegotiation:\n") ; unsigned int transactionId = mpTransactionCnt->add(); OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::CODEC_RENEGOTIATE, transactionId, 0, (TaoObjHandle)pe, 1, mCallId); mpClient->sendRequest(msg); if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; }#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::CODEC_RENEGOTIATE);#endif mpEventMgr->release(pe); EVENT_TRACE("Exiting PtCall::forceCodecRenegotiation:\n") ; return PT_SUCCESS;}/* ============================ ACCESSORS ================================= */PtStatus PtCall::getCallListeners(PtCallListener* callListeners[], int size, int& rNumItems){ EVENT_TRACE("Entering PtCall::getCallListeners:\n") ; char buff[MAXIMUM_INTEGER_STRING_LENGTH]; sprintf(buff, "%d", size); UtlString arg(buff); arg += TAOMESSAGE_DELIMITER + mCallId; unsigned int transactionId = mpTransactionCnt->add(); OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::GET_CALL_LISTENERS, transactionId, 0, (TaoObjHandle)pe, 2, arg); mpClient->sendRequest(msg); int rc; if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; } pe->getEventData((int &)rc);#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::GET_CALL_LISTENERS);#endif mpEventMgr->release(pe); EVENT_TRACE("Exiting PtCall::getCallListeners:\n") ; return PT_SUCCESS;}PtStatus PtCall::getCalledAddress(PtAddress& rAddress){ EVENT_TRACE("Entering PtCall::getCalledAddress:\n") ; unsigned int transactionId = mpTransactionCnt->add(); OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::GET_CALLED_ADDRESS, transactionId, 0, (TaoObjHandle)pe, 1, mCallId); mpClient->sendRequest(msg); if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; } UtlString arg; pe->getStringData(arg);#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::GET_CALLED_ADDRESS);#endif mpEventMgr->release(pe); TaoString addresses(arg, TAOMESSAGE_DELIMITER); UtlString address; PtStatus rc = PT_SUCCESS; int cnt = atoi(addresses[0]); if (cnt > 2) { address = addresses[2]; rAddress = PtAddress(mpClient, address.data()); } else { rc = PT_NO_MORE_DATA; } EVENT_TRACE("Exiting PtCall::getCalledAddress:\n") ; return rc;}PtStatus PtCall::getCallingAddress(PtAddress& rAddress){ EVENT_TRACE("Entering PtCall::getCallingAddress:\n") ; unsigned int transactionId = mpTransactionCnt->add(); OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::GET_CALLING_ADDRESS, transactionId, 0, (TaoObjHandle)pe, 1, mCallId); mpClient->sendRequest(msg); if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; } UtlString arg; pe->getStringData(arg);#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::GET_CALLING_ADDRESS);#endif mpEventMgr->release(pe); TaoString addresses(arg, TAOMESSAGE_DELIMITER); UtlString address; PtStatus rc = PT_SUCCESS; int cnt = atoi(addresses[0]); if (cnt > 2) { address = addresses[2]; rAddress = PtAddress(mpClient, address.data()); } else { rc = PT_NO_MORE_DATA; } EVENT_TRACE("Exiting PtCall::getCallingAddress:\n") ; return rc;}PtStatus PtCall::getCallingTerminal(PtTerminal& rTerminal){ EVENT_TRACE("Entering PtCall::getCallingTerminal:\n") ; unsigned int transactionId = mpTransactionCnt->add(); UtlString terminalName; OsSocket::getHostIp(&terminalName); terminalName += TAOMESSAGE_DELIMITER + mCallId; OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::GET_CALLING_TERMINAL, transactionId, 0, (TaoObjHandle)pe, 2, terminalName); mpClient->sendRequest(msg); if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; } UtlString arg; pe->getStringData(arg);#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::GET_CALLING_TERMINAL);#endif mpEventMgr->release(pe); TaoString addresses(arg, TAOMESSAGE_DELIMITER); UtlString address; PtStatus rc = PT_SUCCESS; int cnt = addresses.getCnt(); if (cnt > 2) { address = addresses[2]; rTerminal = PtTerminal(address.data(), mpClient); } else { rc = PT_NO_MORE_DATA; } EVENT_TRACE("Entering PtCall::getCallingTerminal\n") ; return rc;}PtStatus PtCall::getConferenceController(PtTerminalConnection& rController){ EVENT_TRACE("Entering PtCall::getConferenceController:\n") ; if (mpConfController) rController = PtTerminalConnection(*mpConfController); else return PT_NO_MORE_DATA; unsigned int transactionId = mpTransactionCnt->add(); OsProtectedEvent *pe = mpEventMgr->alloc(); TaoMessage msg(TaoMessage::REQUEST_CALL, TaoMessage::GET_CONF_CONTROLLER, transactionId, 0, (TaoObjHandle)pe, 1, mCallId); mpClient->sendRequest(msg); int rc; if (OS_SUCCESS != pe->wait(msg.getCmd(), mTimeOut)) { mpClient->resetConnectionSocket(msg.getMsgID()); // If the event has already been signalled, clean up if(OS_ALREADY_SIGNALED == pe->signal(0)) { mpEventMgr->release(pe); } return PT_BUSY; } pe->getEventData((int &)rc);#ifdef PTAPI_TEST int cmd; pe->getIntData2(cmd); assert(cmd == TaoMessage::GET_CONF_CONTROLLER);#endif mpEventMgr->release(pe); EVENT_TRACE("Exiting PtCall::getConferenceController:\n") ; return PT_SUCCESS;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?