diff --git a/VoidNet/VoidNet/Connection.cpp b/VoidNet/VoidNet/Connection.cpp deleted file mode 100644 index a045fc7..0000000 --- a/VoidNet/VoidNet/Connection.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include "Connection.h" - -VoidNet::Connection::Connection() -{ -} - -VoidNet::Connection::Connection(std::string IPAddress, unsigned int PortNumber) : - IPAddress(IPAddress), PortNumber(PortNumber) -{ -} - -VoidNet::Connection::~Connection() -{ - delete socket; -} - -VoidNet::Connection &VoidNet::Connection::operator=(const Connection &con) -{ - return (VoidNet::Connection)con; - - VoidNet::Connection asd; - VoidNet::Connection dsa; -} - -bool VoidNet::Connection::operator==(Connection &con) -{ - //return socket == con.socket; - return false; -} - -bool VoidNet::Connection::operator!=(Connection &con) -{ - //return socket != con.socket; - return false; -} - -std::string VoidNet::Connection::getIPAddress() -{ - return IPAddress; -} - -unsigned int VoidNet::Connection::getPortNumber() -{ - return PortNumber; -} diff --git a/VoidNet/VoidNet/Connection.h b/VoidNet/VoidNet/Connection.h deleted file mode 100644 index 8d743e1..0000000 --- a/VoidNet/VoidNet/Connection.h +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace VoidNet -{ - struct Connection - { - // Default constructor - Connection(); - - // Using this constructor will connect automatically - // PortNumber grater than 0 - // IPAddress cant be null - Connection(std::string, unsigned int); - - // Destructor - ~Connection(); - - // Assignment operator - VoidNet::Connection &operator = (const Connection&); - bool operator == (Connection&); - bool operator != (Connection&); - - // this will return the IPAddress of the client connected - std::string getIPAddress(); - - // this will return the Port Number of the client connected - unsigned int getPortNumber(); - - - - private: - // connection socket - SOCKET *socket; - - // client ip address - std::string IPAddress; - - // client port - unsigned int PortNumber; - }; -} \ No newline at end of file diff --git a/VoidNet/VoidNet/Enums.h b/VoidNet/VoidNet/Enums.h index 036c641..be8a05d 100644 --- a/VoidNet/VoidNet/Enums.h +++ b/VoidNet/VoidNet/Enums.h @@ -4,7 +4,22 @@ namespace VoidNet { enum Protocol { - TCP, - UDP + VOID_TCP, + VOID_UDP + }; + + enum ErrorCode + { + VOID_SUCCESS, + VOID_WSA_STARTUP_FAIL, + VOID_GET_ADDR_INFO_FAIL, + VOID_COULDT_CREATE_SOCKET, + VOID_SOCKET_ERROR + }; + + enum SocketType + { + VOID_CLIENT, + VOID_SERVER }; } \ No newline at end of file diff --git a/VoidNet/VoidNet/Socket.cpp b/VoidNet/VoidNet/Socket.cpp new file mode 100644 index 0000000..dd48b1c --- /dev/null +++ b/VoidNet/VoidNet/Socket.cpp @@ -0,0 +1,130 @@ +#include "Socket.h" +#include "Enums.h" + +VoidNet::Socket::Socket(int socketType, int protocolType) : socketType(socketType), protocolType(protocolType) +{ +} + +VoidNet::Socket::Socket(std::string ipAddr, unsigned int port, int socketType, int protocolType) : + ipAddr(ipAddr), port(port), socketType(socketType), protocolType(protocolType) +{ +} + +VoidNet::Socket::~Socket() +{ +} + +VoidNet::Socket &VoidNet::Socket::operator=(const Socket &Socket) +{ + return (VoidNet::Socket)Socket; +} + +bool VoidNet::Socket::operator==(Socket &Socket) +{ + //return socket == con.socket; + return false; +} + +bool VoidNet::Socket::operator!=(Socket &Socket) +{ + //return socket != con.socket; + return false; +} + +std::string VoidNet::Socket::getIPAddress() +{ + return ipAddr; +} + +std::string VoidNet::Socket::getPeerAddress() +{ + return ipAddr + ":" + std::to_string(port); +} + +bool VoidNet::Socket::connectToHost() +{ + int initialization = init(socketType, protocolType); + if (initialization != VOID_SUCCESS) + return false; + + int result = connect(soc, addrInfo->ai_addr, addrInfo->ai_addrlen); + + if (result != SOCKET_ERROR) + return true; + closesocket(soc); + soc = INVALID_SOCKET; + freeaddrinfo(addrInfo); + WSACleanup(); + return false; +} + +unsigned int VoidNet::Socket::getPortNumber() +{ + return port; +} + +int VoidNet::Socket::init(int socketType, int protocolType) +{ + WSADATA wsaData; + + int void_result = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (void_result != 0) + return VOID_WSA_STARTUP_FAIL; + + struct addrinfo *result = nullptr, hints; + + if (socketType == VOID_CLIENT && protocolType == VOID_TCP) + { + ZeroMemory(&hints, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + } + else if (socketType == VOID_CLIENT && protocolType == VOID_UDP) + { + ZeroMemory(&hints, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_UDP; + } + else if (socketType == VOID_SERVER && protocolType == VOID_TCP) + { + ZeroMemory(&hints, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = AI_PASSIVE; + } + else if (socketType == VOID_SERVER && protocolType == VOID_UDP) + { + ZeroMemory(&hints, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_UDP; + hints.ai_flags = AI_PASSIVE; + } + + if (socketType == VOID_CLIENT) + void_result = getaddrinfo(ipAddr.c_str(), (PCSTR)port, &hints, &result); + else + void_result = getaddrinfo(nullptr, (PCSTR)port, &hints, &result); + + if (void_result != 0) + { + WSACleanup(); + return VOID_GET_ADDR_INFO_FAIL; + } + + SOCKET Socket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); + + if (Socket == INVALID_SOCKET) + { + freeaddrinfo(result); + WSACleanup(); + return VOID_COULDT_CREATE_SOCKET; + } + + addrInfo = result; + soc = Socket; + return VOID_SUCCESS; +} diff --git a/VoidNet/VoidNet/Socket.h b/VoidNet/VoidNet/Socket.h new file mode 100644 index 0000000..12ec9c2 --- /dev/null +++ b/VoidNet/VoidNet/Socket.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include + +namespace VoidNet +{ + struct Socket + { + Socket(int, int); + Socket(std::string, unsigned int, int, int); + ~Socket(); + VoidNet::Socket &operator = (const Socket&); + bool operator == (Socket&); + bool operator != (Socket&); + unsigned int getPortNumber(); + std::string getIPAddress(); + std::string getPeerAddress(); + bool connectToHost(); + private: + SOCKET soc; + struct addrinfo *addrInfo; + std::string ipAddr; + unsigned int port; + int socketType; + int protocolType; + int init(int socketType, int protocolType); + }; +} \ No newline at end of file diff --git a/VoidNet/VoidNet/TCPConnection.cpp b/VoidNet/VoidNet/TCPConnection.cpp new file mode 100644 index 0000000..e864e81 --- /dev/null +++ b/VoidNet/VoidNet/TCPConnection.cpp @@ -0,0 +1 @@ +#include "TCPConnection.h" \ No newline at end of file diff --git a/VoidNet/VoidNet/TCPConnection.h b/VoidNet/VoidNet/TCPConnection.h new file mode 100644 index 0000000..b386f9a --- /dev/null +++ b/VoidNet/VoidNet/TCPConnection.h @@ -0,0 +1,6 @@ +#pragma once + +struct TCPConnection +{ + +}; \ No newline at end of file diff --git a/VoidNet/VoidNet/TCPServer.cpp b/VoidNet/VoidNet/TCPServer.cpp new file mode 100644 index 0000000..a02832b --- /dev/null +++ b/VoidNet/VoidNet/TCPServer.cpp @@ -0,0 +1 @@ +#include "TCPServer.h" \ No newline at end of file diff --git a/VoidNet/VoidNet/TCPServer.h b/VoidNet/VoidNet/TCPServer.h new file mode 100644 index 0000000..cdb10e8 --- /dev/null +++ b/VoidNet/VoidNet/TCPServer.h @@ -0,0 +1,6 @@ +#pragma once + +struct TCPServer +{ + +}; \ No newline at end of file diff --git a/VoidNet/VoidNet/UDPClient.cpp b/VoidNet/VoidNet/UDPClient.cpp new file mode 100644 index 0000000..e69de29 diff --git a/VoidNet/VoidNet/UDPClient.h b/VoidNet/VoidNet/UDPClient.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/VoidNet/VoidNet/UDPClient.h @@ -0,0 +1 @@ +#pragma once diff --git a/VoidNet/VoidNet/UDPServer.cpp b/VoidNet/VoidNet/UDPServer.cpp new file mode 100644 index 0000000..e69de29 diff --git a/VoidNet/VoidNet/UDPServer.h b/VoidNet/VoidNet/UDPServer.h new file mode 100644 index 0000000..6f70f09 --- /dev/null +++ b/VoidNet/VoidNet/UDPServer.h @@ -0,0 +1 @@ +#pragma once diff --git a/VoidNet/VoidNet/VoidNet.vcxproj b/VoidNet/VoidNet/VoidNet.vcxproj index 289e838..0b13aec 100644 --- a/VoidNet/VoidNet/VoidNet.vcxproj +++ b/VoidNet/VoidNet/VoidNet.vcxproj @@ -31,7 +31,7 @@ MultiByte - Application + StaticLibrary false v140 true @@ -95,6 +95,9 @@ true true + + ws2_32.lib;%(AdditionalDependencies) + @@ -110,11 +113,19 @@ - + + + + + - + + + + + diff --git a/VoidNet/VoidNet/VoidNet.vcxproj.filters b/VoidNet/VoidNet/VoidNet.vcxproj.filters index b22c1ab..01bc47d 100644 --- a/VoidNet/VoidNet/VoidNet.vcxproj.filters +++ b/VoidNet/VoidNet/VoidNet.vcxproj.filters @@ -15,15 +15,39 @@ - + Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files