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