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