83 lines
1.8 KiB
C
83 lines
1.8 KiB
C
#define NET_PacketSize 1024
|
|
#define NET_Ephemeral 0xFFFFFFFFFFFFFFFFull
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Opaque types
|
|
|
|
Struct(NET_PipeHandle) { u64 v; };
|
|
|
|
#define NET_IsPipeNil(h) ((h).v == 0)
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Key types
|
|
|
|
Struct(NET_Key)
|
|
{
|
|
u8 addr[32];
|
|
};
|
|
|
|
#define NET_NilKey ((NET_Key) { 0 })
|
|
#define NET_IsKeyNil(k) (MatchStructZero(&k))
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Send types
|
|
|
|
Enum(NET_SendFlag)
|
|
{
|
|
NET_SendFlag_None = 0,
|
|
|
|
// Raw messages send unreliably and immediately
|
|
// NOTE: Raw message data exceeding packet size will drop
|
|
NET_SendFlag_Raw = (1 << 0),
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Message types
|
|
|
|
Struct(NET_Msg)
|
|
{
|
|
NET_Msg *next;
|
|
NET_Msg *prev;
|
|
|
|
NET_Key sender;
|
|
String data;
|
|
};
|
|
|
|
Struct(NET_MsgList)
|
|
{
|
|
i64 count;
|
|
NET_Msg *first;
|
|
NET_Msg *last;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ Stat types
|
|
|
|
Struct(NET_PipeStatistics)
|
|
{
|
|
i64 total_bytes_sent;
|
|
i64 total_bytes_received;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ @hookdecl Bootstrap
|
|
|
|
void NET_Bootstrap(void);
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//~ @hookdecl Net ops
|
|
|
|
NET_Key NET_KeyFromString(String host, String port);
|
|
String NET_StringFromKey(Arena *arena, NET_Key key);
|
|
b32 NET_MatchKey(NET_Key a, NET_Key b);
|
|
u64 NET_HashFromKey(NET_Key key);
|
|
|
|
NET_PipeHandle NET_AcquirePipe(void);
|
|
|
|
void NET_Listen(NET_PipeHandle pipe_handle, u64 port);
|
|
|
|
NET_MsgList NET_Swap(Arena *arena, NET_PipeHandle pipe_handle);
|
|
void NET_Send(NET_PipeHandle pipe_handle, NET_Key dst, String data, NET_SendFlag flags);
|
|
|
|
NET_PipeStatistics NET_StatsFromPipe(NET_PipeHandle pipe_handle);
|