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

📄 sipxtapiinternal.cpp

📁 基于sipfoundy 公司开发的sipx协议API
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    else if (toneId == ID_DTMF_FLASH)    {        xlateId = (TONE_ID)16;    }    else    {        sr = SIPX_RESULT_FAILURE;    }#else    if (toneId != ID_DTMF_FLASH)    {        xlateId = toneId;    }    else    {        sr = SIPX_RESULT_FAILURE;    }#endif /* VOICE_ENGINE */    return sr;}SIPXTAPI_API SIPX_RESULT sipxConfigVoicemailSubscribe(const SIPX_INST hInst,                                                      const char* szSubscribeURL){    OsSysLog::add(FAC_SIPXTAPI, PRI_INFO,        "sipxConfigVoicemailSubscribe hInst=%p URL=%s",        hInst, szSubscribeURL);    SIPX_RESULT rc = SIPX_RESULT_INVALID_ARGS;    SIPX_INSTANCE_DATA* pInst = (SIPX_INSTANCE_DATA*) hInst;    assert(pInst);    if (pInst)    {        assert(pInst->pRefreshManager);        assert(pInst->pLineManager);        assert(pInst->pSipUserAgent);        if (pInst->pRefreshManager && pInst->pLineManager && pInst->pSipUserAgent)        {            if (szSubscribeURL != NULL)            {                UtlString userId;                UtlString contactUri;                UtlString outboundLine;                Url subscribeUrl(szSubscribeURL);                subscribeUrl.getUserId(userId);                pInst->pLineManager->getDefaultOutboundLine(outboundLine);                // If the PHONESET_MSG_WAITING_SUBSCRIBE setting does                // not have a userid field specified, get the one                // from the default outbound line and use that                if( userId.isNull() )                {                    // get default outbound line from the line manager                    Url outbound(outboundLine);                    outbound.getUserId(userId);                    subscribeUrl.setUserId(userId);                }                // make sure we associate a user with the line                pInst->pSipUserAgent->getContactUri( &contactUri );                Url contactForLine ( contactUri );                contactForLine.setUserId( userId );                UtlString contactforLineStr = contactForLine.toString();                SipMessage* mwiSubscribeRequest = new SipMessage();                int sipSubscribePeriodSeconds;                // get the Subscribe Period from the RefreshManager                sipSubscribePeriodSeconds = pInst->pRefreshManager->getSubscribeTimeout();                mwiSubscribeRequest->setVoicemailData (                    outboundLine.data(),           // fromField                    outboundLine.data(),           // toField                    subscribeUrl.toString().data(),// uri                    contactforLineStr.data(),      // contactUrl                    NULL,                          // callId, do not set here                    1,                             // cseq                    sipSubscribePeriodSeconds);    // expiresInSeconds                // send the subscribe request to the refresh manager                pInst->pRefreshManager->newSubscribeMsg( *mwiSubscribeRequest );                rc = SIPX_RESULT_SUCCESS;            }        }    }    return rc;}UtlBoolean sipxCallSetRemoveInsteadofDrop(SIPX_CALL hCall) {    UtlBoolean bSuccess = FALSE ;    SIPX_CALL_DATA* pData = sipxCallLookup(hCall, SIPX_LOCK_WRITE);    if (pData)    {        pData->bRemoveInsteadOfDrop = TRUE ;                bSuccess = TRUE ;        sipxCallReleaseLock(pData, SIPX_LOCK_WRITE) ;    }    return bSuccess ;}UtlBoolean sipxCallIsRemoveInsteadOfDropSet(SIPX_CALL hCall){    UtlBoolean bShouldRemove = FALSE ;    SIPX_CALL_DATA* pData = sipxCallLookup(hCall, SIPX_LOCK_READ);    if (pData)    {        bShouldRemove = pData->bRemoveInsteadOfDrop ;                        sipxCallReleaseLock(pData, SIPX_LOCK_READ) ;    }    return bShouldRemove ;}void internalCallStateToString(SIPX_INTERNAL_CALLSTATE internalCallState, UtlString& stateString){    switch (internalCallState)    {    case SIPX_INTERNAL_CALLSTATE_UNKNOWN:        stateString = "SIPX_INTERNAL_CALLSTATE_UNKNOWN";        break;    case SIPX_INTERNAL_CALLSTATE_OUTBOUND_IDLE:        stateString = "SIPX_INTERNAL_CALLSTATE_OUTBOUND_IDLE";        break;    case SIPX_INTERNAL_CALLSTATE_OUTBOUND_ATTEMPT:        stateString = "SIPX_INTERNAL_CALLSTATE_OUTBOUND_ATTEMPT";        break;    case SIPX_INTERNAL_CALLSTATE_INBOUND_ATEMPT:        stateString = "SIPX_INTERNAL_CALLSTATE_INBOUND_ATEMPT";        break;    case SIPX_INTERNAL_CALLSTATE_CONNECTED:        stateString = "SIPX_INTERNAL_CALLSTATE_CONNECTED";        break;    case SIPX_INTERNAL_CALLSTATE_HELD:        stateString = "SIPX_INTERNAL_CALLSTATE_HELD";        break;    case SIPX_INTERNAL_CALLSTATE_BRIDGED:        stateString = "SIPX_INTERNAL_CALLSTATE_BRIDGED";        break;    case SIPX_INTERNAL_CALLSTATE_DISCONNECTED:        stateString = "SIPX_INTERNAL_CALLSTATE_DISCONNECTED";    default:        {            char numBuff[30];            sprintf(numBuff, "unknown(%d)", internalCallState);            stateString = numBuff;        }        break;    }}void conferenceHoldStateToString(CONF_HOLD_STATE holdState, UtlString& holdStateString){    switch(holdState)    {    case CONF_STATE_UNHELD:        holdStateString = "CONF_STATE_UNHELD";        break;    case CONF_STATE_BRIDGING_HOLD:        holdStateString = "CONF_STATE_BRIDGING_HOLD";        break;    case CONF_STATE_NON_BRIDGING_HOLD:        holdStateString = "CONF_STATE_NON_BRIDGING_HOLD";        break;    default:        {            char numBuff[30];            sprintf(numBuff, "unknown(%d)", holdState);            holdStateString = numBuff;        }        break;    }}SIPX_RESULT sipxCallDataToString(SIPX_CALL hCall, UtlString& serializedDump) {    SIPX_RESULT resultCode = SIPX_RESULT_FAILURE;    SIPX_CALL_DATA* pCallData = sipxCallLookup(hCall, SIPX_LOCK_READ);    if (pCallData)    {        SipxCallData_toString(pCallData, serializedDump);               resultCode = SIPX_RESULT_SUCCESS;        sipxCallReleaseLock(pCallData, SIPX_LOCK_READ);    }    return resultCode;}SIPX_RESULT sipxConfDataToString(SIPX_CONF hConf, UtlString& serializedDump){    SIPX_RESULT resultCode = SIPX_RESULT_FAILURE;    SIPX_CONF_DATA* pConfData = sipxConfLookup(hConf, SIPX_LOCK_READ);    if(pConfData)    {        SipxConfData_toString(pConfData, serializedDump);               resultCode = SIPX_RESULT_SUCCESS;        sipxConfReleaseLock(pConfData, SIPX_LOCK_READ);    }    return resultCode;}/* ============================ SIPX_CALL_DATA FUNCTIONS ================================= */// Would like to migrate SIPX_CALL_DATA to a full fledged class.  The following// are the beginnings of what should be methods for SIPX_CALL_DATA.void SipxCallData_toString(const SIPX_CALL_DATA* pCallData, UtlString& serializedDump){    if(pCallData)    {        char numBuff[20];        sprintf(numBuff, "%p", pCallData);        serializedDump = "SipxCallData(";        serializedDump.append(numBuff);        // callId        serializedDump.append(")\n{\n\tcallId=");        if(pCallData->callId)        {            serializedDump.append("\"");            serializedDump.append(*pCallData->callId);            serializedDump.append("\"");        }        else        {            serializedDump.append("<null>");        }        // sessionCallId        serializedDump.append("\n\tsessionCallId=");        if(pCallData->sessionCallId)        {            serializedDump.append("\"");            serializedDump.append(*pCallData->sessionCallId);            serializedDump.append("\"");        }        else        {            serializedDump.append("<null>");        }        // ghostCallId        serializedDump.append("\n\tghostCallId=");        if(pCallData->ghostCallId)        {            serializedDump.append("\"");            serializedDump.append(*pCallData->ghostCallId);            serializedDump.append("\"");        }        else        {            serializedDump.append("<null>");        }        // remoteAddress        serializedDump.append("\n\tremoteAddress=");        if(pCallData->remoteAddress)        {            serializedDump.append("\"");            serializedDump.append(*pCallData->remoteAddress);            serializedDump.append("\"");        }        else        {            serializedDump.append("<null>");        }        // lineURI        serializedDump.append("\n\tlineURI=");        if(pCallData->lineURI)        {            serializedDump.append("\"");            serializedDump.append(*pCallData->lineURI);            serializedDump.append("\"");        }        else        {            serializedDump.append("<null>");        }        // hLine        serializedDump.append("\n\thLine=");        sprintf(numBuff, "%d", pCallData->hLine);        serializedDump.append(numBuff);        // pInst        serializedDump.append("\n\tpInst=");        sprintf(numBuff, "%p", pCallData->pInst);        serializedDump.append(numBuff);        // pMutex        serializedDump.append("\n\tpMutex=");        sprintf(numBuff, "%p", pCallData->pMutex);        serializedDump.append(numBuff);        // hConf        serializedDump.append("\n\thConf=");        sprintf(numBuff, "%d", pCallData->hConf);        serializedDump.append(numBuff);        // display        serializedDump.append("\n\tdisplay=");        sprintf(numBuff, "%p", pCallData->display);        serializedDump.append(numBuff);        // bRemoveInsteadOfDrop        serializedDump.append("\n\tbRemoveInsteadOfDrop=");        if(pCallData->bRemoveInsteadOfDrop == TRUE)        {            serializedDump.append("TRUE");        }        else if(pCallData->bRemoveInsteadOfDrop == FALSE)        {            serializedDump.append("FALSE");        }        else        {            sprintf(numBuff, "%p", pCallData->bRemoveInsteadOfDrop);            serializedDump.append(numBuff);        }        // lastCallstateEvent        serializedDump.append("\n\tlastCallstateEvent=");        //serializedDump.append(MajorEventToString((SIPX_CALLSTATE_MAJOR)pCallData->lastCallstateEvent));        // cannot currently call string method as it is static.  So do it the        // crude way for now        sprintf(numBuff, "%d", pCallData->lastCallstateEvent);        serializedDump.append(numBuff);        // lastCallstateCause        serializedDump.append("\n\tlastCallstateCause=");        //serializedDump.append(MinorEventToString((SIPX_CALLSTATE_MINOR)pCallData->lastCallstateCause));        // cannot currently call string method as it is static.  So do it the        // crude way for now        sprintf(numBuff, "%d", pCallData->lastCallstateCause);        serializedDump.append(numBuff);        // state        serializedDump.append("\n\tstate=");        UtlString stateString;        internalCallStateToString(pCallData->state, stateString);        serializedDump.append(stateString);        // bInFocus        serializedDump.append("\n\tbInFocus=");        if(pCallData->bInFocus == TRUE)        {            serializedDump.append("TRUE");        }        else if(pCallData->bInFocus == FALSE)        {            serializedDump.append("FALSE");        }        else        {            sprintf(numBuff, "%p", pCallData->bInFocus);            serializedDump.append(numBuff);        }        serializedDump.append("\n}");    }    else    {        serializedDump = "SipxCallData(null)";    }}/* ============================ SIPX_CONF_DATA FUNCTIONS ================================= */// Would like to migrate SIPX_CONF_DATA to a full fledged class.  The following// are the beginnings of what should be methods for SIPX_CONF_DATA.void SipxConfData_toString(const SIPX_CONF_DATA* pConfData, UtlString& serializedDump){    if(pConfData)    {        char numBuff[20];        sprintf(numBuff, "%p", pConfData);        serializedDump = "SipxConfData(";        serializedDump.append(numBuff);        // callId        serializedDump.append(")\n{\n\tstrCallId=");        if(pConfData->strCallId)        {            serializedDump.append("\"");            serializedDump.append(*pConfData->strCallId);            serializedDump.append("\"");        }        else        {            serializedDump.append("<null>");        }        // pInst        serializedDump.append("\n\tpInst=");        sprintf(numBuff, "%p", pConfData->pInst);        serializedDump.append(numBuff);        // nCalls        serializedDump.append("\n\tnCalls=");        sprintf(numBuff, "%d", pConfData->nCalls);        serializedDump.append(numBuff);        // hCalls        serializedDump.append("\n\thCalls={");        for(unsigned int callIndex = 0; callIndex < pConfData->nCalls; callIndex++)        {            if(callIndex > 0)            {                serializedDump.append(", ");            }            sprintf(numBuff, "%d", pConfData->hCalls[callIndex]);            serializedDump.append(numBuff);        }        serializedDump.append("}");        // confHoldState        UtlString holdStateString;        conferenceHoldStateToString(pConfData->confHoldState, holdStateString);        serializedDump.append("\n\tconfHoldState=");        serializedDump.append(holdStateString);        // pMutex        serializedDump.append("\n\tpMutex=");        sprintf(numBuff, "%p", pConfData->pMutex);        serializedDump.append(numBuff);        serializedDump.append("\n}");    }    else    {        serializedDump = "SipxCallData(null)";    }}

⌨️ 快捷键说明

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