From 642b59ca0364b9dd74ad5efa1975462140f0a7ba Mon Sep 17 00:00:00 2001 From: schwaers Date: Thu, 30 Apr 2015 16:47:58 +0200 Subject: [SERVER] PoC RPC interface --- src/server/net.c | 8 ++++++-- src/server/rpc.c | 18 ++++++++++++++++++ src/server/rpc.h | 7 +++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/server/rpc.c create mode 100644 src/server/rpc.h (limited to 'src/server') diff --git a/src/server/net.c b/src/server/net.c index 9836043..2edb398 100644 --- a/src/server/net.c +++ b/src/server/net.c @@ -43,6 +43,8 @@ #include "../config.h" #include "../types.h" #include "locks.h" +#include "rpc.h" + static uint64_t totalBytesSent = 0; static pthread_spinlock_t statisticsSentLock; @@ -66,8 +68,7 @@ static inline bool recv_request_header(int sock, dnbd3_request_t *request) } // Payload sanity check if ( request->cmd != CMD_GET_BLOCK && request->size > MAX_PAYLOAD ) { - logadd( LOG_WARNING, "Client tries to send a packet of type %d with %d bytes payload. Dropping client.", (int)request->cmd, - (int)request->size ); + logadd( LOG_WARNING, "Client tries to send a packet of type %d with %d bytes payload. Dropping client.", (int)request->cmd, (int)request->size ); return false; } return true; @@ -187,6 +188,9 @@ void *net_client_handler(void *dnbd3_client) } } } + } else if ( strncmp( (char*)&request, "GET ", 4 ) == 0 || strncmp( (char*)&request, "POST ", 5 ) == 0 ) { + rpc_sendStatsJson( client->sock ); + logadd( LOG_INFO, "Sending statistics." ); } if ( bOk ) { diff --git a/src/server/rpc.c b/src/server/rpc.c new file mode 100644 index 0000000..b2dc088 --- /dev/null +++ b/src/server/rpc.c @@ -0,0 +1,18 @@ +#include +#include + +#include "rpc.h" + +void rpc_sendStatsJson(int sock) +{ + int receivedBytes = 0; + int sentBytes = 1; + json_t *statisticsJson = json_pack( "{sisi}", "receivedBytes", receivedBytes, "sentBytes", sentBytes ); + char* jsonString = json_dumps(statisticsJson, 0); + char bla[500]; + snprintf(bla, sizeof bla, "HTTP/1.1 200 OK\r\nConnection: Close\r\nContent-Length: %d\r\nContent-Type: application/json\r\n\r\n", (int)strlen(jsonString)); + write( sock, bla, strlen(bla) ); + int n = write( sock, jsonString, strlen(jsonString)); + json_decref(statisticsJson); + free(jsonString); +} diff --git a/src/server/rpc.h b/src/server/rpc.h new file mode 100644 index 0000000..78585cf --- /dev/null +++ b/src/server/rpc.h @@ -0,0 +1,7 @@ +#ifndef _RPC_H_ +#define _RPC_H_ + + +void rpc_sendStatsJson(int sock); + +#endif -- cgit v1.2.3-55-g7522