diff --git a/src/include/xmlrpc.h b/src/include/xmlrpc.h index e68e00f2..ae818c4a 100644 --- a/src/include/xmlrpc.h +++ b/src/include/xmlrpc.h @@ -49,6 +49,7 @@ private: extern void xmlrpc_set_qsy(long long rfc); extern int xmltest_char(); extern bool xmltest_char_available; +extern void reset_xmlchars(); extern int number_of_samples(std::string s); extern bool flmsg_online; diff --git a/src/misc/xmlrpc.cxx b/src/misc/xmlrpc.cxx index b9f955e6..4ffc9c44 100644 --- a/src/misc/xmlrpc.cxx +++ b/src/misc/xmlrpc.cxx @@ -1725,10 +1725,29 @@ public: static string xmlchars; bool xmltest_char_available; static size_t pxmlchar = 0; +static char xml_status_msg[50]; int xmltest_char() { - if (pxmlchar >= xmlchars.length() ) return -3; - return xmlchars[pxmlchar++] & 0xFF; + if (xmlchars.empty() || !xmltest_char_available) + return 0; + if (pxmlchar >= xmlchars.length() ) { + xmlchars.clear(); + pxmlchar = 0; + xmltest_char_available = false; + return -3; + } + pxmlchar++; + snprintf(xml_status_msg, sizeof(xml_status_msg), "%d%% sent", + 100*pxmlchar/xmlchars.length()); + put_status(xml_status_msg, 1.0); + return xmlchars[pxmlchar] & 0xFF; +} + +void reset_xmlchars() +{ + xmlchars.clear(); + pxmlchar = 0; + xmltest_char_available = false; } int number_of_samples( string s) @@ -2944,7 +2963,10 @@ public: void execute(const xmlrpc_c::paramList& params, xmlrpc_c::value* retval) { XMLRPC_LOCK; - REQ_SYNC(&FTextTX::add_text, TransmitText, params.getString(0)); +// REQ_SYNC(&FTextTX::add_text, TransmitText, params.getString(0)); + xmlchars = params.getString(0); + xmltest_char_available = true; + pxmlchar = 0; *retval = xmlrpc_c::value_nil(); } }; diff --git a/src/waterfall/waterfall.cxx b/src/waterfall/waterfall.cxx index 4717cd53..28f7622b 100644 --- a/src/waterfall/waterfall.cxx +++ b/src/waterfall/waterfall.cxx @@ -71,6 +71,7 @@ #include "flslider2.h" #include "debug.h" #include "rigsupport.h" +#include "xmlrpc.h" using namespace std; @@ -1245,6 +1246,7 @@ void xmtrcv_cb(Fl_Widget *w, void *vi) } else { TransmitText->clear(); + reset_xmlchars(); if (arq_text_available) AbortARQ(); if (progStatus.timer)