mirror of
https://git.robbyzambito.me/zaprus
synced 2025-12-20 16:24:50 +00:00
Move binary back to zaprus
Also clean up the args for the aux functions by computing the type instead of passing it
This commit is contained in:
@@ -51,10 +51,6 @@ pub fn sendInitialConnection(payload: []const u8, initial_port: u16, allocator:
|
||||
.seq_num = 1,
|
||||
.msg_id = 2,
|
||||
.reserved = 5,
|
||||
// .options = .{
|
||||
// .opt2 = true,
|
||||
// .opt8 = true,
|
||||
// },
|
||||
},
|
||||
.payload = payload,
|
||||
},
|
||||
|
||||
@@ -64,12 +64,12 @@ pub const SaprusMessage = union(SaprusPacketType) {
|
||||
}
|
||||
|
||||
fn toBytesAux(
|
||||
Header: type,
|
||||
header: Header,
|
||||
header: anytype,
|
||||
payload: []const u8,
|
||||
buf: *std.ArrayList(u8),
|
||||
allocator: Allocator,
|
||||
) !void {
|
||||
const Header = @TypeOf(header);
|
||||
// Create a growable string to store the base64 bytes in.
|
||||
// Doing this first so I can use the length of the encoded bytes for the length field.
|
||||
var payload_list = std.ArrayList(u8).init(allocator);
|
||||
@@ -107,8 +107,8 @@ pub const SaprusMessage = union(SaprusPacketType) {
|
||||
|
||||
// Write the proper header and payload for the given packet type.
|
||||
switch (self) {
|
||||
.relay => |r| try toBytesAux(Relay.Header, r.header, r.payload, &buf, allocator),
|
||||
.connection => |c| try toBytesAux(Connection.Header, c.header, c.payload, &buf, allocator),
|
||||
.relay => |r| try toBytesAux(r.header, r.payload, &buf, allocator),
|
||||
.connection => |c| try toBytesAux(c.header, c.payload, &buf, allocator),
|
||||
.file_transfer => return SaprusError.NotImplementedSaprusType,
|
||||
}
|
||||
|
||||
@@ -118,13 +118,12 @@ pub const SaprusMessage = union(SaprusPacketType) {
|
||||
|
||||
fn fromBytesAux(
|
||||
comptime packet: SaprusPacketType,
|
||||
Header: type,
|
||||
r: std.io.FixedBufferStream([]const u8).Reader,
|
||||
allocator: Allocator,
|
||||
) !SaprusMessage {
|
||||
// Read the length of the base64 encoded payload.
|
||||
const Header = @field(@FieldType(SaprusMessage, @tagName(packet)), "Header");
|
||||
// Read the length of the header + base64 encoded payload.
|
||||
const len = try r.readInt(u16, .big);
|
||||
|
||||
// Read the header for the current message type.
|
||||
var header_bytes: [@sizeOf(Header)]u8 = undefined;
|
||||
_ = try r.read(header_bytes[0 .. @bitSizeOf(Header) / 8]);
|
||||
@@ -152,11 +151,12 @@ pub const SaprusMessage = union(SaprusPacketType) {
|
||||
var s = std.io.fixedBufferStream(bytes);
|
||||
const r = s.reader();
|
||||
|
||||
// Read packet type
|
||||
const packet_type = @as(SaprusPacketType, @enumFromInt(try r.readInt(u16, .big)));
|
||||
|
||||
switch (packet_type) {
|
||||
.relay => return fromBytesAux(.relay, Relay.Header, r, allocator),
|
||||
.connection => return fromBytesAux(.connection, Connection.Header, r, allocator),
|
||||
.relay => return fromBytesAux(.relay, r, allocator),
|
||||
.connection => return fromBytesAux(.connection, r, allocator),
|
||||
.file_transfer => return SaprusError.NotImplementedSaprusType,
|
||||
else => return SaprusError.UnknownSaprusType,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user