s/var/const/
parent
e20a917409
commit
e43e34ffbd
|
@ -116,7 +116,7 @@ fn create_service() !void {
|
||||||
|
|
||||||
// 1. split message
|
// 1. split message
|
||||||
var iterator = std.mem.split(u8, m.payload, ";");
|
var iterator = std.mem.split(u8, m.payload, ";");
|
||||||
var service_to_contact = iterator.first();
|
const service_to_contact = iterator.first();
|
||||||
// print("service to contact: {s}\n", .{service_to_contact});
|
// print("service to contact: {s}\n", .{service_to_contact});
|
||||||
var final_destination: ?[]const u8 = null;
|
var final_destination: ?[]const u8 = null;
|
||||||
|
|
||||||
|
@ -124,8 +124,8 @@ fn create_service() !void {
|
||||||
while (iterator.next()) |next| {
|
while (iterator.next()) |next| {
|
||||||
// print("next part: {s}\n", .{next});
|
// print("next part: {s}\n", .{next});
|
||||||
var iterator2 = std.mem.split(u8, next, " ");
|
var iterator2 = std.mem.split(u8, next, " ");
|
||||||
var sname = iterator2.first();
|
const sname = iterator2.first();
|
||||||
var target = iterator2.next();
|
const target = iterator2.next();
|
||||||
if (target) |t| {
|
if (target) |t| {
|
||||||
// print ("sname: {s} - target: {s}\n", .{sname, t});
|
// print ("sname: {s} - target: {s}\n", .{sname, t});
|
||||||
if (std.mem.eql(u8, service_to_contact, sname)) {
|
if (std.mem.eql(u8, service_to_contact, sname)) {
|
||||||
|
@ -142,22 +142,22 @@ fn create_service() !void {
|
||||||
print("Connecting to {s} (service requested: {s})\n"
|
print("Connecting to {s} (service requested: {s})\n"
|
||||||
, .{dest, service_to_contact});
|
, .{dest, service_to_contact});
|
||||||
|
|
||||||
var uri = URI.read(dest);
|
const uri = URI.read(dest);
|
||||||
|
|
||||||
// 1. in case there is no URI
|
// 1. in case there is no URI
|
||||||
if (std.mem.eql(u8, uri.protocol, dest)) {
|
if (std.mem.eql(u8, uri.protocol, dest)) {
|
||||||
var newfd = try ctx.connect_service (dest);
|
const newfd = try ctx.connect_service (dest);
|
||||||
send_fd (some_event.origin, "ok", newfd);
|
send_fd (some_event.origin, "ok", newfd);
|
||||||
try ctx.close_fd (newfd);
|
try ctx.close_fd (newfd);
|
||||||
}
|
}
|
||||||
else if (std.mem.eql(u8, uri.protocol, "unix")) {
|
else if (std.mem.eql(u8, uri.protocol, "unix")) {
|
||||||
var newfd = try ctx.connect_service (uri.address);
|
const newfd = try ctx.connect_service (uri.address);
|
||||||
send_fd (some_event.origin, "ok", newfd);
|
send_fd (some_event.origin, "ok", newfd);
|
||||||
try ctx.close_fd (newfd);
|
try ctx.close_fd (newfd);
|
||||||
}
|
}
|
||||||
// 2. else, contact <protocol>d or directly the dest in case there is none.
|
// 2. else, contact <protocol>d or directly the dest in case there is none.
|
||||||
else {
|
else {
|
||||||
var servicefd = try ctx.connect_service (uri.protocol);
|
const servicefd = try ctx.connect_service (uri.protocol);
|
||||||
defer ctx.close_fd (servicefd) catch {};
|
defer ctx.close_fd (servicefd) catch {};
|
||||||
// TODO: make a simple protocol between IPCd and <protocol>d
|
// TODO: make a simple protocol between IPCd and <protocol>d
|
||||||
// NEED inform about the connection (success or fail)
|
// NEED inform about the connection (success or fail)
|
||||||
|
@ -169,7 +169,7 @@ fn create_service() !void {
|
||||||
var message = try Message.init(servicefd, allocator, dest);
|
var message = try Message.init(servicefd, allocator, dest);
|
||||||
defer message.deinit();
|
defer message.deinit();
|
||||||
try ctx.write(message);
|
try ctx.write(message);
|
||||||
var response_from_service = try ctx.read_fd(servicefd);
|
const response_from_service = try ctx.read_fd(servicefd);
|
||||||
if (response_from_service) |r| {
|
if (response_from_service) |r| {
|
||||||
defer r.deinit();
|
defer r.deinit();
|
||||||
if (std.mem.eql(u8, r.payload, "ok")) {
|
if (std.mem.eql(u8, r.payload, "ok")) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ pub fn main() !u8 {
|
||||||
// The service to contact, either provided with the SERVICE envvar
|
// The service to contact, either provided with the SERVICE envvar
|
||||||
// or simply using "pong".
|
// or simply using "pong".
|
||||||
var should_free_service_to_contact: bool = true;
|
var should_free_service_to_contact: bool = true;
|
||||||
var service_to_contact = std.process.getEnvVarOwned(allocator, "SERVICE") catch blk: {
|
const service_to_contact = std.process.getEnvVarOwned(allocator, "SERVICE") catch blk: {
|
||||||
should_free_service_to_contact = false;
|
should_free_service_to_contact = false;
|
||||||
break :blk "pong";
|
break :blk "pong";
|
||||||
};
|
};
|
||||||
|
@ -30,8 +30,8 @@ pub fn main() !u8 {
|
||||||
allocator.free(service_to_contact);
|
allocator.free(service_to_contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
var pongfd = try ctx.connect_ipc(service_to_contact);
|
const pongfd = try ctx.connect_ipc(service_to_contact);
|
||||||
var message = try Message.init(pongfd, allocator, "bounce me");
|
const 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;
|
||||||
|
|
|
@ -19,7 +19,7 @@ const print_eq = ipc.util.print_eq;
|
||||||
const URI = ipc.util.URI;
|
const URI = ipc.util.URI;
|
||||||
|
|
||||||
fn init_tcp_server(allocator: std.mem.Allocator, server: *net.StreamServer) !i32 {
|
fn init_tcp_server(allocator: std.mem.Allocator, server: *net.StreamServer) !i32 {
|
||||||
var address = std.process.getEnvVarOwned(allocator, "ADDRESS") catch |err| switch(err) {
|
const address = std.process.getEnvVarOwned(allocator, "ADDRESS") catch |err| switch(err) {
|
||||||
error.EnvironmentVariableNotFound => blk: {
|
error.EnvironmentVariableNotFound => blk: {
|
||||||
print ("no ADDRESS envvar: TCPd will listen on 127.0.0.1:9000\n", .{});
|
print ("no ADDRESS envvar: TCPd will listen on 127.0.0.1:9000\n", .{});
|
||||||
break :blk try allocator.dupe(u8, "127.0.0.1:9000");
|
break :blk try allocator.dupe(u8, "127.0.0.1:9000");
|
||||||
|
@ -28,14 +28,14 @@ fn init_tcp_server(allocator: std.mem.Allocator, server: *net.StreamServer) !i32
|
||||||
};
|
};
|
||||||
defer allocator.free(address);
|
defer allocator.free(address);
|
||||||
|
|
||||||
var iterator = std.mem.split(u8, address, ":");
|
const iterator = std.mem.split(u8, address, ":");
|
||||||
var real_tcp_address = iterator.first();
|
const real_tcp_address = iterator.first();
|
||||||
var real_tcp_port = try std.fmt.parseUnsigned(u16, iterator.rest(), 10);
|
const real_tcp_port = try std.fmt.parseUnsigned(u16, iterator.rest(), 10);
|
||||||
|
|
||||||
print ("TCP address [{s}] port [{}]\n", .{real_tcp_address, real_tcp_port});
|
print ("TCP address [{s}] port [{}]\n", .{real_tcp_address, real_tcp_port});
|
||||||
|
|
||||||
server.* = net.StreamServer.init(.{.reuse_address = true});
|
server.* = net.StreamServer.init(.{.reuse_address = true});
|
||||||
var socket_addr = try net.Address.parseIp(real_tcp_address, real_tcp_port);
|
const socket_addr = try net.Address.parseIp(real_tcp_address, real_tcp_port);
|
||||||
try server.listen(socket_addr);
|
try server.listen(socket_addr);
|
||||||
|
|
||||||
const newfd = server.sockfd orelse return error.SocketLOL; // TODO
|
const newfd = server.sockfd orelse return error.SocketLOL; // TODO
|
||||||
|
@ -48,11 +48,11 @@ fn create_service() !void {
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
var ctx = try ipc.Context.init(allocator);
|
const ctx = try ipc.Context.init(allocator);
|
||||||
defer ctx.deinit(); // There. Can't leak. Isn't Zig wonderful?
|
defer ctx.deinit(); // There. Can't leak. Isn't Zig wonderful?
|
||||||
|
|
||||||
// SERVER SIDE: creating a service.
|
// SERVER SIDE: creating a service.
|
||||||
var service_name = std.process.getEnvVarOwned(allocator, "IPC_SERVICE_NAME") catch |err| switch(err) {
|
const service_name = std.process.getEnvVarOwned(allocator, "IPC_SERVICE_NAME") catch |err| switch(err) {
|
||||||
error.EnvironmentVariableNotFound => blk: {
|
error.EnvironmentVariableNotFound => blk: {
|
||||||
print ("no IPC_SERVICE_NAME envvar: TCPd will be named 'tcp'\n", .{});
|
print ("no IPC_SERVICE_NAME envvar: TCPd will be named 'tcp'\n", .{});
|
||||||
break :blk try allocator.dupe(u8, "tcp");
|
break :blk try allocator.dupe(u8, "tcp");
|
||||||
|
@ -84,7 +84,7 @@ fn create_service() !void {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var sa = os.Sigaction{
|
const sa = os.Sigaction{
|
||||||
.handler = .{ .sigaction = &S.handler },
|
.handler = .{ .sigaction = &S.handler },
|
||||||
.mask = os.empty_sigset, // Do not mask any signal.
|
.mask = os.empty_sigset, // Do not mask any signal.
|
||||||
.flags = os.SA.SIGINFO,
|
.flags = os.SA.SIGINFO,
|
||||||
|
@ -93,8 +93,8 @@ fn create_service() !void {
|
||||||
// Quit on SIGHUP (kill -1).
|
// Quit on SIGHUP (kill -1).
|
||||||
try os.sigaction(os.SIG.HUP, &sa, null);
|
try os.sigaction(os.SIG.HUP, &sa, null);
|
||||||
|
|
||||||
var server: net.StreamServer = undefined;
|
const server: net.StreamServer = undefined;
|
||||||
var serverfd = try init_tcp_server(allocator, &server);
|
const serverfd = try init_tcp_server(allocator, &server);
|
||||||
try ctx.add_external (serverfd);
|
try ctx.add_external (serverfd);
|
||||||
|
|
||||||
var some_event: ipc.Event = undefined;
|
var some_event: ipc.Event = undefined;
|
||||||
|
@ -125,15 +125,15 @@ fn create_service() !void {
|
||||||
|
|
||||||
.EXTERNAL => {
|
.EXTERNAL => {
|
||||||
print ("Message received from a non IPC socket.\n", .{});
|
print ("Message received from a non IPC socket.\n", .{});
|
||||||
var client = try server.accept(); // net.StreamServer.Connection
|
const client = try server.accept(); // net.StreamServer.Connection
|
||||||
errdefer client.stream.close();
|
errdefer client.stream.close();
|
||||||
// Receiving a new client from the EXTERNAL socket.
|
// Receiving a new client from the EXTERNAL socket.
|
||||||
// New client = new switch from a distant TCP connection to a
|
// New client = new switch from a distant TCP connection to a
|
||||||
// local libipc service.
|
// local libipc service.
|
||||||
|
|
||||||
var buffer: [10000]u8 = undefined;
|
const buffer: [10000]u8 = undefined;
|
||||||
var size = try client.stream.read(&buffer);
|
const size = try client.stream.read(&buffer);
|
||||||
var service_to_contact = buffer[0..size];
|
const service_to_contact = buffer[0..size];
|
||||||
|
|
||||||
if (service_to_contact.len == 0) {
|
if (service_to_contact.len == 0) {
|
||||||
print("Error, no service provided, closing the connection.\n", .{});
|
print("Error, no service provided, closing the connection.\n", .{});
|
||||||
|
@ -142,7 +142,7 @@ fn create_service() !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
print ("Ask to connect to service [{s}].\n", .{service_to_contact});
|
print ("Ask to connect to service [{s}].\n", .{service_to_contact});
|
||||||
var servicefd = ctx.connect_service (service_to_contact) catch |err| {
|
const servicefd = ctx.connect_service (service_to_contact) catch |err| {
|
||||||
print("Error while connecting to the service {s}: {}.\n"
|
print("Error while connecting to the service {s}: {}.\n"
|
||||||
, .{service_to_contact, err});
|
, .{service_to_contact, err});
|
||||||
print ("Closing the connection.\n", .{});
|
print ("Closing the connection.\n", .{});
|
||||||
|
@ -192,15 +192,15 @@ fn create_service() !void {
|
||||||
defer m.deinit(); // Do not forget to free the message payload.
|
defer m.deinit(); // Do not forget to free the message payload.
|
||||||
|
|
||||||
print ("URI to contact {s}\n", .{m.payload});
|
print ("URI to contact {s}\n", .{m.payload});
|
||||||
var uri = URI.read(m.payload);
|
const uri = URI.read(m.payload);
|
||||||
print ("proto [{s}] address [{s}] path [{s}]\n"
|
print ("proto [{s}] address [{s}] path [{s}]\n"
|
||||||
, .{uri.protocol, uri.address, uri.path});
|
, .{uri.protocol, uri.address, uri.path});
|
||||||
|
|
||||||
var iterator = std.mem.split(u8, uri.address, ":");
|
var iterator = std.mem.split(u8, uri.address, ":");
|
||||||
var real_tcp_address = iterator.first();
|
const real_tcp_address = iterator.first();
|
||||||
var real_tcp_port = try std.fmt.parseUnsigned(u16, iterator.rest(), 10);
|
const real_tcp_port = try std.fmt.parseUnsigned(u16, iterator.rest(), 10);
|
||||||
|
|
||||||
var socket_addr = try net.Address.parseIp(real_tcp_address, real_tcp_port);
|
const socket_addr = try net.Address.parseIp(real_tcp_address, real_tcp_port);
|
||||||
var stream = try net.tcpConnectToAddress(socket_addr);
|
var stream = try net.tcpConnectToAddress(socket_addr);
|
||||||
errdefer stream.close();
|
errdefer stream.close();
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ fn create_service() !void {
|
||||||
|
|
||||||
print ("Writing URI PATH - written, waiting for the final 'ok'.\n", .{});
|
print ("Writing URI PATH - written, waiting for the final 'ok'.\n", .{});
|
||||||
var buffer: [10000]u8 = undefined;
|
var buffer: [10000]u8 = undefined;
|
||||||
var size = try stream.read(&buffer);
|
const size = try stream.read(&buffer);
|
||||||
if (! std.mem.eql(u8, buffer[0..size], "ok")) {
|
if (! std.mem.eql(u8, buffer[0..size], "ok")) {
|
||||||
print ("didn't receive 'ok', let's kill the connection\n", .{});
|
print ("didn't receive 'ok', let's kill the connection\n", .{});
|
||||||
stream.close();
|
stream.close();
|
||||||
|
|
Loading…
Reference in New Issue