|
reSIProcate/stack
9694
|
00001 #if defined(HAVE_CONFIG_H) 00002 #include "config.h" 00003 #endif 00004 00005 #include "resip/stack/ParameterTypes.hxx" 00006 #include "resip/stack/ParserCategories.hxx" 00007 #include "rutil/compat.hxx" 00008 #include <iostream> 00009 00010 #define defineParam(_enum, _name, _type, _headertype, _RFC_ref_ignored) \ 00011 ParameterTypes::Type \ 00012 _enum##_Param::getTypeNum() const {return ParameterTypes::_enum;} \ 00013 _enum##_Param::_enum##_Param() \ 00014 { \ 00015 _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode; \ 00016 ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name; \ 00017 } \ 00018 _enum##_Param resip::p_##_enum 00019 00020 #define defineParam2(_enum, _name, _type, _headertype, _headertype2, _RFC_ref_ignored) \ 00021 ParameterTypes::Type \ 00022 _enum##_Param::getTypeNum() const {return ParameterTypes::_enum;} \ 00023 _enum##_Param::_enum##_Param() \ 00024 { \ 00025 _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode; \ 00026 _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode; \ 00027 ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name; \ 00028 } \ 00029 _enum##_Param resip::p_##_enum 00030 00031 00032 #define defineParam3(_enum, _name, _type, _headertype, _headertype2, _headertype3, _RFC_ref_ignored) \ 00033 ParameterTypes::Type \ 00034 _enum##_Param::getTypeNum() const {return ParameterTypes::_enum;} \ 00035 _enum##_Param::_enum##_Param() \ 00036 { \ 00037 _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode; \ 00038 _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode; \ 00039 _headertype3::ParameterFactories[ParameterTypes::_enum] = Type::decode; \ 00040 ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name; \ 00041 } \ 00042 _enum##_Param resip::p_##_enum 00043 00044 int strncasecmp(char*,char*,int); 00045 00046 using namespace std; 00047 00048 using namespace resip; 00049 00050 ParameterTypes::Factory ParameterTypes::ParameterFactories[ParameterTypes::MAX_PARAMETER] = {0}; 00051 Data ParameterTypes::ParameterNames[ParameterTypes::MAX_PARAMETER] = {"PARAMETER?"}; 00052 00053 defineParam(data, "data", ExistsParameter, NameAddr, "RFC 3840"); 00054 defineParam(control, "control", ExistsParameter, NameAddr, "RFC 3840"); 00055 defineParam(mobility, "mobility", QuotedDataParameter, NameAddr, "RFC 3840"); // mobile|fixed 00056 defineParam(description, "description", QuotedDataParameter, NameAddr, "RFC 3840"); // <> quoted 00057 defineParam(events, "events", QuotedDataParameter, NameAddr, "RFC 3840"); // list 00058 defineParam(priority, "priority", QuotedDataParameter, NameAddr, "RFC 3840"); // non-urgent|normal|urgent|emergency 00059 defineParam(methods, "methods", QuotedDataParameter, NameAddr, "RFC 3840"); // list 00060 defineParam(schemes, "schemes", QuotedDataParameter, NameAddr, "RFC 3840"); // list 00061 defineParam(application, "application", ExistsParameter, NameAddr, "RFC 3840"); 00062 defineParam(video, "video", ExistsParameter, NameAddr, "RFC 3840"); 00063 defineParam(language, "language", QuotedDataParameter, NameAddr, "RFC 3840"); // list 00064 defineParam(type, "type", QuotedDataParameter, NameAddr, "RFC 3840"); // list 00065 defineParam(isFocus, "isfocus", ExistsParameter, NameAddr, "RFC 3840"); 00066 defineParam(actor, "actor", QuotedDataParameter, NameAddr, "RFC 3840"); // principal|msg-taker|attendant|information 00067 defineParam2(text, "text", ExistsOrDataParameter, NameAddr, Token, "RFC 3326/3840"); 00068 defineParam(extensions, "extensions", QuotedDataParameter, NameAddr, "RFC 3840"); //list 00069 defineParam(Instance, "+sip.instance", QuotedDataParameter, NameAddr, "RFC 5626"); // <> quoted 00070 defineParam(regid, "reg-id", UInt32Parameter, NameAddr, "RFC 5626"); 00071 defineParam(ob,"ob",ExistsParameter, Uri, "RFC 5626"); 00072 defineParam(pubGruu, "pub-gruu", QuotedDataParameter, NameAddr, "RFC 5627"); 00073 defineParam(tempGruu, "temp-gruu", QuotedDataParameter, NameAddr, "RFC 5627"); 00074 defineParam(gr, "gr", ExistsOrDataParameter, Uri, "RFC 5627"); 00075 00076 defineParam(accessType, "access-type", DataParameter, Mime, "RFC 2046"); 00077 defineParam(algorithm, "algorithm", DataParameter, Auth, "RFC 2617"); 00078 defineParam(boundary, "boundary", DataParameter, Mime, "RFC 2046"); 00079 defineParam(branch, "branch", BranchParameter, Via, "RFC 3261"); 00080 defineParam(charset, "charset", DataParameter, Mime, "RFC 2045"); 00081 defineParam(cnonce, "cnonce", QuotedDataParameter, Auth, "RFC 2617"); 00082 defineParam2(comp, "comp", DataParameter, Uri, Via, "RFC 3486"); 00083 defineParam(dAlg, "d-alg", DataParameter, Token, "RFC 3329"); 00084 defineParam(dQop, "d-qop", DataParameter, Token, "RFC 3329"); 00085 defineParam(dVer, "d-ver", QuotedDataParameter, Token, "RFC 3329"); 00086 defineParam(directory, "directory", DataParameter, Mime, "RFC 2046"); 00087 defineParam(domain, "domain", QuotedDataParameter, Auth, "RFC 3261"); 00088 defineParam(duration, "duration", UInt32Parameter, Uri, "RFC 4240"); 00089 defineParam(expiration, "expiration", QuotedDataParameter, Mime, "RFC 2046"); 00090 defineParam2(expires, "expires", UInt32Parameter, NameAddr, Token, "RFC 3261"); 00091 defineParam(filename, "filename", DataParameter, Token, "RFC 2183"); 00092 defineParam2(fromTag, "from-tag", DataParameter, Token, CallID, "RFC 4235"); 00093 defineParam(handling, "handling", DataParameter, Token, "RFC 3261"); 00094 defineParam(id, "id", DataParameter, Token, "RFC 3265"); 00095 defineParam(lr, "lr", ExistsParameter, Uri, "RFC 3261"); 00096 defineParam2(maddr, "maddr", DataParameter, Uri, Via, "RFC 3261"); 00097 defineParam(method, "method", DataParameter, Uri, "RFC 3261"); 00098 defineParam(micalg, "micalg", DataParameter, Mime, "RFC 1847"); 00099 defineParam(mode, "mode", DataParameter, Mime, "RFC 2046"); 00100 defineParam(name, "name", DataParameter, Mime, "RFC 2046"); 00101 defineParam(nc, "nc", DataParameter, Auth, "RFC 2617"); 00102 defineParam(nonce, "nonce", QuotedDataParameter, Auth, "RFC 2617"); 00103 defineParam(opaque, "opaque", QuotedDataParameter, Auth, "RFC 2617"); 00104 defineParam(permission, "permission", DataParameter, Mime, "RFC 2046"); 00105 defineParam(protocol, "protocol", QuotedDataParameter, Mime, "RFC 1847"); 00106 defineParam(purpose, "purpose", DataParameter, GenericUri, "RFC 3261"); 00107 defineParam3(q, "q", QValueParameter, NameAddr, Token, Mime, "RFC 3261"); 00108 defineParam(realm, "realm", QuotedDataParameter, Auth, "RFC 2617"); 00109 defineParam(reason, "reason", DataParameter, Token, "RFC 3265"); 00110 defineParam(received, "received", DataParameter, Via, "RFC 3261"); 00111 defineParam(require, "require", DataParameter, Token, "RFC 5373"); 00112 defineParam(response, "response", QuotedDataParameter, Auth, "RFC 3261"); 00113 defineParam(retryAfter, "retry-after", UInt32Parameter, Token, "RFC 3265"); 00114 defineParam(rinstance, "rinstance", DataParameter, Uri, "proprietary (resip)"); 00115 defineParam(rport, "rport", RportParameter, Via, "RFC 3581"); 00116 defineParam(server, "server", DataParameter, Mime, "RFC 2046"); 00117 defineParam(site, "site", DataParameter, Mime, "RFC 2046"); 00118 defineParam(size, "size", DataParameter, Mime, "RFC 2046"); 00119 defineParam(smimeType, "smime-type", DataParameter, Mime, "RFC 2633"); 00120 defineParam(stale, "stale", DataParameter, Auth, "RFC 2617"); 00121 defineParam(tag, "tag", DataParameter, NameAddr, "RFC 3261"); 00122 defineParam2(toTag, "to-tag", DataParameter, Token, CallID, "RFC 4235"); 00123 defineParam(transport, "transport", DataParameter, Uri, "RFC 3261"); 00124 defineParam2(ttl, "ttl", UInt32Parameter, Uri, Via, "RFC 3261"); 00125 defineParam(uri, "uri", QuotedDataParameter, Auth, "RFC 3261"); 00126 defineParam(user, "user", DataParameter, Uri, "RFC 3261, 4967"); 00127 defineParam2(extension, "ext", DataParameter, Uri, Token, "RFC 3966"); // Token is used when ext is a user-parameter 00128 defineParam(username, "username", QuotedDataParameter, Auth, "RFC 3261"); 00129 defineParam(earlyOnly, "early-only", ExistsParameter, CallID, "RFC 3891"); 00130 defineParam(refresher, "refresher", DataParameter, ExpiresCategory, "RFC 4028"); 00131 00132 defineParam(profileType, "profile-type", DataParameter, Token, "RFC 6080"); 00133 defineParam(vendor, "vendor", QuotedDataParameter, Token, "RFC 6080"); 00134 defineParam(model, "model", QuotedDataParameter, Token, "RFC 6080"); 00135 defineParam(version, "version", QuotedDataParameter, Token, "RFC 6080"); 00136 defineParam(effectiveBy, "effective-by", UInt32Parameter, Token, "RFC 6080"); 00137 defineParam(document, "document", DataParameter, Token, "draft-ietf-sipping-config-framework-07 (removed in 08)"); 00138 defineParam(appId, "app-id", DataParameter, Token, "draft-ietf-sipping-config-framework-05 (renamed to auid in 06, which was then removed in 08)"); 00139 defineParam(networkUser, "network-user", DataParameter, Token, "draft-ietf-sipping-config-framework-11 (removed in 12)"); 00140 00141 defineParam(url, "url", QuotedDataParameter, Mime, "RFC 4483"); 00142 00143 defineParam2(sigcompId, "sigcomp-id", QuotedDataParameter, Uri, Via, "RFC 5049"); 00144 defineParam(qop,"qop",DataParameter, Auth, "RFC 3261"); 00145 00146 // Internal use only 00147 defineParam(qopOptions,"qop",DataParameter, Auth, "RFC 3261"); 00148 defineParam(addTransport, "addTransport", ExistsParameter, Uri, "RESIP INTERNAL"); 00149 00150 #include "resip/stack/ParameterHash.hxx" 00151 00152 ParameterTypes::Type 00153 ParameterTypes::getType(const char* pname, unsigned int len) 00154 { 00155 const struct params* p; 00156 p = ParameterHash::in_word_set(pname, len); 00157 return p ? p->type : ParameterTypes::UNKNOWN; 00158 00159 } 00160 00161 /* ==================================================================== 00162 * The Vovida Software License, Version 1.0 00163 * 00164 * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. 00165 * 00166 * Redistribution and use in source and binary forms, with or without 00167 * modification, are permitted provided that the following conditions 00168 * are met: 00169 * 00170 * 1. Redistributions of source code must retain the above copyright 00171 * notice, this list of conditions and the following disclaimer. 00172 * 00173 * 2. Redistributions in binary form must reproduce the above copyright 00174 * notice, this list of conditions and the following disclaimer in 00175 * the documentation and/or other materials provided with the 00176 * distribution. 00177 * 00178 * 3. The names "VOCAL", "Vovida Open Communication Application Library", 00179 * and "Vovida Open Communication Application Library (VOCAL)" must 00180 * not be used to endorse or promote products derived from this 00181 * software without prior written permission. For written 00182 * permission, please contact vocal@vovida.org. 00183 * 00184 * 4. Products derived from this software may not be called "VOCAL", nor 00185 * may "VOCAL" appear in their name, without prior written 00186 * permission of Vovida Networks, Inc. 00187 * 00188 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 00189 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00190 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND 00191 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA 00192 * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES 00193 * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, 00194 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00195 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00196 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 00197 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00198 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 00199 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 00200 * DAMAGE. 00201 * 00202 * ==================================================================== 00203 * 00204 * This software consists of voluntary contributions made by Vovida 00205 * Networks, Inc. and many individuals on behalf of Vovida Networks, 00206 * Inc. For more information on Vovida Networks, Inc., please see 00207 * <http://www.vovida.org/>. 00208 * 00209 */
1.7.5.1