parser seems to work
[sip-router] / msg_parser.h
1 /*
2  * $Id$
3  */
4
5 #ifndef msg_parser_h
6 #define msg_parser_h
7
8
9 #define SIP_REQUEST 1
10 #define SIP_REPLY   2
11 #define SIP_INVALID 0
12
13
14 #define HDR_ERROR 0
15 /* end of header */
16 #define HDR_EOH   -1
17 #define HDR_OTHER 1
18 #define HDR_VIA   2
19 #define HDR_TO    3
20
21 #define VIA_PARSE_OK    1
22 #define VIA_PARSE_ERROR -1
23
24 #define SIP_VERSION     "SIP/2.0"
25
26
27 struct msg_start{
28         int type;
29         union {
30                 struct {
31                         char* method;
32                         char* uri;
33                         char* version;
34                 }request;
35                 struct {
36                         char* version;
37                         char* status;
38                         char* reason;
39                 }reply;
40         }u;
41 };
42
43 struct hdr_field{   /* format: name':' body */
44         int type;
45         char* name;
46         char* body;
47 };
48
49 struct via_body{  /* format: name/version/transport host:port;params comment */
50         int error;
51         char *hdr;   /* contains "Via" or "v" */
52         char* name;
53         char* version;
54         char* transport;
55         char* host;
56         int port;
57         char* params;
58         char* comment;
59         int size;    /* full size, including hdr */
60         char* next; /* pointer to next via body string if compact via or null */
61 };
62
63 struct sip_msg{
64         struct msg_start first_line;
65         struct via_body via1;
66         struct via_body via2;
67 };
68
69
70
71 char* parse_first_line(char* buffer, unsigned int len, struct msg_start * fl);
72 char* get_hdr_field(char *buffer, unsigned int len, struct hdr_field*  hdr_f);
73 int field_name(char *s);
74 char* parse_hostport(char* buf, char** host, short int* port);
75 char* parse_via_body(char* buffer,unsigned int len, struct via_body * vb);
76 int parse_msg(char* buf, unsigned int len, struct sip_msg* msg);
77
78
79
80 #endif