mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-21 09:51:50 +00:00
Return mdp inet & http port numbers in servald start & status
This commit is contained in:
parent
86e01cb87d
commit
a6f408f013
@ -936,6 +936,15 @@ int app_server_start(const struct cli_parsed *parsed, struct cli_context *contex
|
|||||||
cli_put_string(context, serval_instancepath(), "\n");
|
cli_put_string(context, serval_instancepath(), "\n");
|
||||||
cli_field_name(context, "pid", ":");
|
cli_field_name(context, "pid", ":");
|
||||||
cli_put_long(context, pid, "\n");
|
cli_put_long(context, pid, "\n");
|
||||||
|
char buff[256];
|
||||||
|
if (server_get_proc_state("http_port", buff, sizeof buff)!=-1){
|
||||||
|
cli_field_name(context, "http_port", ":");
|
||||||
|
cli_put_string(context, buff, "\n");
|
||||||
|
}
|
||||||
|
if (server_get_proc_state("mdp_inet_port", buff, sizeof buff)!=-1){
|
||||||
|
cli_field_name(context, "mdp_inet_port", ":");
|
||||||
|
cli_put_string(context, buff, "\n");
|
||||||
|
}
|
||||||
cli_flush(context);
|
cli_flush(context);
|
||||||
/* Sleep before returning if env var is set. This is used in testing, to simulate the situation
|
/* Sleep before returning if env var is set. This is used in testing, to simulate the situation
|
||||||
on Android phones where the "start" command is invoked via the JNI interface and the calling
|
on Android phones where the "start" command is invoked via the JNI interface and the calling
|
||||||
@ -1017,6 +1026,15 @@ int app_server_status(const struct cli_parsed *parsed, struct cli_context *conte
|
|||||||
if (pid > 0) {
|
if (pid > 0) {
|
||||||
cli_field_name(context, "pid", ":");
|
cli_field_name(context, "pid", ":");
|
||||||
cli_put_long(context, pid, "\n");
|
cli_put_long(context, pid, "\n");
|
||||||
|
char buff[256];
|
||||||
|
if (server_get_proc_state("http_port", buff, sizeof buff)!=-1){
|
||||||
|
cli_field_name(context, "http_port", ":");
|
||||||
|
cli_put_string(context, buff, "\n");
|
||||||
|
}
|
||||||
|
if (server_get_proc_state("mdp_inet_port", buff, sizeof buff)!=-1){
|
||||||
|
cli_field_name(context, "mdp_inet_port", ":");
|
||||||
|
cli_put_string(context, buff, "\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return pid > 0 ? 0 : 1;
|
return pid > 0 ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
2
httpd.c
2
httpd.c
@ -205,7 +205,7 @@ error:
|
|||||||
return WHY("Failed to start HTTP server");
|
return WHY("Failed to start HTTP server");
|
||||||
|
|
||||||
success:
|
success:
|
||||||
server_write_proc_state("http_port", "%d\n", port);
|
server_write_proc_state("http_port", "%d", port);
|
||||||
INFOF("HTTP SERVER START port=%"PRIu16" fd=%d services=RESTful%s%s",
|
INFOF("HTTP SERVER START port=%"PRIu16" fd=%d services=RESTful%s%s",
|
||||||
port,
|
port,
|
||||||
httpd_server_socket,
|
httpd_server_socket,
|
||||||
|
@ -45,9 +45,9 @@ public class MdpDnaLookup extends ChannelSelector.Handler{
|
|||||||
throw new IOException("Expected 4 result fields");
|
throw new IOException("Expected 4 result fields");
|
||||||
ServalDCommand.LookupResult result = new ServalDCommand.LookupResult();
|
ServalDCommand.LookupResult result = new ServalDCommand.LookupResult();
|
||||||
result.subscriberId = new SubscriberId(fields[0]);
|
result.subscriberId = new SubscriberId(fields[0]);
|
||||||
result.did = fields[1];
|
result.uri = fields[1];
|
||||||
result.name = fields[2];
|
result.did = fields[2];
|
||||||
result.uri = fields[3];
|
result.name = fields[3];
|
||||||
results.result(result);
|
results.result(result);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -60,6 +60,7 @@ public class MdpSocket{
|
|||||||
packet.setFlags(MdpPacket.MDP_FLAG_BIND);
|
packet.setFlags(MdpPacket.MDP_FLAG_BIND);
|
||||||
packet.payload.flip();
|
packet.payload.flip();
|
||||||
packet.send(channel);
|
packet.send(channel);
|
||||||
|
channel.socket().setSoTimeout(5000);
|
||||||
// should throw MdpError on bind failures
|
// should throw MdpError on bind failures
|
||||||
receive(packet);
|
receive(packet);
|
||||||
try {
|
try {
|
||||||
|
@ -99,6 +99,8 @@ public class ServalDCommand
|
|||||||
public int tries;
|
public int tries;
|
||||||
public String instancePath;
|
public String instancePath;
|
||||||
public String status;
|
public String status;
|
||||||
|
public int mdpInetPort;
|
||||||
|
public int httpPort;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void putString(String value) {
|
public void putString(String value) {
|
||||||
@ -106,6 +108,10 @@ public class ServalDCommand
|
|||||||
instancePath=value;
|
instancePath=value;
|
||||||
if (columnName.equals("status"))
|
if (columnName.equals("status"))
|
||||||
status=value;
|
status=value;
|
||||||
|
if (columnName.equals("mdp_inet_port"))
|
||||||
|
mdpInetPort=Integer.parseInt(value);
|
||||||
|
if (columnName.equals("http_port"))
|
||||||
|
httpPort=Integer.parseInt(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -123,6 +129,8 @@ public class ServalDCommand
|
|||||||
", tries=" + tries +
|
", tries=" + tries +
|
||||||
", instancePath='" + instancePath + '\'' +
|
", instancePath='" + instancePath + '\'' +
|
||||||
", status='" + status + '\'' +
|
", status='" + status + '\'' +
|
||||||
|
", mdpInetPort='" + mdpInetPort + '\'' +
|
||||||
|
", httpPort='" + httpPort + '\'' +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,12 @@ public class CommandLine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void lookup(String did) throws IOException, InterruptedException, ServalDFailureException {
|
static void lookup(String did) throws IOException, InterruptedException, ServalDFailureException {
|
||||||
MdpSocket.loopbackMdpPort = Integer.parseInt(System.getenv("SERVAL_MDP_INET_PORT"));
|
ServalDCommand.Status s = ServalDCommand.serverStatus();
|
||||||
|
System.out.println(s);
|
||||||
|
if (s.getResult()!=0)
|
||||||
|
throw new ServalDFailureException("Serval daemon isn't running");
|
||||||
|
System.out.println(s);
|
||||||
|
MdpSocket.loopbackMdpPort = s.mdpInetPort;
|
||||||
ChannelSelector selector = new ChannelSelector();
|
ChannelSelector selector = new ChannelSelector();
|
||||||
MdpDnaLookup lookup = new MdpDnaLookup(selector, new AsyncResult<ServalDCommand.LookupResult>() {
|
MdpDnaLookup lookup = new MdpDnaLookup(selector, new AsyncResult<ServalDCommand.LookupResult>() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -202,7 +202,7 @@ int overlay_mdp_setup_sockets()
|
|||||||
fd = -1;
|
fd = -1;
|
||||||
mdp_sock2_inet.poll.events = POLLIN;
|
mdp_sock2_inet.poll.events = POLLIN;
|
||||||
watch(&mdp_sock2_inet);
|
watch(&mdp_sock2_inet);
|
||||||
server_write_proc_state("mdp_inet_port", "%d\n", port);
|
server_write_proc_state("mdp_inet_port", "%d", port);
|
||||||
INFOF("Socket mdp.2.inet: fd=%d %s", fd, alloca_socket_address(&addr));
|
INFOF("Socket mdp.2.inet: fd=%d %s", fd, alloca_socket_address(&addr));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
1
serval.h
1
serval.h
@ -307,6 +307,7 @@ void server_save_argv(int argc, const char *const *argv);
|
|||||||
int server(const struct cli_parsed *parsed);
|
int server(const struct cli_parsed *parsed);
|
||||||
int server_write_pid();
|
int server_write_pid();
|
||||||
int server_write_proc_state(const char *path, const char *fmt, ...);
|
int server_write_proc_state(const char *path, const char *fmt, ...);
|
||||||
|
int server_get_proc_state(const char *path, char *buff, size_t buff_len);
|
||||||
int server_create_stopfile();
|
int server_create_stopfile();
|
||||||
int server_remove_stopfile();
|
int server_remove_stopfile();
|
||||||
int server_check_stopfile();
|
int server_check_stopfile();
|
||||||
|
74
server.c
74
server.c
@ -17,6 +17,7 @@ along with this program; if not, write to the Free Software
|
|||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
@ -136,24 +137,31 @@ int server_write_pid()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int server_write_proc_state(const char *path, const char *fmt, ...)
|
static int get_proc_path(const char *path, char *buff, size_t buff_len)
|
||||||
{
|
{
|
||||||
char path_buf[400];
|
strbuf sbname = strbuf_local(buff, buff_len);
|
||||||
strbuf sbname = strbuf_local(path_buf, sizeof path_buf);
|
|
||||||
strbuf_path_join(sbname, serval_instancepath(), "proc", path, NULL);
|
strbuf_path_join(sbname, serval_instancepath(), "proc", path, NULL);
|
||||||
if (strbuf_overrun(sbname))
|
if (strbuf_overrun(sbname))
|
||||||
return WHY("Buffer overrun building proc filename");
|
return WHY("Buffer overrun building proc filename");
|
||||||
|
return 0;
|
||||||
char *name = strbuf_str(sbname);
|
}
|
||||||
|
|
||||||
size_t dirsiz = strlen(name) + 1;
|
int server_write_proc_state(const char *path, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
char path_buf[400];
|
||||||
|
if (get_proc_path(path, path_buf, sizeof path_buf)==-1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
size_t dirsiz = strlen(path_buf) + 1;
|
||||||
char dir_buf[dirsiz];
|
char dir_buf[dirsiz];
|
||||||
strcpy(dir_buf, name);
|
strcpy(dir_buf, path_buf);
|
||||||
const char *dir = dirname(dir_buf); // modifies dir_buf[]
|
const char *dir = dirname(dir_buf); // modifies dir_buf[]
|
||||||
if (mkdirs(dir, 0700) == -1)
|
if (mkdirs(dir, 0700) == -1)
|
||||||
return WHY_perror("mkdirs()");
|
return WHY_perror("mkdirs()");
|
||||||
|
|
||||||
FILE *f = fopen(name, "w");
|
FILE *f = fopen(path_buf, "w");
|
||||||
|
if (!f)
|
||||||
|
return WHY_perror("fopen()");
|
||||||
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
@ -164,6 +172,25 @@ int server_write_proc_state(const char *path, const char *fmt, ...)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int server_get_proc_state(const char *path, char *buff, size_t buff_len)
|
||||||
|
{
|
||||||
|
char path_buf[400];
|
||||||
|
if (get_proc_path(path, path_buf, sizeof path_buf)==-1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
FILE *f = fopen(path_buf, "r");
|
||||||
|
if (!f)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
int ret=0;
|
||||||
|
|
||||||
|
if (!fgets(buff, buff_len, f))
|
||||||
|
ret = WHY_perror("fgets");
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Called periodically by the server process in its main loop.
|
/* Called periodically by the server process in its main loop.
|
||||||
*/
|
*/
|
||||||
void server_config_reload(struct sched_ent *alarm)
|
void server_config_reload(struct sched_ent *alarm)
|
||||||
@ -262,6 +289,33 @@ int server_check_stopfile()
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void clean_proc()
|
||||||
|
{
|
||||||
|
char path_buf[400];
|
||||||
|
strbuf sbname = strbuf_local(path_buf, sizeof path_buf);
|
||||||
|
strbuf_path_join(sbname, serval_instancepath(), "proc", NULL);
|
||||||
|
|
||||||
|
DIR *dir;
|
||||||
|
struct dirent *dp;
|
||||||
|
if ((dir = opendir(path_buf)) == NULL) {
|
||||||
|
WARNF_perror("opendir(%s)", alloca_str_toprint(path_buf));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while ((dp = readdir(dir)) != NULL) {
|
||||||
|
strbuf_reset(sbname);
|
||||||
|
strbuf_path_join(sbname, serval_instancepath(), "proc", dp->d_name, NULL);
|
||||||
|
|
||||||
|
struct stat st;
|
||||||
|
if (lstat(path_buf, &st)) {
|
||||||
|
WARNF_perror("stat(%s)", path_buf);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (S_ISREG(st.st_mode))
|
||||||
|
unlink(path_buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void serverCleanUp()
|
void serverCleanUp()
|
||||||
{
|
{
|
||||||
if (serverMode){
|
if (serverMode){
|
||||||
@ -272,6 +326,8 @@ void serverCleanUp()
|
|||||||
|
|
||||||
overlay_mdp_clean_socket_files();
|
overlay_mdp_clean_socket_files();
|
||||||
|
|
||||||
|
clean_proc();
|
||||||
|
|
||||||
/* Try to remove shutdown and PID files and exit */
|
/* Try to remove shutdown and PID files and exit */
|
||||||
server_remove_stopfile();
|
server_remove_stopfile();
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,6 @@ setup_DnaLookup() {
|
|||||||
set_instance +A
|
set_instance +A
|
||||||
}
|
}
|
||||||
test_DnaLookup() {
|
test_DnaLookup() {
|
||||||
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'
|
execute --timeout=10 --core-backtrace java "-Djava.library.path=$LD_LIBRARY_PATH" -classpath "$PWD/classes" org.servalproject.test.CommandLine 'lookup'
|
||||||
assertStdoutGrep "$SIDB"
|
assertStdoutGrep "$SIDB"
|
||||||
tfw_cat --stdout --stderr
|
tfw_cat --stdout --stderr
|
||||||
|
Loading…
x
Reference in New Issue
Block a user