reSIProcate/stack  9694
ParameterTypes.hxx
Go to the documentation of this file.
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  */