hf.h

Go to the documentation of this file.
00001 /*
00002  * $Id: hf.h 4720 2008-08-23 10:56:15Z henningw $ 
00003  *
00004  * Copyright (C) 2001-2003 FhG Fokus
00005  *
00006  * This file is part of Kamailio, a free SIP server.
00007  *
00008  * Kamailio is free software; you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation; either version 2 of the License, or
00011  * (at your option) any later version
00012  *
00013  * Kamailio is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License 
00019  * along with this program; if not, write to the Free Software 
00020  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00021  *
00022  * History:
00023  * ---------
00024  * 2006-02-17 Session-Expires, Min-SE (dhsueh@somanetworks.com)
00025  * 2006-03-02 header of same type are linked as sibling (bogdan)
00026  */
00027 
00028 /**
00029  * \file parser/hf.h
00030  * \brief Defines for SIP header types
00031  */
00032 
00033 
00034 #ifndef HF_H
00035 #define HF_H
00036 
00037 #include "../str.h"
00038 
00039 /**
00040  * SIP Header types.
00041  * if you add a new type:
00042  *  - make sure it's not greater than 63
00043  *  - make sure you add the corresponding flag to the hdr_flags_t defs below
00044  *  - update clean_hdr_field (in hf.c)
00045  *  - update sip_msg_cloner (modules/tm/sip_msg.c)
00046  *  - update parse_headers (msg_parser.c)
00047  */
00048 
00049 enum _hdr_types_t {
00050    HDR_ERROR_T             = -1   /**< Error while parsing */,
00051    HDR_OTHER_T             =  0   /**< Some other header field */,
00052    HDR_VIA_T               =  1   /**< Via header field */,
00053    HDR_VIA1_T              =  1   /**< First Via header field */,
00054    HDR_VIA2_T              =  2   /**< only used as flag */,
00055    HDR_TO_T                    /**< To header field */,
00056    HDR_FROM_T                     /**< From header field */,
00057    HDR_CSEQ_T                     /**< CSeq header field */,
00058    HDR_CALLID_T                   /**< Call-Id header field */,
00059    HDR_CONTACT_T                  /**< Contact header field */,
00060    HDR_MAXFORWARDS_T              /**< MaxForwards header field */,
00061    HDR_ROUTE_T                    /**< Route header field */,
00062    HDR_RECORDROUTE_T              /**< Record-Route header field */,
00063    HDR_PATH_T                      /**< Path header fiels */,
00064    HDR_CONTENTTYPE_T              /**< Content-Type header field */,
00065    HDR_CONTENTLENGTH_T               /**< Content-Length header field */,
00066    HDR_AUTHORIZATION_T               /**< Authorization header field */,
00067    HDR_EXPIRES_T                  /**< Expires header field */,
00068    HDR_PROXYAUTH_T                   /**< Proxy-Authorization hdr field */,
00069    HDR_SUPPORTED_T                   /**< Supported  header field */,
00070    HDR_PROXYREQUIRE_T                /**< Proxy-Require header field */,
00071    HDR_UNSUPPORTED_T              /**< Unsupported header field */,
00072    HDR_ALLOW_T                    /**< Allow header field */,
00073    HDR_EVENT_T                    /**< Event header field */,
00074    HDR_ACCEPT_T                   /**< Accept header field */,
00075    HDR_ACCEPTLANGUAGE_T           /**< Accept-Language header field */,
00076    HDR_ORGANIZATION_T                /**< Organization header field */,
00077    HDR_PRIORITY_T                 /**< Priority header field */,
00078    HDR_SUBJECT_T                  /**< Subject header field */,
00079    HDR_USERAGENT_T                   /**< User-Agent header field */,
00080    HDR_ACCEPTDISPOSITION_T           /**< Accept-Disposition hdr field */,
00081    HDR_CONTENTDISPOSITION_T          /**< Content-Disposition hdr field */,
00082    HDR_DIVERSION_T                   /**< Diversion header field */,
00083    HDR_RPID_T                     /**< Remote-Party-ID header field */,
00084    HDR_REFER_TO_T                 /**< Refer-To header fiels */,
00085    HDR_SESSION_EXPIRES_T             /**< Session-Expires header field */,
00086    HDR_MIN_SE_T                   /**< Min-SE header field */,
00087    HDR_PPI_T                      /**< P-Preferred-Identity header field */,
00088    HDR_PAI_T                      /**< P-Asserted-Identity header field */,
00089    HDR_PRIVACY_T                  /**< Privacy header field */,
00090    HDR_RETRY_AFTER_T              /**< Retry-After header field */,
00091    HDR_EOH_T                      /**< Some other header field */
00092 };
00093 
00094 
00095 typedef unsigned long long hdr_flags_t;
00096 
00097 /**
00098  * Type to flag conversion
00099  * WARNING: HDR_ERROR_T has no corresponding FLAG!
00100  */
00101 #define HDR_T2F(type)   \
00102       (((type)!=HDR_EOH_T)?((hdr_flags_t)1<<(type)):(~(hdr_flags_t)0))
00103 
00104 /** helper macro for easy defining and keeping in sync. the flags enum */
00105 #define HDR_F_DEF(name)    HDR_T2F(HDR_##name##_T)
00106 
00107 /**
00108  * Flags definitions
00109  * (enums won't work with all the compilers (e.g. icc) due to the 64bit size) 
00110  */
00111 #define HDR_EOH_F             HDR_F_DEF(EOH)
00112 #define HDR_VIA_F             HDR_F_DEF(VIA)
00113 #define HDR_VIA1_F               HDR_F_DEF(VIA1)
00114 #define HDR_VIA2_F               HDR_F_DEF(VIA2)
00115 #define HDR_TO_F              HDR_F_DEF(TO)
00116 #define HDR_FROM_F               HDR_F_DEF(FROM)
00117 #define HDR_CSEQ_F               HDR_F_DEF(CSEQ)
00118 #define HDR_CALLID_F          HDR_F_DEF(CALLID)
00119 #define HDR_CONTACT_F            HDR_F_DEF(CONTACT)
00120 #define HDR_MAXFORWARDS_F        HDR_F_DEF(MAXFORWARDS)
00121 #define HDR_ROUTE_F              HDR_F_DEF(ROUTE)
00122 #define HDR_RECORDROUTE_F        HDR_F_DEF(RECORDROUTE)
00123 #define HDR_PATH_F               HDR_F_DEF(PATH)
00124 #define HDR_CONTENTTYPE_F        HDR_F_DEF(CONTENTTYPE)
00125 #define HDR_CONTENTLENGTH_F         HDR_F_DEF(CONTENTLENGTH)
00126 #define HDR_AUTHORIZATION_F         HDR_F_DEF(AUTHORIZATION)
00127 #define HDR_EXPIRES_F            HDR_F_DEF(EXPIRES)
00128 #define HDR_PROXYAUTH_F          HDR_F_DEF(PROXYAUTH)
00129 #define HDR_SUPPORTED_F          HDR_F_DEF(SUPPORTED)
00130 #define HDR_PROXYREQUIRE_F       HDR_F_DEF(PROXYREQUIRE)
00131 #define HDR_UNSUPPORTED_F        HDR_F_DEF(UNSUPPORTED)
00132 #define HDR_ALLOW_F              HDR_F_DEF(ALLOW)
00133 #define HDR_EVENT_F              HDR_F_DEF(EVENT)
00134 #define HDR_ACCEPT_F          HDR_F_DEF(ACCEPT)
00135 #define HDR_ACCEPTLANGUAGE_F     HDR_F_DEF(ACCEPTLANGUAGE)
00136 #define HDR_ORGANIZATION_F       HDR_F_DEF(ORGANIZATION)
00137 #define HDR_PRIORITY_F           HDR_F_DEF(PRIORITY)
00138 #define HDR_SUBJECT_F            HDR_F_DEF(SUBJECT)
00139 #define HDR_USERAGENT_F          HDR_F_DEF(USERAGENT)
00140 #define HDR_ACCEPTDISPOSITION_F     HDR_F_DEF(ACCEPTDISPOSITION)
00141 #define HDR_CONTENTDISPOSITION_F HDR_F_DEF(CONTENTDISPOSITION)
00142 #define HDR_DIVERSION_F          HDR_F_DEF(DIVERSION)
00143 #define HDR_RPID_F               HDR_F_DEF(RPID)
00144 #define HDR_REFER_TO_F           HDR_F_DEF(REFER_TO)
00145 #define HDR_SESSION_EXPIRES_F    HDR_F_DEF(SESSION_EXPIRES)
00146 #define HDR_MIN_SE_F          HDR_F_DEF(MIN_SE)
00147 #define HDR_PPI_F             HDR_F_DEF(PPI)
00148 #define HDR_PAI_F             HDR_F_DEF(PAI)
00149 #define HDR_PRIVACY_F            HDR_F_DEF(PRIVACY)
00150 #define HDR_RETRY_AFTER_F        HDR_F_DEF(RETRY_AFTER)
00151 #define HDR_OTHER_F              HDR_F_DEF(OTHER)
00152 
00153 typedef enum _hdr_types_t hdr_types_t;
00154 
00155 /**
00156  * Data structure for a SIP header.
00157  * Format: name':' body
00158  */
00159 struct hdr_field {
00160    hdr_types_t type;       /**< Header field type */
00161    str name;               /**< Header field name */
00162    str body;               /**< Header field body (may not include CRLF) */
00163    int len;                /**< length from hdr start until EoHF (incl.CRLF) */
00164    void* parsed;           /**< Parsed data structures */
00165    struct hdr_field* next; /**< Next header field in the list */
00166    struct hdr_field* sibling; /**< Next header of same type */
00167 };
00168 
00169 
00170 
00171 /** returns true if the header links allocated memory on parse field */
00172 static inline int hdr_allocs_parse(struct hdr_field* hdr)
00173 {
00174    switch(hdr->type){
00175       case HDR_VIA_T:
00176       case HDR_TO_T:
00177       case HDR_FROM_T:
00178       case HDR_CONTACT_T:
00179       case HDR_ROUTE_T:
00180       case HDR_RECORDROUTE_T:
00181       case HDR_PATH_T:
00182       case HDR_AUTHORIZATION_T:
00183       case HDR_EXPIRES_T:
00184       case HDR_PROXYAUTH_T:
00185       case HDR_EVENT_T:
00186       case HDR_ACCEPT_T:
00187       case HDR_CONTENTDISPOSITION_T:
00188       case HDR_DIVERSION_T:
00189       case HDR_RPID_T:
00190       case HDR_REFER_TO_T:
00191       case HDR_SESSION_EXPIRES_T:
00192       case HDR_PPI_T:
00193       case HDR_PAI_T:
00194          return 1;
00195       default:
00196          return 0;
00197    }
00198 }
00199 
00200 /**
00201  * Frees a hdr_field structure.
00202  * WARNING: it frees only parsed (and not name.s, body.s)
00203  *
00204  * \param hf header that should be freed
00205  */
00206 void clean_hdr_field(struct hdr_field* hf);
00207 
00208 /**
00209  * Frees a hdr_field list.
00210  * WARNING: frees only ->parsed and ->next
00211  *
00212  * \param hf header field that should be freed
00213  */
00214 void free_hdr_field_lst(struct hdr_field* hf);
00215 
00216 /**
00217  * Output the contents of a header to the logging system
00218  * with log level ERROR.
00219  * \param hf header that is dumped
00220  */
00221 void dump_hdr_field( struct hdr_field* hf );
00222 
00223 #endif /* HF_H */

Generated on Wed May 23 06:00:46 2012 for Kamailio - The Open Source SIP Server by  doxygen 1.5.6