Zig implementation: use std.log + grooming.
This commit is contained in:
parent
745b8c12ca
commit
0c8fc284d3
@ -1,5 +1,5 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const print = std.debug.print;
|
const log = std.log.scoped(.libipc_bindings);
|
||||||
const ipc = @import("./ipc.zig");
|
const ipc = @import("./ipc.zig");
|
||||||
const Context = ipc.Context;
|
const Context = ipc.Context;
|
||||||
const Message = ipc.Message;
|
const Message = ipc.Message;
|
||||||
@ -9,7 +9,7 @@ export fn ipc_context_init (ptr: **Context) callconv(.C) i32 {
|
|||||||
ptr.* = std.heap.c_allocator.create(Context) catch return -1;
|
ptr.* = std.heap.c_allocator.create(Context) catch return -1;
|
||||||
|
|
||||||
ptr.*.* = Context.init(std.heap.c_allocator) catch |err| {
|
ptr.*.* = Context.init(std.heap.c_allocator) catch |err| {
|
||||||
print ("libipc: error while init context: {}\n", .{err});
|
log.warn("error while init context: {}\n", .{err});
|
||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,10 +1,7 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const hexdump = @import("./hexdump.zig");
|
|
||||||
const net = std.net;
|
const net = std.net;
|
||||||
const fmt = std.fmt;
|
const fmt = std.fmt;
|
||||||
|
|
||||||
const print = std.debug.print;
|
|
||||||
|
|
||||||
const print_eq = @import("./util.zig").print_eq;
|
const print_eq = @import("./util.zig").print_eq;
|
||||||
|
|
||||||
pub const Connections = std.ArrayList(Connection);
|
pub const Connections = std.ArrayList(Connection);
|
||||||
|
@ -1,16 +1,15 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
// const hexdump = @import("./hexdump.zig");
|
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
const net = std.net;
|
const net = std.net;
|
||||||
const os = std.os;
|
const os = std.os;
|
||||||
const fmt = std.fmt;
|
const fmt = std.fmt;
|
||||||
|
|
||||||
|
const log = std.log.scoped(.libipc_context);
|
||||||
|
|
||||||
const receive_fd = @import("./exchange-fd.zig").receive_fd;
|
const receive_fd = @import("./exchange-fd.zig").receive_fd;
|
||||||
|
|
||||||
const Timer = std.time.Timer;
|
const Timer = std.time.Timer;
|
||||||
|
|
||||||
const print = std.debug.print;
|
|
||||||
|
|
||||||
const CBEvent = @import("./callback.zig").CBEvent;
|
const CBEvent = @import("./callback.zig").CBEvent;
|
||||||
const Connection = @import("./connection.zig").Connection;
|
const Connection = @import("./connection.zig").Connection;
|
||||||
const Message = @import("./message.zig").Message;
|
const Message = @import("./message.zig").Message;
|
||||||
@ -76,7 +75,7 @@ pub const Context = struct {
|
|||||||
pub fn deinit(self: *Self) void {
|
pub fn deinit(self: *Self) void {
|
||||||
self.close_all() catch |err| switch(err){
|
self.close_all() catch |err| switch(err){
|
||||||
error.IndexOutOfBounds => {
|
error.IndexOutOfBounds => {
|
||||||
print("context.deinit(): IndexOutOfBounds\n", .{});
|
log.err("context.deinit(): IndexOutOfBounds", .{});
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
self.allocator.free(self.rundir);
|
self.allocator.free(self.rundir);
|
||||||
@ -119,7 +118,7 @@ pub const Context = struct {
|
|||||||
var network_envvar = std.process.getEnvVarOwned(allocator, "IPC_NETWORK") catch |err| switch(err) {
|
var network_envvar = std.process.getEnvVarOwned(allocator, "IPC_NETWORK") catch |err| switch(err) {
|
||||||
// error{ OutOfMemory, EnvironmentVariableNotFound, InvalidUtf8 } (ErrorSet)
|
// error{ OutOfMemory, EnvironmentVariableNotFound, InvalidUtf8 } (ErrorSet)
|
||||||
error.EnvironmentVariableNotFound => {
|
error.EnvironmentVariableNotFound => {
|
||||||
print("no IPC_NETWORK envvar: IPCd won't be contacted\n", .{});
|
log.debug("no IPC_NETWORK envvar: IPCd won't be contacted", .{});
|
||||||
return null;
|
return null;
|
||||||
}, // no need to contact IPCd
|
}, // no need to contact IPCd
|
||||||
else => { return err; },
|
else => { return err; },
|
||||||
@ -200,7 +199,7 @@ pub const Context = struct {
|
|||||||
pub fn connect_ipc (self: *Self, service_name: []const u8) !i32 {
|
pub fn connect_ipc (self: *Self, service_name: []const u8) !i32 {
|
||||||
// First, try ipcd.
|
// First, try ipcd.
|
||||||
if (try self.connect_ipcd (service_name, Connection.Type.IPC)) |fd| {
|
if (try self.connect_ipcd (service_name, Connection.Type.IPC)) |fd| {
|
||||||
print("Connected via IPCd, fd is {}\n", .{fd});
|
log.debug("Connected via IPCd, fd is {}", .{fd});
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
// In case this doesn't work, connect directly.
|
// In case this doesn't work, connect directly.
|
||||||
@ -342,8 +341,8 @@ pub const Context = struct {
|
|||||||
var current_event: Event = Event.init(Event.Type.ERROR, 0, 0, null);
|
var current_event: Event = Event.init(Event.Type.ERROR, 0, 0, null);
|
||||||
var wait_duration: i32 = -1; // -1 == unlimited
|
var wait_duration: i32 = -1; // -1 == unlimited
|
||||||
|
|
||||||
if (self.timer) |t| { wait_duration = t; }
|
if (self.timer) |t| { log.debug("listening (timer: {} ms)", .{t}); wait_duration = t; }
|
||||||
else { print("listening (no timer)\n", .{}); }
|
else { log.debug("listening (no timer)", .{}); }
|
||||||
|
|
||||||
// Make sure we listen to the right file descriptors,
|
// Make sure we listen to the right file descriptors,
|
||||||
// setting POLLIN & POLLOUT flags.
|
// setting POLLIN & POLLOUT flags.
|
||||||
@ -368,7 +367,7 @@ pub const Context = struct {
|
|||||||
count = try os.poll(self.pollfd.items, wait_duration);
|
count = try os.poll(self.pollfd.items, wait_duration);
|
||||||
|
|
||||||
if (count < 0) {
|
if (count < 0) {
|
||||||
print("there is a problem: poll < 0\n", .{});
|
log.err("there is a problem: poll < 0", .{});
|
||||||
current_event = Event.init(Event.Type.ERROR, 0, 0, null);
|
current_event = Event.init(Event.Type.ERROR, 0, 0, null);
|
||||||
return current_event;
|
return current_event;
|
||||||
}
|
}
|
||||||
@ -404,20 +403,20 @@ pub const Context = struct {
|
|||||||
},
|
},
|
||||||
.DISCONNECTION => {
|
.DISCONNECTION => {
|
||||||
var dest = try self.switchdb.getDest(fd.fd);
|
var dest = try self.switchdb.getDest(fd.fd);
|
||||||
print("disconnection from {} -> removing {}, too\n", .{fd.fd, dest});
|
log.debug("disconnection from {} -> removing {}, too", .{fd.fd, dest});
|
||||||
self.switchdb.nuke(fd.fd);
|
self.switchdb.nuke(fd.fd);
|
||||||
self.safe_close_fd(fd.fd);
|
self.safe_close_fd(fd.fd);
|
||||||
self.safe_close_fd(dest);
|
self.safe_close_fd(dest);
|
||||||
},
|
},
|
||||||
.ERROR => {
|
.ERROR => {
|
||||||
var dest = try self.switchdb.getDest(fd.fd);
|
var dest = try self.switchdb.getDest(fd.fd);
|
||||||
print("error from {} -> removing {}, too\n", .{fd.fd, dest});
|
log.warn("error from {} -> removing {}, too", .{fd.fd, dest});
|
||||||
self.switchdb.nuke(fd.fd);
|
self.switchdb.nuke(fd.fd);
|
||||||
self.safe_close_fd(fd.fd);
|
self.safe_close_fd(fd.fd);
|
||||||
self.safe_close_fd(dest);
|
self.safe_close_fd(dest);
|
||||||
},
|
},
|
||||||
else => {
|
else => {
|
||||||
print("switch rx incoherent error: {}\n", .{current_event.t});
|
log.warn("switch rx incoherent error: {}", .{current_event.t});
|
||||||
return error.incoherentSwitchError;
|
return error.incoherentSwitchError;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -431,7 +430,7 @@ pub const Context = struct {
|
|||||||
else {
|
else {
|
||||||
var maybe_message = self.read(i) catch |err| switch(err) {
|
var maybe_message = self.read(i) catch |err| switch(err) {
|
||||||
error.ConnectionResetByPeer => {
|
error.ConnectionResetByPeer => {
|
||||||
print("connection reset by peer\n", .{});
|
log.warn("connection reset by peer", .{});
|
||||||
try self.close(i);
|
try self.close(i);
|
||||||
return Event.init(Event.Type.DISCONNECTION, i, fd.fd, null);
|
return Event.init(Event.Type.DISCONNECTION, i, fd.fd, null);
|
||||||
},
|
},
|
||||||
@ -470,13 +469,13 @@ pub const Context = struct {
|
|||||||
},
|
},
|
||||||
.ERROR => {
|
.ERROR => {
|
||||||
var dest = try self.switchdb.getDest(fd.fd);
|
var dest = try self.switchdb.getDest(fd.fd);
|
||||||
print("error from {} -> removing {}, too\n", .{fd.fd, dest});
|
log.warn("error from {} -> removing {}, too", .{fd.fd, dest});
|
||||||
self.switchdb.nuke(fd.fd);
|
self.switchdb.nuke(fd.fd);
|
||||||
self.safe_close_fd(fd.fd);
|
self.safe_close_fd(fd.fd);
|
||||||
self.safe_close_fd(dest);
|
self.safe_close_fd(dest);
|
||||||
},
|
},
|
||||||
else => {
|
else => {
|
||||||
print("switch tx incoherent error: {}\n", .{current_event.t});
|
log.warn("switch tx incoherent error: {}", .{current_event.t});
|
||||||
return error.incoherentSwitchError;
|
return error.incoherentSwitchError;
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -608,7 +607,7 @@ test "Context - creation, display and memory check" {
|
|||||||
// SERVER SIDE: creating a service.
|
// SERVER SIDE: creating a service.
|
||||||
var server = c.server_init("simple-context-test") catch |err| switch(err) {
|
var server = c.server_init("simple-context-test") catch |err| switch(err) {
|
||||||
error.FileNotFound => {
|
error.FileNotFound => {
|
||||||
print ("\nError: cannot init server at {s}\n", .{path});
|
log.err("cannot init server at {s}", .{path});
|
||||||
return err;
|
return err;
|
||||||
},
|
},
|
||||||
else => return err,
|
else => return err,
|
||||||
@ -684,7 +683,7 @@ test "Context - creation, echo once" {
|
|||||||
// SERVER SIDE: creating a service.
|
// SERVER SIDE: creating a service.
|
||||||
var server = c.server_init("simple-context-test") catch |err| switch(err) {
|
var server = c.server_init("simple-context-test") catch |err| switch(err) {
|
||||||
error.FileNotFound => {
|
error.FileNotFound => {
|
||||||
print ("\nError: cannot init server at {s}\n", .{path});
|
log.err("cannot init server at {s}", .{path});
|
||||||
return err;
|
return err;
|
||||||
},
|
},
|
||||||
else => return err,
|
else => return err,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
const os = std.os;
|
const os = std.os;
|
||||||
const print = std.debug.print;
|
const log = std.log.scoped(.libipc_exchangefd);
|
||||||
|
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
const windows = std.os.windows;
|
const windows = std.os.windows;
|
||||||
@ -97,14 +97,13 @@ pub fn send_fd(sockfd: os.socket_t, msg: []const u8, fd: os.fd_t) void {
|
|||||||
.controllen = @sizeOf(@TypeOf(cmsg)),
|
.controllen = @sizeOf(@TypeOf(cmsg)),
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
}, 0) catch |err| {
|
}, 0) catch |err| {
|
||||||
print("error sendmsg failed with {s}", .{@errorName(err)});
|
log.err("error sendmsg failed with {s}", .{@errorName(err)});
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
if (len != msg.len) {
|
if (len != msg.len) {
|
||||||
// we don't have much choice but to exit here
|
// We don't have much choice but to exit here.
|
||||||
// log.err(@src(), "expected sendmsg to return {} but got {}", .{msg.len, len});
|
log.err("expected sendmsg to return {} but got {}", .{msg.len, len});
|
||||||
print("expected sendmsg to return {} but got {}", .{msg.len, len});
|
|
||||||
os.exit(0xff);
|
os.exit(0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,7 +214,7 @@ pub fn receive_fd(sockfd: os.socket_t, buffer: []u8, msg_size: *usize) !os.fd_t
|
|||||||
};
|
};
|
||||||
|
|
||||||
var msglen = recvmsg(sockfd, msg, 0) catch |err| {
|
var msglen = recvmsg(sockfd, msg, 0) catch |err| {
|
||||||
print("error recvmsg failed with {s}", .{@errorName(err)});
|
log.err("error recvmsg failed with {s}", .{@errorName(err)});
|
||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const print = std.debug.print;
|
|
||||||
|
|
||||||
pub fn hexdump(stream: anytype, header: [] const u8, buffer: [] const u8) std.os.WriteError!void {
|
pub fn hexdump(stream: anytype, header: [] const u8, buffer: [] const u8) std.os.WriteError!void {
|
||||||
// Print a header.
|
// Print a header.
|
||||||
@ -71,6 +70,8 @@ pub fn hexdump(stream: anytype, header: [] const u8, buffer: [] const u8) std.os
|
|||||||
try stream.writeAll("\n");
|
try stream.writeAll("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const print = std.debug.print;
|
||||||
|
|
||||||
test "36-byte hexdump test" {
|
test "36-byte hexdump test" {
|
||||||
print("\nPrint hexdump, NO AUTOMATIC VERIFICATION, READ SOURCE CODE\n", .{});
|
print("\nPrint hexdump, NO AUTOMATIC VERIFICATION, READ SOURCE CODE\n", .{});
|
||||||
|
|
||||||
@ -80,7 +81,6 @@ test "36-byte hexdump test" {
|
|||||||
var hexwriter = hexfbs.writer();
|
var hexwriter = hexfbs.writer();
|
||||||
try hexdump(hexwriter, "Hello World", buffer);
|
try hexdump(hexwriter, "Hello World", buffer);
|
||||||
print("{s}\n", .{hexfbs.getWritten()});
|
print("{s}\n", .{hexfbs.getWritten()});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test "32-byte hexdump test" {
|
test "32-byte hexdump test" {
|
||||||
@ -92,7 +92,6 @@ test "32-byte hexdump test" {
|
|||||||
var hexwriter = hexfbs.writer();
|
var hexwriter = hexfbs.writer();
|
||||||
try hexdump(hexwriter, "Hello World", buffer);
|
try hexdump(hexwriter, "Hello World", buffer);
|
||||||
print("{s}\n", .{hexfbs.getWritten()});
|
print("{s}\n", .{hexfbs.getWritten()});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test "26-byte hexdump test" {
|
test "26-byte hexdump test" {
|
||||||
@ -104,7 +103,6 @@ test "26-byte hexdump test" {
|
|||||||
var hexwriter = hexfbs.writer();
|
var hexwriter = hexfbs.writer();
|
||||||
try hexdump(hexwriter, "Hello World", buffer);
|
try hexdump(hexwriter, "Hello World", buffer);
|
||||||
print("{s}\n", .{hexfbs.getWritten()});
|
print("{s}\n", .{hexfbs.getWritten()});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test "1-byte hexdump test" {
|
test "1-byte hexdump test" {
|
||||||
@ -116,7 +114,6 @@ test "1-byte hexdump test" {
|
|||||||
var hexwriter = hexfbs.writer();
|
var hexwriter = hexfbs.writer();
|
||||||
try hexdump(hexwriter, "Hello World", buffer);
|
try hexdump(hexwriter, "Hello World", buffer);
|
||||||
print("{s}\n", .{hexfbs.getWritten()});
|
print("{s}\n", .{hexfbs.getWritten()});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
test "0-byte hexdump test" {
|
test "0-byte hexdump test" {
|
||||||
@ -128,5 +125,4 @@ test "0-byte hexdump test" {
|
|||||||
var hexwriter = hexfbs.writer();
|
var hexwriter = hexfbs.writer();
|
||||||
try hexdump(hexwriter, "Hello World", buffer);
|
try hexdump(hexwriter, "Hello World", buffer);
|
||||||
print("{s}\n", .{hexfbs.getWritten()});
|
print("{s}\n", .{hexfbs.getWritten()});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
// const hexdump = @import("./hexdump.zig");
|
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
const net = std.net;
|
const net = std.net;
|
||||||
const fmt = std.fmt;
|
const fmt = std.fmt;
|
||||||
|
|
||||||
const print = std.debug.print;
|
|
||||||
const print_eq = @import("./util.zig").print_eq;
|
const print_eq = @import("./util.zig").print_eq;
|
||||||
|
|
||||||
pub const Messages = std.ArrayList(Message);
|
pub const Messages = std.ArrayList(Message);
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const hexdump = @import("./hexdump.zig");
|
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
const fmt = std.fmt;
|
const fmt = std.fmt;
|
||||||
|
|
||||||
@ -13,7 +12,7 @@ const Allocator = std.mem.Allocator;
|
|||||||
|
|
||||||
const util = @import("./util.zig");
|
const util = @import("./util.zig");
|
||||||
const print_eq = util.print_eq;
|
const print_eq = util.print_eq;
|
||||||
const print = std.debug.print;
|
const log = std.log.scoped(.libipc_switch);
|
||||||
|
|
||||||
const Event = ipc.Event;
|
const Event = ipc.Event;
|
||||||
|
|
||||||
@ -301,7 +300,7 @@ fn default_in (origin: i32, mcontent: [*]u8, mlen: *u32) CBEventType {
|
|||||||
|
|
||||||
// Let's handle this as a disconnection.
|
// Let's handle this as a disconnection.
|
||||||
if (packet_size < 4) {
|
if (packet_size < 4) {
|
||||||
// print("message is less than 4 bytes ({} bytes)\n", .{packet_size});
|
log.debug("message is less than 4 bytes ({} bytes)", .{packet_size});
|
||||||
return CBEventType.FD_CLOSING;
|
return CBEventType.FD_CLOSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ const std = @import("std");
|
|||||||
const hexdump = @import("./hexdump.zig");
|
const hexdump = @import("./hexdump.zig");
|
||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
|
|
||||||
const print = std.debug.print;
|
const log = std.log.scoped(.libipc_util);
|
||||||
const Message = @import("./message.zig").Message;
|
const Message = @import("./message.zig").Message;
|
||||||
|
|
||||||
/// A VERY LIGHT and INCOMPLETE way of decoding URI.
|
/// A VERY LIGHT and INCOMPLETE way of decoding URI.
|
||||||
@ -42,7 +42,7 @@ pub fn print_buffer (header: []const u8, buffer: []const u8) void {
|
|||||||
var hexfbs = std.io.fixedBufferStream(&hexbuf);
|
var hexfbs = std.io.fixedBufferStream(&hexbuf);
|
||||||
var hexwriter = hexfbs.writer();
|
var hexwriter = hexfbs.writer();
|
||||||
hexdump.hexdump(hexwriter, header, buffer) catch unreachable;
|
hexdump.hexdump(hexwriter, header, buffer) catch unreachable;
|
||||||
print("{s}\n", .{hexfbs.getWritten()});
|
log.debug("{s}", .{hexfbs.getWritten()});
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_message (header: []const u8, m: Message) void {
|
pub fn print_message (header: []const u8, m: Message) void {
|
||||||
@ -55,8 +55,6 @@ pub fn print_eq(expected: anytype, obj: anytype) !void {
|
|||||||
var writer = fbs.writer();
|
var writer = fbs.writer();
|
||||||
|
|
||||||
try writer.print("{}", .{obj});
|
try writer.print("{}", .{obj});
|
||||||
// print("print_eq, expected: {s}\n", .{expected});
|
|
||||||
// print("print_eq: {s}\n", .{fbs.getWritten()});
|
|
||||||
|
|
||||||
// typing workaround
|
// typing workaround
|
||||||
var secbuffer: [4096]u8 = undefined;
|
var secbuffer: [4096]u8 = undefined;
|
||||||
|
Reference in New Issue
Block a user