network types registered
This commit is contained in:
parent
930b35575c
commit
fd30713d29
@ -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;
|
||||||
|
|||||||
@ -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})
|
||||||
|
|
||||||
|
|||||||
@ -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(){
|
||||||
|
|||||||
@ -1,83 +1,77 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if __cplusplus
|
#if __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../network_types.h"
|
#include "../network_types.h"
|
||||||
|
|
||||||
#define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(u8*))
|
#define KNPAC_MAX_DATA_SIZE (65535-sizeof(knPackage)+sizeof(u8*))
|
||||||
|
|
||||||
|
|
||||||
typedef enum __attribute__((__packed__)) knPacVersion {
|
typedef enum __attribute__((__packed__)) knPacVersion {
|
||||||
knPac_V1=1
|
knPac_V1=1
|
||||||
} knPacVersion;
|
} 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);
|
|
||||||
|
STRUCT(knPackageQueueElem,
|
||||||
typedef struct knPackageQueueElem knPackageQueueElem;
|
knPackage package;
|
||||||
struct knPackageQueueElem {
|
knPackageQueueElem* previousElem;
|
||||||
knPackage package;
|
knPackageQueueElem* nextElem;
|
||||||
knPackageQueueElem* previousElem;
|
)
|
||||||
knPackageQueueElem* nextElem;
|
|
||||||
};
|
STRUCT(knChannel,
|
||||||
ktid_declare(knPackageQueueElem);
|
knPackageQueueElem* queueStart;
|
||||||
|
)
|
||||||
typedef struct knChannel {
|
|
||||||
knPackageQueueElem* queueStart;
|
STRUCT(knSocketChanneled,
|
||||||
} knChannel;
|
i64 socketfd;
|
||||||
ktid_declare(knChannel);
|
knIPV4Endpoint localEndpoint;
|
||||||
|
knIPV4Endpoint remoteEndpoint;
|
||||||
typedef struct knSocketChanneled{
|
u16 channelsAmount;
|
||||||
i64 socketfd;
|
knChannel** channels;
|
||||||
knIPV4Endpoint localEndpoint;
|
)
|
||||||
knIPV4Endpoint remoteEndpoint;
|
|
||||||
u16 channelsAmount;
|
///@return Maybe<knSocketChanneled*> new socket
|
||||||
knChannel** channels;
|
Maybe knSocketChanneled_open();
|
||||||
} knSocketChanneled;
|
|
||||||
ktid_declare(knSocketChanneled);
|
///@return Maybe<void> error or nothing
|
||||||
|
Maybe knSocketChanneled_close(knSocketChanneled* socket);
|
||||||
|
|
||||||
///@return Maybe<knSocketChanneled*> new socket
|
///@return Maybe<u64> channel index
|
||||||
Maybe knSocketChanneled_open();
|
Maybe knSocketChanneled_createChannel(knSocketChanneled* socket);
|
||||||
|
|
||||||
///@return Maybe<void> error or nothing
|
///start listening at local endpoint
|
||||||
Maybe knSocketChanneled_close(knSocketChanneled* socket);
|
///@return Maybe<void> error or nothing
|
||||||
|
Maybe knSocketChanneled_listen(knSocketChanneled* socket, knIPV4Endpoint localEndp);
|
||||||
///@return Maybe<u64> channel index
|
|
||||||
Maybe knSocketChanneled_createChannel(knSocketChanneled* socket);
|
///sets socket remote endpoint
|
||||||
|
///@return Maybe<void> error or nothing
|
||||||
///start listening at local endpoint
|
Maybe knSocketChanneled_connect(knSocketChanneled* socket, knIPV4Endpoint remoteEndp);
|
||||||
///@return Maybe<void> error or nothing
|
|
||||||
Maybe knSocketChanneled_listen(knSocketChanneled* socket, knIPV4Endpoint localEndp);
|
///@return Maybe<knSocketChanneled*> new socket connected to client
|
||||||
|
Maybe knSocketChanneled_accept(knSocketChanneled* socket);
|
||||||
///sets socket remote endpoint
|
|
||||||
///@return Maybe<void> error or nothing
|
///@param dataLength 0-4294967295
|
||||||
Maybe knSocketChanneled_connect(knSocketChanneled* socket, knIPV4Endpoint remoteEndp);
|
///@return Maybe<void>
|
||||||
|
Maybe knSocketChanneled_send(knSocketChanneled* socket, u16 destinationIndex, u8* data, u32 dataLength);
|
||||||
///@return Maybe<knSocketChanneled*> new socket connected to client
|
|
||||||
Maybe knSocketChanneled_accept(knSocketChanneled* socket);
|
///@param buffer buffer for receiving data
|
||||||
|
///@param bufferLength 0-4294967295
|
||||||
///@param dataLength 0-4294967295
|
///@return Maybe<u64> received bytes amount
|
||||||
///@return Maybe<void>
|
Maybe knSocketChanneled_receive(knSocketChanneled* socket, u16 destinationIndex, u8* buffer, u32 bufferLength);
|
||||||
Maybe knSocketChanneled_send(knSocketChanneled* socket, u16 destinationIndex, u8* data, u32 dataLength);
|
|
||||||
|
#if __cplusplus
|
||||||
///@param buffer buffer for receiving data
|
}
|
||||||
///@param bufferLength 0-4294967295
|
|
||||||
///@return Maybe<u64> received bytes amount
|
|
||||||
Maybe knSocketChanneled_receive(knSocketChanneled* socket, u16 destinationIndex, u8* buffer, u32 bufferLength);
|
|
||||||
|
|
||||||
#if __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
@ -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));
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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));
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -1,87 +1,95 @@
|
|||||||
#include "../base.h"
|
#include "../base.h"
|
||||||
#include "../../Array/Array.h"
|
#include "../../Array/Array.h"
|
||||||
#include "../../Autoarr/Autoarr.h"
|
#include "../../Autoarr/Autoarr.h"
|
||||||
#include "../../SearchTree/SearchTree.h"
|
#include "../../SearchTree/SearchTree.h"
|
||||||
#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 "base_toString.h"
|
#include "../../Network/network.h"
|
||||||
|
#include "base_toString.h"
|
||||||
void kt_initKerepTypes(){
|
|
||||||
// base types
|
void kt_initKerepTypes(){
|
||||||
kt_register(Pointer);
|
// base types
|
||||||
if(ktid_Pointer!=0) // this can break UnitypeNull
|
kt_register(Pointer);
|
||||||
throw("ktid_Pointer!=0, you must init kerep types before any other types");
|
if(ktid_Pointer!=0) // this can break UnitypeNull
|
||||||
|
throw("ktid_Pointer!=0, you must init kerep types before any other types");
|
||||||
kt_register(char);
|
|
||||||
kt_register(bool);
|
kt_register(char);
|
||||||
kt_register(f32);
|
kt_register(bool);
|
||||||
kt_register(f64);
|
kt_register(f32);
|
||||||
kt_register(i8);
|
kt_register(f64);
|
||||||
kt_register(u8);
|
kt_register(i8);
|
||||||
kt_register(i16);
|
kt_register(u8);
|
||||||
kt_register(u16);
|
kt_register(i16);
|
||||||
kt_register(i32);
|
kt_register(u16);
|
||||||
kt_register(u32);
|
kt_register(i32);
|
||||||
kt_register(i64);
|
kt_register(u32);
|
||||||
kt_register(u64);
|
kt_register(i64);
|
||||||
|
kt_register(u64);
|
||||||
// ktDescriptor
|
|
||||||
kt_register(ktDescriptor);
|
// ktDescriptor
|
||||||
|
kt_register(ktDescriptor);
|
||||||
// base type arrays
|
|
||||||
kt_register(Array_char);
|
// base type arrays
|
||||||
kt_register(Array_bool);
|
kt_register(Array_char);
|
||||||
kt_register(Array_f32);
|
kt_register(Array_bool);
|
||||||
kt_register(Array_f64);
|
kt_register(Array_f32);
|
||||||
kt_register(Array_i8);
|
kt_register(Array_f64);
|
||||||
kt_register(Array_u8);
|
kt_register(Array_i8);
|
||||||
kt_register(Array_i16);
|
kt_register(Array_u8);
|
||||||
kt_register(Array_u16);
|
kt_register(Array_i16);
|
||||||
kt_register(Array_i32);
|
kt_register(Array_u16);
|
||||||
kt_register(Array_u32);
|
kt_register(Array_i32);
|
||||||
kt_register(Array_i64);
|
kt_register(Array_u32);
|
||||||
kt_register(Array_u64);
|
kt_register(Array_i64);
|
||||||
kt_register(Array_Pointer);
|
kt_register(Array_u64);
|
||||||
|
kt_register(Array_Pointer);
|
||||||
// base type autoarrs
|
|
||||||
kt_register(Autoarr_Pointer);
|
// base type autoarrs
|
||||||
kt_register(Autoarr_char);
|
kt_register(Autoarr_Pointer);
|
||||||
kt_register(Autoarr_bool);
|
kt_register(Autoarr_char);
|
||||||
kt_register(Autoarr_f32);
|
kt_register(Autoarr_bool);
|
||||||
kt_register(Autoarr_f64);
|
kt_register(Autoarr_f32);
|
||||||
kt_register(Autoarr_i8);
|
kt_register(Autoarr_f64);
|
||||||
kt_register(Autoarr_u8);
|
kt_register(Autoarr_i8);
|
||||||
kt_register(Autoarr_i16);
|
kt_register(Autoarr_u8);
|
||||||
kt_register(Autoarr_u16);
|
kt_register(Autoarr_i16);
|
||||||
kt_register(Autoarr_i32);
|
kt_register(Autoarr_u16);
|
||||||
kt_register(Autoarr_u32);
|
kt_register(Autoarr_i32);
|
||||||
kt_register(Autoarr_i64);
|
kt_register(Autoarr_u32);
|
||||||
kt_register(Autoarr_u64);
|
kt_register(Autoarr_i64);
|
||||||
|
kt_register(Autoarr_u64);
|
||||||
// Unitype
|
|
||||||
kt_register(Unitype);
|
// Unitype
|
||||||
kt_register(Array_Unitype);
|
kt_register(Unitype);
|
||||||
kt_register(Autoarr_Unitype);
|
kt_register(Array_Unitype);
|
||||||
|
kt_register(Autoarr_Unitype);
|
||||||
// STNode
|
|
||||||
kt_register(STNode);
|
// STNode
|
||||||
|
kt_register(STNode);
|
||||||
// KeyValuePair
|
|
||||||
kt_register(KVPair);
|
// KeyValuePair
|
||||||
kt_register(Autoarr_KVPair);
|
kt_register(KVPair);
|
||||||
|
kt_register(Autoarr_KVPair);
|
||||||
// Hashtable
|
|
||||||
kt_register(Hashtable);
|
// Hashtable
|
||||||
|
kt_register(Hashtable);
|
||||||
// string
|
|
||||||
kt_register(string);
|
// string
|
||||||
kt_register(Array_string);
|
kt_register(string);
|
||||||
kt_register(Autoarr_string);
|
kt_register(Array_string);
|
||||||
|
kt_register(Autoarr_string);
|
||||||
// StringBuilder
|
|
||||||
kt_register(StringBuilder);
|
// StringBuilder
|
||||||
|
kt_register(StringBuilder);
|
||||||
//File
|
|
||||||
kt_register(FileHandle);
|
// File
|
||||||
}
|
kt_register(FileHandle);
|
||||||
|
|
||||||
|
// Network
|
||||||
|
kt_register(knIPV4Address);
|
||||||
|
kt_register(knIPV4Endpoint);
|
||||||
|
kt_register(knSocketTCP);
|
||||||
|
kt_register(knSocketUDP);
|
||||||
|
kt_register(knSocketChanneled);
|
||||||
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user