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