case_prox.h

Go to the documentation of this file.
00001 /* 
00002  * $Id$ 
00003  *
00004  * Proxy-Require, Proxy-Authorization Header Field Name Parsing Macros
00005  *
00006  * Copyright (C) 2001-2003 FhG Fokus
00007  *
00008  * This file is part of ser, a free SIP server.
00009  *
00010  * ser is free software; you can redistribute it and/or modify
00011  * it under the terms of the GNU General Public License as published by
00012  * the Free Software Foundation; either version 2 of the License, or
00013  * (at your option) any later version
00014  *
00015  * For a license to use the ser software under conditions
00016  * other than those described here, or to purchase support for this
00017  * software, please contact iptel.org by e-mail at the following addresses:
00018  *    info@iptel.org
00019  *
00020  * ser is distributed in the hope that it will be useful,
00021  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00022  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023  * GNU General Public License for more details.
00024  *
00025  * You should have received a copy of the GNU General Public License 
00026  * along with this program; if not, write to the Free Software 
00027  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00028  *
00029  * History:
00030  * --------
00031  * 2003-02-28 scratchpad compatibility abandoned (jiri)
00032  * 2003-01-27 next baby-step to removing ZT - PRESERVE_ZT (jiri)
00033  */
00034 
00042 #ifndef CASE_PROX_H
00043 #define CASE_PROX_H
00044 
00045 #include "../comp_defs.h"
00046 
00047 #define ION_CASE                           \
00048         switch(LOWER_DWORD(val)) {         \
00049         case _ion1_:                       \
00050                 hdr->type = HDR_PROXYAUTH_T; \
00051                 hdr->name.len = 19;        \
00052                 return (p + 4);            \
00053                                            \
00054         case _ion2_:                       \
00055                 hdr->type = HDR_PROXYAUTH_T; \
00056                 p += 4;                    \
00057                 goto dc_end;               \
00058         }
00059 
00060 
00061 #define IZAT_CASE                  \
00062         switch(LOWER_DWORD(val)) { \
00063         case _izat_:               \
00064                 p += 4;            \
00065                 val = READ(p);     \
00066                 ION_CASE;          \
00067                 goto other;        \
00068         }
00069 
00070 
00071 #define TE_CASE                    \
00072         switch(LOWER_DWORD(val)&0xffffff) { \
00073         case _te1_:     /* "te:"*/            \
00074                 hdr->type = HDR_PROXY_AUTHENTICATE_T; \
00075                 hdr->name.len = 18;        \
00076                 return (p + 3);            \
00077         case _te2_: /* "te " */ \
00078                 hdr->type = HDR_PROXY_AUTHENTICATE_T; \
00079                 p+=3; \
00080             goto dc_end;        \
00081         }
00082 
00083 
00084 #define TICA_CASE                  \
00085         switch(LOWER_DWORD(val)) { \
00086         case _tica_:               \
00087                 p += 4;            \
00088                 val = READ3(p);    \
00089                 TE_CASE;           \
00090                 goto other;        \
00091         }
00092 
00093 
00094 #define THOR_THEN_CASE             \
00095         switch(LOWER_DWORD(val)) { \
00096         case _thor_:               \
00097                 p += 4;            \
00098                 val = READ(p);     \
00099                 IZAT_CASE;         \
00100                 goto other;        \
00101         case _then_:               \
00102                 p += 4;            \
00103                 val = READ(p);     \
00104                 TICA_CASE;         \
00105                 goto other;        \
00106         }
00107 
00108 
00109 #define QUIR_CASE                                     \
00110         switch(LOWER_DWORD(val)) {                    \
00111         case _quir_:                                  \
00112                 p += 4;                               \
00113                 switch(LOWER_BYTE(*p)) {              \
00114                 case 'e':                             \
00115                         hdr->type = HDR_PROXYREQUIRE_T; \
00116                         p++;                          \
00117                         goto dc_end;                  \
00118                 }                                     \
00119                 goto other;                           \
00120         }
00121 
00122 
00123 #define PROX2_CASE                 \
00124         switch(LOWER_DWORD(val)) { \
00125         case _y_au_:               \
00126                 p += 4;            \
00127                 val = READ(p);     \
00128                 THOR_THEN_CASE;    \
00129                 goto other;        \
00130                                    \
00131         case _y_re_:               \
00132                 p += 4;            \
00133                 val = READ(p);     \
00134                 QUIR_CASE;         \
00135                 goto other;        \
00136         }
00137 
00138 
00139 #define prox_CASE         \
00140         p += 4;           \
00141         val = READ(p);    \
00142         PROX2_CASE;       \
00143          goto other;
00144 
00145 
00146 #endif /* CASE_PROX_H */