+ msg->ID = ID;
+
+ if (kind == e_gras_msg_kind_rpcerror) {
+ /* error on remote host, carfull, payload is an exception */
+ msg->payl_size=gras_datadesc_size(gras_datadesc_by_name("ex_t"));
+ msg->payl=xbt_malloc(msg->payl_size);
+ whole_payload_size = gras_datadesc_copy(gras_datadesc_by_name("ex_t"),
+ payload,msg->payl);
+ } else if (kind == e_gras_msg_kind_rpcanswer) {
+ msg->payl_size=gras_datadesc_size(msgtype->answer_type);
+ msg->payl=xbt_malloc(msg->payl_size);
+ if (msgtype->answer_type)
+ whole_payload_size = gras_datadesc_copy(msgtype->answer_type,
+ payload, msg->payl);
+ } else {
+ msg->payl_size=gras_datadesc_size(msgtype->ctn_type);
+ msg->payl=msg->payl_size?xbt_malloc(msg->payl_size):NULL;
+ if (msgtype->ctn_type)
+ whole_payload_size = gras_datadesc_copy(msgtype->ctn_type,
+ payload, msg->payl);
+ }
+
+ msg->kind = kind;
+
+ if (XBT_LOG_ISENABLED(gras_msg,xbt_log_priority_verbose)) {
+ asprintf(&name,"type:'%s';kind:'%s';ID %lu from %s:%d to %s:%d",
+ msg->type->name, e_gras_msg_kind_names[msg->kind], msg->ID,
+ gras_os_myname(),gras_os_myport(),
+ gras_socket_peer_name(sock), gras_socket_peer_port(sock));
+ task=MSG_task_create(name,0,
+ ((double)whole_payload_size),msg);
+ free(name);
+ } else {
+ task=MSG_task_create(msg->type->name,0,
+ ((double)whole_payload_size),msg);
+ }