Add support for configuring WebSocket binding

5ee080d24a (commitcomment-163197549)
This commit is contained in:
Ilia Ross
2025-07-31 15:21:33 +03:00
parent d8988bd9f0
commit 2037af9d25
6 changed files with 41 additions and 4 deletions

View File

@@ -64,6 +64,14 @@ else {
$miniserv{'bind'} = $first->[0];
}
$miniserv{'sockets'} = join(" ", map { "$_->[0]:$_->[1]" } @sockets);
# WebSocket bind address
if ($in{'websocket_bind_def'}) {
delete($miniserv{'websocket_bind'});
}
else {
$miniserv{'websocket_bind'} = $in{'websocket_bind'};
}
# Websocket base port
if ($in{'websocket_base_port_def'}) {
delete($miniserv{'websocket_base_port'});
}

View File

@@ -46,6 +46,14 @@ if (&foreign_check("firewall") || &foreign_check("firewalld")) {
}
print &ui_table_row($text{'bind_sockets'}, $stable);
# WebSocket default bind address
print &ui_table_row($text{'bind_websocaddr'},
&ui_radio("websocket_bind_def",
$miniserv{"websocket_bind"} ? 0 : 1,
[ [ 1, $text{'bind_websocaddr_localhost'} ],
[ 0, &ui_textbox("websocket_bind",
$miniserv{"websocket_bind"}, 15) ] ]));
# WebSocket based port
print &ui_table_row($text{'bind_websocport'},
&ui_radio("websocket_base_port_def",

View File

@@ -84,6 +84,14 @@ else {
$miniserv{'bind'} = $first->[0];
}
$miniserv{'sockets'} = join(" ", map { "$_->[0]:$_->[1]" } @sockets);
# WebSocket bind address
if ($in{'websocket_bind_def'}) {
delete($miniserv{'websocket_bind'});
}
else {
$miniserv{'websocket_bind'} = $in{'websocket_bind'};
}
# Websocket base port
if ($in{'websocket_base_port_def'}) {
delete($miniserv{'websocket_base_port'});
}

View File

@@ -43,6 +43,14 @@ if (&foreign_check("firewall") || &foreign_check("firewalld")) {
}
print &ui_table_row($text{'bind_sockets'}, $stable);
# WebSocket default bind address
print &ui_table_row($text{'bind_websocaddr'},
&ui_radio("websocket_bind_def",
$miniserv{"websocket_bind"} ? 0 : 1,
[ [ 1, $text{'bind_websocaddr_localhost'} ],
[ 0, &ui_textbox("websocket_bind",
$miniserv{"websocket_bind"}, 15) ] ]));
# WebSocket based port
print &ui_table_row($text{'bind_websocport'},
&ui_radio("websocket_base_port_def",

View File

@@ -49,7 +49,9 @@ bind_sport0=Same as first
bind_sport1=Specific port ..
bind_listen=Listen for broadcasts on UDP port
bind_none=Don't listen
bind_websocport=Base port number for WebSockets connections
bind_websocaddr=WebSocket bind address or hostname
bind_websocaddr_localhost=Localhost (127.0.0.1)
bind_websocport=WebSockets connection base port number
bind_websocport_none=Default (555)
bind_websoc_host=Hostname for WebSocket connections
bind_websoc_host_auto=Automatic

View File

@@ -104,16 +104,19 @@ $SIG{'ALRM'} = sub {
die "timeout waiting for connection";
};
alarm(60);
&error_stderr("Listening on port $port");
my %miniserv;
&get_miniserv_config(\%miniserv);
my $host = $miniserv{'websocket_bind'} || '127.0.0.1';
&error_stderr("Listening on port $host:$port");
my ($wsconn, $shellbuf);
my $server_socket = IO::Socket::INET->new(
Listen => 5,
LocalAddr => '127.0.0.1',
LocalAddr => $host,
LocalPort => $port,
Proto => 'tcp',
ReuseAddr => 1,
);
$server_socket || die "failed to listen on port $port";
$server_socket || die "Failed to listen on port $host:$port";
Net::WebSocket::Server->new(
listen => $server_socket,
on_connect => sub {