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;
00111 msrp_fline_t fline;
00112 str hbody;
00113 str mbody;
00114 str endline;
00115 msrp_hdr_t *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