24 #include <interface/message.h>
25 #include <interface/interface.h>
27 #include <core/threading/thread.h>
28 #include <core/threading/mutex.h>
29 #include <core/exceptions/software.h>
30 #include <utils/time/time.h>
67 Message::Message(
const char *type)
69 __fieldinfo_list = NULL;
79 __time_enqueued =
new Time();
81 _transmit_via_iface = NULL;
82 sender_interface_instance_serial = 0;
83 recipient_interface_mem_serial = 0;
85 Thread *t = Thread::current_thread_noexc();
87 _sender_thread_name = strdup(t->
name());
89 _sender_thread_name = strdup(
"Unknown");
100 __hops = mesg.__hops;
102 __num_fields = mesg.__num_fields;
104 data_ptr = malloc(data_size);
107 _type = strdup(mesg._type);
108 __time_enqueued =
new Time(mesg.__time_enqueued);
110 _transmit_via_iface = NULL;
111 sender_interface_instance_serial = 0;
112 recipient_interface_mem_serial = 0;
114 memcpy(data_ptr, mesg.
data_ptr, data_size);
121 *info_dest = new_info;
123 info_dest = &((*info_dest)->next);
124 info_src = info_src->
next;
127 Thread *t = Thread::current_thread_noexc();
129 _sender_thread_name = strdup(t->
name());
131 _sender_thread_name = strdup(
"Unknown");
142 __hops = mesg->__hops;
144 __num_fields = mesg->__num_fields;
146 data_ptr = malloc(data_size);
149 _type = strdup(mesg->_type);
150 _transmit_via_iface = NULL;
151 sender_interface_instance_serial = 0;
152 recipient_interface_mem_serial = 0;
153 __time_enqueued =
new Time(mesg->__time_enqueued);
155 memcpy(data_ptr, mesg->
data_ptr, data_size);
162 *info_dest = new_info;
164 info_dest = &((*info_dest)->next);
165 info_src = info_src->
next;
168 Thread *t = Thread::current_thread_noexc();
170 _sender_thread_name = strdup(t->
name());
172 _sender_thread_name = strdup(
"Unknown");
180 free(_sender_thread_name);
182 delete __time_enqueued;
186 __fieldinfo_list = __fieldinfo_list->
next;
188 infol = __fieldinfo_list;
207 Message::hops()
const
217 Message::set_id(
unsigned int message_id)
219 __message_id = message_id;
227 Message::set_hops(
unsigned int hops)
235 Message::mark_enqueued()
237 __time_enqueued->stamp();
238 long sec = 0, usec = 0;
239 __time_enqueued->get_timestamp(sec, usec);
240 data_ts->timestamp_sec = sec;
241 data_ts->timestamp_usec = usec;
251 Message::enqueued()
const
265 Message::time_enqueued()
const
267 return __time_enqueued;
275 Message::recipient()
const
277 return recipient_interface_mem_serial;
285 Message::datachunk()
const
295 Message::datasize()
const
307 Message::set_from_chunk(
const void *chunk)
309 memcpy(data_ptr, chunk, data_size);
310 __time_enqueued->set_time(data_ts->timestamp_sec, data_ts->timestamp_usec);
323 memcpy(data_ptr, m.
data_ptr, data_size);
324 __time_enqueued->set_time(data_ts->timestamp_sec, data_ts->timestamp_usec);
335 Message::sender_thread_name()
const
337 return _sender_thread_name;
345 Message::sender_id()
const
358 _transmit_via_iface = iface;
359 _sender_id = iface->
serial();
360 recipient_interface_mem_serial = iface->
mem_serial();
368 Message::interface()
const
370 return _transmit_via_iface;
378 Message::type()
const
398 Message::fields_end()
408 Message::num_fields()
const
419 Message::clone()
const
436 size_t length,
void *value,
const char *enumtype)
441 newinfo->
type = type;
443 newinfo->
name = name;
445 newinfo->
value = value;
446 newinfo->
next = NULL;
448 if ( infol == NULL ) {
450 __fieldinfo_list = newinfo;
453 while ( infol->
next != NULL ) {
456 infol->
next = newinfo;