msrp_parser.h

00001 
00025 #ifndef _MSRP_PARSER_H_
00026 #define _MSRP_PARSER_H_
00027 
00028 #include "../../str.h"
00029 #include "../../tcp_conn.h"
00030 
00031 #define MSRP_REQUEST    1
00032 #define MSRP_REPLY              2
00033 
00034 #define MSRP_PORT 2855
00035 
00036 #define MSRP_MAX_HDRS_SIZE      4096
00037 #define MSRP_MAX_BODY_SIZE      10240
00038 #define MSRP_MAX_FRAME_SIZE (MSRP_MAX_HDRS_SIZE + 2 + MSRP_MAX_BODY_SIZE)
00039 
00040 #define MSRP_REQ_OTHER          0
00041 #define MSRP_REQ_SEND           1
00042 #define MSRP_REQ_AUTH           2
00043 #define MSRP_REQ_REPORT         3
00044 
00045 #define MSRP_REQ_RPLSTART       10000
00046 
00047 typedef struct msrp_fline {
00048         str buf;
00049         int msgtypeid;
00050         str protocol;
00051         str transaction;
00052         str rtype;
00053         int rtypeid;
00054         str rtext;
00055 } msrp_fline_t;
00056 
00057 #define MSRP_SCHEME_MSRP        1
00058 #define MSRP_SCHEME_MSRPS       2
00059 
00060 #define MSRP_PROTO_TCP  1
00061 
00062 typedef struct msrp_uri {
00063         str buf;
00064         str scheme;
00065         int scheme_no;
00066         str userinfo;
00067         str user;
00068         str host;
00069         str port;
00070         int port_no;
00071         str session;
00072         str proto;
00073         int proto_no;
00074         str params;
00075 } msrp_uri_t;
00076 
00077 int msrp_parse_uri(char *start, int len, msrp_uri_t *uri);
00078 
00079 #define MSRP_HDR_OTHER                  0
00080 #define MSRP_HDR_FROM_PATH              1
00081 #define MSRP_HDR_TO_PATH                2
00082 #define MSRP_HDR_USE_PATH               3
00083 #define MSRP_HDR_MESSAGE_ID             4
00084 #define MSRP_HDR_BYTE_RANGE             5
00085 #define MSRP_HDR_STATUS                 6
00086 #define MSRP_HDR_SUCCESS_REPORT 7
00087 #define MSRP_HDR_CONTENT_TYPE   8
00088 #define MSRP_HDR_AUTH                   9
00089 #define MSRP_HDR_WWWAUTH                10
00090 #define MSRP_HDR_AUTHINFO               11
00091 
00092 #define MSRP_DATA_SET   1
00093 
00094 typedef struct msrp_data {
00095         void (*free_fn)(void*);
00096         int flags;
00097         void *data;
00098 } msrp_data_t;
00099 
00100 typedef struct msrp_hdr {
00101         str buf;
00102         int htype;
00103         str name;
00104         str body;
00105         msrp_data_t parsed;
00106         struct msrp_hdr *next;
00107 } msrp_hdr_t;
00108 
00109 typedef struct msrp_frame {
00110         str buf;             /* the whole message */
00111         msrp_fline_t fline;  /* first line parsed */
00112         str hbody;           /* all headers as a buf */
00113         str mbody;           /* the message body */
00114         str endline;         /* end line of the */
00115         msrp_hdr_t *headers; /* list of parsed headers */
00116         tcp_event_info_t *tcpinfo;
00117 } msrp_frame_t;
00118 
00119 int msrp_parse_frame(msrp_frame_t *mf);
00120 int msrp_parse_fline(msrp_frame_t *mf);
00121 int msrp_parse_headers(msrp_frame_t *mf);
00122 
00123 int msrp_parse_hdr_to_path(msrp_frame_t *mf);
00124 int msrp_parse_hdr_from_path(msrp_frame_t *mf);
00125 
00126 void msrp_destroy_frame(msrp_frame_t *mf);
00127 void msrp_free_frame(msrp_frame_t *mf);
00128 
00129 msrp_hdr_t *msrp_get_hdr_by_id(msrp_frame_t *mf, int hdrid);
00130 
00131 msrp_frame_t *msrp_get_current_frame(void);
00132 
00133 typedef struct str_array {
00134         unsigned int size;
00135         str *list;
00136 } str_array_t;
00137 
00138 #endif