- if ((*msgtype)->ctn_type) {
- *payload_size=gras_datadesc_size((*msgtype)->ctn_type);
- xbt_assert2(*payload_size > 0,
- "%s %s",
- "Dynamic array as payload is forbided for now (FIXME?).",
- "Reference to dynamic array is allowed.");
- *payload = xbt_malloc(*payload_size);
- gras_datadesc_recv(sock, (*msgtype)->ctn_type, r_arch, *payload);
+ if (msg->kind == e_gras_msg_kind_rpcerror) {
+ /* error on remote host. Carfull with that exception, eugene */
+ msg->payl_size=gras_datadesc_size(gras_datadesc_by_name("ex_t"));
+ msg->payl=xbt_malloc(msg->payl_size);
+ gras_datadesc_recv(sock, gras_datadesc_by_name("ex_t"), r_arch, msg->payl);
+
+ } else if (msg->kind == e_gras_msg_kind_rpcanswer) {
+ /* answer to RPC */
+ if (msg->type->answer_type) {
+ msg->payl_size=gras_datadesc_size(msg->type->answer_type);
+ xbt_assert2(msg->payl_size > 0,
+ "%s %s",
+ "Dynamic array as payload is forbided for now (FIXME?).",
+ "Reference to dynamic array is allowed.");
+ msg->payl = xbt_malloc(msg->payl_size);
+ gras_datadesc_recv(sock, msg->type->answer_type, r_arch, msg->payl);
+ } else {
+ msg->payl = NULL;
+ msg->payl_size = 0;
+ }