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

📄 sipdiversion.cxx

📁 SIP(Session Initiation Protocol)是由IETF定义
💻 CXX
📖 第 1 页 / 共 2 页
字号:
    int retur = urlvalue.match(">", &avalue, true);    if (retur == NOT_FOUND)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in ParseUrl() :o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, PARSE_RURL_FAILED);        }    }    if (retur == FIRST)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in ParseUrl()  :o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, PARSE_RURL_FAILED);        }    }    if (retur == FOUND)    {        rurl = BaseUrl::decode(avalue);        Data te = urlvalue;        Data fik;        int rety = te.match(";", &fik, true);        if (rety == FOUND)        {        }        if (rety == FIRST)        {            parseTag(te);        }        if (rety == NOT_FOUND)        {        }    }}voidSipDiversion::parseToken(const Data& data){    int i = 0;    Data resdata;    Data edata = data;        while (i == 0)    {        resdata = isToken(edata);	        if ( resdata.operator!=(edata))        {            edata = resdata;        }        else        {            i = 1;        }    }    if (isReason(edata))    {        parseReason(edata);    }    else        if ( isCounter(edata))        {            parseCounter(edata);        }        else if ( isLimit(edata))        {            parseLimit(edata);        }}voidSipDiversion::parseTag( Data& data){    Data addrparm = data;    Data parm;    int ret = addrparm.match("=", &parm, true);    if (ret == NOT_FOUND)    {        // if addrparm != 0 exception    }    if (ret == FIRST)    {        //exception    }    if (ret == FOUND)    {        //parse tokens        //parse reason and rest of the stuff        if (!isEmpty(parm))        {            Data value;            if (parm == "tag")            {                Data parma;                int sret = addrparm.match(";", &parma, true);                if (sret == FOUND)                {                    setTag(parma);                    parseToken(addrparm);                }            }            else            {                parseToken(data);            }        }    }}voidSipDiversion::parseReason(const Data& data){    Data addrparm = data;    Data parm;    int ret = addrparm.match("=", &parm, true);    if (ret == NOT_FOUND)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in parseLimit:o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, LIMIT_ERR);        }    }    if (ret == FIRST)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in parseLimit :o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, LIMIT_ERR);        }    }    if (ret == FOUND)    {        Data te = addrparm;        Data fik;        int rety = te.match(";", &fik, true);        if (rety == FOUND)        {            setReason(fik);            if (isCounter(te))            {                parseCounter(te);            }            else if (isLimit(te))            {                parseLimit(te);            }	    // else { diversion extension }        }        if (rety == FIRST)        {            if (SipParserMode::sipParserMode())            {                cpLog(LOG_ERR, "Failed to Parse in parseLimit :o( ");                throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, LIMIT_ERR);            }        }        if (rety == NOT_FOUND)        {        }    }}voidSipDiversion::parseCounter(const Data& data){    Data addrparm = data;    Data parm;    int ret = addrparm.match("=", &parm, true);    if (ret == NOT_FOUND)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in parseCounter :o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, COUNT_FAILED);        }    }    if (ret == FIRST)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in parseCounter :o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, COUNT_FAILED);        }    }    if (ret == FOUND)    {        Data te = addrparm;        Data fik;        int rety = te.match(";", &fik, true);        if (rety == FOUND)        {            setCounter(fik);            if ( isLimit(te))            {                parseLimit(te);            }	    // else { diversion extension }        }        if (rety == FIRST)        {            if (SipParserMode::sipParserMode())            {                cpLog(LOG_ERR, "Failed to Decode in ParseCounter :o( ");                throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, COUNT_FAILED);            }        }        if (rety == NOT_FOUND)        {            if (isEmpty(fik))            {                setCounter(te);            }        }    }}voidSipDiversion::parseLimit(const Data& data){    Data addrparm = data;    Data parm;    int ret = addrparm.match("=", &parm, true);    if (ret == NOT_FOUND)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in parseReason:o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, LIMIT_ERR);        }    }    if (ret == FIRST)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Parse in parseReason :o( ");            throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, LIMIT_ERR);        }    }    if (ret == FOUND)    {        Data te = addrparm;        Data fik;        int rety = te.match(";", &fik, true);        if (rety == FOUND)        {	    //parse extension        }        if (rety == FIRST)        {            if (SipParserMode::sipParserMode())            {                cpLog(LOG_ERR, "Failed to Decode in ParseReason  :o( ");                throw SipDiversionParserException("failed in Decode", __FILE__, __LINE__, REASON_FAILED);            }        }        if (rety == NOT_FOUND)        {            setLimit(te);	    //parseextension        }    }}boolSipDiversion::operator< (const SipDiversion& src) const{    if ( //(host == src.host) &&        (rcounter < src.rcounter) &&        (rlimit < src.rlimit) &&        (rreason < src.rreason)    )    {        return true;    }    return false;}void SipDiversion::setTokenDetails(const Data& token, const Data& tokenValue){    tokenMap[token] = tokenValue;}Sptr < SipDiversion::TokenMapDiversion >SipDiversion::getTokenDetails(){    Sptr < SipDiversion::TokenMapDiversion > dmap = new TokenMapDiversion(tokenMap) ;    return dmap;}void SipDiversion::setTag(const Data& newtag){    tag = newtag;}Data SipDiversion::getTag() const{    return tag;}//is the string a token  or notData SipDiversion::isToken(const Data& sdata ){    Data vdata;    Data mdata("OVER");    Data ldata = sdata;    if ( ! isEmpty(ldata))    {        if ( isReason(ldata) == false)        {            if ( isCounter(ldata) == false)            {                if ( isLimit(ldata) == false)                {                    Data data = ldata;                    Data value;                    int retn = data.match("=", &value, true) ;                    if (retn == FOUND)                        //if (!isEmpty(&data))                    {                        Data dat;                        Data gdata = data;                        int ret = gdata.match(";", &dat, true) ;                        if ( ret == FOUND)                            //    if ((!isEmpty(&dat)) && (ret !=0))                        {                            tokenMap[value] = dat;                            return gdata;                        }                        else if (ret == NOT_FOUND)                        {                            tokenMap[value] = data;                            return vdata;                        }                        else if (ret == FIRST)                        {                        }                    }                    if ( retn == NOT_FOUND)                    {                        return ldata;                    }                }            }        }        return ldata;    }    return vdata;}bool SipDiversion::isCounter(const Data& sdata){    if ( ! isEmpty(sdata))    {        Data data = sdata;        Data value;        int retn = data.match("=", &value, true) ;        if (retn == FOUND)        {            if (value == "counter")            {                return true;            }            return false;        }    }    return false;}bool SipDiversion::isLimit(const Data& sdata){    if ( ! isEmpty(sdata))    {        Data data = sdata;        Data value;        int retn = data.match("=", &value, true) ;        if (retn == FOUND)        {            if (value == "limit")            {                return true;            }            return false;        }    }    return false;}bool SipDiversion::isReason(const Data& sdata){    if ( ! isEmpty(sdata))    {        Data data = sdata;        Data value;        int retn = data.match("=", &value, true) ;        if (retn == FOUND)        {            if (value == "reason")            {                 return true;            }            return false;        }    }    return false;}bool SipDiversion::isEmpty(const Data& sdata){    Data data = sdata;    if ( data.length() == 0)    {        return true;    }    return false;}void SipDiversion::print(){    TokenMapDiversion::iterator i = tokenMap.begin();    while (i != tokenMap.end())    {        Data token1 = i->first;        Data tokenValue1 = i->second;        cpLog(LOG_DEBUG_STACK, "token1: %s", token1.logData());        cpLog(LOG_DEBUG_STACK, "tokenValue1: %s", tokenValue1.logData());        ++i;    }}SipHeader*SipDiversion::duplicate() const{    return new SipDiversion(*this);}boolSipDiversion::compareSipHeader(SipHeader* msg) const{    SipDiversion* otherMsg = dynamic_cast<SipDiversion*>(msg);    if(otherMsg != 0)    {	return (*this == *otherMsg);    }    else    {	return false;    }}/* Local Variables: *//* c-file-style: "stroustrup" *//* indent-tabs-mode: nil *//* c-file-offsets: ((access-label . -) (inclass . ++)) *//* c-basic-offset: 4 *//* End: */

⌨️ 快捷键说明

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