libosip  5.3.0
osip_message.h
Go to the documentation of this file.
1 /*
2  The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)
3  Copyright (C) 2001-2020 Aymeric MOIZARD amoizard@antisip.com
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License as published by the Free Software Foundation; either
8  version 2.1 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public
16  License along with this library; if not, write to the Free Software
17  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19 
20 #ifndef _OSIP_MESSAGE_H_
21 #define _OSIP_MESSAGE_H_
22 
23 #include <osipparser2/osip_const.h>
25 #include <osipparser2/osip_body.h>
26 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
48 typedef struct osip_message osip_message_t;
49 
54 struct osip_message {
55  char *sip_version;
57  char *sip_method;
60  char *reason_phrase;
62 #ifndef MINISIZE
69 #endif
74 #ifndef MINISIZE
76 #endif
80 #ifndef MINISIZE
82 #endif
86 #ifndef MINISIZE
88 #endif
100  /*
101  1: structure and buffer "message" are identical.
102  2: buffer "message" is not up to date with the structure info (call osip_message_to_str to update it).
103  */
105  char *message;
106  size_t message_length;
109 };
110 
111 #ifndef SIP_MESSAGE_MAX_LENGTH
115 #define SIP_MESSAGE_MAX_LENGTH 8000
116 #endif
117 
118 #ifndef BODY_MESSAGE_MAX_SIZE
122 #define BODY_MESSAGE_MAX_SIZE 4000
123 #endif
124 
141 int osip_message_parse(osip_message_t *sip, const char *buf, size_t length);
148 int osip_message_parse_sipfrag(osip_message_t *sip, const char *buf, size_t length);
157 int osip_message_to_str(osip_message_t *sip, char **dest, size_t *message_length);
167 int osip_message_to_str_sipfrag(osip_message_t *sip, char **dest, size_t *message_length);
173 int osip_message_clone(const osip_message_t *sip, osip_message_t **dest);
174 
180 void osip_message_set_reason_phrase(osip_message_t *sip, char *reason);
191 void osip_message_set_status_code(osip_message_t *sip, int statuscode);
202 void osip_message_set_method(osip_message_t *sip, char *method);
207 char *osip_message_get_method(const osip_message_t *sip);
213 void osip_message_set_version(osip_message_t *sip, char *version);
218 char *osip_message_get_version(const osip_message_t *sip);
230 
231 /*
232  * These are helpfull MACROs to test messages type.
233  */
238 #define MSG_IS_RESPONSE(msg) ((msg)->status_code != 0)
243 #define MSG_IS_REQUEST(msg) ((msg)->status_code == 0)
244 
249 #define MSG_IS_INVITE(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "INVITE"))
254 #define MSG_IS_ACK(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "ACK"))
259 #define MSG_IS_REGISTER(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "REGISTER"))
264 #define MSG_IS_BYE(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "BYE"))
269 #define MSG_IS_OPTIONS(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "OPTIONS"))
274 #define MSG_IS_INFO(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "INFO"))
279 #define MSG_IS_CANCEL(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "CANCEL"))
284 #define MSG_IS_REFER(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "REFER"))
289 #define MSG_IS_NOTIFY(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "NOTIFY"))
295 #define MSG_IS_SUBSCRIBE(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "SUBSCRIBE"))
300 #define MSG_IS_MESSAGE(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "MESSAGE"))
305 #define MSG_IS_PRACK(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "PRACK"))
306 
311 #define MSG_IS_UPDATE(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "UPDATE"))
312 
317 #define MSG_IS_PUBLISH(msg) (MSG_IS_REQUEST(msg) && 0 == strcmp((msg)->sip_method, "PUBLISH"))
318 
323 #define MSG_IS_STATUS_1XX(msg) ((msg)->status_code >= 100 && (msg)->status_code < 200)
328 #define MSG_IS_STATUS_2XX(msg) ((msg)->status_code >= 200 && (msg)->status_code < 300)
333 #define MSG_IS_STATUS_3XX(msg) ((msg)->status_code >= 300 && (msg)->status_code < 400)
338 #define MSG_IS_STATUS_4XX(msg) ((msg)->status_code >= 400 && (msg)->status_code < 500)
343 #define MSG_IS_STATUS_5XX(msg) ((msg)->status_code >= 500 && (msg)->status_code < 600)
348 #define MSG_IS_STATUS_6XX(msg) ((msg)->status_code >= 600 && (msg)->status_code < 700)
354 #define MSG_TEST_CODE(msg, code) (MSG_IS_RESPONSE(msg) && (code) == (msg)->status_code)
360 #define MSG_IS_RESPONSE_FOR(msg, requestname) (MSG_IS_RESPONSE(msg) && 0 == strcmp((msg)->cseq->method, (requestname)))
361 
366 #define osip_generic_param_init(GP) osip_uri_param_init(GP)
371 #define osip_generic_param_free(GP) osip_uri_param_free(GP)
378 #define osip_generic_param_set(GP, NAME, VALUE) osip_uri_param_set(GP, NAME, VALUE)
384 #define osip_generic_param_clone osip_uri_param_clone
385 #ifndef DOXYGEN
386 /*
387  * Free a list of a generic parameter element.
388  * @param LIST The list of generic parameter element to free.
389  */
390 #define osip_generic_param_freelist(LIST) osip_uri_param_freelist(LIST)
391 #endif
398 #define osip_generic_param_add(LIST, NAME, VALUE) osip_uri_param_add(LIST, NAME, VALUE)
405 #define osip_generic_param_get_byname(LIST, NAME, DEST) osip_uri_param_get_byname(LIST, NAME, DEST)
406 
412 void osip_generic_param_set_name(osip_generic_param_t *generic_param, char *name);
417 char *osip_generic_param_get_name(const osip_generic_param_t *generic_param);
423 void osip_generic_param_set_value(osip_generic_param_t *generic_param, char *value);
428 char *osip_generic_param_get_value(const osip_generic_param_t *generic_param);
429 
436 int osip_message_get_knownheaderlist(osip_list_t *header_list, int pos, void **dest);
437 
440 #ifdef __cplusplus
441 }
442 #endif
443 #endif
void osip_message_set_reason_phrase(osip_message_t *sip, char *reason)
Definition: osip_message.c:85
char * osip_message_get_version(const osip_message_t *sip)
Definition: osip_message_to_str.c:135
char * osip_message_get_reason_phrase(const osip_message_t *sip)
Definition: osip_message_to_str.c:123
int osip_message_clone(const osip_message_t *sip, osip_message_t **dest)
Definition: osip_message.c:169
void osip_message_set_version(osip_message_t *sip, char *version)
Definition: osip_message.c:97
void osip_message_set_uri(osip_message_t *sip, osip_uri_t *uri)
Definition: osip_message.c:101
void osip_message_set_method(osip_message_t *sip, char *method)
Definition: osip_message.c:93
void osip_generic_param_set_value(osip_generic_param_t *generic_param, char *value)
Definition: osip_from.c:719
int osip_message_parse_sipfrag(osip_message_t *sip, const char *buf, size_t length)
Definition: osip_message_parse.c:943
int osip_message_get_status_code(const osip_message_t *sip)
Definition: osip_message_to_str.c:127
int osip_message_get_knownheaderlist(osip_list_t *header_list, int pos, void **dest)
Definition: osip_message.c:434
int osip_message_parse(osip_message_t *sip, const char *buf, size_t length)
Definition: osip_message_parse.c:939
void osip_message_set_status_code(osip_message_t *sip, int statuscode)
Definition: osip_message.c:89
char * osip_generic_param_get_name(const osip_generic_param_t *generic_param)
Definition: osip_from.c:723
void osip_generic_param_set_name(osip_generic_param_t *generic_param, char *name)
Definition: osip_from.c:730
void osip_message_free(osip_message_t *sip)
Definition: osip_message.c:105
char * osip_message_get_method(const osip_message_t *sip)
Definition: osip_message_to_str.c:131
char * osip_generic_param_get_value(const osip_generic_param_t *generic_param)
Definition: osip_from.c:734
int osip_message_to_str(osip_message_t *sip, char **dest, size_t *message_length)
Definition: osip_message_to_str.c:748
osip_uri_t * osip_message_get_uri(const osip_message_t *sip)
Definition: osip_message_to_str.c:139
int osip_message_init(osip_message_t **sip)
Definition: osip_message.c:29
int osip_message_to_str_sipfrag(osip_message_t *sip, char **dest, size_t *message_length)
Definition: osip_message_to_str.c:752
oSIP SIP Message Body Routines
oSIP osip_headers definition.
Definition: osip_call_id.h:44
Definition: osip_content_length.h:44
Definition: osip_content_type.h:46
Definition: osip_cseq.h:44
Definition: osip_from.h:47
Definition: osip_list.h:87
Definition: osip_message.h:54
osip_content_length_t * content_length
Definition: osip_message.h:77
osip_list_t proxy_authorizations
Definition: osip_message.h:89
osip_list_t authentication_infos
Definition: osip_message.h:68
osip_list_t proxy_authenticates
Definition: osip_message.h:85
osip_list_t contacts
Definition: osip_message.h:73
osip_list_t allows
Definition: osip_message.h:67
osip_uri_t * req_uri
Definition: osip_message.h:56
osip_to_t * to
Definition: osip_message.h:92
osip_list_t headers
Definition: osip_message.h:96
osip_list_t vias
Definition: osip_message.h:93
int status_code
Definition: osip_message.h:59
osip_list_t record_routes
Definition: osip_message.h:90
char * reason_phrase
Definition: osip_message.h:60
osip_list_t content_encodings
Definition: osip_message.h:75
osip_cseq_t * cseq
Definition: osip_message.h:79
osip_list_t error_infos
Definition: osip_message.h:81
osip_list_t authorizations
Definition: osip_message.h:70
osip_list_t accepts
Definition: osip_message.h:63
osip_mime_version_t * mime_version
Definition: osip_message.h:84
osip_content_type_t * content_type
Definition: osip_message.h:78
osip_list_t accept_languages
Definition: osip_message.h:65
char * sip_method
Definition: osip_message.h:57
osip_call_id_t * call_id
Definition: osip_message.h:71
osip_from_t * from
Definition: osip_message.h:83
osip_list_t accept_encodings
Definition: osip_message.h:64
osip_list_t routes
Definition: osip_message.h:91
char * message
Definition: osip_message.h:105
int message_property
Definition: osip_message.h:104
size_t message_length
Definition: osip_message.h:106
char * sip_version
Definition: osip_message.h:55
osip_list_t call_infos
Definition: osip_message.h:72
osip_list_t bodies
Definition: osip_message.h:98
osip_list_t www_authenticates
Definition: osip_message.h:94
osip_list_t alert_infos
Definition: osip_message.h:66
osip_list_t proxy_authentication_infos
Definition: osip_message.h:87
void * application_data
Definition: osip_message.h:108
Definition: osip_uri.h:55
Definition: osip_uri.h:167