- DEBUG3("send '%s' to %s:%d", msgtype->name,
- gras_socket_peer_name(sock),gras_socket_peer_port(sock));
- gras_trp_send(sock, _GRAS_header, 6, 1 /* stable */);
+ DEBUG3("send '%s' to %s:%d", msgtype->name,
+ gras_socket_peer_name(sock), gras_socket_peer_port(sock));
+ gras_trp_send(sock, _GRAS_header, 6, 1 /* stable */ );
+ gras_trp_send(sock, &c_kind, 1, 1 /* stable */ );
+ switch (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:
+ gras_datadesc_send(sock, ulong_type, &ID);
+ break;
+
+ default:
+ THROW1(unknown_error, 0, "Unknown msg kind %d", kind);
+ }
+
+ gras_datadesc_send(sock, string_type, &msgtype->name);
+ if (kind == e_gras_msg_kind_rpcerror) {
+ /* error on remote host, carfull, payload is an exception */
+ gras_datadesc_send(sock, gras_datadesc_by_name("ex_t"), payload);
+ } else if (kind == e_gras_msg_kind_rpcanswer) {
+ if (msgtype->answer_type)
+ gras_datadesc_send(sock, msgtype->answer_type, payload);
+ } else {
+ /* regular message */
+ if (msgtype->ctn_type)
+ gras_datadesc_send(sock, msgtype->ctn_type, payload);
+ }