24 #include <core/exception.h>
25 #include <netcomm/fawkes/message.h>
26 #include <netcomm/fawkes/message_content.h>
27 #include <netinet/in.h>
48 : Exception(
"Network message size too big")
50 fawkes_message_header_t fmh;
51 append(
"Tried to create message of %l bytes, while only %l bytes allowed",
53 sizeof(fmh.payload_size));
87 FawkesNetworkMessage::FawkesNetworkMessage()
89 memset(&_msg, 0,
sizeof(_msg));
98 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned int clid,
fawkes_message_t &msg)
123 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned short int cid,
124 unsigned short int msg_id,
130 if (payload_size > 0xFFFFFFFF) {
134 _msg.header.cid = htons(cid);
135 _msg.header.msg_id = htons(msg_id);
136 _msg.header.payload_size = htonl(payload_size);
137 _msg.payload = payload;
146 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned short int cid,
147 unsigned short int msg_id,
152 if (payload_size > 0xFFFFFFFF) {
156 _msg.header.cid = htons(cid);
157 _msg.header.msg_id = htons(msg_id);
158 _msg.header.payload_size = htonl(payload_size);
159 _msg.payload = calloc(1, payload_size);
167 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned short int cid,
unsigned short int msg_id)
171 _msg.header.cid = htons(cid);
172 _msg.header.msg_id = htons(msg_id);
173 _msg.header.payload_size = 0;
183 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned short int cid,
184 unsigned short int msg_id,
189 _msg.header.cid = htons(cid);
190 _msg.header.msg_id = htons(msg_id);
191 _msg.header.payload_size = 0;
201 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned int clid,
202 unsigned short int cid,
203 unsigned short int msg_id,
208 _msg.header.cid = htons(cid);
209 _msg.header.msg_id = htons(msg_id);
210 _msg.header.payload_size = 0;
221 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned int clid,
222 unsigned short int cid,
223 unsigned short int msg_id,
228 if (payload_size > 0xFFFFFFFF) {
233 _msg.header.cid = htons(cid);
234 _msg.header.msg_id = htons(msg_id);
235 _msg.header.payload_size = htonl(payload_size);
236 _msg.payload = payload;
244 FawkesNetworkMessage::FawkesNetworkMessage(
unsigned int clid,
245 unsigned short int cid,
246 unsigned short int msg_id)
250 _msg.header.cid = htons(cid);
251 _msg.header.msg_id = htons(msg_id);
252 _msg.header.payload_size = 0;
259 FawkesNetworkMessage::~FawkesNetworkMessage()
261 if (_content == NULL) {
262 if (_msg.payload != NULL) {
276 FawkesNetworkMessage::clid()
const
285 FawkesNetworkMessage::cid()
const
287 return ntohs(_msg.header.cid);
294 FawkesNetworkMessage::msgid()
const
296 return ntohs(_msg.header.msg_id);
303 FawkesNetworkMessage::payload_size()
const
305 return ntohl(_msg.header.payload_size);
312 FawkesNetworkMessage::payload()
const
321 FawkesNetworkMessage::fmsg()
const
330 FawkesNetworkMessage::set_client_id(
unsigned int clid)
339 FawkesNetworkMessage::set_component_id(
unsigned short int cid)
348 FawkesNetworkMessage::set_message_id(
unsigned short int msg_id)
350 _msg.header.msg_id = htons(msg_id);
358 FawkesNetworkMessage::set_payload(
void *payload,
size_t payload_size)
360 if (payload_size > 0xFFFFFFFF) {
364 _msg.payload = payload;
365 _msg.header.payload_size = htonl(payload_size);
392 FawkesNetworkMessage::pack()
394 if (_content != NULL) {
396 _msg.payload = _content->payload();
397 _msg.header.payload_size = htonl(_content->payload_size());