network types registered

This commit is contained in:
timerix 2024-01-03 12:21:12 +06:00
parent 930b35575c
commit fd30713d29
10 changed files with 202 additions and 202 deletions

View File

@ -1,7 +1,11 @@
#include "network_types.h" #include "network_types.h"
ktid_define(knIPV4Address); char* __knIPV4Address_toString(void* p, u32 f){ return knIPV4Address_toString(p); }
ktid_define(knIPV4Endpoint); char* __knIPV4Endpoint_toString(void* p, u32 f){ return knIPV4Endpoint_toString(p); }
kt_define(knIPV4Address, NULL, __knIPV4Address_toString);
kt_define(knIPV4Endpoint, NULL, __knIPV4Endpoint_toString);
Maybe knIPV4Address_fromStr(char* addrStr){ Maybe knIPV4Address_fromStr(char* addrStr){
char* addrStr_src=addrStr; char* addrStr_src=addrStr;

View File

@ -12,7 +12,7 @@ typedef union knIPV4Address {
u32 UintBigEndian; u32 UintBigEndian;
char bytes[4]; char bytes[4];
} knIPV4Address; } knIPV4Address;
ktid_declare(knIPV4Address); kt_declare(knIPV4Address);
#define knIPV4Address_fromBytes(A, B, C, D) ((knIPV4Address){.bytes={A,B,C,D}}) #define knIPV4Address_fromBytes(A, B, C, D) ((knIPV4Address){.bytes={A,B,C,D}})
#define knIPV4Address_fromU32(N) ((knIPV4Address){.UintBigEndian=N}) #define knIPV4Address_fromU32(N) ((knIPV4Address){.UintBigEndian=N})
@ -27,11 +27,10 @@ Maybe knIPV4Address_fromStr(char* addrStr);
char* knIPV4Address_toString(knIPV4Address* address); char* knIPV4Address_toString(knIPV4Address* address);
typedef struct knIPV4Endpoint { STRUCT(knIPV4Endpoint,
knIPV4Address address; knIPV4Address address;
knPort port; knPort port;
} knIPV4Endpoint; )
ktid_declare(knIPV4Endpoint);
#define knIPV4Endpoint_create(ADDR, PORT) ((knIPV4Endpoint){ADDR, PORT}) #define knIPV4Endpoint_create(ADDR, PORT) ((knIPV4Endpoint){ADDR, PORT})

View File

@ -1,9 +1,11 @@
#include "../network_internal.h" #include "../network_internal.h"
ktid_define(knPackage); void __knSocketChanneled_close(void* p){ knSocketChanneled_close(p); }
ktid_define(knPackageQueueElem);
ktid_define(knChannel); kt_define(knPackage, NULL, NULL);
ktid_define(knSocketChanneled); kt_define(knPackageQueueElem, NULL, NULL);
kt_define(knChannel, NULL, NULL);
kt_define(knSocketChanneled, __knSocketChanneled_close, NULL);
Maybe knSocketChanneled_open(){ Maybe knSocketChanneled_open(){
knSocketChanneled* newSocket=malloc(sizeof(knSocketChanneled)); knSocketChanneled* newSocket=malloc(sizeof(knSocketChanneled));
@ -15,17 +17,9 @@ Maybe knSocketChanneled_open(){
} }
Maybe knSocketChanneled_close(knSocketChanneled* socket){ Maybe knSocketChanneled_close(knSocketChanneled* socket){
int result= try(__kn_StdSocket_close(socket->socketfd), _m762, ;);
#if KN_USE_WINSOCK free(socket);
closesocket return MaybeNull;
#else
close
#endif
(socket->socketfd);
if(result==-1) {
safethrow("can't close socket",;);
}
else return MaybeNull;
} }
knChannel* __createChannel(){ knChannel* __createChannel(){

View File

@ -15,39 +15,33 @@ typedef enum __attribute__((__packed__)) knPacVersion {
static const char knPacHeader[5]={'k','n','p','a','c'}; static const char knPacHeader[5]={'k','n','p','a','c'};
typedef struct knPackage { STRUCT(knPackage,
char header[5]; // knpac char header[5]; /* knpac */
knPacVersion version; // protocol version knPacVersion version; /* protocol version */
u16 data_size; // size of data block in bytes (1-KNPAC_MAX_DATA_SIZE) u16 data_size; /* size of data block in bytes (1-KNPAC_MAX_DATA_SIZE) */
u32 channel_id; // id of knChannel in socket u32 channel_id; /* id of knChannel in socket */
u32 package_num; // number in sequence of sent packages u32 package_num; /* number in sequence of sent packages */
u64 data_hash; // hash64 of data u64 data_hash; /* hash64 of data */
u8* data; // ptr to data u8* data; /* ptr to data */
} knPackage; )
ktid_declare(knPackage);
typedef struct knPackageQueueElem knPackageQueueElem; STRUCT(knPackageQueueElem,
struct knPackageQueueElem {
knPackage package; knPackage package;
knPackageQueueElem* previousElem; knPackageQueueElem* previousElem;
knPackageQueueElem* nextElem; knPackageQueueElem* nextElem;
}; )
ktid_declare(knPackageQueueElem);
typedef struct knChannel { STRUCT(knChannel,
knPackageQueueElem* queueStart; knPackageQueueElem* queueStart;
} knChannel; )
ktid_declare(knChannel);
typedef struct knSocketChanneled{ STRUCT(knSocketChanneled,
i64 socketfd; i64 socketfd;
knIPV4Endpoint localEndpoint; knIPV4Endpoint localEndpoint;
knIPV4Endpoint remoteEndpoint; knIPV4Endpoint remoteEndpoint;
u16 channelsAmount; u16 channelsAmount;
knChannel** channels; knChannel** channels;
} knSocketChanneled; )
ktid_declare(knSocketChanneled);
///@return Maybe<knSocketChanneled*> new socket ///@return Maybe<knSocketChanneled*> new socket
Maybe knSocketChanneled_open(); Maybe knSocketChanneled_open();

View File

@ -1,6 +1,8 @@
#include "../network_internal.h" #include "../network_internal.h"
ktid_define(knSocketTCP); void __knSocketTCP_close(void* p){ knSocketTCP_close(p); }
kt_define(knSocketTCP, __knSocketTCP_close, NULL);
Maybe knSocketTCP_open(bool allowReuse){ Maybe knSocketTCP_open(bool allowReuse){
knSocketTCP* newSocket=malloc(sizeof(knSocketTCP)); knSocketTCP* newSocket=malloc(sizeof(knSocketTCP));

View File

@ -6,13 +6,12 @@ extern "C" {
#include "../network_types.h" #include "../network_types.h"
typedef struct knSocketTCP { STRUCT(knSocketTCP,
i64 socketfd; i64 socketfd;
knIPV4Endpoint localEndpoint; knIPV4Endpoint localEndpoint;
knIPV4Endpoint remoteEndpoint; knIPV4Endpoint remoteEndpoint;
// TODO socket status enum /* TODO socket status enum */
} knSocketTCP; )
ktid_declare(knSocketTCP);
///@note EXAMPLE 1: socket = open(false); bind(socket, localhost:8080); close(socket); - the socket on port 8080 still unavaliable for several minutes ///@note EXAMPLE 1: socket = open(false); bind(socket, localhost:8080); close(socket); - the socket on port 8080 still unavaliable for several minutes
///@note EXAMPLE 2: socket = open(true); bind(socket, localhost:8080); close(socket); - the socket on port 8080 can be opened again ///@note EXAMPLE 2: socket = open(true); bind(socket, localhost:8080); close(socket); - the socket on port 8080 can be opened again

View File

@ -1,6 +1,8 @@
#include "../network_internal.h" #include "../network_internal.h"
ktid_define(knSocketUDP); void __knSocketUDP_close(void* p){ knSocketUDP_close(p); }
kt_define(knSocketUDP, __knSocketUDP_close, NULL);
Maybe knSocketUDP_open(bool allowReuse){ Maybe knSocketUDP_open(bool allowReuse){
knSocketUDP* newSocket=malloc(sizeof(knSocketUDP)); knSocketUDP* newSocket=malloc(sizeof(knSocketUDP));

View File

@ -6,12 +6,11 @@ extern "C" {
#include "../network_types.h" #include "../network_types.h"
typedef struct knSocketUDP { STRUCT(knSocketUDP,
i64 socketfd; i64 socketfd;
knIPV4Endpoint localEndpoint; knIPV4Endpoint localEndpoint;
// TODO socket status enum /* TODO socket status enum */
} knSocketUDP; )
ktid_declare(knSocketUDP);
///@note EXAMPLE 1: socket = open(false); bind(socket, localhost:8080); close(socket); - the socket on port 8080 still unavaliable for several minutes ///@note EXAMPLE 1: socket = open(false); bind(socket, localhost:8080); close(socket); - the socket on port 8080 still unavaliable for several minutes
///@note EXAMPLE 2: socket = open(true); bind(socket, localhost:8080); close(socket); - the socket on port 8080 can be opened again ///@note EXAMPLE 2: socket = open(true); bind(socket, localhost:8080); close(socket); - the socket on port 8080 can be opened again

View File

@ -5,6 +5,7 @@
#include "../../Hashtable/Hashtable.h" #include "../../Hashtable/Hashtable.h"
#include "../../String/StringBuilder.h" #include "../../String/StringBuilder.h"
#include "../../Filesystem/filesystem.h" #include "../../Filesystem/filesystem.h"
#include "../../Network/network.h"
#include "base_toString.h" #include "base_toString.h"
void kt_initKerepTypes(){ void kt_initKerepTypes(){
@ -82,6 +83,13 @@ void kt_initKerepTypes(){
// StringBuilder // StringBuilder
kt_register(StringBuilder); kt_register(StringBuilder);
//File // File
kt_register(FileHandle); kt_register(FileHandle);
// Network
kt_register(knIPV4Address);
kt_register(knIPV4Endpoint);
kt_register(knSocketTCP);
kt_register(knSocketUDP);
kt_register(knSocketChanneled);
} }

View File

@ -6,8 +6,7 @@ i32 main(){
kt_beginInit(); kt_beginInit();
kt_initKerepTypes(); kt_initKerepTypes();
kt_endInit(); kt_endInit();
// test_all(); test_all();
test_network();
kt_free(); kt_free();
kprintf("\e[37m\n"); kprintf("\e[37m\n");
return 0; return 0;