Obsolete
/
libipc-old
Archived
3
0
Fork 0

Remove message type. It was useless: msg to IPCd is LOOKUP.

master
Philippe Pittoli 2023-01-05 11:49:33 +01:00
parent 4bbd5fc686
commit d99a8d13e3
6 changed files with 20 additions and 68 deletions

View File

@ -137,7 +137,7 @@ pub const Context = struct {
// content: target service name;${IPC_NETWORK} // content: target service name;${IPC_NETWORK}
// example: pong;pong tls://example.com:8998/pong // example: pong;pong tls://example.com:8998/pong
var m = try Message.init (ipcdfd, Message.Type.LOOKUP, allocator, lookupfbs.getWritten()); var m = try Message.init (ipcdfd, allocator, lookupfbs.getWritten());
try self.write (m); try self.write (m);
// Read LOOKUP response // Read LOOKUP response
@ -310,7 +310,7 @@ pub const Context = struct {
// Wait an event. // Wait an event.
pub fn wait_event(self: *Self) !Event { pub fn wait_event(self: *Self) !Event {
var current_event: Event = Event.init(Event.Type.NOT_SET, 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| { wait_duration = t; }
@ -389,9 +389,6 @@ pub const Context = struct {
}; };
if (maybe_message) |m| { if (maybe_message) |m| {
if (m.t == .LOOKUP) {
return Event.init(Event.Type.LOOKUP, i, fd.fd, m);
}
return Event.init(Event.Type.MESSAGE, i, fd.fd, m); return Event.init(Event.Type.MESSAGE, i, fd.fd, m);
} }
@ -505,7 +502,7 @@ pub const Context = struct {
// var s = Switch.init(3,8); // var s = Switch.init(3,8);
// var payload = "hello!!"; // var payload = "hello!!";
// // fd type payload // // fd type payload
// var m = Message.init(0, Message.Type.DATA, payload); // var m = Message.init(0, allocator, payload);
// //
// // type index origin message // // type index origin message
// var e = Event.init(Event.Type.CONNECTION, 5, 8, &m); // var e = Event.init(Event.Type.CONNECTION, 5, 8, &m);
@ -610,7 +607,7 @@ const ConnectThenSendMessageThread = struct {
var message_writer = message_fbs.writer(); var message_writer = message_fbs.writer();
// 'fd' parameter is not taken into account here (no loop) // 'fd' parameter is not taken into account here (no loop)
var m = try Message.init(0, Message.Type.DATA, allocator, "Hello world!"); var m = try Message.init(0, allocator, "Hello world!");
defer m.deinit(); defer m.deinit();
_ = try m.write(message_writer); _ = try m.write(message_writer);

View File

@ -34,14 +34,12 @@ pub const Event = struct {
// to it. This is a lookup. // to it. This is a lookup.
pub const Type = enum { pub const Type = enum {
NOT_SET, // Default. TODO: should we keep this?
ERROR, // A problem occured. ERROR, // A problem occured.
EXTERNAL, // Message received from a non IPC socket. EXTERNAL, // Message received from a non IPC socket.
SWITCH, // Message to send to a corresponding fd. SWITCH, // Message to send to a corresponding fd.
CONNECTION, // New user. CONNECTION, // New user.
DISCONNECTION, // User disconnected. DISCONNECTION, // User disconnected.
MESSAGE, // New message. MESSAGE, // New message.
LOOKUP, // Client asking for a service through ipcd.
TIMER, // Timeout in the poll(2) function. TIMER, // Timeout in the poll(2) function.
TX, // Message sent. TX, // Message sent.
}; };
@ -65,7 +63,7 @@ pub const Event = struct {
} }
pub fn clean(self: *Self) void { pub fn clean(self: *Self) void {
self.t = Event.Type.NOT_SET; self.t = Event.Type.ERROR;
self.index = @as(usize,0); self.index = @as(usize,0);
self.origin = @as(i32,0); self.origin = @as(i32,0);
if (self.m) |message| { if (self.m) |message| {
@ -89,9 +87,9 @@ test "Event - creation and display" {
const allocator = gpa.allocator(); const allocator = gpa.allocator();
var s = "hello!!"; var s = "hello!!";
var m = try Message.init(1, Message.Type.DATA, allocator, s); // fd type payload var m = try Message.init(1, allocator, s); // fd type payload
defer m.deinit(); defer m.deinit();
var e = Event.init(Event.Type.CONNECTION, 5, 8, m); // type index origin message var e = Event.init(Event.Type.CONNECTION, 5, 8, m); // type index origin message
try print_eq("event.Event.Type.CONNECTION, origin: 8, index 5, message: [fd: 1, message.Message.Type.DATA, payload: [hello!!]]", e); try print_eq("event.Event.Type.CONNECTION, origin: 8, index 5, message: [fd: 1, payload: [hello!!]]", e);
} }

View File

@ -103,18 +103,6 @@ fn create_service() !void {
}, },
.MESSAGE => { .MESSAGE => {
if (some_event.m) |m| {
print("New message: {}\n", .{m});
print("Let's echo it...\n", .{});
try ctx.schedule(m);
}
else {
print("Error while receiving new message.\n", .{});
print("Ignoring...\n", .{});
}
},
.LOOKUP => {
print("Client asking for a service through ipcd.\n", .{}); print("Client asking for a service through ipcd.\n", .{});
if (some_event.m) |m| { if (some_event.m) |m| {
print("{}\n", .{m}); print("{}\n", .{m});
@ -162,7 +150,6 @@ fn create_service() !void {
// a message, meaning there is nothing to do. This should be // a message, meaning there is nothing to do. This should be
// explicitely warned about. // explicitely warned about.
var response = try Message.init(some_event.origin var response = try Message.init(some_event.origin
, Message.Type.ERROR
, allocator , allocator
, "lookup message without data"); , "lookup message without data");
try ctx.write(response); try ctx.write(response);
@ -174,11 +161,6 @@ fn create_service() !void {
print("Message sent.\n", .{}); print("Message sent.\n", .{});
}, },
.NOT_SET => {
print("Event type not set. Something is wrong, let's suicide.\n", .{});
break;
},
.ERROR => { .ERROR => {
print("A problem occured, event: {}, let's suicide\n", .{some_event}); print("A problem occured, event: {}, let's suicide\n", .{some_event});
break; break;

View File

@ -11,14 +11,6 @@ pub const Messages = std.ArrayList(Message);
pub const Message = struct { pub const Message = struct {
pub const Type = enum {
SERVER_CLOSE,
ERROR,
DATA,
LOOKUP,
};
t: Message.Type, // Internal message type.
fd: i32, // File descriptor concerned about this message. fd: i32, // File descriptor concerned about this message.
payload: []const u8, payload: []const u8,
@ -26,19 +18,10 @@ pub const Message = struct {
const Self = @This(); const Self = @This();
// TODO pub fn init(fd: i32
//pub fn initFromConnection(fd: i32) Self {
// return Self{
// .t = Message.Type.ERROR,
// .fd = fd,
// .payload = "hello",
// };
//}
pub fn init(fd: i32, t: Message.Type
, allocator: std.mem.Allocator , allocator: std.mem.Allocator
, payload: []const u8) !Self { , payload: []const u8) !Self {
return Message { .fd = fd, .t = t return Message { .fd = fd
, .allocator = allocator , .allocator = allocator
, .payload = try allocator.dupe(u8, payload) }; , .payload = try allocator.dupe(u8, payload) };
} }
@ -49,34 +32,26 @@ pub const Message = struct {
pub fn read(fd: i32, buffer: []const u8, allocator: std.mem.Allocator) !Self { pub fn read(fd: i32, buffer: []const u8, allocator: std.mem.Allocator) !Self {
// var hexbuf: [4000]u8 = undefined;
// var hexfbs = std.io.fixedBufferStream(&hexbuf);
// var hexwriter = hexfbs.writer();
// try hexdump.hexdump(hexwriter, "Message.read input buffer", buffer);
// print("{s}\n", .{hexfbs.getWritten()});
var fbs = std.io.fixedBufferStream(buffer); var fbs = std.io.fixedBufferStream(buffer);
var reader = fbs.reader(); var reader = fbs.reader();
const msg_type = @intToEnum(Message.Type, try reader.readByte());
const msg_len = try reader.readIntBig(u32); const msg_len = try reader.readIntBig(u32);
if (msg_len >= buffer.len) { if (msg_len >= buffer.len - 4) {
return error.wrongMessageLength; return error.wrongMessageLength;
} }
const msg_payload = buffer[5..5+msg_len]; const msg_payload = buffer[4..4+msg_len];
return try Message.init(fd, msg_type, allocator, msg_payload); return try Message.init(fd, allocator, msg_payload);
} }
pub fn write(self: Self, writer: anytype) !usize { pub fn write(self: Self, writer: anytype) !usize {
try writer.writeByte(@enumToInt(self.t));
try writer.writeIntBig(u32, @truncate(u32, self.payload.len)); try writer.writeIntBig(u32, @truncate(u32, self.payload.len));
return 5 + try writer.write(self.payload); return 4 + try writer.write(self.payload);
} }
pub fn format(self: Self, comptime _: []const u8, _: fmt.FormatOptions, out_stream: anytype) !void { pub fn format(self: Self, comptime _: []const u8, _: fmt.FormatOptions, out_stream: anytype) !void {
try fmt.format(out_stream, "fd: {}, {}, payload: [{s}]", try fmt.format(out_stream, "fd: {}, payload: [{s}]",
.{self.fd, self.t, self.payload} ); .{self.fd, self.payload} );
} }
}; };
@ -88,10 +63,10 @@ test "Message - creation and display" {
const allocator = gpa.allocator(); const allocator = gpa.allocator();
var s = "hello!!"; var s = "hello!!";
var m = try Message.init(1, Message.Type.DATA, allocator, s); var m = try Message.init(1, allocator, s);
defer m.deinit(); defer m.deinit();
try print_eq("fd: 1, message.Message.Type.DATA, payload: [hello!!]", m); try print_eq("fd: 1, payload: [hello!!]", m);
} }
test "Message - read and write" { test "Message - read and write" {
@ -103,7 +78,7 @@ test "Message - read and write" {
// First, create a message. // First, create a message.
var s = "hello!!"; var s = "hello!!";
var first_message = try Message.init(1, Message.Type.DATA, allocator, s); var first_message = try Message.init(1, allocator, s);
defer first_message.deinit(); defer first_message.deinit();
// Test its content. // Test its content.

View File

@ -30,7 +30,7 @@ pub fn main() !u8 {
} }
var pongfd = try ctx.connect_ipc(service_to_contact); var pongfd = try ctx.connect_ipc(service_to_contact);
var message = try Message.init(pongfd, Message.Type.DATA, allocator, "bounce me"); var message = try Message.init(pongfd, allocator, "bounce me");
try ctx.schedule(message); try ctx.schedule(message);
var some_event: ipc.Event = undefined; var some_event: ipc.Event = undefined;

View File

@ -60,7 +60,7 @@ fn create_service() !void {
try os.sigaction(os.SIG.HUP, &sa, null); try os.sigaction(os.SIG.HUP, &sa, null);
var some_event: ipc.Event = undefined; var some_event: ipc.Event = undefined;
ctx.timer = 10000; // 10 seconds ctx.timer = 20000; // 2 seconds
var count: u32 = 0; var count: u32 = 0;
while(! S.should_quit) { while(! S.should_quit) {
some_event = try ctx.wait_event(); some_event = try ctx.wait_event();