diff --git a/src/client.cpp b/src/client.cpp index d4b1516..9b60686 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -227,7 +227,7 @@ int websocket_handler(Socket *socket, stds *pipes) { socket->receive(pipes->stdin); } else { ungetc(c, pipes->stdout); - socket->send(pipes->stdout, -1); + socket->send(pipes->stdout); } } } diff --git a/src/network/Socket.cpp b/src/network/Socket.cpp index 91425fe..d0f4f27 100644 --- a/src/network/Socket.cpp +++ b/src/network/Socket.cpp @@ -236,6 +236,18 @@ long Socket::send(const char *str) { return send(str, strlen(str)); } +long Socket::send(FILE *file) { + char buffer[CPPNET_CHUNK]; + long all_len = 0; + long len = 0; + do { + len = fread(buffer, 1, CPPNET_CHUNK, file); + send(buffer, len); + all_len += len; + } while (len > 0 && len == CPPNET_CHUNK); + return all_len; +} + Socket::~Socket() { } diff --git a/src/network/Socket.h b/src/network/Socket.h index 11ed472..0752c00 100644 --- a/src/network/Socket.h +++ b/src/network/Socket.h @@ -34,6 +34,8 @@ private: void setSocketOption(int, bool); + long send(void *buffer, int size); + long receive(void *buffer, int size); long peek(void *buffer, int size); @@ -63,8 +65,6 @@ public: void sslHandshake(string privkey, string fullchain); - long send(void *buffer, int size); - long send(string *str); long send(string str); @@ -73,6 +73,8 @@ public: long send(const char *str, long length); + long send(FILE *file); + string receive(); string receive(long length);