From: jxnshi Date: Sun, 19 Jan 2025 21:48:40 +0000 (+0100) Subject: Working on server side X-Git-Url: https://jxnshi.xyz/repos?a=commitdiff_plain;h=5c7fdc93b0eb10108ef2bdaccb114ff06d56dbe1;p=mesange.git Working on server side --- diff --git a/common/request.odin b/common/request.odin index 3a16e20..bd141bf 100644 --- a/common/request.odin +++ b/common/request.odin @@ -1,16 +1,26 @@ package common +import "core:bytes" import "core:crypto/ed25519" +import "core:crypto/sha3" +import "core:io" +import "core:net" +import "core:mem" -Public_Key_Bytes :: [32]u8 +ROOM_KEY_SIZE :: 32 -Message :: struct { - room_id: string, - content: string, +From_Bytes_Error { + Not_Enough_Bytes, + Invalid_Public_Key, +} + +Write :: struct { + room_key: [ROOM_KEY_SIZE]u8, + message: string, } Client_Request_Content :: union { - Message, + Write, } Client_Request :: struct { @@ -20,18 +30,49 @@ Client_Request :: struct { signature: [32]u8, } -client_request_parse :: proc(source: []u8) -> (Client_Request, bool) { - panic("TODO") +client_request_from_bytes :: proc(bytes: []u8) -> (Client_Request, From_Bytes_Error) { + bytes := bytes + bytes_buffer := bytes.Buffer{ buf = mem.buffer_from_slice(bytes) } + stream := bytes.buffer_to_stream(&bytes_buffer) + + public_key_bytes: [ed25519.PUBLIC_KEY_SIZE]u8 + + err1 := io.read_at_least(stream, public_key_bytes, len(public_key_bytes)) + + if err1 != nil { + return {}, .Not_Enough_Bytes + } + + public_key: ed25519.Public_Key + ok := ed25519.public_key_set_bytes(&public_key, public_key_bytes[:]) + + if !ok { + return {}, .Invalid_Public_Key + } + + return { + public_key = public_key, + content = content, + timestamp = timestamp, + signature = signature, + }, + nil +} + +client_request_to_bytes :: proc(stream: io.Stream, request: Client_Request) { + } client_request_verify :: proc(request: Client_Request, expiration: Maybe(i64)) -> bool { panic("TODO") } -Server_Request :: union { - Message, +send_client_request :: proc(server: net.TCP_Socket, request: Client_Request) { + panic("TODO") } +Server_Request :: union {} + send_server_request :: proc(request: Server_Request) { panic("TODO") } diff --git a/ncurses/ncurses.odin b/ncurses/ncurses.odin index 4125108..1959a13 100644 --- a/ncurses/ncurses.odin +++ b/ncurses/ncurses.odin @@ -65,4 +65,8 @@ foreign ncurses { // Success: Returns previous cursor state // Error: Returns ERR curs_set :: proc(visibility: c.int) -> c.int --- + + notimeout :: proc(win: ^Window, bf: bool) -> c.int --- + wtimeout :: proc(win: ^Window, delay: c.int) --- + timeout :: proc(delay: c.int) --- } diff --git a/server/server b/server/server index ac1e78d..0043fa6 100755 Binary files a/server/server and b/server/server differ