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

📄 sipreferredby.cxx

📁 SIP(Session Initiation Protocol)是由IETF定义
💻 CXX
📖 第 1 页 / 共 2 页
字号:
        palsostr += ":";        palsostr += alsostr;        // parse(palsostr);	// AmyS - 05/16/02. Parse w/o Referred-By in the str.        parse(alsostr);    }    catch (SipReferredByParserException exception)    {        if (SipParserMode::sipParserMode())        {            cpLog(LOG_ERR, "Failed to Decode in decode() :o( ");            throw SipReferredByParserException("failed in Decode", __FILE__, __LINE__, DECODE_REFERREDBY_FAILED);        }    }}SipReferredBy& SipReferredBy::operator = (const SipReferredBy& srcReferredBy){    if ( &srcReferredBy != this )    {        referrerUrl = duplicateUrl(srcReferredBy.referrerUrl);	urlType = srcReferredBy.urlType;        referencedUrl = srcReferredBy.referencedUrl;        address = srcReferredBy.address;        displayName = srcReferredBy.displayName;    }    return (*this);}bool SipReferredBy::operator ==(const SipReferredBy& src) const{    cpLog(LOG_DEBUG_STACK, "SipReferredBy ::operator ==");    bool equal = false;    if ( (referrerUrl.getPtr() != 0) && (src.referrerUrl.getPtr() != 0) )    {	equal = ( referrerUrl->areEqual(src.referrerUrl) );    }    else if ( (referrerUrl.getPtr() == 0) && (src.referrerUrl.getPtr() == 0) )    {	equal = true;    }    else    {	equal = false;    }        equal = ( (equal)  &&	 (referencedUrl == src.referencedUrl) &&	 (address == src.address) &&	 (displayName == src.displayName )	);    return equal;}Data SipReferredBy::encode() const{    Data sipreferredby;    sipreferredby = REFERRED_BY;    sipreferredby += ":";    sipreferredby += SP;    if (displayName.length() > 0)    {        sipreferredby += displayName;    }    if (referrerUrl.getPtr() != 0)    {	if (referrerUrl->getType() == SIP_URL)	{	    Sptr<SipUrl> sipUrl;            sipUrl.dynamicCast(referrerUrl);    	    if (sipUrl->getHost().length() == 0)	    {		sipreferredby += referencedUrl;		if ( referencedUrl == "sip")		{		    sipreferredby += Data(":");		}		else		{		    sipreferredby += Data("://");		}		sipreferredby += address;		sipreferredby += CRLF;	    }	    else	    {		sipreferredby += "<";		sipUrl->encode();				//get before the url param.		Data nameaddr = sipUrl->getNameAddr();				sipreferredby += nameaddr;				Data userparam = sipUrl->getUrlParam();				if (userparam.length())		{		    sipreferredby += userparam;		}				sipreferredby += ">";		//TODO: clean this up#if 0		sipreferredby += SP;				sipreferredby += referencedUrl;		if ( referencedUrl == "sip")		{		    sipreferredby += Data(":");		}		else		{		    sipreferredby += Data("://");		}				sipreferredby += address;#endif				if (pgpMap.size() != 0)		{		    // support pgp		    sipreferredby += SP;		    		    sipreferredby += authScheme;		    sipreferredby += SP;			    		    		    tokenMutex.lock();		    ReferredByPgpMap::const_iterator i = pgpMap.begin();		    while (i != pgpMap.end())		    {			Data token = i->first;			Data tokenValue = i->second;			sipreferredby += token;			sipreferredby += "=";			sipreferredby += "\"";			sipreferredby += tokenValue;			sipreferredby += "\"";						++i;			if ( i != pgpMap.end())			{			    sipreferredby += ",";			}		    }  //end while		    tokenMutex.unlock();		}				sipreferredby += CRLF;	    }	}    }    return sipreferredby;}Sptr <BaseUrl> SipReferredBy::getReferrerUrl() const{    return duplicateUrl(referrerUrl, true) ;}Data SipReferredBy::getReferencedUrl() const{    Data data;    data += address;    if ( address == "sip")    {        data += Data(":");    }    else    {        data += Data("://");    }    data += referencedUrl;    return data;}void SipReferredBy::setReferrerUrl(Sptr <BaseUrl> sipurl){    referrerUrl = duplicateUrl(sipurl);}        void SipReferredBy::setReferencedUrl(const Data& data){    Data sdata = data;    Data urldata;    int retn = sdata.match("://", &urldata, true);    if (retn == FOUND)    {        referencedUrl = urldata;        address = sdata;    }    if ( retn == NOT_FOUND)    {        Data urdata;        int ret = sdata.match(":", &urdata, true);        if ( ret == FOUND)        {            referencedUrl = urdata;            address = sdata;        }    }}///void SipReferredBy::setTokenDetails(const Data& token,                                    const Data& tokenValue){    tokenMutex.lock();    pgpMap[token] = tokenValue;    tokenMutex.unlock();}///Sptr < SipReferredBy::ReferredByPgpMap >SipReferredBy::getTokenDetails(){    tokenMutex.lock();    Sptr < SipReferredBy::ReferredByPgpMap > dupMap = new ReferredByPgpMap(pgpMap);    tokenMutex.unlock();    return dupMap;}/*  void SipReferredBy::setBasicCookie(const Data& data)  {  basicCookie = data;  }      Data  SipReferredBy::getBasicCookie()  {  return basicCookie;  }      */Data SipReferredBy::getTokenValue(const Data& token){    Data ret;    tokenMutex.lock();    ReferredByPgpMap::iterator check = pgpMap.find(token); ;    if (check != pgpMap.end())    {        ret = check -> second;    }    tokenMutex.unlock();    return ret;}voidSipReferredBy::scanAuthTokens( const Data& data){    Data authTokens = data;    while (authTokens.length())    {        Data token, tokenValue;        int ret = authTokens.match("=", &token, true);        if (ret == NOT_FOUND)        {            if (SipParserMode::sipParserMode())            {                throw SipReferredByParserException(                    "no tokens or challenge",                    __FILE__,                    __LINE__,                    DECODE_REFERREDBY_FAILED);            }        }        else if (ret == FIRST)        {            if (SipParserMode::sipParserMode())            {                throw SipReferredByParserException(                    "wrong syntax for token.",                    __FILE__,                    __LINE__,                    DECODE_REFERREDBY_FAILED);            }        }        else        {            //found.            //match the token value.            int ret = authTokens.match(",", &tokenValue, true);            if (ret == FOUND)            {                //strip "" off this.                string tokenstr = tokenValue.convertString();                int pos;                pos = tokenstr.find("\"");                if (pos != (int)(string::npos))                {                    tokenstr = tokenstr.substr(pos + 1, tokenstr.length() - 2);                }                pgpMap[token] = tokenstr;            }            else if (ret == NOT_FOUND)            {                //add it to map                //strip "" off this.                string tokenstr = authTokens.convertString();                int pos;                pos = tokenstr.find("\"");                if (pos != (int)(string::npos))                {                    tokenstr = tokenstr.substr(pos + 1, tokenstr.length() - 2);                }                Data tmp = tokenstr;                Data svalue;                int retur = tmp.match("\"", &svalue, true);                if (retur == FOUND)                {                    pgpMap[token] = svalue;                }                else                {                    pgpMap[token] = tokenstr;                }                break;            }            else if (ret == FIRST)            {                if (SipParserMode::sipParserMode())                {                    throw SipReferredByParserException(                        "wrong syntax for token.",                        __FILE__,                        __LINE__,                        DECODE_REFERREDBY_FAILED);                }            }        }//else    }//endwhile}SipHeader*SipReferredBy::duplicate() const{    return new SipReferredBy(*this);}boolSipReferredBy::compareSipHeader(SipHeader* msg) const{    SipReferredBy* otherMsg = dynamic_cast<SipReferredBy*>(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 + -