libosip  4.0.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-2012 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 
21 #ifndef _OSIP_MESSAGE_H_
22 #define _OSIP_MESSAGE_H_
23 
24 #include <osipparser2/osip_const.h>
26 #include <osipparser2/osip_body.h>
27 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
49  typedef struct osip_message osip_message_t;
50 
55  struct osip_message {
56  char *sip_version;
58  char *sip_method;
61  char *reason_phrase;
63 #ifndef MINISIZE
70 #endif
73 #ifndef MINISIZE
75 #endif
77 #ifndef MINISIZE
79 #endif
83 #ifndef MINISIZE
85 #endif
89 #ifndef MINISIZE
91 #endif
103  /*
104  1: structure and buffer "message" are identical.
105  2: buffer "message" is not up to date with the structure info (call osip_message_to_str to update it).
106  */
108  char *message;
109  size_t message_length;
112  };
113 
114 #ifndef SIP_MESSAGE_MAX_LENGTH
115 
118 #define SIP_MESSAGE_MAX_LENGTH 4000
119 #endif
120 
121 #ifndef BODY_MESSAGE_MAX_SIZE
122 
125 #define BODY_MESSAGE_MAX_SIZE 4000
126 #endif
127 
132  int osip_message_init (osip_message_t ** sip);
137  void osip_message_free (osip_message_t * sip);
144  int osip_message_parse (osip_message_t * sip, const char *buf, size_t length);
151  int osip_message_parse_sipfrag (osip_message_t * sip, const char *buf, size_t length);
158  int osip_message_to_str (osip_message_t * sip, char **dest, size_t * message_length);
166  int osip_message_to_str_sipfrag (osip_message_t * sip, char **dest, size_t * message_length);
172  int osip_message_clone (const osip_message_t * sip, osip_message_t ** dest);
173 
179  void osip_message_set_reason_phrase (osip_message_t * sip, char *reason);
190  void osip_message_set_status_code (osip_message_t * sip, int statuscode);
201  void osip_message_set_method (osip_message_t * sip, char *method);
206  char *osip_message_get_method (const osip_message_t * sip);
212  void osip_message_set_version (osip_message_t * sip, char *version);
217  char *osip_message_get_version (const osip_message_t * sip);
223  void osip_message_set_uri (osip_message_t * sip, osip_uri_t * uri);
229 
230 
231 /*
232  * These are helpfull MACROs to test messages type.
233  */
238 #define MSG_IS_RESPONSE(msg) ((msg)->status_code!=0)
239 
243 #define MSG_IS_REQUEST(msg) ((msg)->status_code==0)
244 
249 #define MSG_IS_INVITE(msg) (MSG_IS_REQUEST(msg) && \
250  0==strcmp((msg)->sip_method,"INVITE"))
251 
255 #define MSG_IS_ACK(msg) (MSG_IS_REQUEST(msg) && \
256  0==strcmp((msg)->sip_method,"ACK"))
257 
261 #define MSG_IS_REGISTER(msg) (MSG_IS_REQUEST(msg) && \
262  0==strcmp((msg)->sip_method,"REGISTER"))
263 
267 #define MSG_IS_BYE(msg) (MSG_IS_REQUEST(msg) && \
268  0==strcmp((msg)->sip_method,"BYE"))
269 
273 #define MSG_IS_OPTIONS(msg) (MSG_IS_REQUEST(msg) && \
274  0==strcmp((msg)->sip_method,"OPTIONS"))
275 
279 #define MSG_IS_INFO(msg) (MSG_IS_REQUEST(msg) && \
280  0==strcmp((msg)->sip_method,"INFO"))
281 
285 #define MSG_IS_CANCEL(msg) (MSG_IS_REQUEST(msg) && \
286  0==strcmp((msg)->sip_method,"CANCEL"))
287 
291 #define MSG_IS_REFER(msg) (MSG_IS_REQUEST(msg) && \
292  0==strcmp((msg)->sip_method,"REFER"))
293 
297 #define MSG_IS_NOTIFY(msg) (MSG_IS_REQUEST(msg) && \
298  0==strcmp((msg)->sip_method,"NOTIFY"))
299 
304 #define MSG_IS_SUBSCRIBE(msg) (MSG_IS_REQUEST(msg) && \
305  0==strcmp((msg)->sip_method,"SUBSCRIBE"))
306 
310 #define MSG_IS_MESSAGE(msg) (MSG_IS_REQUEST(msg) && \
311  0==strcmp((msg)->sip_method,"MESSAGE"))
312 
316 #define MSG_IS_PRACK(msg) (MSG_IS_REQUEST(msg) && \
317  0==strcmp((msg)->sip_method,"PRACK"))
318 
319 
324 #define MSG_IS_UPDATE(msg) (MSG_IS_REQUEST(msg) && \
325  0==strcmp((msg)->sip_method,"UPDATE"))
326 
331 #define MSG_IS_PUBLISH(msg) (MSG_IS_REQUEST(msg) && \
332  0==strcmp((msg)->sip_method,"PUBLISH"))
333 
334 
339 #define MSG_IS_STATUS_1XX(msg) ((msg)->status_code >= 100 && \
340  (msg)->status_code < 200)
341 
345 #define MSG_IS_STATUS_2XX(msg) ((msg)->status_code >= 200 && \
346  (msg)->status_code < 300)
347 
351 #define MSG_IS_STATUS_3XX(msg) ((msg)->status_code >= 300 && \
352  (msg)->status_code < 400)
353 
357 #define MSG_IS_STATUS_4XX(msg) ((msg)->status_code >= 400 && \
358  (msg)->status_code < 500)
359 
363 #define MSG_IS_STATUS_5XX(msg) ((msg)->status_code >= 500 && \
364  (msg)->status_code < 600)
365 
369 #define MSG_IS_STATUS_6XX(msg) ((msg)->status_code >= 600 && \
370  (msg)->status_code < 700)
371 
376 #define MSG_TEST_CODE(msg,code) (MSG_IS_RESPONSE(msg) && \
377  (code)==(msg)->status_code)
378 
383 #define MSG_IS_RESPONSE_FOR(msg,requestname) (MSG_IS_RESPONSE(msg) && \
384  0==strcmp((msg)->cseq->method,(requestname)))
385 
386 
391 #define osip_generic_param_init(GP) osip_uri_param_init(GP)
392 
396 #define osip_generic_param_free(GP) osip_uri_param_free(GP)
397 
403 #define osip_generic_param_set(GP, NAME, VALUE) osip_uri_param_set(GP, NAME, VALUE)
404 
409 #define osip_generic_param_clone osip_uri_param_clone
410 #ifndef DOXYGEN
411 /*
412  * Free a list of a generic parameter element.
413  * @param LIST The list of generic parameter element to free.
414  */
415 #define osip_generic_param_freelist(LIST) osip_uri_param_freelist(LIST)
416 #endif
417 
423 #define osip_generic_param_add(LIST,NAME,VALUE) osip_uri_param_add(LIST,NAME,VALUE)
424 
430 #define osip_generic_param_get_byname(LIST,NAME,DEST) osip_uri_param_get_byname(LIST,NAME,DEST)
431 
437  void osip_generic_param_set_name (osip_generic_param_t * generic_param, char *name);
442  char *osip_generic_param_get_name (const osip_generic_param_t * generic_param);
448  void osip_generic_param_set_value (osip_generic_param_t * generic_param, char *value);
453  char *osip_generic_param_get_value (const osip_generic_param_t * generic_param);
454 
455 
462  int osip_message_get_knownheaderlist (osip_list_t * header_list, int pos, void **dest);
463 
467 #ifdef __cplusplus
468 }
469 #endif
470 #endif