summaryrefslogtreecommitdiff
path: root/src/c_api.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/c_api.zig')
-rw-r--r--src/c_api.zig35
1 files changed, 31 insertions, 4 deletions
diff --git a/src/c_api.zig b/src/c_api.zig
index 481dc78..a0343ae 100644
--- a/src/c_api.zig
+++ b/src/c_api.zig
@@ -4,11 +4,38 @@ const c = @cImport({
fn zigToCMessage(msg: ?*zaprus.Message) ?*c.SaprusMessage {
if (msg) |m| {
- return switch (m.*) {
- .relay => |_| @constCast(&c.SaprusMessage{}),
- .connection => |_| @constCast(&c.SaprusMessage{}),
- else => |_| null,
+ var res = c.SaprusMessage{
+ .packet_type = @intFromEnum(m.*),
};
+ switch (m.*) {
+ .relay => |r| {
+ res.unnamed_0 = .{ .relay = .{
+ .unnamed_0 = .{
+ .dest = r.header.dest,
+ },
+ .payload_len = r.payload.len,
+ .payload = (allocator.alloc(u8, r.payload.len) catch return null).ptr,
+ } };
+ },
+ .connection => |con| {
+ res.unnamed_0 = .{
+ .connection = .{
+ .unnamed_0 = .{
+ .src_port = con.header.src_port,
+ .dest_port = con.header.dest_port,
+ .seq_num = con.header.seq_num,
+ .msg_id = con.header.msg_id,
+ ._reserved = con.header.reserved,
+ .options = @bitCast(con.header.options),
+ },
+ .payload_len = con.payload.len,
+ .payload = (allocator.alloc(u8, con.payload.len) catch return null).ptr,
+ },
+ };
+ },
+ else => return null,
+ }
+ return &res;
} else return null;
}