hf.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef HF_H
00035 #define HF_H
00036
00037 #include "../str.h"
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 enum _hdr_types_t {
00050 HDR_ERROR_T = -1 ,
00051 HDR_OTHER_T = 0 ,
00052 HDR_VIA_T = 1 ,
00053 HDR_VIA1_T = 1 ,
00054 HDR_VIA2_T = 2 ,
00055 HDR_TO_T ,
00056 HDR_FROM_T ,
00057 HDR_CSEQ_T ,
00058 HDR_CALLID_T ,
00059 HDR_CONTACT_T ,
00060 HDR_MAXFORWARDS_T ,
00061 HDR_ROUTE_T ,
00062 HDR_RECORDROUTE_T ,
00063 HDR_PATH_T ,
00064 HDR_CONTENTTYPE_T ,
00065 HDR_CONTENTLENGTH_T ,
00066 HDR_AUTHORIZATION_T ,
00067 HDR_EXPIRES_T ,
00068 HDR_PROXYAUTH_T ,
00069 HDR_SUPPORTED_T ,
00070 HDR_PROXYREQUIRE_T ,
00071 HDR_UNSUPPORTED_T ,
00072 HDR_ALLOW_T ,
00073 HDR_EVENT_T ,
00074 HDR_ACCEPT_T ,
00075 HDR_ACCEPTLANGUAGE_T ,
00076 HDR_ORGANIZATION_T ,
00077 HDR_PRIORITY_T ,
00078 HDR_SUBJECT_T ,
00079 HDR_USERAGENT_T ,
00080 HDR_ACCEPTDISPOSITION_T ,
00081 HDR_CONTENTDISPOSITION_T ,
00082 HDR_DIVERSION_T ,
00083 HDR_RPID_T ,
00084 HDR_REFER_TO_T ,
00085 HDR_SESSION_EXPIRES_T ,
00086 HDR_MIN_SE_T ,
00087 HDR_PPI_T ,
00088 HDR_PAI_T ,
00089 HDR_PRIVACY_T ,
00090 HDR_RETRY_AFTER_T ,
00091 HDR_EOH_T
00092 };
00093
00094
00095 typedef unsigned long long hdr_flags_t;
00096
00097
00098
00099
00100
00101 #define HDR_T2F(type) \
00102 (((type)!=HDR_EOH_T)?((hdr_flags_t)1<<(type)):(~(hdr_flags_t)0))
00103
00104
00105 #define HDR_F_DEF(name) HDR_T2F(HDR_##name##_T)
00106
00107
00108
00109
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
00157
00158
00159 struct hdr_field {
00160 hdr_types_t type;
00161 str name;
00162 str body;
00163 int len;
00164 void* parsed;
00165 struct hdr_field* next;
00166 struct hdr_field* sibling;
00167 };
00168
00169
00170
00171
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
00202
00203
00204
00205
00206 void clean_hdr_field(struct hdr_field* hf);
00207
00208
00209
00210
00211
00212
00213
00214 void free_hdr_field_lst(struct hdr_field* hf);
00215
00216
00217
00218
00219
00220
00221 void dump_hdr_field( struct hdr_field* hf );
00222
00223 #endif