📄 parsercategory.cxx
字号:
if ((*it)->getType() == type) { return *it; } } return 0;}voidParserCategory::setParameter(const Parameter* parameter){ assert(parameter); for (ParameterList::iterator it = mParameters.begin(); it != mParameters.end(); it++) { if ((*it)->getType() == parameter->getType()) { delete *it; mParameters.erase(it); mParameters.push_back(parameter->clone()); return; } } // !dlb! kinda hacky -- what is the correct semantics here? // should be quietly add, quietly do nothing, throw? mParameters.push_back(parameter->clone());}void ParserCategory::removeParameterByEnum(ParameterTypes::Type type){ // remove all instances for (ParameterList::iterator it = mParameters.begin(); it != mParameters.end();) { if ((*it)->getType() == type) { delete *it; it = mParameters.erase(it); } else { ++it; } } }Parameter* ParserCategory::getParameterByData(const Data& data) const{ for (ParameterList::iterator it = mUnknownParameters.begin(); it != mUnknownParameters.end(); it++) { if (isEqualNoCase((*it)->getName(), data)) { return *it; } } return 0;}void ParserCategory::removeParameterByData(const Data& data){ // remove all instances for (ParameterList::iterator it = mUnknownParameters.begin(); it != mUnknownParameters.end();) { if ((*it)->getName() == data) { delete *it; it = mUnknownParameters.erase(it); } else { ++it; } }}#define defineParam(_enum, _name, _type, _RFC_ref_ignored) \_enum##_Param::DType& \ParserCategory::param(const _enum##_Param& paramType) \{ \ checkParsed(); \ _enum##_Param::Type* p = \ static_cast<_enum##_Param::Type*>(getParameterByEnum(paramType.getTypeNum())); \ if (!p) \ { \ p = new _enum##_Param::Type(paramType.getTypeNum()); \ mParameters.push_back(p); \ } \ return p->value(); \} \ \const _enum##_Param::DType& \ParserCategory::param(const _enum##_Param& paramType) const \{ \ checkParsed(); \ _enum##_Param::Type* p = \ static_cast<_enum##_Param::Type*>(getParameterByEnum(paramType.getTypeNum())); \ if (!p) \ { \ InfoLog(<< "Missing parameter " _name " " << ParameterTypes::ParameterNames[paramType.getTypeNum()]); \ DebugLog(<< *this); \ throw Exception("Missing parameter " _name, __FILE__, __LINE__); \ } \ return p->value(); \}defineParam(data, "data", ExistsParameter, "callee-caps");defineParam(control, "control", ExistsParameter, "callee-caps");defineParam(mobility, "mobility", QuotedDataParameter, "callee-caps"); // mobile|fixeddefineParam(description, "description", QuotedDataParameter, "callee-caps"); // <> quoteddefineParam(events, "events", QuotedDataParameter, "callee-caps"); // listdefineParam(priority, "priority", QuotedDataParameter, "callee-caps"); // non-urgent|normal|urgent|emergencydefineParam(methods, "methods", QuotedDataParameter, "callee-caps"); // listdefineParam(schemes, "schemes", QuotedDataParameter, "callee-caps"); // listdefineParam(application, "application", ExistsParameter, "callee-caps");defineParam(video, "video", ExistsParameter, "callee-caps");defineParam(language, "language", QuotedDataParameter, "callee-caps"); // listdefineParam(type, "type", QuotedDataParameter, "callee-caps"); // listdefineParam(isFocus, "isfocus", ExistsParameter, "callee-caps");defineParam(actor, "actor", QuotedDataParameter, "callee-caps"); // principal|msg-taker|attendant|informationdefineParam(text, "text", ExistsParameter, "callee-caps");defineParam(extensions, "extensions", QuotedDataParameter, "callee-caps"); //listdefineParam(Instance, "+sip.instance", QuotedDataParameter, "gruu"); // <> quoteddefineParam(regid, "reg-id", UInt32Parameter, "outbound");defineParam(ob,"ob",ExistsParameter,"outbound-05");defineParam(gruu, "gruu", QuotedDataParameter, "gruu");defineParam(accessType, "access-type", DataParameter, "RFC 2046");defineParam(algorithm, "algorithm", DataParameter, "RFC ????");defineParam(boundary, "boundary", DataParameter, "RFC 2046");defineParam(branch, "branch", BranchParameter, "RFC ????");defineParam(charset, "charset", DataParameter, "RFC 2045");defineParam(cnonce, "cnonce", QuotedDataParameter, "RFC ????");defineParam(comp, "comp", DataParameter, "RFC ????");defineParam(dAlg, "d-alg", DataParameter, "RFC 3329");defineParam(dQop, "d-qop", DataParameter, "RFC ????");defineParam(dVer, "d-ver", QuotedDataParameter, "RFC ????");defineParam(directory, "directory", DataParameter, "RFC 2046");defineParam(domain, "domain", QuotedDataParameter, "RFC ????");defineParam(duration, "duration", UInt32Parameter, "RFC ????");defineParam(expiration, "expiration", QuotedDataParameter, "RFC 2046");defineParam(expires, "expires", UInt32Parameter, "RFC ????");defineParam(filename, "filename", DataParameter, "RFC ????");defineParam(fromTag, "from-tag", DataParameter, "RFC ????");defineParam(handling, "handling", DataParameter, "RFC ????");defineParam(id, "id", DataParameter, "RFC ????");defineParam(lr, "lr", ExistsParameter, "RFC ????");defineParam(maddr, "maddr", DataParameter, "RFC ????");defineParam(method, "method", DataParameter, "RFC ????");defineParam(micalg, "micalg", DataParameter, "RFC 1847");defineParam(mode, "mode", DataParameter, "RFC 2046");defineParam(name, "name", DataParameter, "RFC 2046");defineParam(nc, "nc", DataParameter, "RFC ????");defineParam(nonce, "nonce", QuotedDataParameter, "RFC ????");defineParam(opaque, "opaque", QuotedDataParameter, "RFC ????");defineParam(permission, "permission", DataParameter, "RFC 2046");defineParam(protocol, "protocol", QuotedDataParameter, "RFC 1847");defineParam(purpose, "purpose", DataParameter, "RFC ????");defineParam(q, "q", QValueParameter, "RFC 3261");defineParam(realm, "realm", QuotedDataParameter, "RFC ????");defineParam(reason, "reason", DataParameter, "RFC ????");defineParam(received, "received", DataParameter, "RFC ????");defineParam(response, "response", QuotedDataParameter, "RFC ????");defineParam(retryAfter, "retry-after", UInt32Parameter, "RFC ????");defineParam(rinstance, "rinstance", DataParameter, "");defineParam(rport, "rport", RportParameter, "RFC ????");defineParam(server, "server", DataParameter, "RFC 2046");defineParam(site, "site", DataParameter, "RFC 2046");defineParam(size, "size", DataParameter, "RFC 2046");defineParam(smimeType, "smime-type", DataParameter, "RFC 2633");defineParam(stale, "stale", DataParameter, "RFC ????");defineParam(tag, "tag", DataParameter, "RFC ????");defineParam(toTag, "to-tag", DataParameter, "RFC ????");defineParam(transport, "transport", DataParameter, "RFC ????");defineParam(ttl, "ttl", UInt32Parameter, "RFC ????");defineParam(uri, "uri", QuotedDataParameter, "RFC ????");defineParam(user, "user", DataParameter, "RFC ????");defineParam(extension, "ext", DataParameter, "RFC ????");defineParam(username, "username", DataParameter, "RFC ????");defineParam(earlyOnly, "early-only", ExistsParameter, "RFC 3891");defineParam(refresher, "refresher", DataParameter, "RFC 4028");defineParam(profileType, "profile-type", DataParameter, "draft-ietf-sipping-config-framework");defineParam(vendor, "vendor", DataParameter, "draft-ietf-sipping-config-framework");defineParam(model, "model", DataParameter, "draft-ietf-sipping-config-framework");defineParam(version, "version", DataParameter, "draft-ietf-sipping-config-framework");defineParam(effectiveBy, "effective-by", UInt32Parameter, "draft-ietf-sipping-config-framework");defineParam(document, "document", DataParameter, "draft-ietf-sipping-config-framework");defineParam(appId, "app-id", DataParameter, "draft-ietf-sipping-config-framework");defineParam(networkUser, "network-user", DataParameter, "draft-ietf-sipping-config-framework");defineParam(url, "url", QuotedDataParameter, "draft-ietf-sip-content-indirect-mech-05");defineParam(sigcompId, "sigcomp-id", QuotedDataParameter, "draft-ietf-rohc-sigcomp-sip");defineParam(addTransport, "addTransport", ExistsParameter, "");DataParserCategory::commutativeParameterHash() const{ Data buffer; Data working; for (ParameterList::const_iterator i = mParameters.begin(); i != mParameters.end(); ++i) { if ((*i)->getType() != ParameterTypes::lr) { buffer.clear(); { DataStream strm(buffer); (*i)->encode(strm); } working ^= buffer; } } buffer.clear(); for (ParameterList::iterator i = mUnknownParameters.begin(); i != mUnknownParameters.end(); ++i) { UnknownParameter* p = static_cast<UnknownParameter*>(*i); buffer = p->getName(); buffer += p->value(); working ^= buffer; } return working;}const Data&ParserCategory::errorContext() const{ if (mHeaderType == Headers::NONE) { static const Data reqLine("Request/Status line"); return reqLine; } else { return Headers::getHeaderName(mHeaderType); }}/* ==================================================================== * The Vovida Software License, Version 1.0 * * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The names "VOCAL", "Vovida Open Communication Application Library", * and "Vovida Open Communication Application Library (VOCAL)" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact vocal@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor * may "VOCAL" appear in their name, without prior written * permission of Vovida Networks, Inc. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * ==================================================================== * * This software consists of voluntary contributions made by Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc. For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * *//* Local Variables: *//* c-file-style: "ellemtel" *//* End: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -