mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-04-08 11:34:13 +00:00
Add proc files for http server & mdp udp ports
This commit is contained in:
parent
ae67dd9c56
commit
33cbc98300
@ -343,6 +343,7 @@ END_ARRAY(5)
|
||||
|
||||
STRUCT(mdp)
|
||||
SUB_STRUCT(mdp_iftypelist, iftype,)
|
||||
ATOM(bool_t, enable_inet, 0, boolean,, "If true, allow mdp clients to connect over loopback UDP")
|
||||
END_STRUCT
|
||||
|
||||
STRUCT(olsr)
|
||||
|
1
httpd.c
1
httpd.c
@ -205,6 +205,7 @@ error:
|
||||
return WHY("Failed to start HTTP server");
|
||||
|
||||
success:
|
||||
server_write_proc_state("http_port", "%d\n", port);
|
||||
INFOF("HTTP SERVER START port=%"PRIu16" fd=%d services=RESTful%s%s",
|
||||
port,
|
||||
httpd_server_socket,
|
||||
|
@ -177,25 +177,42 @@ int overlay_mdp_setup_sockets()
|
||||
watch(&mdp_sock2);
|
||||
}
|
||||
|
||||
if (mdp_sock2_inet.poll.fd == -1) {
|
||||
const char *port_str = getenv("SERVAL_MDP_INET_PORT");
|
||||
if (port_str){
|
||||
int fd = esocket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (fd>=0){
|
||||
struct socket_address addr;
|
||||
addr.addrlen = sizeof(addr.inet);
|
||||
addr.inet.sin_family = AF_INET;
|
||||
addr.inet.sin_port = htons(atoi(port_str));
|
||||
addr.inet.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||
if (socket_bind(fd, &addr)==0){
|
||||
if (mdp_sock2_inet.poll.fd == -1 && config.mdp.enable_inet) {
|
||||
int fd = esocket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (fd>=0){
|
||||
// try to find a free UDP port somewhere between 4210 & 4260
|
||||
uint16_t start_port = 4210;
|
||||
|
||||
struct socket_address addr;
|
||||
addr.addrlen = sizeof(addr.inet);
|
||||
addr.inet.sin_family = AF_INET;
|
||||
addr.inet.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
|
||||
|
||||
const char *port_str = getenv("SERVAL_MDP_INET_PORT");
|
||||
if (port_str)
|
||||
start_port = atoi(port_str);
|
||||
|
||||
uint16_t end_port = start_port+50;
|
||||
uint16_t port;
|
||||
|
||||
for (port = start_port; port<=end_port; port++){
|
||||
addr.inet.sin_port = htons(port);
|
||||
if (bind(fd, &addr.addr, addr.addrlen)!=-1){
|
||||
mdp_sock2_inet.poll.fd = fd;
|
||||
fd = -1;
|
||||
mdp_sock2_inet.poll.events = POLLIN;
|
||||
watch(&mdp_sock2_inet);
|
||||
server_write_proc_state("mdp_inet_port", "%d\n", port);
|
||||
INFOF("Socket mdp.2.inet: fd=%d %s", fd, alloca_socket_address(&addr));
|
||||
}else{
|
||||
close(fd);
|
||||
break;
|
||||
}
|
||||
|
||||
if (errno != EADDRINUSE)
|
||||
WHY_perror("bind");
|
||||
}
|
||||
|
||||
if (fd!=-1)
|
||||
close(fd);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
1
serval.h
1
serval.h
@ -306,6 +306,7 @@ int server_pid();
|
||||
void server_save_argv(int argc, const char *const *argv);
|
||||
int server(const struct cli_parsed *parsed);
|
||||
int server_write_pid();
|
||||
int server_write_proc_state(const char *path, const char *fmt, ...);
|
||||
int server_create_stopfile();
|
||||
int server_remove_stopfile();
|
||||
int server_check_stopfile();
|
||||
|
29
server.c
29
server.c
@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <libgen.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
@ -135,6 +136,34 @@ int server_write_pid()
|
||||
return 0;
|
||||
}
|
||||
|
||||
int server_write_proc_state(const char *path, const char *fmt, ...)
|
||||
{
|
||||
char path_buf[400];
|
||||
strbuf sbname = strbuf_local(path_buf, sizeof path_buf);
|
||||
strbuf_path_join(sbname, serval_instancepath(), "proc", path, NULL);
|
||||
if (strbuf_overrun(sbname))
|
||||
return WHY("Buffer overrun building proc filename");
|
||||
|
||||
char *name = strbuf_str(sbname);
|
||||
|
||||
size_t dirsiz = strlen(name) + 1;
|
||||
char dir_buf[dirsiz];
|
||||
strcpy(dir_buf, name);
|
||||
const char *dir = dirname(dir_buf); // modifies dir_buf[]
|
||||
if (mkdirs(dir, 0700) == -1)
|
||||
return WHY_perror("mkdirs()");
|
||||
|
||||
FILE *f = fopen(name, "w");
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
vfprintf(f, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Called periodically by the server process in its main loop.
|
||||
*/
|
||||
void server_config_reload(struct sched_ent *alarm)
|
||||
|
@ -347,10 +347,10 @@ rhizome_http_server_started() {
|
||||
}
|
||||
|
||||
get_rhizome_server_port() {
|
||||
set_instance $2
|
||||
local _var="$1"
|
||||
local _logvar=LOG${2#+}
|
||||
local _port=$($SED -n -e '/HTTP SERVER START/s/.*port=\([0-9]\{1,\}\).*services=[^ ]*\<Rhizome\>.*/\1/p' "${!_logvar}" | $SED -n '$p')
|
||||
assert --message="instance $2 Rhizome HTTP server port number is known" [ -n "$_port" ]
|
||||
local _port=$(<"$SERVALINSTANCE_PATH/proc/http_port")
|
||||
assert --message="instance $instance_name Rhizome HTTP server port number is known" [ -n "$_port" ]
|
||||
if [ -n "$_var" ]; then
|
||||
eval "$_var=\$_port"
|
||||
tfw_log "$_var=$_port"
|
||||
|
@ -113,8 +113,9 @@ doc_DnaLookup="DNA Lookup via JNI MDP API"
|
||||
setup_DnaLookup() {
|
||||
configure_servald_server() {
|
||||
add_servald_interface
|
||||
executeOk_servald config set debug.mdprequests on
|
||||
export SERVAL_MDP_INET_PORT="411$instance_number"
|
||||
executeOk_servald config \
|
||||
set debug.mdprequests on \
|
||||
set mdp.enable_inet on
|
||||
}
|
||||
setup
|
||||
set_instance +A
|
||||
@ -123,7 +124,7 @@ setup_DnaLookup() {
|
||||
set_instance +A
|
||||
}
|
||||
test_DnaLookup() {
|
||||
export SERVAL_MDP_INET_PORT="411$instance_number"
|
||||
export SERVAL_MDP_INET_PORT=$(<"$SERVALINSTANCE_PATH/proc/mdp_inet_port")
|
||||
execute --timeout=10 --core-backtrace java "-Djava.library.path=$LD_LIBRARY_PATH" -classpath "$PWD/classes" org.servalproject.test.CommandLine 'lookup'
|
||||
assertStdoutGrep "$SIDB"
|
||||
tfw_cat --stdout --stderr
|
||||
|
Loading…
x
Reference in New Issue
Block a user