uoijewuro
This commit is contained in:
parent
52a601bc17
commit
14ee65417e
|
@ -50,19 +50,25 @@ pub const Client = struct {
|
|||
try map.put("ClientVersion", .{ .string = "0.1 (quasselclient)" });
|
||||
try map.put("ClientDate", .{ .string = "0" });
|
||||
|
||||
try write.add_qvariantmap(list.writer(), s.allocator, map);
|
||||
try write.add_message(list.writer(), s.allocator, map);
|
||||
try dumpDebug("ClientInit.bin", list);
|
||||
|
||||
try s.stream.writer().writeAll(list.items);
|
||||
}
|
||||
pub fn quassel_login(s: *Client, username: []const u8, password: []const u8) !void {
|
||||
var list = std.ArrayList(u8).init(s.allocator);
|
||||
|
||||
var map = std.StringHashMap(qvar.QVariant).init(s.allocator);
|
||||
|
||||
try map.put("MsgType", .{ .string = "ClientLogin" });
|
||||
try map.put("User", .{ .string = username });
|
||||
try map.put("Password", .{ .string = password });
|
||||
|
||||
try write.add_qvariantmap(s.stream.writer(), s.allocator, map);
|
||||
|
||||
try write.add_message(list.writer(), s.allocator, map);
|
||||
try dumpDebug("ClientLogin.bin", list);
|
||||
|
||||
try s.stream.writer().writeAll(list.items);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -13,5 +13,4 @@ pub fn main() !void {
|
|||
try client.handshake();
|
||||
try client.quassel_init_packet();
|
||||
try client.quassel_login("z", "password");
|
||||
|
||||
}
|
||||
|
|
|
@ -18,15 +18,22 @@ pub fn add_bytearray(writer: anytype, array: std.ArrayList(u8)) !void {
|
|||
try writer.writeAll(array.items);
|
||||
}
|
||||
|
||||
pub fn add_string(writer: anytype, str: []const u8) !void {
|
||||
try writer.writeAll(str);
|
||||
try writer.writeByte('\x00');
|
||||
pub fn add_string(writer: anytype, allocator: *std.mem.Allocator, str: []const u8) !void {
|
||||
var ut16Str = try allocator.alloc(u16, str.len);
|
||||
defer allocator.free(ut16Str);
|
||||
for (str) |character, index| {
|
||||
ut16Str[index] = std.mem.nativeToBig(u16, @as(u16, character));
|
||||
}
|
||||
|
||||
pub fn add_stringlist(writer: anytype, strList: std.ArrayList([]const u8)) !void {
|
||||
try writer.writeAll(std.mem.sliceAsBytes(ut16Str));
|
||||
try writer.writeByte('\x00');
|
||||
|
||||
}
|
||||
|
||||
pub fn add_stringlist(writer: anytype, allocator: *std.mem.Allocator, strList: std.ArrayList([]const u8)) !void {
|
||||
try add_int(writer, @intCast(u32, strList.items.len));
|
||||
for (strList.items) |string| {
|
||||
try add_string(writer, string);
|
||||
try add_string(writer, allocator, string);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,10 +55,10 @@ pub fn add_qvariant(writer: anytype, allocator: *std.mem.Allocator, variant: qva
|
|||
try add_qvariantmap(writer, allocator, out);
|
||||
},
|
||||
.string => |out| {
|
||||
try add_string(writer, out);
|
||||
try add_string(writer, allocator, out);
|
||||
},
|
||||
.stringlist => |out| {
|
||||
try add_stringlist(writer, out);
|
||||
try add_stringlist(writer, allocator, out);
|
||||
},
|
||||
.bytearray => |out| {
|
||||
try add_bytearray(writer, out);
|
||||
|
@ -69,12 +76,10 @@ pub fn add_qvariantmap(writer: anytype, allocator: *std.mem.Allocator, map: std.
|
|||
var data = std.ArrayList(u8).init(allocator);
|
||||
var writeIterator = map.iterator();
|
||||
while (writeIterator.next()) |entry| {
|
||||
try add_string(data.writer(), entry.key);
|
||||
try add_string(data.writer(), allocator, entry.key);
|
||||
try add_qvariant(data.writer(), allocator, entry.value);
|
||||
}
|
||||
|
||||
// lengths o the mesage
|
||||
try add_int(writer, @intCast(u32, data.items.len) + 4 + 1 + 4);
|
||||
// qvariantmap type
|
||||
try add_int(writer, 8); // 4
|
||||
// validity?
|
||||
|
@ -85,3 +90,13 @@ pub fn add_qvariantmap(writer: anytype, allocator: *std.mem.Allocator, map: std.
|
|||
try writer.writeAll(data.items);
|
||||
return;
|
||||
}
|
||||
|
||||
pub fn add_message(writer: anytype, allocator: *std.mem.Allocator, map: std.StringHashMap(qvar.QVariant)) (@TypeOf(writer).Error || std.os.WriteError || error{OutOfMemory})!void {
|
||||
var data = std.ArrayList(u8).init(allocator);
|
||||
try add_qvariantmap(data.writer(), allocator, map);
|
||||
|
||||
try add_int(writer, @intCast(u32, data.items.len) * 8);
|
||||
|
||||
try writer.writeAll(data.items);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue