📄 sipreferredby.cxx
字号:
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 + -