misc bugfixes; added binding to ipv4 address
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 17 Oct 2023 03:22:27 +0000 (22:22 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 17 Oct 2023 03:22:27 +0000 (22:22 -0500)
core/io/reader.onyx
core/net/net.onyx
core/net/tcp.onyx
core/runtime/platform/onyx/net.onyx
runtime/onyx_runtime.c
runtime/src/ort_net_linux.h

index 503d4972d818da3462ab5981f50e745e0bcaa84a..4d25f06372d5350acdfb6a8727857200bffb4b21 100644 (file)
@@ -212,7 +212,9 @@ read_fill_buffer :: (use reader: &Reader, bytes: [] u8) -> Error {
         write_index += to_write;
         start += to_write;
 
-        reader_read_next_chunk(reader);
+        if n > 0 {
+            reader_read_next_chunk(reader);
+        }
     }
 
     last_byte = cast(i32) bytes[write_index - 1];
index d537041dc481144b86a5a3f13cd1e6179497f0a5..b19aa548046c93c4edc3b4531f40af8cdc015c29 100644 (file)
@@ -436,10 +436,10 @@ str_to_ipv4 :: (ip: str) -> u32 {
 ipv4_to_str :: (addr: u32) -> str {
     #persist out: [64] u8;
     str_addr := conv.format(out, "{}.{}.{}.{}",
-        (addr >> 24) & 0xff,
+        (addr >> 0) & 0xff,
+        (addr >> 8) & 0xff,
         (addr >> 16) & 0xff,
-        (addr >>  8) & 0xff,
-        (addr >>  0) & 0xff);
+        (addr >> 24) & 0xff);
     return str_addr;
 }
 
index faddf2f3a28884395447972b12864e848c9ffa91..699593ad70e3c33759dd20ba141c84e1ee595c66 100644 (file)
@@ -168,7 +168,7 @@ tcp_server_make :: (max_clients := 32, allocator := context.allocator) -> &TCP_S
 tcp_server_listen :: (use server: &TCP_Server, port: u16) -> bool {
     sa: SocketAddress;
     make_ipv4_address(&sa, 0x00000000, port);
-    if !(socket->bind(&sa)) do return false;
+    if !socket->bind(&sa) do return false;
 
     socket->listen();
     socket->option(.NonBlocking, true);
index 0a619b7383fd3d04cf9dacf95d3a50887ec948a9..63be33ca6235c2f81b0a0dabb0ab0e67a6047839 100644 (file)
@@ -42,6 +42,10 @@ __net_sock_bind :: (s: SocketData, addr: &SocketAddress) -> bool {
             return __net_bind_unix(s, ~~path);
         }
 
+        case ipv4: .Inet {
+            return __net_bind_ipv4(s, ipv4.addr, ipv4.port);
+        }
+
         case host: .HostPort {
             return __net_bind_host(s, host.host, host.port);
         }
@@ -261,6 +265,7 @@ __net_resolve :: (host: str, port: u16, out_addrs: [] SocketAddress) -> i32 {
         __net_connect_host  :: (handle: SocketData, host: str, port: u16) -> SocketError ---
 
         __net_bind_unix     :: (handle: SocketData, path: cstr) -> bool ---
+        __net_bind_ipv4     :: (handle: SocketData, addr: u32, port: u16) -> bool ---
         __net_bind_host     :: (handle: SocketData, host: str, port: u16) -> bool ---
 
         __net_accept        :: (handle: SocketData, out_buf: rawptr, out_len: &i32) -> SocketData ---
index 879b69c243fd401a001701787ca1dd546454383f..e756e25378cbb3acbb859a2b1cc91c51581692b5 100644 (file)
@@ -95,6 +95,7 @@ ONYX_LIBRARY {
     ONYX_FUNC(__net_close_socket)
     ONYX_FUNC(__net_setting_flag)
     ONYX_FUNC(__net_bind_unix)
+    ONYX_FUNC(__net_bind_ipv4)
     ONYX_FUNC(__net_bind_host)
     ONYX_FUNC(__net_listen)
     ONYX_FUNC(__net_accept)
index a2d251290af560b74af280490f1cd83e1a88d0ed..89175799ead4c567d9a976835ec3743e7fda206e 100644 (file)
@@ -113,6 +113,24 @@ ONYX_DEF(__net_bind_unix, (WASM_I32, WASM_I32), (WASM_I32)) {
     return NULL;
 }
 
+ONYX_DEF(__net_bind_ipv4, (WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) {
+    struct sockaddr_in bind_addr;
+    memset(&bind_addr, 0, sizeof(bind_addr));
+
+    bind_addr.sin_family = AF_INET;
+    bind_addr.sin_addr.s_addr = params->data[1].of.i32;
+    bind_addr.sin_port = htons(params->data[2].of.i32);
+    
+    if (bind(params->data[0].of.i32, &bind_addr, sizeof(bind_addr)) >= 0) {
+        results->data[0] = WASM_I32_VAL(1);
+    } else {
+        results->data[0] = WASM_I32_VAL(0);
+    }
+
+    return NULL;
+}
+
+
 ONYX_DEF(__net_bind_host, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) {
     int   hostlen  = params->data[2].of.i32;
     char *hostname = alloca(hostlen + 1);