diff --git a/src/common/protocol.c b/src/common/protocol.c --- a/src/common/protocol.c +++ b/src/common/protocol.c @@ -18,6 +18,7 @@ */ #include "protocol.h" +#include "remoteio.h" #include #include @@ -44,6 +45,42 @@ int distren_request_new(struct distren_r return 0; } +int distren_request_send(struct remoteio *rem, struct distren_request *req, void *data) +{ + void *packet; + void *packet_ptr; + size_t len; + size_t byteswritten; + int write_err; + + if(req->magic != DISTREN_REQUEST_MAGIC) + fprintf(stderr, "distren_request_send got a bad req\n"); + + len = sizeof(struct distren_request) + req->len; + + packet = malloc(len); + if(!packet) + { + fprintf(stderr, "Error allocating memory for packet\n"); + return 1; + } + memcpy(packet, req, sizeof(struct distren_request)); + memcpy(packet + sizeof(struct distren_request), data, req->len); + + write_err = 0; + packet_ptr = packet; + while(len + && !write_err) + { + write_err = remoteio_write(rem, packet_ptr, len, &byteswritten); + len -= byteswritten; + packet_ptr += byteswritten; + } + free(packet); + + return 0; +} + int distren_request_new_fromdata(struct distren_request **req, void *data, size_t len) { struct distren_request *newreq;