From ae1320e31f0610fc252717723df64534958917e4 Mon Sep 17 00:00:00 2001 From: timerix Date: Fri, 12 Aug 2022 22:26:58 +0600 Subject: [PATCH 01/13] small changes --- tests/test_dtsod.c | 4 ++-- tests/test_hashtable.c | 2 +- tests/test_searchtree.c | 2 +- tests/test_string.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_dtsod.c b/tests/test_dtsod.c index 317c7da..cf238d2 100644 --- a/tests/test_dtsod.c +++ b/tests/test_dtsod.c @@ -33,7 +33,7 @@ void print_dtsod(Hashtable* dtsod){ } void test_dtsod(){ - //optime(__func__,1,({ + optime(__func__,1,({ printf("\e[96m-------------[test_dtsod]-------------\n"); Hashtable* dtsod; char* s; @@ -61,5 +61,5 @@ void test_dtsod(){ })); free(s); - //})); + })); } \ No newline at end of file diff --git a/tests/test_hashtable.c b/tests/test_hashtable.c index 61d74e7..8ff1d53 100644 --- a/tests/test_hashtable.c +++ b/tests/test_hashtable.c @@ -63,7 +63,7 @@ Unitype gett(Hashtable* ht){ void test_hashtable(){ optime("test_hashtable",1,({ - printf("\e[96m-----------[test_hashtable]------------\n"); + printf("\e[96m-----------[test_hashtable]-----------\n"); Hashtable* ht=Hashtable_create(); printf("\e[92mhashtable created\n"); print_hashtable(ht); diff --git a/tests/test_searchtree.c b/tests/test_searchtree.c index 2cb24a1..cb4600e 100644 --- a/tests/test_searchtree.c +++ b/tests/test_searchtree.c @@ -23,7 +23,7 @@ void printstnode(STNode* node){ void test_searchtree(){ optime("test_searchtree",1,({ - printf("\e[96m-----------[test_searchtree]-----------\n"); + printf("\e[96m-----------[test_searchtree]----------\n"); STNode* node=STNode_create(); printf("\e[92mnode created\n"); printf("push:\e[94m\n "); diff --git a/tests/test_string.c b/tests/test_string.c index 047f84d..9a6aac2 100644 --- a/tests/test_string.c +++ b/tests/test_string.c @@ -3,7 +3,7 @@ void test_string(){ optime(__func__,1,({ - printf("\e[96m-------------[test_string]-------------\n"); + printf("\e[96m-------------[test_string]------------\n"); char c[]="0123456789abcdef"; string s={.ptr=c, .length=cptr_length(c)}; if(s.length!=sizeof(c)-1) throw("string created with incorrect length"); From 4ec2984b5a6bb3ad4f5b7ce986022e6afa6a2147 Mon Sep 17 00:00:00 2001 From: timerix Date: Fri, 12 Aug 2022 22:27:23 +0600 Subject: [PATCH 02/13] network.h --- src/Network/network.c | 41 ++++++++++++++++++++ src/Network/network.h | 89 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 src/Network/network.c diff --git a/src/Network/network.c b/src/Network/network.c new file mode 100644 index 0000000..6a29d30 --- /dev/null +++ b/src/Network/network.c @@ -0,0 +1,41 @@ +#include "network.h" + +Maybe knIPV4Address_fromStr(char* addrStr){ + char* addrStr_src=addrStr; + char* errmsg_extra="wrong char"; + uint8 c; + knIPV4Address addr; + addr.address=0; + uint16 n=0; + for(uint8 i=0; i<4; ){ + c=*addrStr++; + switch (c){ + case '\0': + if(i<3) { + errmsg_extra="end of string"; + goto default_case; + } + case '.': + addr.bytes[i++]=n; + n=0; + break; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + n=n*10+c-'0'; + if(n>255) { + errmsg_extra="one part of address > 255"; + goto default_case; + } + break; + default_case: + default: + uint32 errmsgL=cptr_length(addrStr) + 80; + char* errmsg=malloc(errmsgL); + IFWIN(sprintf_s(errmsg, errmsgL, "wrong ip address string: %s\n %s", addrStr_src, errmsg_extra), + sprintf( errmsg, "wrong ip address string: %s\n %s", addrStr_src, errmsg_extra)); + safethrow(errmsg,;); + break; + } + } + return SUCCESS(Uni(UInt64, (uint64)addr.address)); +} \ No newline at end of file diff --git a/src/Network/network.h b/src/Network/network.h index f877cac..d55b38d 100644 --- a/src/Network/network.h +++ b/src/Network/network.h @@ -6,7 +6,12 @@ extern "C" { #include "../Hashtable/Hashtable.h" -#if defined(_MSC_VER) || defined(_WIN64) || defined(_WIN32) + +#if defined(_MSC_VER) || defined(_WIN64) || defined(_WIN32) || 1 + #define KN_USE_WINSOCK 1 +#endif + +#if KN_USE_WINSOCK #include "winsock.h" #else #include "../Hashtable/Hashtable.h" @@ -16,28 +21,96 @@ extern "C" { #include #endif -#define KNPAC_MAX_DATA_SIZE 65503 +#define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(uint8*)) -typedef struct knPackage{ + +typedef enum __attribute__((__packed__)) knPacVersion { + knPac_V1 +} knPacVersion; + +typedef struct knPackage { char header[5]; // knpac - uint8 version; // protocol version - uint16 data_size; // size of data block in bytes (1-) + knPacVersion version; // protocol version + uint16 data_size; // size of data block in bytes (1-KNPAC_MAX_DATA_SIZE) uint32 package_num; // number in sequence of sent packages uint32 destination_hash; // hash32 of knDestination.name uint64 data_hash; // hash64 of data uint8* data; // ptr to data } knPackage; -typedef struct knDestination{ - char* name; +typedef struct knPackageQueueElem knPackageQueueElem; +struct knPackageQueueElem { + union{ + knPackage; + knPackage package; + }; + knPackageQueueElem* previousElem; + knPackageQueueElem* nextElem; +}; + +typedef struct knDestination { + knPackageQueueElem* queueStart; } knDestination; +typedef union knIPV4Address { + uint32 address; + char bytes[4]; +} knIPV4Address; + +#define knIPV4Address_fromBytes(A, B, C, D) (knIPV4Address){.bytes={A,B,C,D}} + +///@return Maybe as Maybe +Maybe knIPV4Address_fromStr(char* addrStr); + +typedef uint16 knPort; + +typedef struct __attribute__((__packed__)) knIPV4Endpoint { + knIPV4Address address; + knPort port; +} knIPV4Endpoint; + +#define knIPV4Endpoint_create(ADDR, PORT) (knIPV4Endpoint){ADDR, PORT} + +typedef enum __attribute__((__packed__)) knSockType { + knSockType_TCP, knSockType_UDP +} knSockType; + typedef struct knSocket { - Hashtable* destinations; + knDestination* destinations; int socketfd; + knSockType type; + knIPV4Endpoint localEndpoint; + knIPV4Endpoint remoteEndpoint; } knSocket; +///@returns Maybe new socket +Maybe knSocket_open(knSockType sockType); + +///@return Maybe error or nothing +Maybe knSocket_close(knSocket* socket); + +///sets socket local endpoint +///@return Maybe error or nothing +Maybe knSocket_bind(knSocket* socket, knIPV4Endpoint localEndp); + +///sets socket remote endpoint +///@return Maybe error or nothing +Maybe knSocket_connect(knSocket* socket, knIPV4Endpoint remoteEndp); + +///@return Maybe new socket connected to client +Maybe knSocket_accept(knSocket* socket); + +///@param dataLength 0-4294967295 +///@return Maybe +Maybe knSocket_send(knSocket* socket, uint8* data, uint32 dataLength); + +///@param buffer buffer for recieving data +///@param bufferLength 0-4294967295 +///@return Maybe recieved bytes amount +Maybe knSocket_recieve(knSocket* socket, uint8* buffer, uint32 bufferLength); + + #if __cplusplus } #endif \ No newline at end of file From d96bebaf45b6264216100cc7f498e214fcf7054a Mon Sep 17 00:00:00 2001 From: timerix Date: Fri, 12 Aug 2022 22:27:34 +0600 Subject: [PATCH 03/13] test_network --- tests/main.cpp | 1 + tests/test_network.c | 29 +++++++++++++++++++++++++++++ tests/tests.h | 1 + 3 files changed, 31 insertions(+) create mode 100644 tests/test_network.c diff --git a/tests/main.cpp b/tests/main.cpp index 10f54f3..b68a42d 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -8,6 +8,7 @@ void test_all(){ test_hash_functions(); test_hashtable(); test_dtsod(); + test_network(); printf("\e[96m--------------------------------------\e[0m\n"); } diff --git a/tests/test_network.c b/tests/test_network.c new file mode 100644 index 0000000..8ef2b33 --- /dev/null +++ b/tests/test_network.c @@ -0,0 +1,29 @@ +#include "tests.h" +#include "../src/Network/network.h" + +void __test_knIPV4Address_fromStr(char* addrStr, uint8 a, uint8 b, uint8 c, uint8 d){ + tryLast(knIPV4Address_fromStr(addrStr), maybeAddr){ + knIPV4Address addr; + addr.address=(uint32)maybeAddr.value.UInt64; + printf("\e[94mknIPV4Address_fromStr(\e[96m%s\e[94m) -> ", addrStr); + if(maybeAddr.value.UInt64!=knIPV4Address_fromBytes(a,b,c,d).address){ + printf("\e[91m%u.%u.%u.%u\n", + (uint8)addr.bytes[0], (uint8)addr.bytes[1], (uint8)addr.bytes[2], (uint8)addr.bytes[3]); + throw("knIPV4Address_fromStr returned wrong value"); + } + else printf("\e[92m%u.%u.%u.%u\n", + (uint8)addr.bytes[0], (uint8)addr.bytes[1], (uint8)addr.bytes[2], (uint8)addr.bytes[3]); + } +} +#define test_knIPV4Address_fromStr(a,b,c,d) __test_knIPV4Address_fromStr(#a"."#b"."#c"."#d, a,b,c,d) + +void test_network(){ + optime(__func__,1,({ + printf("\e[96m------------[test_network]------------\n"); + if(sizeof(knIPV4Endpoint)!=sizeof(knPort)+sizeof(knIPV4Address)) + throw(ERR_WRONGTYPE); + test_knIPV4Address_fromStr(127,0,0,1); + test_knIPV4Address_fromStr(34,255,45,0); + test_knIPV4Address_fromStr(3,3,3,128); + })); +} \ No newline at end of file diff --git a/tests/tests.h b/tests/tests.h index d19ea17..012a7e2 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -13,6 +13,7 @@ void test_autoarr(); void test_hash_functions(); void test_hashtable(); void test_dtsod(); +void test_network(); #if __cplusplus } From 4e162bd474da2e123da0d8be38e6cca4fc1a98ef Mon Sep 17 00:00:00 2001 From: timerix Date: Sat, 13 Aug 2022 00:53:30 +0600 Subject: [PATCH 04/13] Network/* structure changed --- src/Network/{network.c => knAddress.c} | 6 +- src/Network/knAddress.h | 32 ++++++++ src/Network/knPackage.c | 3 + src/Network/knPackage.h | 46 +++++++++++ src/Network/knSocket.c | 43 +++++++++- src/Network/knSocket.h | 57 +++++++++++++ src/Network/network.h | 107 ++----------------------- src/Network/stdSocketHeaders.h | 21 +++++ src/base/std.h | 1 + src/base/types.h | 4 +- tests/test_network.c | 8 ++ 11 files changed, 220 insertions(+), 108 deletions(-) rename src/Network/{network.c => knAddress.c} (93%) create mode 100644 src/Network/knAddress.h create mode 100644 src/Network/knPackage.c create mode 100644 src/Network/knPackage.h create mode 100644 src/Network/knSocket.h create mode 100644 src/Network/stdSocketHeaders.h diff --git a/src/Network/network.c b/src/Network/knAddress.c similarity index 93% rename from src/Network/network.c rename to src/Network/knAddress.c index 6a29d30..cd0a8b2 100644 --- a/src/Network/network.c +++ b/src/Network/knAddress.c @@ -1,4 +1,4 @@ -#include "network.h" +#include "knAddress.h" Maybe knIPV4Address_fromStr(char* addrStr){ char* addrStr_src=addrStr; @@ -31,11 +31,11 @@ Maybe knIPV4Address_fromStr(char* addrStr){ default: uint32 errmsgL=cptr_length(addrStr) + 80; char* errmsg=malloc(errmsgL); - IFWIN(sprintf_s(errmsg, errmsgL, "wrong ip address string: %s\n %s", addrStr_src, errmsg_extra), + IFMSC(sprintf_s(errmsg, errmsgL, "wrong ip address string: %s\n %s", addrStr_src, errmsg_extra), sprintf( errmsg, "wrong ip address string: %s\n %s", addrStr_src, errmsg_extra)); safethrow(errmsg,;); break; } } return SUCCESS(Uni(UInt64, (uint64)addr.address)); -} \ No newline at end of file +} diff --git a/src/Network/knAddress.h b/src/Network/knAddress.h new file mode 100644 index 0000000..737421e --- /dev/null +++ b/src/Network/knAddress.h @@ -0,0 +1,32 @@ +#pragma once + +#if __cplusplus +extern "C" { +#endif + +#include "../base/base.h" + + +typedef uint16 knPort; + +typedef union knIPV4Address { + uint32 address; + char bytes[4]; +} knIPV4Address; + +#define knIPV4Address_fromBytes(A, B, C, D) (knIPV4Address){.bytes={A,B,C,D}} + +///@return Maybe as Maybe +Maybe knIPV4Address_fromStr(char* addrStr); + +typedef struct __attribute__((__packed__)) knIPV4Endpoint { + knIPV4Address address; + knPort port; +} knIPV4Endpoint; + +#define knIPV4Endpoint_create(ADDR, PORT) (knIPV4Endpoint){ADDR, PORT} + + +#if __cplusplus +} +#endif \ No newline at end of file diff --git a/src/Network/knPackage.c b/src/Network/knPackage.c new file mode 100644 index 0000000..630b426 --- /dev/null +++ b/src/Network/knPackage.c @@ -0,0 +1,3 @@ +#include "knPackage.h" + + diff --git a/src/Network/knPackage.h b/src/Network/knPackage.h new file mode 100644 index 0000000..f5396f0 --- /dev/null +++ b/src/Network/knPackage.h @@ -0,0 +1,46 @@ +#pragma once + +#if __cplusplus +extern "C" { +#endif + +#include "../base/base.h" + + +#define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(uint8*)) + + +typedef enum __attribute__((__packed__)) knPacVersion { + knPac_V1 +} knPacVersion; + +static const char knPacHeader[5]={'k','n','p','a','c'}; + +typedef struct knPackage { + char header[5]; // knpac + knPacVersion version; // protocol version + uint16 data_size; // size of data block in bytes (1-KNPAC_MAX_DATA_SIZE) + uint32 channel_id; // id of knChannel in socket + uint32 package_num; // number in sequence of sent packages + uint64 data_hash; // hash64 of data + uint8* data; // ptr to data +} knPackage; + +typedef struct knPackageQueueElem knPackageQueueElem; +struct knPackageQueueElem { + union { + knPackage; + knPackage package; + }; + knPackageQueueElem* previousElem; + knPackageQueueElem* nextElem; +}; + +typedef struct knChannel { + knPackageQueueElem* queueStart; +} knChannel; + + +#if __cplusplus +} +#endif \ No newline at end of file diff --git a/src/Network/knSocket.c b/src/Network/knSocket.c index f0dec47..7e23819 100644 --- a/src/Network/knSocket.c +++ b/src/Network/knSocket.c @@ -1 +1,42 @@ -#include "network.h" \ No newline at end of file +#include "knSocket.h" +#include "stdSocketHeaders.h" + + +Maybe knSocket_open(knSockType sockType){ + knSocket* newSocket=malloc(sizeof(knSocket)); + newSocket->type=sockType; + newSocket->channels=NULL; + newSocket->channelsAmount=0; + newSocket->localEndpoint=knIPV4Endpoint_create(knIPV4Address_fromBytes(0,0,0,0),0); + newSocket->remoteEndpoint=newSocket->localEndpoint; + switch(sockType){ + default: + safethrow("unknown socket type", free(newSocket)); + break; + case knSockType_TCP: + newSocket->socketfd=socket(AF_INET, SOCK_STREAM, 0); + if(newSocket->socketfd==-1) + safethrow("can't create TCP socket", free(newSocket)); + break; + case knSockType_UDP: + newSocket->socketfd=socket(AF_INET, SOCK_DGRAM, 0); + if(newSocket->socketfd==-1) + safethrow("can't create UDP socket", free(newSocket)); + break; + } + return SUCCESS(UniPtr(knSocketPtr, newSocket)); +} + +Maybe knSocket_close(knSocket* knsocket){ + int rezult= +#if KN_USE_WINSOCK + closesocket +#else + close +#endif + (knsocket->socketfd); + if(rezult==-1) { + safethrow("can't close socket",;); + } + else return SUCCESS(UniNull); +} \ No newline at end of file diff --git a/src/Network/knSocket.h b/src/Network/knSocket.h new file mode 100644 index 0000000..272e4a1 --- /dev/null +++ b/src/Network/knSocket.h @@ -0,0 +1,57 @@ +#pragma once + +#if __cplusplus +extern "C" { +#endif + +#include "../base/base.h" +#include "knAddress.h" +#include "knPackage.h" + + +typedef enum __attribute__((__packed__)) knSockType { + knSockType_TCP, knSockType_UDP +} knSockType; + +typedef struct knSocket { + knSockType type; + uint16 channelsAmount; + knChannel* channels; + int64 socketfd; + knIPV4Endpoint localEndpoint; + knIPV4Endpoint remoteEndpoint; +} knSocket; + +///@return Maybe new socket +Maybe knSocket_open(knSockType sockType); + +///@return Maybe error or nothing +Maybe knSocket_close(knSocket* socket); + +///@return Maybe channel index +Maybe knSocket_createChannel(knSocket* socket); + +///sets socket local endpoint +///@return Maybe error or nothing +Maybe knSocket_bind(knSocket* socket, knIPV4Endpoint localEndp); + +///sets socket remote endpoint +///@return Maybe error or nothing +Maybe knSocket_connect(knSocket* socket, knIPV4Endpoint remoteEndp); + +///@return Maybe new socket connected to client +Maybe knSocket_accept(knSocket* socket); + +///@param dataLength 0-4294967295 +///@return Maybe +Maybe knSocket_send(knSocket* socket, uint16 destinationIndex, uint8* data, uint32 dataLength); + +///@param buffer buffer for recieving data +///@param bufferLength 0-4294967295 +///@return Maybe recieved bytes amount +Maybe knSocket_recieve(knSocket* socket, uint16 destinationIndex, uint8* buffer, uint32 bufferLength); + + +#if __cplusplus +} +#endif \ No newline at end of file diff --git a/src/Network/network.h b/src/Network/network.h index d55b38d..5c1c308 100644 --- a/src/Network/network.h +++ b/src/Network/network.h @@ -4,112 +4,15 @@ extern "C" { #endif -#include "../Hashtable/Hashtable.h" +#include "../base/base.h" - -#if defined(_MSC_VER) || defined(_WIN64) || defined(_WIN32) || 1 +#if defined(_MSC_VER) || defined(_WIN64) || defined(_WIN32) || 0 #define KN_USE_WINSOCK 1 #endif -#if KN_USE_WINSOCK - #include "winsock.h" -#else - #include "../Hashtable/Hashtable.h" - #include - #include - #include - #include -#endif - -#define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(uint8*)) - - -typedef enum __attribute__((__packed__)) knPacVersion { - knPac_V1 -} knPacVersion; - -typedef struct knPackage { - char header[5]; // knpac - knPacVersion version; // protocol version - uint16 data_size; // size of data block in bytes (1-KNPAC_MAX_DATA_SIZE) - uint32 package_num; // number in sequence of sent packages - uint32 destination_hash; // hash32 of knDestination.name - uint64 data_hash; // hash64 of data - uint8* data; // ptr to data -} knPackage; - -typedef struct knPackageQueueElem knPackageQueueElem; -struct knPackageQueueElem { - union{ - knPackage; - knPackage package; - }; - knPackageQueueElem* previousElem; - knPackageQueueElem* nextElem; -}; - -typedef struct knDestination { - knPackageQueueElem* queueStart; - -} knDestination; - -typedef union knIPV4Address { - uint32 address; - char bytes[4]; -} knIPV4Address; - -#define knIPV4Address_fromBytes(A, B, C, D) (knIPV4Address){.bytes={A,B,C,D}} - -///@return Maybe as Maybe -Maybe knIPV4Address_fromStr(char* addrStr); - -typedef uint16 knPort; - -typedef struct __attribute__((__packed__)) knIPV4Endpoint { - knIPV4Address address; - knPort port; -} knIPV4Endpoint; - -#define knIPV4Endpoint_create(ADDR, PORT) (knIPV4Endpoint){ADDR, PORT} - -typedef enum __attribute__((__packed__)) knSockType { - knSockType_TCP, knSockType_UDP -} knSockType; - -typedef struct knSocket { - knDestination* destinations; - int socketfd; - knSockType type; - knIPV4Endpoint localEndpoint; - knIPV4Endpoint remoteEndpoint; -} knSocket; - -///@returns Maybe new socket -Maybe knSocket_open(knSockType sockType); - -///@return Maybe error or nothing -Maybe knSocket_close(knSocket* socket); - -///sets socket local endpoint -///@return Maybe error or nothing -Maybe knSocket_bind(knSocket* socket, knIPV4Endpoint localEndp); - -///sets socket remote endpoint -///@return Maybe error or nothing -Maybe knSocket_connect(knSocket* socket, knIPV4Endpoint remoteEndp); - -///@return Maybe new socket connected to client -Maybe knSocket_accept(knSocket* socket); - -///@param dataLength 0-4294967295 -///@return Maybe -Maybe knSocket_send(knSocket* socket, uint8* data, uint32 dataLength); - -///@param buffer buffer for recieving data -///@param bufferLength 0-4294967295 -///@return Maybe recieved bytes amount -Maybe knSocket_recieve(knSocket* socket, uint8* buffer, uint32 bufferLength); - +#include "knAddress.h" +#include "knPackage.h" +#include "knSocket.h" #if __cplusplus } diff --git a/src/Network/stdSocketHeaders.h b/src/Network/stdSocketHeaders.h new file mode 100644 index 0000000..5c0cd0c --- /dev/null +++ b/src/Network/stdSocketHeaders.h @@ -0,0 +1,21 @@ +#pragma once + +#if __cplusplus +extern "C" { +#endif + +#include "network.h" + +#if KN_USE_WINSOCK + #include "winsock.h" +#else + #include + #include + #include + #include + #include +#endif + +#if __cplusplus +} +#endif \ No newline at end of file diff --git a/src/base/std.h b/src/base/std.h index 815c63c..09193de 100644 --- a/src/base/std.h +++ b/src/base/std.h @@ -11,6 +11,7 @@ extern "C" { #include #include #include +#include #define dbg(N) printf("\e[95m%d\n",N) diff --git a/src/base/types.h b/src/base/types.h index c061ad2..e34d95f 100644 --- a/src/base/types.h +++ b/src/base/types.h @@ -24,9 +24,9 @@ typedef enum __attribute__((__packed__)) my_type { UniversalType, AutoarrInt8Ptr, AutoarrUInt8Ptr, AutoarrInt16Ptr, AutoarrUInt16Ptr, AutoarrInt32Ptr, AutoarrUInt32Ptr, AutoarrInt64Ptr, AutoarrUInt64Ptr, - AutoarrUnitypePtr, AutoarrKVPairPtr + AutoarrUnitypePtr, AutoarrKVPairPtr, knSocketPtr } my_type; -#define my_type_last AutoarrKVPairPtr +#define my_type_last knSocketPtr const char* my_type_name(my_type t); diff --git a/tests/test_network.c b/tests/test_network.c index 8ef2b33..2b52bce 100644 --- a/tests/test_network.c +++ b/tests/test_network.c @@ -22,8 +22,16 @@ void test_network(){ printf("\e[96m------------[test_network]------------\n"); if(sizeof(knIPV4Endpoint)!=sizeof(knPort)+sizeof(knIPV4Address)) throw(ERR_WRONGTYPE); + test_knIPV4Address_fromStr(127,0,0,1); test_knIPV4Address_fromStr(34,255,45,0); test_knIPV4Address_fromStr(3,3,3,128); + + knSocket* s; + tryLast(knSocket_open(knSockType_TCP), maybeS) + s=maybeS.value.VoidPtr; + printf("\e[92mTCP socket created\n"); + tryLast(knSocket_close(s);,_); + printf("\e[92mTCP socket closed\n"); })); } \ No newline at end of file From 7ba7201d3a628fd3107b74ee4b7fbbcae8fe97fa Mon Sep 17 00:00:00 2001 From: timerix Date: Sun, 14 Aug 2022 13:23:39 +0600 Subject: [PATCH 05/13] PACK() macro --- kerep.vcxproj | 11 ++++++++++- src/Autoarr/Autoarr.c | 8 ++++---- src/Network/README.md | 0 src/Network/knAddress.h | 2 +- src/Network/knPackage.h | 4 ++-- src/Network/knSocket.c | 6 +++--- src/Network/knSocket.h | 10 +++++----- src/Network/stdSocketHeaders.h | 3 ++- src/base/std.h | 11 ++++++++++- src/base/types.h | 4 ++-- tests/test_network.c | 11 ++++++++--- tests/test_searchtree.c | 4 ++-- tests/tests.h | 2 ++ 13 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 src/Network/README.md diff --git a/kerep.vcxproj b/kerep.vcxproj index cd2ba68..8579686 100644 --- a/kerep.vcxproj +++ b/kerep.vcxproj @@ -32,6 +32,8 @@ + + @@ -44,6 +46,7 @@ + @@ -64,7 +67,11 @@ + + + + @@ -75,7 +82,7 @@ Win32Proj {52f0bd29-a3cb-47ce-b25d-ceaf5dfb2d73} kerep - 10.0.18362.0 + 10.0 @@ -218,6 +225,8 @@ Default stdcpp20 None + true + true Windows diff --git a/src/Autoarr/Autoarr.c b/src/Autoarr/Autoarr.c index 90346bb..48d595a 100644 --- a/src/Autoarr/Autoarr.c +++ b/src/Autoarr/Autoarr.c @@ -1,9 +1,9 @@ #include "Autoarr.h" -Autoarr_define(uint8) -Autoarr_define(int8) -Autoarr_define(uint16) -Autoarr_define(int16) +Autoarr_define(uint8); +Autoarr_define(int8); +Autoarr_define(uint16); +Autoarr_define(int16); Autoarr_define(uint32); Autoarr_define(int32); Autoarr_define(uint64); diff --git a/src/Network/README.md b/src/Network/README.md new file mode 100644 index 0000000..e69de29 diff --git a/src/Network/knAddress.h b/src/Network/knAddress.h index 737421e..ff42021 100644 --- a/src/Network/knAddress.h +++ b/src/Network/knAddress.h @@ -19,7 +19,7 @@ typedef union knIPV4Address { ///@return Maybe as Maybe Maybe knIPV4Address_fromStr(char* addrStr); -typedef struct __attribute__((__packed__)) knIPV4Endpoint { +typedef struct knIPV4Endpoint { knIPV4Address address; knPort port; } knIPV4Endpoint; diff --git a/src/Network/knPackage.h b/src/Network/knPackage.h index f5396f0..ab7aeca 100644 --- a/src/Network/knPackage.h +++ b/src/Network/knPackage.h @@ -10,9 +10,9 @@ extern "C" { #define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(uint8*)) -typedef enum __attribute__((__packed__)) knPacVersion { +typedef enum knPacVersion PACK({ knPac_V1 -} knPacVersion; +}) knPacVersion; static const char knPacHeader[5]={'k','n','p','a','c'}; diff --git a/src/Network/knSocket.c b/src/Network/knSocket.c index 7e23819..97ffa27 100644 --- a/src/Network/knSocket.c +++ b/src/Network/knSocket.c @@ -2,7 +2,7 @@ #include "stdSocketHeaders.h" -Maybe knSocket_open(knSockType sockType){ +Maybe knSocket_open(knSocketType sockType){ knSocket* newSocket=malloc(sizeof(knSocket)); newSocket->type=sockType; newSocket->channels=NULL; @@ -13,12 +13,12 @@ Maybe knSocket_open(knSockType sockType){ default: safethrow("unknown socket type", free(newSocket)); break; - case knSockType_TCP: + case knSocketType_TCP: newSocket->socketfd=socket(AF_INET, SOCK_STREAM, 0); if(newSocket->socketfd==-1) safethrow("can't create TCP socket", free(newSocket)); break; - case knSockType_UDP: + case knSocketType_UDP: newSocket->socketfd=socket(AF_INET, SOCK_DGRAM, 0); if(newSocket->socketfd==-1) safethrow("can't create UDP socket", free(newSocket)); diff --git a/src/Network/knSocket.h b/src/Network/knSocket.h index 272e4a1..337f012 100644 --- a/src/Network/knSocket.h +++ b/src/Network/knSocket.h @@ -9,12 +9,12 @@ extern "C" { #include "knPackage.h" -typedef enum __attribute__((__packed__)) knSockType { - knSockType_TCP, knSockType_UDP -} knSockType; +typedef enum knSocketType PACK({ + knSocketType_TCP, knSocketType_UDP +}) knSocketType; typedef struct knSocket { - knSockType type; + knSocketType type; uint16 channelsAmount; knChannel* channels; int64 socketfd; @@ -23,7 +23,7 @@ typedef struct knSocket { } knSocket; ///@return Maybe new socket -Maybe knSocket_open(knSockType sockType); +Maybe knSocket_open(knSocketType sockType); ///@return Maybe error or nothing Maybe knSocket_close(knSocket* socket); diff --git a/src/Network/stdSocketHeaders.h b/src/Network/stdSocketHeaders.h index 5c0cd0c..3be12d3 100644 --- a/src/Network/stdSocketHeaders.h +++ b/src/Network/stdSocketHeaders.h @@ -13,7 +13,8 @@ extern "C" { #include #include #include - #include + #include + #include #endif #if __cplusplus diff --git a/src/base/std.h b/src/base/std.h index 09193de..7d7138a 100644 --- a/src/base/std.h +++ b/src/base/std.h @@ -11,7 +11,6 @@ extern "C" { #include #include #include -#include #define dbg(N) printf("\e[95m%d\n",N) @@ -36,6 +35,7 @@ extern "C" { #pragma GCC error "unknown compiler" #endif + #ifdef _MSC_VER #define IFWIN(YES, NO) YES #define IFMSC(YES, NO) YES @@ -53,6 +53,15 @@ extern "C" { #define NULL ((void*)0) #endif + +#ifdef __GNUC__ + #define PACK(...) __VA_ARGS__ __attribute__((__packed__)) +#elif defined(_MSC_VER) + #define PACK(...) __pragma(pack(push, 1)) __VA_ARGS__ __pragma(pack(pop)) +#endif + + + #if __cplusplus } #endif \ No newline at end of file diff --git a/src/base/types.h b/src/base/types.h index e34d95f..49df7da 100644 --- a/src/base/types.h +++ b/src/base/types.h @@ -16,7 +16,7 @@ typedef int64_t int64; typedef uint64_t uint64; typedef float float32; typedef double float64; -typedef enum __attribute__((__packed__)) my_type { +typedef enum my_type PACK({ Null, Float32, Float64, Char, Bool, UInt8, Int8, UInt16, Int16, UInt32, Int32, UInt64, Int64, UInt8Ptr, Int8Ptr, UInt16Ptr, Int16Ptr, UInt32Ptr, Int32Ptr, UInt64Ptr, Int64Ptr, @@ -25,7 +25,7 @@ typedef enum __attribute__((__packed__)) my_type { AutoarrInt8Ptr, AutoarrUInt8Ptr, AutoarrInt16Ptr, AutoarrUInt16Ptr, AutoarrInt32Ptr, AutoarrUInt32Ptr, AutoarrInt64Ptr, AutoarrUInt64Ptr, AutoarrUnitypePtr, AutoarrKVPairPtr, knSocketPtr -} my_type; +}) my_type; #define my_type_last knSocketPtr const char* my_type_name(my_type t); diff --git a/tests/test_network.c b/tests/test_network.c index 2b52bce..8df3f07 100644 --- a/tests/test_network.c +++ b/tests/test_network.c @@ -20,15 +20,20 @@ void __test_knIPV4Address_fromStr(char* addrStr, uint8 a, uint8 b, uint8 c, uint void test_network(){ optime(__func__,1,({ printf("\e[96m------------[test_network]------------\n"); - if(sizeof(knIPV4Endpoint)!=sizeof(knPort)+sizeof(knIPV4Address)) - throw(ERR_WRONGTYPE); + + PRINT_SIZEOF(knIPV4Address); + PRINT_SIZEOF(knPort); + PRINT_SIZEOF(knIPV4Endpoint); + PRINT_SIZEOF(knPackage); + PRINT_SIZEOF(knChannel); + PRINT_SIZEOF(knSocket); test_knIPV4Address_fromStr(127,0,0,1); test_knIPV4Address_fromStr(34,255,45,0); test_knIPV4Address_fromStr(3,3,3,128); knSocket* s; - tryLast(knSocket_open(knSockType_TCP), maybeS) + tryLast(knSocket_open(knSocketType_TCP), maybeS) s=maybeS.value.VoidPtr; printf("\e[92mTCP socket created\n"); tryLast(knSocket_close(s);,_); diff --git a/tests/test_searchtree.c b/tests/test_searchtree.c index cb4600e..cff22a5 100644 --- a/tests/test_searchtree.c +++ b/tests/test_searchtree.c @@ -7,7 +7,7 @@ void printstnode(STNode* node){ "\n address: %p\n value: ",sizeof(STNode),node); printuni(node->value); // prints pointers to all existing branches - printf("\n branches: %p\n", node->branches); + /* printf("\n branches: %p\n", node->branches); if(node->branches) for(uint8 i=0;i<8;i++){ printf(" \e[90m[%u]=%p\n",i,node->branches[i]); if(node->branches[i]) @@ -18,7 +18,7 @@ void printstnode(STNode* node){ printf(" \e[90m[%u]=%p\n",iii,node->branches[i][ii][iii]); } - } + } */ } void test_searchtree(){ diff --git a/tests/tests.h b/tests/tests.h index 012a7e2..eb66a8f 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -15,6 +15,8 @@ void test_hashtable(); void test_dtsod(); void test_network(); +#define PRINT_SIZEOF(T) printf("\e[94m" #T " size: \e[96m" IFWIN("%llu", "%lu") "\n", sizeof(T)) + #if __cplusplus } #endif \ No newline at end of file From 171d5c476341293d07fe9fc54798358f895866cc Mon Sep 17 00:00:00 2001 From: timerix Date: Sun, 14 Aug 2022 14:21:14 +0600 Subject: [PATCH 06/13] fixed visual studio project --- kerep.vcxproj | 20 ++++++++------------ src/Network/stdSocketHeaders.h | 2 +- src/base/std.h | 12 +----------- 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/kerep.vcxproj b/kerep.vcxproj index 8579686..159f0fe 100644 --- a/kerep.vcxproj +++ b/kerep.vcxproj @@ -40,10 +40,8 @@ - - @@ -52,7 +50,6 @@ - @@ -64,7 +61,6 @@ - @@ -169,9 +165,9 @@ stdc17 Speed - /Zc:twoPhase- /MP %(AdditionalOptions) + /Zc:twoPhase- /MP -fms-compatibility-version=14 %(AdditionalOptions) Default - stdcpp20 + stdcpp17 None Disabled @@ -195,10 +191,10 @@ stdc17 Speed - /Zc:twoPhase- /MP %(AdditionalOptions) + /Zc:twoPhase- /MP -fms-compatibility-version=14 %(AdditionalOptions) MultiThreadedDLL Default - stdcpp20 + stdcpp17 None @@ -221,9 +217,9 @@ stdc17 Speed - /Zc:twoPhase- /MP %(AdditionalOptions) + /Zc:twoPhase- /MP -fms-compatibility-version=14 %(AdditionalOptions) Default - stdcpp20 + stdcpp17 None true true @@ -248,10 +244,10 @@ stdc17 Speed - /Zc:twoPhase- /MP %(AdditionalOptions) + /Zc:twoPhase- /MP -fms-compatibility-version=14 %(AdditionalOptions) MultiThreadedDLL Default - stdcpp20 + stdcpp17 None diff --git a/src/Network/stdSocketHeaders.h b/src/Network/stdSocketHeaders.h index 3be12d3..c115e1b 100644 --- a/src/Network/stdSocketHeaders.h +++ b/src/Network/stdSocketHeaders.h @@ -7,7 +7,7 @@ extern "C" { #include "network.h" #if KN_USE_WINSOCK - #include "winsock.h" + #include #else #include #include diff --git a/src/base/std.h b/src/base/std.h index 7d7138a..65c25fb 100644 --- a/src/base/std.h +++ b/src/base/std.h @@ -49,18 +49,8 @@ extern "C" { #pragma GCC error "unknown compiler" #endif -#ifndef NULL - #define NULL ((void*)0) -#endif - - -#ifdef __GNUC__ - #define PACK(...) __VA_ARGS__ __attribute__((__packed__)) -#elif defined(_MSC_VER) - #define PACK(...) __pragma(pack(push, 1)) __VA_ARGS__ __pragma(pack(pop)) -#endif - +#define PACK(...) __VA_ARGS__ __attribute__((__packed__)) #if __cplusplus } From 7213a361b2c7519c69c8f362c53dbc9d99ec4657 Mon Sep 17 00:00:00 2001 From: timerix Date: Sun, 14 Aug 2022 14:29:03 +0600 Subject: [PATCH 07/13] removed PACK() macro --- src/Network/knPackage.h | 4 ++-- src/Network/knSocket.h | 4 ++-- src/base/std.h | 2 -- src/base/types.h | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Network/knPackage.h b/src/Network/knPackage.h index ab7aeca..f5396f0 100644 --- a/src/Network/knPackage.h +++ b/src/Network/knPackage.h @@ -10,9 +10,9 @@ extern "C" { #define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(uint8*)) -typedef enum knPacVersion PACK({ +typedef enum __attribute__((__packed__)) knPacVersion { knPac_V1 -}) knPacVersion; +} knPacVersion; static const char knPacHeader[5]={'k','n','p','a','c'}; diff --git a/src/Network/knSocket.h b/src/Network/knSocket.h index 337f012..18fb319 100644 --- a/src/Network/knSocket.h +++ b/src/Network/knSocket.h @@ -9,9 +9,9 @@ extern "C" { #include "knPackage.h" -typedef enum knSocketType PACK({ +typedef enum __attribute__((__packed__)) knSocketType { knSocketType_TCP, knSocketType_UDP -}) knSocketType; +} knSocketType; typedef struct knSocket { knSocketType type; diff --git a/src/base/std.h b/src/base/std.h index 65c25fb..6024772 100644 --- a/src/base/std.h +++ b/src/base/std.h @@ -50,8 +50,6 @@ extern "C" { #endif -#define PACK(...) __VA_ARGS__ __attribute__((__packed__)) - #if __cplusplus } #endif \ No newline at end of file diff --git a/src/base/types.h b/src/base/types.h index 49df7da..e34d95f 100644 --- a/src/base/types.h +++ b/src/base/types.h @@ -16,7 +16,7 @@ typedef int64_t int64; typedef uint64_t uint64; typedef float float32; typedef double float64; -typedef enum my_type PACK({ +typedef enum __attribute__((__packed__)) my_type { Null, Float32, Float64, Char, Bool, UInt8, Int8, UInt16, Int16, UInt32, Int32, UInt64, Int64, UInt8Ptr, Int8Ptr, UInt16Ptr, Int16Ptr, UInt32Ptr, Int32Ptr, UInt64Ptr, Int64Ptr, @@ -25,7 +25,7 @@ typedef enum my_type PACK({ AutoarrInt8Ptr, AutoarrUInt8Ptr, AutoarrInt16Ptr, AutoarrUInt16Ptr, AutoarrInt32Ptr, AutoarrUInt32Ptr, AutoarrInt64Ptr, AutoarrUInt64Ptr, AutoarrUnitypePtr, AutoarrKVPairPtr, knSocketPtr -}) my_type; +} my_type; #define my_type_last knSocketPtr const char* my_type_name(my_type t); From 827ff474cb0889a50b7d54c951cc68937260d874 Mon Sep 17 00:00:00 2001 From: timerix Date: Tue, 16 Aug 2022 15:51:27 +0600 Subject: [PATCH 08/13] continue working on sockets --- src/Network/knSocket.c | 51 +++++++++++++++++++++++++++++++++++++++++- src/Network/knSocket.h | 2 +- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/Network/knSocket.c b/src/Network/knSocket.c index 97ffa27..68f7f50 100644 --- a/src/Network/knSocket.c +++ b/src/Network/knSocket.c @@ -39,4 +39,53 @@ Maybe knSocket_close(knSocket* knsocket){ safethrow("can't close socket",;); } else return SUCCESS(UniNull); -} \ No newline at end of file +} + +knChannel* __createChannel(){ + knChannel* ch=malloc(sizeof(knChannel)); + ch->queueStart=NULL; + return ch; +} + +Maybe knSocket_createChannel(knSocket* sock){ + if(sock->channelsAmount == 65535) + safethrow("max amount of channels",;); + uint16 channelsAmountPrev=sock->channelsAmount; + sock->channelsAmount++; + if(channelsAmountPrev==0) + sock->channels=malloc(sizeof(knChannel*)); + else + sock->channels=realloc(sock->channels, sock->channelsAmount*sizeof(knChannel*)); + sock->channels[channelsAmountPrev]=__createChannel(); + return SUCCESS(Uni(UInt64, channelsAmountPrev)); +} + +/*Maybe knSocket_bind(knSocket* sock, knIPV4Endpoint localEndp){ + if(sock->localEndpoint.address.address!=0) + safethrow("socket is bound already",;); + struct sockaddr_in addr; + addr.sin_family= + bind(sock->socketfd); + sock->localEndpoint=localEndp; + return SUCCESS(UniNull); +} + +Maybe knSocket_connect(knSocket* sock, knIPV4Endpoint remoteEndp){ + if(sock->remoteEndpoint.address.address!=0) + safethrow("socket is connected already",;); + + sock->remoteEndpoint=remoteEndp; + return SUCCESS(UniNull); +} + +Maybe knSocket_accept(knSocket* sock){ + +} + +Maybe knSocket_send(knSocket* sock, uint16 destinationIndex, uint8* data, uint32 dataLength){ + +} + +Maybe knSocket_recieve(knSocket* sock, uint16 destinationIndex, uint8* buffer, uint32 bufferLength){ + +}*/ diff --git a/src/Network/knSocket.h b/src/Network/knSocket.h index 18fb319..f9559eb 100644 --- a/src/Network/knSocket.h +++ b/src/Network/knSocket.h @@ -16,7 +16,7 @@ typedef enum __attribute__((__packed__)) knSocketType { typedef struct knSocket { knSocketType type; uint16 channelsAmount; - knChannel* channels; + knChannel** channels; int64 socketfd; knIPV4Endpoint localEndpoint; knIPV4Endpoint remoteEndpoint; From 16dcadb3f36f9989197b07b33f4fbadd9ba1b240 Mon Sep 17 00:00:00 2001 From: Timerix22 <87668556+Timerix22@users.noreply.github.com> Date: Wed, 24 Aug 2022 13:48:48 +0600 Subject: [PATCH 09/13] Delete src/Network directory --- src/Network/README.md | 0 src/Network/knAddress.c | 41 --------------- src/Network/knAddress.h | 32 ------------ src/Network/knPackage.c | 3 -- src/Network/knPackage.h | 46 ----------------- src/Network/knSocket.c | 91 ---------------------------------- src/Network/knSocket.h | 57 --------------------- src/Network/network.h | 19 ------- src/Network/stdSocketHeaders.h | 22 -------- 9 files changed, 311 deletions(-) delete mode 100644 src/Network/README.md delete mode 100644 src/Network/knAddress.c delete mode 100644 src/Network/knAddress.h delete mode 100644 src/Network/knPackage.c delete mode 100644 src/Network/knPackage.h delete mode 100644 src/Network/knSocket.c delete mode 100644 src/Network/knSocket.h delete mode 100644 src/Network/network.h delete mode 100644 src/Network/stdSocketHeaders.h diff --git a/src/Network/README.md b/src/Network/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/src/Network/knAddress.c b/src/Network/knAddress.c deleted file mode 100644 index cd0a8b2..0000000 --- a/src/Network/knAddress.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "knAddress.h" - -Maybe knIPV4Address_fromStr(char* addrStr){ - char* addrStr_src=addrStr; - char* errmsg_extra="wrong char"; - uint8 c; - knIPV4Address addr; - addr.address=0; - uint16 n=0; - for(uint8 i=0; i<4; ){ - c=*addrStr++; - switch (c){ - case '\0': - if(i<3) { - errmsg_extra="end of string"; - goto default_case; - } - case '.': - addr.bytes[i++]=n; - n=0; - break; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - n=n*10+c-'0'; - if(n>255) { - errmsg_extra="one part of address > 255"; - goto default_case; - } - break; - default_case: - default: - uint32 errmsgL=cptr_length(addrStr) + 80; - char* errmsg=malloc(errmsgL); - IFMSC(sprintf_s(errmsg, errmsgL, "wrong ip address string: %s\n %s", addrStr_src, errmsg_extra), - sprintf( errmsg, "wrong ip address string: %s\n %s", addrStr_src, errmsg_extra)); - safethrow(errmsg,;); - break; - } - } - return SUCCESS(Uni(UInt64, (uint64)addr.address)); -} diff --git a/src/Network/knAddress.h b/src/Network/knAddress.h deleted file mode 100644 index ff42021..0000000 --- a/src/Network/knAddress.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#if __cplusplus -extern "C" { -#endif - -#include "../base/base.h" - - -typedef uint16 knPort; - -typedef union knIPV4Address { - uint32 address; - char bytes[4]; -} knIPV4Address; - -#define knIPV4Address_fromBytes(A, B, C, D) (knIPV4Address){.bytes={A,B,C,D}} - -///@return Maybe as Maybe -Maybe knIPV4Address_fromStr(char* addrStr); - -typedef struct knIPV4Endpoint { - knIPV4Address address; - knPort port; -} knIPV4Endpoint; - -#define knIPV4Endpoint_create(ADDR, PORT) (knIPV4Endpoint){ADDR, PORT} - - -#if __cplusplus -} -#endif \ No newline at end of file diff --git a/src/Network/knPackage.c b/src/Network/knPackage.c deleted file mode 100644 index 630b426..0000000 --- a/src/Network/knPackage.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "knPackage.h" - - diff --git a/src/Network/knPackage.h b/src/Network/knPackage.h deleted file mode 100644 index f5396f0..0000000 --- a/src/Network/knPackage.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#if __cplusplus -extern "C" { -#endif - -#include "../base/base.h" - - -#define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(uint8*)) - - -typedef enum __attribute__((__packed__)) knPacVersion { - knPac_V1 -} knPacVersion; - -static const char knPacHeader[5]={'k','n','p','a','c'}; - -typedef struct knPackage { - char header[5]; // knpac - knPacVersion version; // protocol version - uint16 data_size; // size of data block in bytes (1-KNPAC_MAX_DATA_SIZE) - uint32 channel_id; // id of knChannel in socket - uint32 package_num; // number in sequence of sent packages - uint64 data_hash; // hash64 of data - uint8* data; // ptr to data -} knPackage; - -typedef struct knPackageQueueElem knPackageQueueElem; -struct knPackageQueueElem { - union { - knPackage; - knPackage package; - }; - knPackageQueueElem* previousElem; - knPackageQueueElem* nextElem; -}; - -typedef struct knChannel { - knPackageQueueElem* queueStart; -} knChannel; - - -#if __cplusplus -} -#endif \ No newline at end of file diff --git a/src/Network/knSocket.c b/src/Network/knSocket.c deleted file mode 100644 index 68f7f50..0000000 --- a/src/Network/knSocket.c +++ /dev/null @@ -1,91 +0,0 @@ -#include "knSocket.h" -#include "stdSocketHeaders.h" - - -Maybe knSocket_open(knSocketType sockType){ - knSocket* newSocket=malloc(sizeof(knSocket)); - newSocket->type=sockType; - newSocket->channels=NULL; - newSocket->channelsAmount=0; - newSocket->localEndpoint=knIPV4Endpoint_create(knIPV4Address_fromBytes(0,0,0,0),0); - newSocket->remoteEndpoint=newSocket->localEndpoint; - switch(sockType){ - default: - safethrow("unknown socket type", free(newSocket)); - break; - case knSocketType_TCP: - newSocket->socketfd=socket(AF_INET, SOCK_STREAM, 0); - if(newSocket->socketfd==-1) - safethrow("can't create TCP socket", free(newSocket)); - break; - case knSocketType_UDP: - newSocket->socketfd=socket(AF_INET, SOCK_DGRAM, 0); - if(newSocket->socketfd==-1) - safethrow("can't create UDP socket", free(newSocket)); - break; - } - return SUCCESS(UniPtr(knSocketPtr, newSocket)); -} - -Maybe knSocket_close(knSocket* knsocket){ - int rezult= -#if KN_USE_WINSOCK - closesocket -#else - close -#endif - (knsocket->socketfd); - if(rezult==-1) { - safethrow("can't close socket",;); - } - else return SUCCESS(UniNull); -} - -knChannel* __createChannel(){ - knChannel* ch=malloc(sizeof(knChannel)); - ch->queueStart=NULL; - return ch; -} - -Maybe knSocket_createChannel(knSocket* sock){ - if(sock->channelsAmount == 65535) - safethrow("max amount of channels",;); - uint16 channelsAmountPrev=sock->channelsAmount; - sock->channelsAmount++; - if(channelsAmountPrev==0) - sock->channels=malloc(sizeof(knChannel*)); - else - sock->channels=realloc(sock->channels, sock->channelsAmount*sizeof(knChannel*)); - sock->channels[channelsAmountPrev]=__createChannel(); - return SUCCESS(Uni(UInt64, channelsAmountPrev)); -} - -/*Maybe knSocket_bind(knSocket* sock, knIPV4Endpoint localEndp){ - if(sock->localEndpoint.address.address!=0) - safethrow("socket is bound already",;); - struct sockaddr_in addr; - addr.sin_family= - bind(sock->socketfd); - sock->localEndpoint=localEndp; - return SUCCESS(UniNull); -} - -Maybe knSocket_connect(knSocket* sock, knIPV4Endpoint remoteEndp){ - if(sock->remoteEndpoint.address.address!=0) - safethrow("socket is connected already",;); - - sock->remoteEndpoint=remoteEndp; - return SUCCESS(UniNull); -} - -Maybe knSocket_accept(knSocket* sock){ - -} - -Maybe knSocket_send(knSocket* sock, uint16 destinationIndex, uint8* data, uint32 dataLength){ - -} - -Maybe knSocket_recieve(knSocket* sock, uint16 destinationIndex, uint8* buffer, uint32 bufferLength){ - -}*/ diff --git a/src/Network/knSocket.h b/src/Network/knSocket.h deleted file mode 100644 index f9559eb..0000000 --- a/src/Network/knSocket.h +++ /dev/null @@ -1,57 +0,0 @@ -#pragma once - -#if __cplusplus -extern "C" { -#endif - -#include "../base/base.h" -#include "knAddress.h" -#include "knPackage.h" - - -typedef enum __attribute__((__packed__)) knSocketType { - knSocketType_TCP, knSocketType_UDP -} knSocketType; - -typedef struct knSocket { - knSocketType type; - uint16 channelsAmount; - knChannel** channels; - int64 socketfd; - knIPV4Endpoint localEndpoint; - knIPV4Endpoint remoteEndpoint; -} knSocket; - -///@return Maybe new socket -Maybe knSocket_open(knSocketType sockType); - -///@return Maybe error or nothing -Maybe knSocket_close(knSocket* socket); - -///@return Maybe channel index -Maybe knSocket_createChannel(knSocket* socket); - -///sets socket local endpoint -///@return Maybe error or nothing -Maybe knSocket_bind(knSocket* socket, knIPV4Endpoint localEndp); - -///sets socket remote endpoint -///@return Maybe error or nothing -Maybe knSocket_connect(knSocket* socket, knIPV4Endpoint remoteEndp); - -///@return Maybe new socket connected to client -Maybe knSocket_accept(knSocket* socket); - -///@param dataLength 0-4294967295 -///@return Maybe -Maybe knSocket_send(knSocket* socket, uint16 destinationIndex, uint8* data, uint32 dataLength); - -///@param buffer buffer for recieving data -///@param bufferLength 0-4294967295 -///@return Maybe recieved bytes amount -Maybe knSocket_recieve(knSocket* socket, uint16 destinationIndex, uint8* buffer, uint32 bufferLength); - - -#if __cplusplus -} -#endif \ No newline at end of file diff --git a/src/Network/network.h b/src/Network/network.h deleted file mode 100644 index 5c1c308..0000000 --- a/src/Network/network.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#if __cplusplus -extern "C" { -#endif - -#include "../base/base.h" - -#if defined(_MSC_VER) || defined(_WIN64) || defined(_WIN32) || 0 - #define KN_USE_WINSOCK 1 -#endif - -#include "knAddress.h" -#include "knPackage.h" -#include "knSocket.h" - -#if __cplusplus -} -#endif \ No newline at end of file diff --git a/src/Network/stdSocketHeaders.h b/src/Network/stdSocketHeaders.h deleted file mode 100644 index c115e1b..0000000 --- a/src/Network/stdSocketHeaders.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#if __cplusplus -extern "C" { -#endif - -#include "network.h" - -#if KN_USE_WINSOCK - #include -#else - #include - #include - #include - #include - #include - #include -#endif - -#if __cplusplus -} -#endif \ No newline at end of file From 491929c3c2daf13859fc45775ba064edbd01027e Mon Sep 17 00:00:00 2001 From: Timerix22 <87668556+Timerix22@users.noreply.github.com> Date: Wed, 24 Aug 2022 13:49:26 +0600 Subject: [PATCH 10/13] Delete test_network.c --- tests/test_network.c | 42 ------------------------------------------ 1 file changed, 42 deletions(-) delete mode 100644 tests/test_network.c diff --git a/tests/test_network.c b/tests/test_network.c deleted file mode 100644 index 8df3f07..0000000 --- a/tests/test_network.c +++ /dev/null @@ -1,42 +0,0 @@ -#include "tests.h" -#include "../src/Network/network.h" - -void __test_knIPV4Address_fromStr(char* addrStr, uint8 a, uint8 b, uint8 c, uint8 d){ - tryLast(knIPV4Address_fromStr(addrStr), maybeAddr){ - knIPV4Address addr; - addr.address=(uint32)maybeAddr.value.UInt64; - printf("\e[94mknIPV4Address_fromStr(\e[96m%s\e[94m) -> ", addrStr); - if(maybeAddr.value.UInt64!=knIPV4Address_fromBytes(a,b,c,d).address){ - printf("\e[91m%u.%u.%u.%u\n", - (uint8)addr.bytes[0], (uint8)addr.bytes[1], (uint8)addr.bytes[2], (uint8)addr.bytes[3]); - throw("knIPV4Address_fromStr returned wrong value"); - } - else printf("\e[92m%u.%u.%u.%u\n", - (uint8)addr.bytes[0], (uint8)addr.bytes[1], (uint8)addr.bytes[2], (uint8)addr.bytes[3]); - } -} -#define test_knIPV4Address_fromStr(a,b,c,d) __test_knIPV4Address_fromStr(#a"."#b"."#c"."#d, a,b,c,d) - -void test_network(){ - optime(__func__,1,({ - printf("\e[96m------------[test_network]------------\n"); - - PRINT_SIZEOF(knIPV4Address); - PRINT_SIZEOF(knPort); - PRINT_SIZEOF(knIPV4Endpoint); - PRINT_SIZEOF(knPackage); - PRINT_SIZEOF(knChannel); - PRINT_SIZEOF(knSocket); - - test_knIPV4Address_fromStr(127,0,0,1); - test_knIPV4Address_fromStr(34,255,45,0); - test_knIPV4Address_fromStr(3,3,3,128); - - knSocket* s; - tryLast(knSocket_open(knSocketType_TCP), maybeS) - s=maybeS.value.VoidPtr; - printf("\e[92mTCP socket created\n"); - tryLast(knSocket_close(s);,_); - printf("\e[92mTCP socket closed\n"); - })); -} \ No newline at end of file From 996dcd41deebf44f9d75b3284ada25095e15ba34 Mon Sep 17 00:00:00 2001 From: Timerix22 <87668556+Timerix22@users.noreply.github.com> Date: Wed, 24 Aug 2022 13:50:11 +0600 Subject: [PATCH 11/13] removed test_network() definition --- tests/tests.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/tests.h b/tests/tests.h index eb66a8f..71cc4b1 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -13,10 +13,9 @@ void test_autoarr(); void test_hash_functions(); void test_hashtable(); void test_dtsod(); -void test_network(); #define PRINT_SIZEOF(T) printf("\e[94m" #T " size: \e[96m" IFWIN("%llu", "%lu") "\n", sizeof(T)) #if __cplusplus } -#endif \ No newline at end of file +#endif From 0ce156536c86184c681ebf0687f1b45818d8a019 Mon Sep 17 00:00:00 2001 From: Timerix22 <87668556+Timerix22@users.noreply.github.com> Date: Wed, 24 Aug 2022 13:50:59 +0600 Subject: [PATCH 12/13] removed test_network() call --- tests/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/main.cpp b/tests/main.cpp index b68a42d..10f54f3 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -8,7 +8,6 @@ void test_all(){ test_hash_functions(); test_hashtable(); test_dtsod(); - test_network(); printf("\e[96m--------------------------------------\e[0m\n"); } From 8234c6e7b512e3672014cc3d6624c55498f3ad5c Mon Sep 17 00:00:00 2001 From: Timerix22 <87668556+Timerix22@users.noreply.github.com> Date: Wed, 24 Aug 2022 13:53:54 +0600 Subject: [PATCH 13/13] Update kerep.vcxproj --- kerep.vcxproj | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/kerep.vcxproj b/kerep.vcxproj index 159f0fe..33807a4 100644 --- a/kerep.vcxproj +++ b/kerep.vcxproj @@ -32,9 +32,6 @@ - - - @@ -44,7 +41,6 @@ - @@ -63,11 +59,6 @@ - - - - - @@ -261,4 +252,4 @@ - \ No newline at end of file +