From b657227002124920525cc3b83bda372717b55614 Mon Sep 17 00:00:00 2001 From: David Freese Date: Fri, 10 Jun 2016 12:33:23 -0500 Subject: [PATCH] flmsg-arq autostart * add autostart to incoming flmsg-arq connect request --- src/dialogs/fl_digi.cxx | 2 +- src/include/xmlrpc.h | 7 +++++++ src/logger/rx_extract.cxx | 40 +++++++++++++++++++++++++++++++++++++-- src/misc/xmlrpc.cxx | 13 ++++++------- 4 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/dialogs/fl_digi.cxx b/src/dialogs/fl_digi.cxx index 7ff3d624..50299ab7 100644 --- a/src/dialogs/fl_digi.cxx +++ b/src/dialogs/fl_digi.cxx @@ -2190,7 +2190,7 @@ void cb_view_hide_channels(Fl_Menu_ *w, void *d) { int mvgw = mvgroup->w(); - progStatus.show_channels = !(mvgw > 0); + progStatus.show_channels = !(mvgw > mvgroup->x()); if (!progStatus.show_channels) { save_mvx = mvgw; diff --git a/src/include/xmlrpc.h b/src/include/xmlrpc.h index ae818c4a..50a7cdcc 100644 --- a/src/include/xmlrpc.h +++ b/src/include/xmlrpc.h @@ -24,6 +24,12 @@ #include #include +#include +#include +#include + +#include "threads.h" + class XmlRpcImpl; class XML_RPC_Server @@ -54,5 +60,6 @@ extern int number_of_samples(std::string s); extern bool flmsg_online; extern std::string flmsg_data; +extern pthread_mutex_t* server_mutex; #endif // XMLRPC_H diff --git a/src/logger/rx_extract.cxx b/src/logger/rx_extract.cxx index 0161b58b..767914f3 100644 --- a/src/logger/rx_extract.cxx +++ b/src/logger/rx_extract.cxx @@ -63,7 +63,7 @@ Save tags and all enclosed text to date-time stamped file, ie:\n\ ~/.nbems/WRAP/recv/extract-20090127-092515.wrap"); #endif -#define bufsize 32 +#define bufsize 64 char rx_extract_buff[bufsize + 1]; string rx_buff; string rx_extract_msg; @@ -129,7 +129,8 @@ void invoke_flmsg() put_status(rx_extract_msg.c_str(), 20, STATUS_CLEAR); if (flmsg_online && progdefaults.flmsg_transfer_direct) { - flmsg_data = rx_buff; + guard_lock autolock(server_mutex); + flmsg_data.append(rx_buff); return; } @@ -280,6 +281,36 @@ void invoke_flmsg() } } +void start_flmsg() +{ + string cmd = progdefaults.flmsg_pathname; + +#ifdef __MINGW32__ + char *cmdstr = strdup(cmd.c_str()); + STARTUPINFO si; + PROCESS_INFORMATION pi; + memset(&si, 0, sizeof(si)); + si.cb = sizeof(si); + memset(&pi, 0, sizeof(pi)); + if (!CreateProcess( NULL, cmdstr, + NULL, NULL, FALSE, + CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) + LOG_ERROR("CreateProcess failed with error code %ld", GetLastError()); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + free (cmdstr); +#else + switch (fork()) { + case 0: + execlp((char*)cmd.c_str(), (char*)cmd.c_str(), (char*)0, (char*)0); + exit(EXIT_FAILURE); + case -1: + fl_alert2(_("Could not start flmsg")); + default: ; + } +#endif +} + void rx_extract_add(int c) { if (!c) return; @@ -294,6 +325,11 @@ void rx_extract_add(int c) memmove(rx_extract_buff, &rx_extract_buff[1], bufsize - 1); rx_extract_buff[bufsize - 1] = ch; + if (strstr(rx_extract_buff, "~1") && strstr(rx_extract_buff, "~4")) { + if (!flmsg_online) start_flmsg(); + memset(rx_extract_buff, ' ', bufsize); + return; + } if (!extract_arq && strstr(rx_extract_buff, "ARQ:FILE::FLMSG_XFR")) { extract_arq = true; REQ(rx_remove_timer); diff --git a/src/misc/xmlrpc.cxx b/src/misc/xmlrpc.cxx index 4ffc9c44..4f1dcb31 100644 --- a/src/misc/xmlrpc.cxx +++ b/src/misc/xmlrpc.cxx @@ -40,19 +40,18 @@ #include #include #include - #include -#include -#include -#include +#include "threads.h" + +class XmlRpcImpl; #include "globals.h" #include "configuration.h" #ifdef HAVE_VALUES_H # include #endif -#include "threads.h" + #include "modem.h" #include "trx.h" #include "fl_digi.h" @@ -213,8 +212,8 @@ struct rpc_method typedef list methods_t; static methods_t* methods = 0; -static pthread_t* server_thread; -static pthread_mutex_t* server_mutex; +pthread_t* server_thread; +pthread_mutex_t* server_mutex; XML_RPC_Server* XML_RPC_Server::inst = 0;