- THROW2(mismatch_error,0,
- "Incoming bytes do not look like a GRAS message (header='%.4s' not '%.4s')",header,_GRAS_header);
- if (header[4] != _GRAS_header[4])
- THROW2(mismatch_error,0,"GRAS protocol mismatch (got %d, use %d)",
- (int)header[4], (int)_GRAS_header[4]);
- r_arch = (int)header[5];
- DEBUG2("Handle an incoming message using protocol %d (remote is %s)",
- (int)header[4],gras_datadesc_arch_name(r_arch));
-
- gras_datadesc_recv(sock, string_type, r_arch, &msg_name);
+ THROWF(mismatch_error, 0,
+ "Incoming bytes do not look like a GRAS message (header='%s' not '%.4s')",
+ hexa_str((unsigned char *) header, 4, 0), _GRAS_header);
+ if (header[4] != _GRAS_header[4])
+ THROWF(mismatch_error, 0, "GRAS protocol mismatch (got %d, use %d)",
+ (int) header[4], (int) _GRAS_header[4]);
+ r_arch = (int) header[5];
+
+ switch (msg->kind) {
+ case e_gras_msg_kind_oneway:
+ break;
+
+ case e_gras_msg_kind_rpccall:
+ case e_gras_msg_kind_rpcanswer:
+ case e_gras_msg_kind_rpcerror:
+ xbt_datadesc_recv(sock, ulong_type, r_arch, &msg->ID);
+ break;
+
+ default:
+ THROW_IMPOSSIBLE;
+ }
+
+ xbt_datadesc_recv(sock, string_type, r_arch, &msg_name);
+ XBT_DEBUG
+ ("Handle an incoming message '%s' (%s) using protocol %d (remote is %s)",
+ msg_name, e_gras_msg_kind_names[msg->kind], (int) header[4],
+ xbt_datadesc_arch_name(r_arch));
+