msg  1.12.11devel
msg.h
Go to the documentation of this file.
1 /*
2  * This file is part of the Sofia-SIP package
3  *
4  * Copyright (C) 2005 Nokia Corporation.
5  *
6  * Contact: Pekka Pessi <pekka.pessi@nokia-email.address.hidden>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation; either version 2.1 of
11  * the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  *
23  */
24 
25 #ifndef MSG_H
26 
27 #define MSG_H
28 
37 #include <sofia-sip/msg_types.h>
38 #include <sofia-sip/su_alloc.h>
39 
40 SOFIA_BEGIN_DECLS
41 
42 SOFIAPUBFUN msg_t *msg_create(msg_mclass_t const *mc, int flags);
43 
46 
48 
50 SOFIAPUBFUN msg_t *msg_dup(msg_t const *);
51 
52 SOFIAPUBFUN msg_t *msg_make(msg_mclass_t const *mc, int flags,
53  void const *data, ssize_t len);
55  msg_t *msg, msg_pub_t *pub, int flags,
56  size_t *return_len);
57 
58 SOFIAPUBFUN void msg_set_parent(msg_t *kid, msg_t *dad);
59 
62 
63 SOFIAPUBFUN msg_pub_t *msg_public(msg_t const *msg, void *tag);
65 SOFIAPUBFUN msg_mclass_t const *msg_mclass(msg_t const *msg);
66 
67 SOFIAPUBFUN int msg_extract(msg_t *msg);
68 SOFIAPUBFUN unsigned msg_extract_errors(msg_t const *msg);
69 SOFIAPUBFUN int msg_is_complete(msg_t const *msg);
70 SOFIAPUBFUN int msg_has_error(msg_t const *msg);
72 
74 SOFIAPUBFUN int msg_prepare(msg_t *msg);
76 SOFIAPUBFUN int msg_is_prepared(msg_t const *msg);
77 
78 SOFIAPUBFUN usize_t msg_size(msg_t const *msg);
79 SOFIAPUBFUN usize_t msg_maxsize(msg_t *msg, usize_t maxsize);
80 
82 #define msg_home(h) ((su_home_t*)(h))
83 
90 };
91 
92 SOFIAPUBFUN int msg_is_streaming(msg_t const *msg);
94 
95 SOFIAPUBFUN unsigned msg_mark_as_complete(msg_t *msg, unsigned mask);
96 
97 SOFIAPUBFUN unsigned msg_get_flags(msg_t const *msg, unsigned mask);
98 SOFIAPUBFUN unsigned msg_set_flags(msg_t *msg, unsigned mask);
99 SOFIAPUBFUN unsigned msg_zap_flags(msg_t *msg, unsigned mask);
100 
104  MSG_FLG_COMPACT = (1<<0),
106  MSG_FLG_CANONIC = (1<<1),
111 
115  MSG_FLG_MAILBOX = (1<<4),
116 
119 
123 
125  MSG_FLG_THRDSAFE = (1<<15),
126 
127  MSG_FLG_USERMASK = (1<<16) - 1
128 };
129 
133  MSG_FLG_HEADERS = (1<<16),
135  MSG_FLG_BODY = (1<<17),
137  MSG_FLG_CHUNKS = (1<<18),
139  MSG_FLG_TRAILERS = (1<<19),
141  MSG_FLG_FRAGS = (1<<20),
143  MSG_FLG_COMPLETE = (1<<24),
144 
146  MSG_FLG_ERROR = (1<<25),
148  MSG_FLG_TOOLARGE = (1<<26),
150  MSG_FLG_TRUNC = (1<<27),
152  MSG_FLG_TIMEOUT = (1<<28),
153 
154  MSG_FLG_PARSERMASK = ((-1) ^ ((1<<16) - 1))
155 };
156 
157 #define MSG_DO_COMPACT MSG_FLG_COMPACT
158 #define MSG_DO_CANONIC MSG_FLG_CANONIC
159 #define MSG_DO_EXTRACT_COPY MSG_FLG_EXTRACT_COPY
160 
162 #define MSG_FLAGS(f, v) (((f) & (v)) == v)
163 
164 #define MSG_IS_COMPACT(f) MSG_FLAGS((f), MSG_FLG_COMPACT)
165 #define MSG_IS_CANONIC(f) MSG_FLAGS((f), MSG_FLG_CANONIC)
166 #define MSG_IS_EXTRACT_COPY(f) MSG_FLAGS((f), MSG_FLG_EXTRACT_COPY)
167 #define MSG_IS_COMMA_LISTS(f) MSG_FLAGS((f), MSG_FLG_COMMA_LISTS)
168 #define MSG_IS_MAILBOX(f) MSG_FLAGS((f), MSG_FLG_MAILBOX)
169 
170 #define MSG_HAS_COMPLETE(f) MSG_FLAGS((f), MSG_FLG_COMPLETE)
171 #define MSG_HAS_ERROR(f) MSG_FLAGS((f), MSG_FLG_ERROR)
172 
173 #define MSG_IS_COMPLETE(mo) (((mo)->msg_flags & MSG_FLG_COMPLETE) != 0)
174 
175 SOFIA_END_DECLS
176 
177 #endif /* MSG_H */
msg_s::msg_size
usize_t msg_size(msg_t const *msg)
Total size of message.
Definition: msg_parser.c:682
MSG_FLG_COMPACT
@ MSG_FLG_COMPACT
Use compact form when printing.
Definition: msg.h:104
msg_zap_flags
unsigned msg_zap_flags(msg_t *msg, unsigned mask)
Clear message flags.
Definition: msg_parser.c:102
msg_get_flags
unsigned msg_get_flags(msg_t const *msg, unsigned mask)
Get message flags.
Definition: msg_parser.c:90
su_home_t
SU_HOME_T su_home_t
msg_s::msg_ref_destroy
void msg_ref_destroy(msg_t *ref)
Destroy a reference to a message.
Definition: msg.c:182
MSG_FLG_HEADERS
@ MSG_FLG_HEADERS
Extract headers for this message.
Definition: msg.h:133
msg_stop_streaming
@ msg_stop_streaming
Disable streaming.
Definition: msg.h:87
msg_flg_user
msg_flg_user
Flags controlling parser/printer.
Definition: msg.h:102
msg_is_streaming
int msg_is_streaming(msg_t const *msg)
Test if streaming is in progress.
Definition: msg_parser.c:108
msg_s::msg_serialize
int msg_serialize(msg_t *msg, msg_pub_t *pub)
Serialize headers into the fragment chain.
Definition: msg_parser.c:1904
msg_s::msg_extract_errors
unsigned msg_extract_errors(msg_t const *msg)
Get error classification flags.
Definition: msg.c:405
MSG_FLG_CHUNKING
@ MSG_FLG_CHUNKING
Use multiple parts for message body.
Definition: msg.h:118
MSG_FLG_ERROR
@ MSG_FLG_ERROR
This message has parsing errors.
Definition: msg.h:146
MSG_FLG_TRUNC
@ MSG_FLG_TRUNC
This message is truncated.
Definition: msg.h:150
msg_pub_t
MSG_PUB_T msg_pub_t
Public protocol-specific message structure for accessing the message.
Definition: msg_types.h:81
msg_s::msg_create
msg_t * msg_create(msg_mclass_t const *mc, int flags)
Create a message.
Definition: msg.c:100
MSG_FLG_THRDSAFE
@ MSG_FLG_THRDSAFE
Make messages threadsafe.
Definition: msg.h:125
MSG_FLG_CHUNKS
@ MSG_FLG_CHUNKS
Extract chunks for this message.
Definition: msg.h:137
MSG_FLG_FRAGS
@ MSG_FLG_FRAGS
Extract last component of this message.
Definition: msg.h:141
MSG_FLG_MAILBOX
@ MSG_FLG_MAILBOX
Use mailbox format when parsing - in mailbox format message has no body unless Content-Length header ...
Definition: msg.h:115
MSG_FLG_CANONIC
@ MSG_FLG_CANONIC
Use canonic representation when printing.
Definition: msg.h:106
MSG_FLG_TOOLARGE
@ MSG_FLG_TOOLARGE
This message is too large.
Definition: msg.h:148
msg_is_prepared
int msg_is_prepared(msg_t const *msg)
Return true if message is prepared.
Definition: msg_parser.c:1574
msg_flg_parser
msg_flg_parser
Flags used by parser.
Definition: msg.h:131
msg_s::msg_copy
msg_t * msg_copy(msg_t *original)
Copy a message shallowly.
Definition: msg_header_copy.c:380
msg_streaming_status
msg_streaming_status
Streaming state of a msg_t object.
Definition: msg.h:85
MSG_FLG_COMPLETE
@ MSG_FLG_COMPLETE
This message has been completely extracted.
Definition: msg.h:143
msg_start_streaming
@ msg_start_streaming
Enable streaming.
Definition: msg.h:89
msg_s::msg_unref
void msg_unref(msg_t *msg)
Decrease the reference count.
Definition: msg.c:87
msg_s::msg_mark_as_complete
unsigned msg_mark_as_complete(msg_t *msg, unsigned mask)
Mark message as complete.
Definition: msg_parser.c:649
MSG_FLG_BODY
@ MSG_FLG_BODY
Extract body for this message.
Definition: msg.h:135
msg_chain_head
msg_header_t ** msg_chain_head(msg_t const *msg)
Return head of the fragment chain.
Definition: msg_parser.c:1875
msg_s::msg_dup
msg_t * msg_dup(msg_t const *original)
Deep copy a message.
Definition: msg_header_copy.c:456
msg_s::msg_prepare
int msg_prepare(msg_t *msg)
Encode all message fragments.
Definition: msg_parser.c:1547
msg_set_streaming
void msg_set_streaming(msg_t *msg, enum msg_streaming_status what)
Enable/disable streaming.
Definition: msg_parser.c:114
msg_mclass_s
Factory object for protocol messages.
Definition: msg_mclass.h:97
msg_s::msg_maxsize
usize_t msg_maxsize(msg_t *msg, usize_t maxsize)
Set the maximum size of a message.
Definition: msg_parser.c:698
msg_s::msg_has_error
int msg_has_error(msg_t const *msg)
Return true if message has parsing errors.
Definition: msg_parser.c:673
MSG_FLG_EXTRACT_COPY
@ MSG_FLG_EXTRACT_COPY
Cache a copy of headers when parsing.
Definition: msg.h:108
MSG_FLG_COMMA_LISTS
@ MSG_FLG_COMMA_LISTS
Print comma-separated lists instead of separate headers.
Definition: msg.h:110
msg_header_t
MSG_HDR_T msg_header_t
Any protocol-specific header object.
Definition: msg_types.h:87
msg_s
Message object.
Definition: msg_internal.h:59
msg_as_string
char * msg_as_string(su_home_t *home, msg_t *msg, msg_pub_t *pub, int flags, size_t *return_len)
Convert a message to a string.
Definition: msg_parser.c:1788
msg_set_flags
unsigned msg_set_flags(msg_t *msg, unsigned mask)
Set message flags.
Definition: msg_parser.c:96
SOFIAPUBFUN
#define SOFIAPUBFUN
MSG_FLG_TRAILERS
@ MSG_FLG_TRAILERS
Extract trailers for this message.
Definition: msg.h:139
msg_types.h
Types for messages and common headers.
msg_s::msg_public
msg_pub_t * msg_public(msg_t const *msg, void *tag)
Retrieve public message structure of given type.
Definition: msg.c:231
su_alloc.h
msg_object
msg_pub_t * msg_object(msg_t const *msg)
Retrieve public message structure.
Definition: msg.c:209
msg_s::msg_destroy
void msg_destroy(msg_t *msg)
Destroy a reference to a message.
Definition: msg.c:193
msg_s::msg_set_parent
void msg_set_parent(msg_t *kid, msg_t *dad)
Set a message parent.
Definition: msg.c:162
msg_s::msg_ref_create
msg_t * msg_ref_create(msg_t *msg)
Increment the reference count.
Definition: msg.c:146
msg_unprepare
void msg_unprepare(msg_t *msg)
Clear 'prepared' flag.
Definition: msg_parser.c:1568
MSG_FLG_TIMEOUT
@ MSG_FLG_TIMEOUT
This message has timeout.
Definition: msg.h:152
msg_s::msg_extract
int msg_extract(msg_t *msg)
Extract and parse a message from internal buffer.
Definition: msg_parser.c:850
MSG_FLG_STREAMING
@ MSG_FLG_STREAMING
Enable streaming - parser gives completed message fragments when they are ready to upper layers.
Definition: msg.h:122
msg_s::msg_mclass
msg_mclass_t const * msg_mclass(msg_t const *msg)
Retrieve message class.
Definition: msg.c:251
msg_make
msg_t * msg_make(msg_mclass_t const *mc, int flags, void const *data, ssize_t len)
Parse a message.
Definition: msg_parser_util.c:2019
msg_s::msg_is_complete
int msg_is_complete(msg_t const *msg)
Return true if message is complete.
Definition: msg_parser.c:664
msg_s::msg_ref
msg_t * msg_ref(msg_t *msg)
Increment the reference count.
Definition: msg.c:63

Sofia-SIP 1.12.11devel - Copyright (C) 2006 Nokia Corporation. All rights reserved. Licensed under the terms of the GNU Lesser General Public License.