From 1f82e942960f5ccfaab04544d1def1ed75fd24ba Mon Sep 17 00:00:00 2001 From: marcelb Date: Sun, 16 Jul 2023 16:46:07 +0200 Subject: [PATCH] Integrate client as variable in server class --- lib/tcp_socket.hpp | 16 ++++++++++++---- src/tcp_socket.cpp | 10 +++++++++- test/client.o | Bin 40328 -> 40488 bytes test/server.cpp | 17 +++++++++++------ test/server.o | Bin 40280 -> 40440 bytes 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/lib/tcp_socket.hpp b/lib/tcp_socket.hpp index be202c9..20c9993 100644 --- a/lib/tcp_socket.hpp +++ b/lib/tcp_socket.hpp @@ -15,6 +15,11 @@ using namespace std; +class client; +// class secure; +// class server; + + /** * Server klasa za TCP/IP soket * Instanca se incijalizira kada pokrećemo server @@ -24,13 +29,14 @@ class server { public: int sock; struct sockaddr_in addr; + SSL_CTX* securefds = NULL; - server (const ushort port, const uint limit = 1000); + server (const ushort port, const uint limit = 1000, SSL_CTX* _securefds = NULL); ~server (); - // dok god živi server žive i klijenti - klijetni moraju biti dio servera - // omogućiti enkripciju i na nivou servera - + // one klijent + client* cli; + void accept(const uint timeout = 100); }; @@ -60,6 +66,8 @@ class client { int conn; // mijenja sock struct sockaddr_in addr; SSL* ssl = NULL; + // server s klijentima + const server* srv; // klijent sa serverom string ipv4; string ipv6; diff --git a/src/tcp_socket.cpp b/src/tcp_socket.cpp index c7fb05d..e48f63c 100644 --- a/src/tcp_socket.cpp +++ b/src/tcp_socket.cpp @@ -4,7 +4,8 @@ * Kontrustruktor varijable tipa server, prima port i limit za ograničenje liste klijenata na čekanju */ -server::server (const ushort port, const uint limit) { +server::server (const ushort port, const uint limit, SSL_CTX* _securefds) { + securefds = _securefds; addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; @@ -31,6 +32,10 @@ server::server (const ushort port, const uint limit) { } +void server::accept(const uint timeout) { + cli = new client(this, timeout, securefds); +} + /** * Destruktor varijable tipa server */ @@ -38,6 +43,9 @@ server::server (const ushort port, const uint limit) { server::~server () { + cli->~client(); + cli = NULL; + if (sock<=0) { throw string("[ERROR] The socket is already closed "); } diff --git a/test/client.o b/test/client.o index 54fa244911e7925e83379a1ecd4fb5d38edb08f5..c0afdca56bdffc32b92801177833ac9fcefe1299 100755 GIT binary patch delta 10985 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

K(wQZhv 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 HbIbn$y|Bw& diff --git a/test/server.cpp b/test/server.cpp index 8080de3..a6255ce 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -6,21 +6,26 @@ using namespace std; int main() { try{ - cout << "init server " << endl; - server myserver(5000); cout << "init cert " << endl; secure crypto ("../example/cert.pem", "../example/privkey.pem"); + cout << "init server " << endl; + server myserver(5000, 100, crypto.fds); + cout << "init client " << endl; - client myclient(&myserver, 100, crypto.fds); + // client myclient(&myserver, 100, crypto.fds); // comming myclient(&myserver, 100); - cout << "wait client " << myclient.ipv4 << endl; + myserver.accept(); + // cout << "wait client " << myclient.ipv4 << endl; + cout << "wait client " << myserver.cli->ipv4 << endl; - string fromclient = myclient.pull(); + string fromclient = myserver.cli->pull(); + // string fromclient = myclient.pull(); cout << "tell client " << fromclient << endl; // usleep(600*1000); sleep(5); - myclient.push(fromclient); + myserver.cli->push(fromclient); + // myclient.push(fromclient); // myclient.~comming(); // while (true) { diff --git a/test/server.o b/test/server.o index 47650b0f249e06d477876466d13d736daaf2fc7e..ae26bb94e57c1bddbfc5318d9d2fb581abd4e079 100755 GIT binary patch delta 11747 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