|
reSIProcate/stack
9694
|
00001 #if !defined(RESIP_HEADERTYPES_HXX) 00002 #define RESIP_HEADERTYPES_HXX 00003 00004 #include "rutil/Data.hxx" 00005 00006 //**************************************************************************** 00007 // 00008 // !dlb! until automated, must ensure that this set is consistent with 00009 // 00010 // ************ PLEASE RUN testParserCategories AFTER CHANGING *************** 00011 // 00012 // HeaderTypes.hxx 00013 // Headers.hxx 00014 // HeaderHash.gperf 00015 // Headers.cxx 00016 // SipMessage.hxx 00017 // SipMessage.cxx 00018 // 00019 //**************************************************************************** 00020 00021 // eventually use these macros to automate Headers.hxx, Headers.cxx+gperf 00022 #define UNUSED_defineHeader(_enum, _name, _type, _rfc) SAVE##_enum, _enum = UNKNOWN, RESET##enum = SAVE##_enum-1 00023 #define UNUSED_defineMultiHeader(_enum, _name, _type, _rfc) SAVE##_enum, _enum = UNKNOWN, RESET##enum = SAVE##_enum-1 00024 #define defineHeader(_enum, _name, _type, _rfc) _enum 00025 #define defineMultiHeader(_enum, _name, _type, _rfc) _enum 00026 00027 namespace resip 00028 { 00029 00038 class Headers 00039 { 00040 public: 00041 enum Type 00042 { 00043 UNKNOWN = -1, 00044 defineMultiHeader(Via, "Via", Via, "RFC 3261"), // rjs says must be first 00045 defineHeader(MaxForwards, "Max-Forwards", UInt32Category, "RFC 3261"), 00046 defineMultiHeader(Route, "Route", NameAddr, "RFC 3261"), 00047 defineMultiHeader(RecordRoute, "Record-Route", NameAddr, "RFC 3261"), 00048 defineMultiHeader(Path, "Path", NameAddr, "RFC 3327"), 00049 defineMultiHeader(ServiceRoute, "Service-Route", NameAddr, "RFC 3608"), 00050 defineMultiHeader(ProxyRequire, "Proxy-Require", Token, "RFC 3261"), 00051 defineMultiHeader(ProxyAuthenticate, "Proxy-Authenticate", Auth, "RFC 3261"), 00052 defineHeader(Identity, "Identity", StringCategory, "RFC 4474"), 00053 defineHeader(IdentityInfo, "Identity-Info", GenericUri, "RFC 4474"), 00054 defineMultiHeader(Require, "Require", Token, "RFC 3261"), 00055 defineMultiHeader(Contact, "Contact", NameAddr, "RFC 3261"), 00056 00057 defineHeader(To, "To", NameAddr, "RFC 3261"), 00058 defineHeader(From, "From", NameAddr, "RFC 3261"), 00059 defineHeader(CallID, "Call-ID", CallId, "RFC 3261"), 00060 defineHeader(CSeq, "CSeq", CSeqCategory, "RFC 3261"), 00061 defineHeader(Subject, "Subject", StringCategory, "RFC 3261"), 00062 defineHeader(Expires, "Expires", ExpiresCategory, "RFC 3261"), 00063 defineHeader(SessionExpires, "Session-Expires", ExpiresCategory, "RFC 4028"), 00064 defineHeader(MinSE, "Min-SE", ExpiresCategory, "RFC 4028"), 00065 defineMultiHeader(Accept, "Accept", Mime, "RFC 3261"), 00066 defineMultiHeader(AcceptEncoding, "Accept-Encoding", Token, "RFC 3261"), 00067 defineMultiHeader(AcceptLanguage, "Accept-Language", Token, "RFC 3261"), 00068 defineMultiHeader(AlertInfo, "Alert-Info", GenericUri, "RFC 3261"), 00069 defineMultiHeader(Allow, "Allow", Token, "RFC 3261"), 00070 defineHeader(AuthenticationInfo, "Authentication-Info", Auth, "RFC 3261"), 00071 defineMultiHeader(CallInfo, "Call-Info", GenericUri, "RFC 3261"), 00072 defineHeader(ContentDisposition, "Content-Disposition", Token, "RFC ?"), 00073 defineHeader(ContentEncoding, "Content-Encoding", Token, "RFC ?"), 00074 defineHeader(ContentId, "Content-ID", Token, "RFC 2045"), 00075 defineMultiHeader(ContentLanguage, "Content-Language", Token, "RFC ?"), 00076 // i really think that Content-Transfer-Encoding should be a Token !rwm 00077 defineHeader(ContentTransferEncoding, "Content-Transfer-Encoding", StringCategory, "RFC ?"), // !dlb! defineMultiHeader 00078 defineHeader(ContentType, "Content-Type", Mime, "RFC 3261"), 00079 defineHeader(Date, "Date", DateCategory, "RFC 3261"), 00080 defineMultiHeader(ErrorInfo, "Error-Info", GenericUri, "RFC 3261"), 00081 defineHeader(InReplyTo, "In-Reply-To", CallId, "RFC 3261"), 00082 defineHeader(MinExpires, "Min-Expires", UInt32Category, "RFC 3261"), 00083 defineHeader(MIMEVersion, "MIME-Version", Token, "RFC 3261"), 00084 defineHeader(Organization, "Organization", StringCategory, "RFC 3261"), 00085 defineHeader(Priority, "Priority", Token, "RFC 3261"), 00086 defineMultiHeader(ProxyAuthorization, "Proxy-Authorization", Auth, "RFC 3261"), 00087 defineHeader(ReplyTo, "Reply-To", NameAddr, "RFC 3261"), 00088 defineHeader(RetryAfter, "Retry-After", UInt32Category, "RFC 3261"), 00089 defineHeader(FlowTimer, "Flow-Timer", UInt32Category, "RFC 5626"), 00090 defineHeader(Server, "Server", StringCategory, "RFC 3261"), 00091 defineHeader(SIPETag, "SIP-ETag", Token, "RFC 3903"), 00092 defineHeader(SIPIfMatch, "SIP-If-Match", Token, "RFC 3903"), 00093 defineMultiHeader(Supported, "Supported", Token, "RFC 3261"), 00094 defineHeader(Timestamp, "Timestamp", StringCategory, "RFC 3261"), 00095 defineMultiHeader(Unsupported, "Unsupported", Token, "RFC 3261"), 00096 defineHeader(UserAgent, "User-Agent", StringCategory, "RFC 3261"), 00097 defineMultiHeader(Warning, "Warning", WarningCategory, "RFC 3261"), 00098 defineMultiHeader(WWWAuthenticate, "WWW-Authenticate", Auth, "RFC 3261"), 00099 defineHeader(SubscriptionState, "Subscription-State", Token, "RFC 3265"), 00100 defineHeader(ReferTo, "Refer-To", NameAddr, "RFC 3515"), 00101 defineHeader(ReferredBy, "Referred-By", NameAddr, "RFC 3892"), 00102 defineMultiHeader(Authorization, "Authorization", Auth, "RFC 3261"), 00103 defineHeader(Replaces, "Replaces", CallId, "RFC 3891"), 00104 defineHeader(Event, "Event", Token, "RFC 3265"), 00105 defineMultiHeader(AllowEvents, "Allow-Events", Token, "RFC 3265"), 00106 defineMultiHeader(SecurityClient, "Security-Client", Token, "RFC 3329"), 00107 defineMultiHeader(SecurityServer, "Security-Server", Token, "RFC 3329"), 00108 defineMultiHeader(SecurityVerify, "Security-Verify", Token, "RFC 3329"), 00109 defineHeader(RSeq, "RSeq", UInt32Category, "RFC 3262"), 00110 defineHeader(RAck, "RAck", RAckCategory, "RFC 3262"), 00111 00112 defineMultiHeader(Reason, "Reason", Token, "RFC 3326"), 00113 defineMultiHeader(Privacy, "Privacy", PrivacyCategory, "RFC 3323"), 00114 defineMultiHeader(RequestDisposition, "Request-Disposition", Token, "RFC 3841"), 00115 defineMultiHeader(PMediaAuthorization, "P-Media-Authorization", Token, "RFC 3313"), 00116 defineHeader(Join, "Join", CallId, "RFC 3911"), 00117 defineHeader(TargetDialog, "Target-Dialog", CallId, "RFC 4538"), 00118 defineMultiHeader(PAssertedIdentity, "P-Asserted-Identity", NameAddr, "RFC 3325"), 00119 defineMultiHeader(PPreferredIdentity, "P-Preferred-Identity", NameAddr, "RFC 3325"), 00120 defineMultiHeader(AcceptContact, "Accept-Contact", NameAddr, "RFC 3841"), 00121 defineMultiHeader(RejectContact, "Reject-Contact", NameAddr, "RFC 3841"), 00122 defineHeader(PCalledPartyId, "P-Called-Party-ID", NameAddr, "RFC 3455"), 00123 defineMultiHeader(PAssociatedUri, "P-Associated-URI", NameAddr, "RFC 3455"), 00124 00125 defineHeader(ContentLength, "Content-Length", UInt32Category, "RFC 3261"), 00126 defineHeader(ReferSub, "Refer-Sub", Token, "RFC 4488"), 00127 defineHeader(AnswerMode, "Answer-Mode", Token, "RFC 5373"), 00128 defineHeader(PrivAnswerMode, "Priv-Answer-Mode", Token, "RFC 5373"), 00129 defineMultiHeader(RemotePartyId, "Remote-Party-ID", NameAddr, "draft-ietf-sip-privacy-04"), // ?bwc? Not in 3323, should we keep? 00130 defineMultiHeader(HistoryInfo, "History-Info", NameAddr, "RFC 4244"), 00131 00132 defineMultiHeader(RESIP_DO_NOT_USE, "ShouldNotSeeThis", StringCategory, "N/A"), 00133 MAX_HEADERS, 00134 NONE 00135 }; 00136 00137 // get enum from header name 00138 static Type getType(const char* name, int len); 00139 static bool isCommaTokenizing(Type type); 00140 static bool isCommaEncoding(Type type); 00141 static const Data& getHeaderName(int); 00142 static bool isMulti(Type type); 00143 00144 // treat as private 00145 static bool CommaTokenizing[MAX_HEADERS+1]; 00146 static bool CommaEncoding[MAX_HEADERS+1]; 00147 static Data HeaderNames[MAX_HEADERS+1]; 00148 static bool Multi[MAX_HEADERS+1]; 00149 }; 00150 00151 } 00152 00153 #undef UNUSED_defineHeader 00154 #undef UNUSED_defineMultiHeader 00155 #undef defineHeader 00156 #undef defineMultiHeader 00157 00158 #endif 00159 00160 /* ==================================================================== 00161 * The Vovida Software License, Version 1.0 00162 * 00163 * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. 00164 * 00165 * Redistribution and use in source and binary forms, with or without 00166 * modification, are permitted provided that the following conditions 00167 * are met: 00168 * 00169 * 1. Redistributions of source code must retain the above copyright 00170 * notice, this list of conditions and the following disclaimer. 00171 * 00172 * 2. Redistributions in binary form must reproduce the above copyright 00173 * notice, this list of conditions and the following disclaimer in 00174 * the documentation and/or other materials provided with the 00175 * distribution. 00176 * 00177 * 3. The names "VOCAL", "Vovida Open Communication Application Library", 00178 * and "Vovida Open Communication Application Library (VOCAL)" must 00179 * not be used to endorse or promote products derived from this 00180 * software without prior written permission. For written 00181 * permission, please contact vocal@vovida.org. 00182 * 00183 * 4. Products derived from this software may not be called "VOCAL", nor 00184 * may "VOCAL" appear in their name, without prior written 00185 * permission of Vovida Networks, Inc. 00186 * 00187 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED 00188 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00189 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND 00190 * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA 00191 * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES 00192 * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, 00193 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00194 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00195 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 00196 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00197 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 00198 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 00199 * DAMAGE. 00200 * 00201 * ==================================================================== 00202 * 00203 * This software consists of voluntary contributions made by Vovida 00204 * Networks, Inc. and many individuals on behalf of Vovida Networks, 00205 * Inc. For more information on Vovida Networks, Inc., please see 00206 * <http://www.vovida.org/>. 00207 * 00208 */
1.7.5.1