00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _OSIP_MESSAGE_H_
00022 #define _OSIP_MESSAGE_H_
00023
00024 #include <osipparser2/osip_const.h>
00025 #include <osipparser2/osip_headers.h>
00026 #include <osipparser2/osip_body.h>
00027
00041 #ifdef __cplusplus
00042 extern "C"
00043 {
00044 #endif
00045
00050 typedef struct osip_message osip_message_t;
00051
00056 struct osip_message
00057 {
00058 char *sip_version;
00059 osip_uri_t *req_uri;
00060 char *sip_method;
00062 int status_code;
00063 char *reason_phrase;
00065 #ifndef MINISIZE
00066 osip_list_t accepts;
00067 osip_list_t accept_encodings;
00068 osip_list_t accept_languages;
00069 osip_list_t alert_infos;
00070 osip_list_t allows;
00071 osip_list_t authentication_infos;
00072 #endif
00073 osip_list_t authorizations;
00074 osip_call_id_t *call_id;
00075 #ifndef MINISIZE
00076 osip_list_t call_infos;
00077 #endif
00078 osip_list_t contacts;
00079 #ifndef MINISIZE
00080 osip_list_t content_encodings;
00081 #endif
00082 osip_content_length_t *content_length;
00083 osip_content_type_t *content_type;
00084 osip_cseq_t *cseq;
00085 #ifndef MINISIZE
00086 osip_list_t error_infos;
00087 #endif
00088 osip_from_t *from;
00089 osip_mime_version_t *mime_version;
00090 osip_list_t proxy_authenticates;
00091 #ifndef MINISIZE
00092 osip_list_t proxy_authentication_infos;
00093 #endif
00094 osip_list_t proxy_authorizations;
00095 osip_list_t record_routes;
00096 osip_list_t routes;
00097 osip_to_t *to;
00098 osip_list_t vias;
00099 osip_list_t www_authenticates;
00101 osip_list_t headers;
00103 osip_list_t bodies;
00105
00106
00107
00108
00109 int message_property;
00110 char *message;
00111 size_t message_length;
00113 void *application_data;
00114 };
00115
00116 #ifndef SIP_MESSAGE_MAX_LENGTH
00117
00120 #define SIP_MESSAGE_MAX_LENGTH 4000
00121 #endif
00122
00123 #ifndef BODY_MESSAGE_MAX_SIZE
00124
00127 #define BODY_MESSAGE_MAX_SIZE 4000
00128 #endif
00129
00134 int osip_message_init (osip_message_t ** sip);
00139 void osip_message_free (osip_message_t * sip);
00146 int osip_message_parse (osip_message_t * sip, const char *buf, size_t length);
00153 int osip_message_parse_sipfrag (osip_message_t * sip, const char *buf,
00154 size_t length);
00161 int osip_message_to_str (osip_message_t * sip, char **dest,
00162 size_t * message_length);
00170 int osip_message_to_str_sipfrag (osip_message_t * sip, char **dest,
00171 size_t * message_length);
00177 int osip_message_clone (const osip_message_t * sip, osip_message_t ** dest);
00178
00184 void osip_message_set_reason_phrase (osip_message_t * sip, char *reason);
00189 char *osip_message_get_reason_phrase (const osip_message_t * sip);
00195 void osip_message_set_status_code (osip_message_t * sip, int statuscode);
00200 int osip_message_get_status_code (const osip_message_t * sip);
00206 void osip_message_set_method (osip_message_t * sip, char *method);
00211 char *osip_message_get_method (const osip_message_t * sip);
00217 void osip_message_set_version (osip_message_t * sip, char *version);
00222 char *osip_message_get_version (const osip_message_t * sip);
00228 void osip_message_set_uri (osip_message_t * sip, osip_uri_t * uri);
00233 osip_uri_t *osip_message_get_uri (const osip_message_t * sip);
00234
00235
00236
00237
00238
00243 #define MSG_IS_RESPONSE(msg) ((msg)->status_code!=0)
00244
00248 #define MSG_IS_REQUEST(msg) ((msg)->status_code==0)
00249
00254 #define MSG_IS_INVITE(msg) (MSG_IS_REQUEST(msg) && \
00255 0==strcmp((msg)->sip_method,"INVITE"))
00256
00260 #define MSG_IS_ACK(msg) (MSG_IS_REQUEST(msg) && \
00261 0==strcmp((msg)->sip_method,"ACK"))
00262
00266 #define MSG_IS_REGISTER(msg) (MSG_IS_REQUEST(msg) && \
00267 0==strcmp((msg)->sip_method,"REGISTER"))
00268
00272 #define MSG_IS_BYE(msg) (MSG_IS_REQUEST(msg) && \
00273 0==strcmp((msg)->sip_method,"BYE"))
00274
00278 #define MSG_IS_OPTIONS(msg) (MSG_IS_REQUEST(msg) && \
00279 0==strcmp((msg)->sip_method,"OPTIONS"))
00280
00284 #define MSG_IS_INFO(msg) (MSG_IS_REQUEST(msg) && \
00285 0==strcmp((msg)->sip_method,"INFO"))
00286
00290 #define MSG_IS_CANCEL(msg) (MSG_IS_REQUEST(msg) && \
00291 0==strcmp((msg)->sip_method,"CANCEL"))
00292
00296 #define MSG_IS_REFER(msg) (MSG_IS_REQUEST(msg) && \
00297 0==strcmp((msg)->sip_method,"REFER"))
00298
00302 #define MSG_IS_NOTIFY(msg) (MSG_IS_REQUEST(msg) && \
00303 0==strcmp((msg)->sip_method,"NOTIFY"))
00304
00309 #define MSG_IS_SUBSCRIBE(msg) (MSG_IS_REQUEST(msg) && \
00310 0==strcmp((msg)->sip_method,"SUBSCRIBE"))
00311
00315 #define MSG_IS_MESSAGE(msg) (MSG_IS_REQUEST(msg) && \
00316 0==strcmp((msg)->sip_method,"MESSAGE"))
00317
00321 #define MSG_IS_PRACK(msg) (MSG_IS_REQUEST(msg) && \
00322 0==strcmp((msg)->sip_method,"PRACK"))
00323
00324
00329 #define MSG_IS_UPDATE(msg) (MSG_IS_REQUEST(msg) && \
00330 0==strcmp((msg)->sip_method,"UPDATE"))
00331
00336 #define MSG_IS_PUBLISH(msg) (MSG_IS_REQUEST(msg) && \
00337 0==strcmp((msg)->sip_method,"PUBLISH"))
00338
00339
00344 #define MSG_IS_STATUS_1XX(msg) ((msg)->status_code >= 100 && \
00345 (msg)->status_code < 200)
00346
00350 #define MSG_IS_STATUS_2XX(msg) ((msg)->status_code >= 200 && \
00351 (msg)->status_code < 300)
00352
00356 #define MSG_IS_STATUS_3XX(msg) ((msg)->status_code >= 300 && \
00357 (msg)->status_code < 400)
00358
00362 #define MSG_IS_STATUS_4XX(msg) ((msg)->status_code >= 400 && \
00363 (msg)->status_code < 500)
00364
00368 #define MSG_IS_STATUS_5XX(msg) ((msg)->status_code >= 500 && \
00369 (msg)->status_code < 600)
00370
00374 #define MSG_IS_STATUS_6XX(msg) ((msg)->status_code >= 600 && \
00375 (msg)->status_code < 700)
00376
00381 #define MSG_TEST_CODE(msg,code) (MSG_IS_RESPONSE(msg) && \
00382 (code)==(msg)->status_code)
00383
00388 #define MSG_IS_RESPONSE_FOR(msg,requestname) (MSG_IS_RESPONSE(msg) && \
00389 0==strcmp((msg)->cseq->method,(requestname)))
00390
00391
00396 #define osip_generic_param_init(GP) osip_uri_param_init(GP)
00397
00401 #define osip_generic_param_free(GP) osip_uri_param_free(GP)
00402
00408 #define osip_generic_param_set(GP, NAME, VALUE) osip_uri_param_set(GP, NAME, VALUE)
00409
00414 #define osip_generic_param_clone osip_uri_param_clone
00415 #ifndef DOXYGEN
00416
00417
00418
00419
00420 #define osip_generic_param_freelist(LIST) osip_uri_param_freelist(LIST)
00421 #endif
00422
00428 #define osip_generic_param_add(LIST,NAME,VALUE) osip_uri_param_add(LIST,NAME,VALUE)
00429
00435 #define osip_generic_param_get_byname(LIST,NAME,DEST) osip_uri_param_get_byname(LIST,NAME,DEST)
00436
00442 void osip_generic_param_set_name (osip_generic_param_t * generic_param,
00443 char *name);
00448 char *osip_generic_param_get_name (const osip_generic_param_t * generic_param);
00454 void osip_generic_param_set_value (osip_generic_param_t * generic_param,
00455 char *value);
00460 char *osip_generic_param_get_value (const osip_generic_param_t * generic_param);
00461
00462
00469 int osip_message_get_knownheaderlist (osip_list_t *header_list,
00470 int pos,
00471 void **dest);
00472
00476 #ifdef __cplusplus
00477 }
00478 #endif
00479
00480 #endif