reSIProcate
SIP stack, Dialog Usage Manager and related libraries
Loading...
Searching...
No Matches
ParameterTypes.cxx
Go to the documentation of this file.
1#if defined(HAVE_CONFIG_H)
2#include "config.h"
3#endif
4
7#include "rutil/compat.hxx"
8#include <iostream>
9
10#define defineParam(_enum, _name, _type, _headertype, _RFC_ref_ignored) \
11ParameterTypes::Type \
12_enum##_Param::getTypeNum() const {return ParameterTypes::_enum;} \
13_enum##_Param::_enum##_Param() \
14{ \
15 _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode; \
16 ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name; \
17} \
18_enum##_Param resip::p_##_enum
19
20#define defineParam2(_enum, _name, _type, _headertype, _headertype2, _RFC_ref_ignored) \
21ParameterTypes::Type \
22_enum##_Param::getTypeNum() const {return ParameterTypes::_enum;} \
23_enum##_Param::_enum##_Param() \
24{ \
25 _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode; \
26 _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode; \
27 ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name; \
28} \
29_enum##_Param resip::p_##_enum
30
31
32#define defineParam3(_enum, _name, _type, _headertype, _headertype2, _headertype3, _RFC_ref_ignored) \
33ParameterTypes::Type \
34_enum##_Param::getTypeNum() const {return ParameterTypes::_enum;} \
35_enum##_Param::_enum##_Param() \
36{ \
37 _headertype::ParameterFactories[ParameterTypes::_enum] = Type::decode; \
38 _headertype2::ParameterFactories[ParameterTypes::_enum] = Type::decode; \
39 _headertype3::ParameterFactories[ParameterTypes::_enum] = Type::decode; \
40 ParameterTypes::ParameterNames[ParameterTypes::_enum] = _name; \
41} \
42_enum##_Param resip::p_##_enum
43
44using namespace std;
45
46using namespace resip;
47
50
51defineParam(data, "data", ExistsParameter, NameAddr, "RFC 3840");
52defineParam(control, "control", ExistsParameter, NameAddr, "RFC 3840");
53defineParam(mobility, "mobility", QuotedDataParameter, NameAddr, "RFC 3840"); // mobile|fixed
54defineParam(description, "description", QuotedDataParameter, NameAddr, "RFC 3840"); // <> quoted
55defineParam(events, "events", QuotedDataParameter, NameAddr, "RFC 3840"); // list
56defineParam(priority, "priority", QuotedDataParameter, NameAddr, "RFC 3840"); // non-urgent|normal|urgent|emergency
57defineParam(methods, "methods", QuotedDataParameter, NameAddr, "RFC 3840"); // list
58defineParam(schemes, "schemes", QuotedDataParameter, NameAddr, "RFC 3840"); // list
59defineParam(application, "application", ExistsParameter, NameAddr, "RFC 3840");
60defineParam(video, "video", ExistsParameter, NameAddr, "RFC 3840");
61defineParam(language, "language", QuotedDataParameter, NameAddr, "RFC 3840"); // list
62defineParam(type, "type", QuotedDataParameter, NameAddr, "RFC 3840"); // list
63defineParam(isFocus, "isfocus", ExistsParameter, NameAddr, "RFC 3840");
64defineParam(actor, "actor", QuotedDataParameter, NameAddr, "RFC 3840"); // principal|msg-taker|attendant|information
65defineParam2(text, "text", ExistsOrQuotedDataParameter, NameAddr, Token, "RFC 3326/3840");
66defineParam(cause, "cause", UInt32Parameter, Token, "RFC3326");
67defineParam(extensions, "extensions", QuotedDataParameter, NameAddr, "RFC 3840"); //list
68defineParam(Instance, "+sip.instance", QuotedDataParameter, NameAddr, "RFC 5626"); // <> quoted
69defineParam(regid, "reg-id", UInt32Parameter, NameAddr, "RFC 5626");
70defineParam(ob,"ob",ExistsParameter, Uri, "RFC 5626");
71defineParam(pubGruu, "pub-gruu", QuotedDataParameter, NameAddr, "RFC 5627");
72defineParam(tempGruu, "temp-gruu", QuotedDataParameter, NameAddr, "RFC 5627");
73defineParam(gr, "gr", ExistsOrDataParameter, Uri, "RFC 5627");
74
75defineParam(accessType, "access-type", DataParameter, Mime, "RFC 2046");
76defineParam(algorithm, "algorithm", DataParameter, Auth, "RFC 2617");
77defineParam(boundary, "boundary", DataParameter, Mime, "RFC 2046");
78defineParam(branch, "branch", BranchParameter, Via, "RFC 3261");
79defineParam(charset, "charset", DataParameter, Mime, "RFC 2045");
80defineParam(cnonce, "cnonce", QuotedDataParameter, Auth, "RFC 2617");
81defineParam2(comp, "comp", DataParameter, Uri, Via, "RFC 3486");
82defineParam(dAlg, "d-alg", DataParameter, Token, "RFC 3329");
83defineParam(dQop, "d-qop", DataParameter, Token, "RFC 3329");
84defineParam(dVer, "d-ver", QuotedDataParameter, Token, "RFC 3329");
85defineParam(directory, "directory", DataParameter, Mime, "RFC 2046");
86defineParam(domain, "domain", QuotedDataParameter, Auth, "RFC 3261");
87defineParam(duration, "duration", UInt32Parameter, Uri, "RFC 4240");
88defineParam(expiration, "expiration", QuotedDataParameter, Mime, "RFC 2046");
89defineParam2(expires, "expires", UInt32Parameter, NameAddr, Token, "RFC 3261");
90defineParam(filename, "filename", DataParameter, Token, "RFC 2183");
91defineParam2(fromTag, "from-tag", DataParameter, Token, CallID, "RFC 4235");
92defineParam(handling, "handling", DataParameter, Token, "RFC 3261");
93defineParam(id, "id", DataParameter, Token, "RFC 3265");
94defineParam(lr, "lr", ExistsParameter, Uri, "RFC 3261");
95defineParam2(maddr, "maddr", DataParameter, Uri, Via, "RFC 3261");
96defineParam(method, "method", DataParameter, Uri, "RFC 3261");
97defineParam(micalg, "micalg", DataParameter, Mime, "RFC 1847");
98defineParam(mode, "mode", DataParameter, Mime, "RFC 2046");
99defineParam(name, "name", DataParameter, Mime, "RFC 2046");
100defineParam(nc, "nc", DataParameter, Auth, "RFC 2617");
101defineParam(nonce, "nonce", QuotedDataParameter, Auth, "RFC 2617");
102defineParam(opaque, "opaque", QuotedDataParameter, Auth, "RFC 2617");
103defineParam(permission, "permission", DataParameter, Mime, "RFC 2046");
104defineParam(protocol, "protocol", QuotedDataParameter, Mime, "RFC 1847");
105defineParam2(purpose, "purpose", DataParameter, GenericUri, TokenOrQuotedStringCategory, "RFC 3261, draft-ietf-cuss-sip-uui-17");
107defineParam(realm, "realm", QuotedDataParameter, Auth, "RFC 2617");
108defineParam2(reason, "reason", DataParameter, Token, NameAddr, "RFC 3265, 5806");
109defineParam(received, "received", ReceivedParameter, Via, "RFC 3261");
110defineParam(require, "require", ExistsParameter, Token, "RFC 5373");
111defineParam(response, "response", QuotedDataParameter, Auth, "RFC 3261");
112defineParam(retryAfter, "retry-after", UInt32Parameter, Token, "RFC 3265");
113defineParam(rinstance, "rinstance", DataParameter, Uri, "proprietary (resip)");
114defineParam(rport, "rport", RportParameter, Via, "RFC 3581");
115defineParam(server, "server", DataParameter, Mime, "RFC 2046");
116defineParam(site, "site", DataParameter, Mime, "RFC 2046");
117defineParam(size, "size", DataParameter, Mime, "RFC 2046");
118defineParam(smimeType, "smime-type", DataParameter, Mime, "RFC 2633");
119defineParam(stale, "stale", DataParameter, Auth, "RFC 2617");
120defineParam(tag, "tag", DataParameter, NameAddr, "RFC 3261");
121defineParam2(toTag, "to-tag", DataParameter, Token, CallID, "RFC 4235");
122defineParam(transport, "transport", DataParameter, Uri, "RFC 3261");
123defineParam2(ttl, "ttl", UInt32Parameter, Uri, Via, "RFC 3261");
124defineParam(uri, "uri", QuotedDataParameter, Auth, "RFC 3261");
125defineParam(user, "user", DataParameter, Uri, "RFC 3261, 4967");
126defineParam2(extension, "ext", DataParameter, Uri, Token, "RFC 3966"); // Token is used when ext is a user-parameter
127defineParam(username, "username", QuotedDataParameter, Auth, "RFC 3261");
128defineParam(earlyOnly, "early-only", ExistsParameter, CallID, "RFC 3891");
129defineParam(refresher, "refresher", DataParameter, ExpiresCategory, "RFC 4028");
130
131defineParam(profileType, "profile-type", DataParameter, Token, "RFC 6080");
132defineParam(vendor, "vendor", QuotedDataParameter, Token, "RFC 6080");
133defineParam(model, "model", QuotedDataParameter, Token, "RFC 6080");
134defineParam(version, "version", QuotedDataParameter, Token, "RFC 6080");
135defineParam(effectiveBy, "effective-by", UInt32Parameter, Token, "RFC 6080");
136defineParam(document, "document", DataParameter, Token, "draft-ietf-sipping-config-framework-07 (removed in 08)");
137defineParam(appId, "app-id", DataParameter, Token, "draft-ietf-sipping-config-framework-05 (renamed to auid in 06, which was then removed in 08)");
138defineParam(networkUser, "network-user", DataParameter, Token, "draft-ietf-sipping-config-framework-11 (removed in 12)");
139
140defineParam(url, "url", QuotedDataParameter, Mime, "RFC 4483");
141
142defineParam2(sigcompId, "sigcomp-id", QuotedDataParameter, Uri, Via, "RFC 5049");
143defineParam(qop,"qop",DataParameter, Auth, "RFC 3261");
144
145defineParam(index, "index", DataParameter, NameAddr, "RFC 4244");
146defineParam(rc, "rc", DataParameter, NameAddr, "RFC 4244-bis");
147defineParam(mp, "mp", DataParameter, NameAddr, "RFC 4244-bis");
148defineParam(np, "np", DataParameter, NameAddr, "RFC 4244-bis");
149
150defineParam(utranCellId3gpp, "utran-cell-id-3gpp", DataParameter, Token, "RFC 3455"); // P-Access-Network-Info
151defineParam(cgi3gpp, "cgi-3gpp", DataParameter, Token, "RFC 3455"); // P-Access-Network-Info
152defineParam(ccf, "ccf", DataParameter, Token, "RFC 3455"); // P-Charging-Function-Addresses
153defineParam(ecf, "ecf", DataParameter, Token, "RFC 3455"); // P-Charging-Function-Addresses
154defineParam(icidValue, "icid-value", DataParameter, Token, "RFC 3455"); // P-Charging-Vector
155defineParam(icidGeneratedAt, "icid-generated-at", DataParameter, Token, "RFC 3455"); // P-Charging-Vector
156defineParam(origIoi, "orig-ioi", DataParameter, Token, "RFC 3455"); // P-Charging-Vector
157defineParam(termIoi, "term-ioi", DataParameter, Token, "RFC 3455"); // P-Charging-Vector
158
159defineParam(content, "content", DataParameter, TokenOrQuotedStringCategory, "draft-ietf-cuss-sip-uui-17"); // User-to-User
160defineParam(encoding, "encoding", DataParameter, TokenOrQuotedStringCategory, "draft-ietf-cuss-sip-uui-17"); // User-to-User
161
162defineParam(info, "info", UriParameter, IdentityCategory, "RFC 8224");
163defineParam(alg, "alg", DataParameter, GenericUri, "RFC 8224");
164defineParam(ppt, "ppt", DataParameter, GenericUri, "RFC 8224");
165
166defineParam(counter, "counter", UInt32Parameter, NameAddr, "RFC 5806");
167defineParam(limit, "limit", UInt32Parameter, NameAddr, "RFC 5806");
168defineParam(privacy, "privacy", DataParameter, NameAddr, "RFC 5806");
169defineParam(screen, "screen", DataParameter, NameAddr, "RFC 5806");
170
171// Internal use only
172defineParam(qopOptions,"qop",DataParameter, Auth, "RFC 3261");
173defineParam(addTransport, "addTransport", ExistsParameter, Uri, "RESIP INTERNAL");
174defineParam(wsSrcIp, "ws-src-ip", DataParameter, Uri, "RESIP INTERNAL (WebSocket)");
175defineParam(wsSrcPort, "ws-src-port", UInt32Parameter, Uri, "RESIP INTERNAL (WebSocket)");
176
178
180ParameterTypes::getType(const char* pname, size_t len)
181{
182 const struct params* p;
183 p = ParameterHash::in_word_set(pname, len);
184 return p ? p->type : ParameterTypes::UNKNOWN;
185
186}
187
188/* ====================================================================
189 * The Vovida Software License, Version 1.0
190 *
191 * Copyright (c) 2026 SIP Spectrum, Inc. https://www.sipspectrum.com
192 * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved.
193 *
194 * Redistribution and use in source and binary forms, with or without
195 * modification, are permitted provided that the following conditions
196 * are met:
197 *
198 * 1. Redistributions of source code must retain the above copyright
199 * notice, this list of conditions and the following disclaimer.
200 *
201 * 2. Redistributions in binary form must reproduce the above copyright
202 * notice, this list of conditions and the following disclaimer in
203 * the documentation and/or other materials provided with the
204 * distribution.
205 *
206 * 3. The names "VOCAL", "Vovida Open Communication Application Library",
207 * and "Vovida Open Communication Application Library (VOCAL)" must
208 * not be used to endorse or promote products derived from this
209 * software without prior written permission. For written
210 * permission, please contact vocal@vovida.org.
211 *
212 * 4. Products derived from this software may not be called "VOCAL", nor
213 * may "VOCAL" appear in their name, without prior written
214 * permission of Vovida Networks, Inc.
215 *
216 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
217 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
218 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
219 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA
220 * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES
221 * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
222 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
223 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
224 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
225 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
226 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
227 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
228 * DAMAGE.
229 *
230 * ====================================================================
231 *
232 * This software consists of voluntary contributions made by Vovida
233 * Networks, Inc. and many individuals on behalf of Vovida Networks,
234 * Inc. For more information on Vovida Networks, Inc., please see
235 * <http://www.vovida.org/>.
236 *
237 */
#define defineParam2(_enum, _name, _type, _headertype, _headertype2, _RFC_ref_ignored)
#define defineParam3(_enum, _name, _type, _headertype, _headertype2, _headertype3, _RFC_ref_ignored)
#define defineParam(_enum, _name, _type, _headertype, _RFC_ref_ignored)
Represents the "credentials" and "challenge" elements in the SIP grammar.
Definition Auth.hxx:18
Represents the "via-branch" parameter of the RFC 3261 grammar.
Represents the "callid" element in the SIP grammar.
Definition CallId.hxx:18
Generically represents miscellaneous parameter data.
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
Definition Data.hxx:90
Represents various parameters that are indicated to be in effect merely by being present,...
Represents the header field value for an Expires-type header.
Represents the "absoluteURI" element in the RFC 3261 grammar.
Represents an Identity header from RFC8824.
Represents the "media-type" element in the RFC 3261 grammar.
Definition Mime.hxx:20
Represents the "name-addr" and the "addr-spec" elements in the RFC 3261 grammar.
Definition NameAddr.hxx:19
static const struct params * in_word_set(const char *str, size_t len)
Parameter *(* Factory)(ParameterTypes::Type, ParseBuffer &, const std::bitset< 256 > &terminators, PoolBase *pool)
static Type getType(const char *start, size_t length)
does a convert to enum from a pointer into the HFV raw buffer
static Factory ParameterFactories[MAX_PARAMETER]
static array of Factorys indexed by the 2nd element in defineParam(...)
static Data ParameterNames[MAX_PARAMETER]
static array of ParameterNames indexed by the 2nd element in defineParam(...)
Represents the "q" parameter value of the RFC 3261 grammar.
Generically represents miscellaneous parameter data that is encoded using double quotes.
Represents the "via-received" element in the RFC 3261 grammar.
Represents the "response-port" element of the SIP grammar (as extended in RFC 3581).
Generically represents a token whose value can be wrapped and encoded using double quotes.
Represents the "token" element in the RFC 3261 grammar.
Definition Token.hxx:18
Generically represents unsigned 32-bit integer values conveyed by SIP parameters.
Represents a URI enclosed in angle brackets, used in Identity headers for RFC8224.
Represents the "SIP-URI" and "SIPS-URI" elements in the RFC 3261 grammar.
Definition Uri.hxx:22
Represents the "via-parm" element in the RFC 3261 grammar.
Definition Via.hxx:18
This file is used to handle compatibility fixes/tweaks so reSIProcate can function on multiple platfo...
dcm! – add UnusedChecking(_enum) below;
ParameterTypes::Type type