Compare commits
No commits in common. "9217ce91c4603b5d468d880e45f7673c38c87b5d" and "043d0b26c6586cb441f9ebaae56dbcd12ee05c36" have entirely different histories.
9217ce91c4
...
043d0b26c6
13
lib/ip.hpp
13
lib/ip.hpp
@ -4,16 +4,9 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <string.h>
|
||||
|
||||
#if __linux__
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#elif _WIN32
|
||||
// #include <sstream>
|
||||
#include <WinSock.h>
|
||||
#include <ws2tcpip.h>
|
||||
#endif
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
@ -7,21 +7,12 @@
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
#include <string.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#include <openssl/ssl.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
#if __linux__
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#elif _WIN32
|
||||
#include <WinSock.h>
|
||||
#include <ws2tcpip.h>
|
||||
#pragma comment(lib,"ws2_32.lib")
|
||||
#define ushort u_short
|
||||
#define uint u_int
|
||||
#endif
|
||||
|
||||
#include "ip.hpp"
|
||||
|
||||
using namespace std;
|
||||
@ -38,12 +29,7 @@ class client;
|
||||
|
||||
class server {
|
||||
public:
|
||||
#if __linux__
|
||||
int sock;
|
||||
#elif _WIN32
|
||||
WSADATA wsa;
|
||||
SOCKET sock;
|
||||
#endif
|
||||
int sock;
|
||||
struct sockaddr_in addr;
|
||||
SSL_CTX* securefds = NULL;
|
||||
vector<thread> thr;
|
||||
@ -79,12 +65,7 @@ class secure {
|
||||
class client {
|
||||
public:
|
||||
// zajedničke
|
||||
#if __linux__
|
||||
int conn; // mijenja sock
|
||||
#elif _WIN32
|
||||
WSADATA wsa;
|
||||
SOCKET conn; // mijenja sock
|
||||
#endif
|
||||
int conn; // mijenja sock
|
||||
struct sockaddr_in addr;
|
||||
SSL* ssl = NULL;
|
||||
// server s klijentima
|
||||
|
@ -11,12 +11,6 @@ server::server (const ushort port, const uint queue, SSL_CTX* _securefds) {
|
||||
addr.sin_addr.s_addr = INADDR_ANY;
|
||||
addr.sin_port = htons(port);
|
||||
|
||||
#if _WIN32
|
||||
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) {
|
||||
throw string("[ERROR] WSA Startup. Detail: " + to_string(WSAGetLastError()));
|
||||
}
|
||||
#endif
|
||||
|
||||
sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (sock <= 0) {
|
||||
throw string("[ERROR] Unable to open TCP socket ");
|
||||
@ -24,16 +18,9 @@ server::server (const ushort port, const uint queue, SSL_CTX* _securefds) {
|
||||
}
|
||||
|
||||
int opt=1;
|
||||
#if __linux__
|
||||
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
|
||||
throw string("[ERROR] Unable to set REUSEADDR or REUSEPORT on socket ");
|
||||
}
|
||||
#elif _WIN32
|
||||
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt, sizeof(opt))) {
|
||||
throw string("[ERROR] Unable to set REUSEADDR or REUSEPORT on socket ");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
|
||||
throw string("[ERROR] Unable to set REUSEADDR or REUSEPORT on socket ");
|
||||
}
|
||||
|
||||
if (bind(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) < 0) {
|
||||
throw string("[ERROR] Unable to bind socket ");
|
||||
@ -94,21 +81,10 @@ server::~server () {
|
||||
throw string("[ERROR] The socket is already closed ");
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
#if __linux__
|
||||
if (close(sock) != 0) {
|
||||
throw string("[ERROR] Unable to close socket ");
|
||||
}
|
||||
#elif _WIN32
|
||||
if (closesocket(sock) != 0) {
|
||||
throw string("[ERROR] Unable to close socket ");
|
||||
}
|
||||
WSACleanup();
|
||||
#endif
|
||||
|
||||
|
||||
else if (close(sock) != 0) {
|
||||
throw string("[ERROR] Unable to close socket ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -173,12 +149,6 @@ secure::~secure () {
|
||||
|
||||
client::client(const string address, const ushort port, const uint timeout, SSL_CTX* securefds) {
|
||||
|
||||
#if _WIN32
|
||||
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) {
|
||||
throw string("[ERROR] Unable to set WinSock " + to_string(WSAGetLastError()));
|
||||
}
|
||||
#endif
|
||||
|
||||
conn = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (conn < 0) {
|
||||
throw string("[ERROR] Unable to open TCP socket ");
|
||||
@ -194,20 +164,13 @@ client::client(const string address, const ushort port, const uint timeout, SSL_
|
||||
throw string("Unable to connect to server ");
|
||||
}
|
||||
|
||||
#if __linux__
|
||||
struct timeval tv;
|
||||
tv.tv_sec = timeout/1000;
|
||||
tv.tv_usec = (timeout%1000)*1000;
|
||||
struct timeval tv;
|
||||
tv.tv_sec = timeout/1000;
|
||||
tv.tv_usec = (timeout%1000)*1000;
|
||||
|
||||
if (setsockopt(conn, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval))) {
|
||||
throw string("[ERROR] Unable to set timeout ");
|
||||
}
|
||||
#elif _WIN32
|
||||
DWORD tv = timeout;
|
||||
if (setsockopt(conn, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof(tv))) {
|
||||
throw string("[ERROR] Unable to set timeout ");
|
||||
}
|
||||
#endif
|
||||
if (setsockopt(conn, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval))) {
|
||||
throw string("[ERROR] Unable to set timeout ");
|
||||
}
|
||||
|
||||
if (securefds) {
|
||||
ssl = SSL_new(securefds);
|
||||
@ -242,23 +205,13 @@ client::client(const server *_srv, const uint timeout, SSL_CTX* securefds) {
|
||||
throw string("[ERROR] Unable to accept client connection ");
|
||||
}
|
||||
|
||||
#if __linux__
|
||||
struct timeval tv;
|
||||
tv.tv_sec = timeout/1000;
|
||||
tv.tv_usec = (timeout%1000)*1000;
|
||||
struct timeval tv;
|
||||
tv.tv_sec = timeout/1000;
|
||||
tv.tv_usec = (timeout%1000)*1000;
|
||||
|
||||
if (setsockopt(conn, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval))) {
|
||||
throw string("[ERROR] Unable to set timeout ");
|
||||
}
|
||||
#elif _WIN32
|
||||
DWORD tv = timeout;
|
||||
|
||||
if (setsockopt(conn, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof(tv))) {
|
||||
throw string("[ERROR] Unable to set timeout ");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if (setsockopt(conn, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(struct timeval))) {
|
||||
throw string("[ERROR] Unable to set timeout ");
|
||||
}
|
||||
|
||||
|
||||
if (securefds) {
|
||||
@ -302,17 +255,8 @@ client::~client () {
|
||||
throw string("[ERROR] The socket is already closed ");
|
||||
}
|
||||
|
||||
else {
|
||||
#if __linux__
|
||||
if (close(conn) != 0) {
|
||||
throw string("[ERROR] Unable to close socket ");
|
||||
}
|
||||
#elif _WIN32
|
||||
if (closesocket(conn) != 0) {
|
||||
throw string("[ERROR] Unable to close socket ");
|
||||
}
|
||||
//WSACleanup();
|
||||
#endif
|
||||
else if (close(conn) != 0) {
|
||||
throw string("[ERROR] Unable to close socket ");
|
||||
}
|
||||
|
||||
}
|
||||
@ -330,7 +274,7 @@ bool client::push (const string msg) {
|
||||
sended = SSL_write(ssl, msg.c_str(), msg.length());
|
||||
}
|
||||
else {
|
||||
sended = send(conn, msg.c_str(), msg.length(), 0);
|
||||
sended = write(conn, msg.c_str(), msg.length());
|
||||
}
|
||||
return sended == msg.length();
|
||||
}
|
||||
@ -348,7 +292,7 @@ string client::pull (size_t byte_limit) {
|
||||
SSL_read(ssl, res, byte_limit);
|
||||
}
|
||||
else {
|
||||
recv(conn , res, byte_limit, 0);
|
||||
read(conn , res, byte_limit);
|
||||
}
|
||||
|
||||
return string(res);
|
||||
|
@ -29,7 +29,6 @@ int main() {
|
||||
// cout << "init cert " << endl;
|
||||
|
||||
// client myserver("127.0.0.1", 5000, 5000, crypto.fds);
|
||||
client myserver("localhost", 8000, 5000, crypto.fds);
|
||||
// client myserver("localhost", 5000);
|
||||
// cout << "init client " << endl;
|
||||
|
||||
|
BIN
test/client.exe
BIN
test/client.exe
Binary file not shown.
@ -1 +0,0 @@
|
||||
g++ client.cpp ../src/* -o client.exe -lssl -lcrypto -lws2_32
|
@ -1 +0,0 @@
|
||||
g++ server.cpp ../src/* -o server.exe -lssl -lcrypto -lws2_32
|
@ -10,10 +10,6 @@ int main() {
|
||||
// secure crypto ("../example/cert.pem", "../example/privkey.pem");
|
||||
// cout << "init server " << endl;
|
||||
// server myserver(5000, 100, crypto.fds);
|
||||
cout << "init cert " << endl;
|
||||
secure crypto ("../example/cert.pem", "../example/privkey.pem");
|
||||
cout << "init server " << endl;
|
||||
server myserver(8000, 100, crypto.fds);
|
||||
|
||||
// cout << "init client " << endl;
|
||||
|
||||
@ -29,12 +25,6 @@ int main() {
|
||||
// // usleep(600*1000);
|
||||
// sleep(5);
|
||||
// myserver.cli->push(fromclient);
|
||||
string fromclient = myserver.cli->pull();
|
||||
// string fromclient = myclient.pull();
|
||||
cout << "tell client " << fromclient << endl;
|
||||
// usleep(600*1000);
|
||||
//sleep(5);
|
||||
myserver.cli->push(fromclient);
|
||||
// myclient.push(fromclient);
|
||||
// myclient.~comming();
|
||||
|
||||
|
BIN
test/server.exe
BIN
test/server.exe
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user