1b59ee77b6b8569814ab13ce64b3cbf411948d52
[sip-router] / parser / parse_via.h
1 /*
2  * $Id$
3  */
4
5 #ifndef PARSE_VIA_H
6 #define PARSE_VIA_H
7
8 #include "../str.h"
9
10 /* via param types
11  * WARNING: keep in sync w/ FIN_*, GEN_PARAM and PARAM_ERROR from via_parse.c
12  */
13 enum {
14         PARAM_HIDDEN=230, PARAM_TTL, PARAM_BRANCH, 
15         PARAM_MADDR, PARAM_RECEIVED, GEN_PARAM,
16         PARAM_ERROR
17 };
18
19
20 struct via_param {
21         int type;               /* Type of the parameter */
22         str name;               /* Name of the parameter */
23         str value;              /* Value of the parameter */
24         int size;               /* total size*/
25         struct via_param* next; /* Next parameter in the list */
26 };
27
28
29 /* Format: name/version/transport host:port;params comment */
30 struct via_body { 
31         int error;
32         str hdr;   /* Contains "Via" or "v" */
33         str name;
34         str version;   
35         str transport;
36         str host;
37         int port;
38         str port_str;
39         str params;
40         str comment;
41         int bsize;                    /* body size, not including hdr */
42         struct via_param* param_lst;  /* list of parameters*/
43         struct via_param* last_param; /*last via parameter, internal use*/
44
45              /* shortcuts to "important" params*/
46         struct via_param* branch;
47         struct via_param* received;
48         
49         struct via_body* next; /* pointer to next via body string if
50                                   compact via or null */
51 };
52
53
54 /*
55  * Main Via header field parser
56  */
57 char* parse_via(char* buffer, char* end, struct via_body *vb);
58
59
60 /*
61  * Free allocated memory
62  */
63 void free_via_list(struct via_body *vb);
64
65
66 #endif /* PARSE_VIA_H */