Extract timeout

* Removed 16384 size limitation on WRAP file extract processing.
  * Added 10 second timeout.  Extract process reset after a 10 second
    period of no incoming text.
pull/1/head
David Freese 2012-08-25 08:40:32 -05:00
rodzic 72865127c6
commit a30ad34341
5 zmienionych plików z 95 dodań i 43 usunięć

Wyświetl plik

@ -3044,6 +3044,20 @@ static void cb_chk_open_flmsg(Fl_Check_Button* o, void*) {
progdefaults.changed = true;
}
Fl_Check_Button *chk_open_flmsg_print=(Fl_Check_Button *)0;
static void cb_chk_open_flmsg_print(Fl_Check_Button* o, void*) {
progdefaults.open_flmsg_print = o->value();
progdefaults.changed = true;
}
Fl_Value_Slider *sldr_extract_timeout=(Fl_Value_Slider *)0;
static void cb_sldr_extract_timeout(Fl_Value_Slider* o, void*) {
progdefaults.extract_timeout=o->value();
progdefaults.changed=true;
}
Fl_Input2 *txt_flmsg_pathname=(Fl_Input2 *)0;
static void cb_txt_flmsg_pathname(Fl_Input2* o, void*) {
@ -3057,13 +3071,6 @@ static void cb_btn_select_flmsg(Fl_Button*, void*) {
select_flmsg_pathname();
}
Fl_Check_Button *chk_open_flmsg_print=(Fl_Check_Button *)0;
static void cb_chk_open_flmsg_print(Fl_Check_Button* o, void*) {
progdefaults.open_flmsg_print = o->value();
progdefaults.changed = true;
}
Fl_Group *tabPskmail=(Fl_Group *)0;
Fl_Counter2 *cntServerCarrier=(Fl_Counter2 *)0;
@ -6973,16 +6980,16 @@ d frequency"));
} // Fl_Group* tabCPUspeed
{ tabNBEMS = new Fl_Group(0, 50, 540, 320, _("NBEMS"));
tabNBEMS->hide();
{ Fl_Group* o = new Fl_Group(26, 65, 490, 75, _("NBEMS data file interface"));
{ Fl_Group* o = new Fl_Group(20, 65, 500, 75, _("NBEMS data file interface"));
o->box(FL_ENGRAVED_FRAME);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
{ Fl_Check_Button* o = chkAutoExtract = new Fl_Check_Button(46, 100, 75, 20, _("Enable"));
{ Fl_Check_Button* o = chkAutoExtract = new Fl_Check_Button(74, 96, 75, 20, _("Enable"));
chkAutoExtract->tooltip(_("Extract files for use with external \"wrap / flmsg\" program"));
chkAutoExtract->down_box(FL_DOWN_BOX);
chkAutoExtract->callback((Fl_Callback*)cb_chkAutoExtract);
o->value(progdefaults.autoextract);
} // Fl_Check_Button* chkAutoExtract
{ Fl_Check_Button* o = chk_open_wrap_folder = new Fl_Check_Button(280, 100, 146, 20, _("Open message folder"));
{ Fl_Check_Button* o = chk_open_wrap_folder = new Fl_Check_Button(280, 96, 146, 20, _("Open message folder"));
chk_open_wrap_folder->tooltip(_("Opens NBEMS file folder upon successful capture"));
chk_open_wrap_folder->down_box(FL_DOWN_BOX);
chk_open_wrap_folder->callback((Fl_Callback*)cb_chk_open_wrap_folder);
@ -6990,16 +6997,36 @@ d frequency"));
} // Fl_Check_Button* chk_open_wrap_folder
o->end();
} // Fl_Group* o
{ Fl_Group* o = new Fl_Group(26, 141, 490, 95, _("Reception of flmsg file"));
{ Fl_Group* o = new Fl_Group(20, 141, 500, 129, _("Reception of flmsg file"));
o->box(FL_ENGRAVED_FRAME);
o->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
{ Fl_Check_Button* o = chk_open_flmsg = new Fl_Check_Button(46, 168, 136, 20, _("Open with flmsg"));
{ Fl_Check_Button* o = chk_open_flmsg = new Fl_Check_Button(74, 168, 136, 20, _("Open with flmsg"));
chk_open_flmsg->tooltip(_("Open message with flmsg"));
chk_open_flmsg->down_box(FL_DOWN_BOX);
chk_open_flmsg->callback((Fl_Callback*)cb_chk_open_flmsg);
o->value(progdefaults.open_flmsg);
} // Fl_Check_Button* chk_open_flmsg
{ Fl_Input2* o = txt_flmsg_pathname = new Fl_Input2(78, 199, 330, 24, _("flmsg:"));
{ Fl_Check_Button* o = chk_open_flmsg_print = new Fl_Check_Button(280, 168, 136, 20, _("Open in browser"));
chk_open_flmsg_print->tooltip(_("Open file with default browser"));
chk_open_flmsg_print->down_box(FL_DOWN_BOX);
chk_open_flmsg_print->callback((Fl_Callback*)cb_chk_open_flmsg_print);
o->value(progdefaults.open_flmsg_print);
} // Fl_Check_Button* chk_open_flmsg_print
{ Fl_Value_Slider* o = sldr_extract_timeout = new Fl_Value_Slider(40, 199, 364, 21, _("Timeout (secs)"));
sldr_extract_timeout->tooltip(_("Extract times out after NN seconds of inactivity."));
sldr_extract_timeout->type(5);
sldr_extract_timeout->color(FL_LIGHT3);
sldr_extract_timeout->selection_color(FL_FOREGROUND_COLOR);
sldr_extract_timeout->minimum(1);
sldr_extract_timeout->maximum(10);
sldr_extract_timeout->step(0.5);
sldr_extract_timeout->value(4);
sldr_extract_timeout->textsize(14);
sldr_extract_timeout->callback((Fl_Callback*)cb_sldr_extract_timeout);
sldr_extract_timeout->align(Fl_Align(FL_ALIGN_RIGHT));
o->value(progdefaults.extract_timeout);
} // Fl_Value_Slider* sldr_extract_timeout
{ Fl_Input2* o = txt_flmsg_pathname = new Fl_Input2(74, 231, 330, 24, _("flmsg:"));
txt_flmsg_pathname->tooltip(_("Enter full path-filename for flmsg"));
txt_flmsg_pathname->box(FL_DOWN_BOX);
txt_flmsg_pathname->color(FL_BACKGROUND2_COLOR);
@ -7013,16 +7040,10 @@ d frequency"));
txt_flmsg_pathname->when(FL_WHEN_CHANGED);
o->value(progdefaults.flmsg_pathname.c_str());
} // Fl_Input2* txt_flmsg_pathname
{ btn_select_flmsg = new Fl_Button(411, 199, 100, 24, _("Locate flmsg"));
{ btn_select_flmsg = new Fl_Button(411, 231, 100, 24, _("Locate flmsg"));
btn_select_flmsg->tooltip(_("Locate flmsg executable"));
btn_select_flmsg->callback((Fl_Callback*)cb_btn_select_flmsg);
} // Fl_Button* btn_select_flmsg
{ Fl_Check_Button* o = chk_open_flmsg_print = new Fl_Check_Button(280, 168, 136, 20, _("Open in browser"));
chk_open_flmsg_print->tooltip(_("Open file with default browser"));
chk_open_flmsg_print->down_box(FL_DOWN_BOX);
chk_open_flmsg_print->callback((Fl_Callback*)cb_chk_open_flmsg_print);
o->value(progdefaults.open_flmsg_print);
} // Fl_Check_Button* chk_open_flmsg_print
o->end();
} // Fl_Group* o
tabNBEMS->end();

Wyświetl plik

@ -3806,47 +3806,34 @@ progdefaults.changed = true;}
} {
Fl_Group {} {
label {NBEMS data file interface} open
xywh {26 65 490 75} box ENGRAVED_FRAME align 21
xywh {20 65 500 75} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button chkAutoExtract {
label Enable
callback {progdefaults.autoextract = o->value();
progdefaults.changed = true;}
tooltip {Extract files for use with external "wrap / flmsg" program} xywh {46 100 75 20} down_box DOWN_BOX
tooltip {Extract files for use with external "wrap / flmsg" program} xywh {74 96 75 20} down_box DOWN_BOX
code0 {o->value(progdefaults.autoextract);}
}
Fl_Check_Button chk_open_wrap_folder {
label {Open message folder}
callback {progdefaults.open_nbems_folder = o->value();
progdefaults.changed = true;}
tooltip {Opens NBEMS file folder upon successful capture} xywh {280 100 146 20} down_box DOWN_BOX
tooltip {Opens NBEMS file folder upon successful capture} xywh {280 96 146 20} down_box DOWN_BOX
code0 {o->value(progdefaults.open_nbems_folder);}
}
}
Fl_Group {} {
label {Reception of flmsg file} open
xywh {26 141 490 95} box ENGRAVED_FRAME align 21
xywh {20 141 500 129} box ENGRAVED_FRAME align 21
} {
Fl_Check_Button chk_open_flmsg {
label {Open with flmsg}
callback {progdefaults.open_flmsg = o->value();
progdefaults.changed = true;}
tooltip {Open message with flmsg} xywh {46 168 136 20} down_box DOWN_BOX
tooltip {Open message with flmsg} xywh {74 168 136 20} down_box DOWN_BOX
code0 {o->value(progdefaults.open_flmsg);}
}
Fl_Input txt_flmsg_pathname {
label {flmsg:}
callback {progdefaults.flmsg_pathname = o->value();
progdefaults.changed = true;}
tooltip {Enter full path-filename for flmsg} xywh {78 199 330 24} when 1
code0 {o->value(progdefaults.flmsg_pathname.c_str());}
class Fl_Input2
}
Fl_Button btn_select_flmsg {
label {Locate flmsg}
callback {select_flmsg_pathname();}
tooltip {Locate flmsg executable} xywh {411 199 100 24}
}
Fl_Check_Button chk_open_flmsg_print {
label {Open in browser}
callback {progdefaults.open_flmsg_print = o->value();
@ -3854,6 +3841,26 @@ progdefaults.changed = true;}
tooltip {Open file with default browser} xywh {280 168 136 20} down_box DOWN_BOX
code0 {o->value(progdefaults.open_flmsg_print);}
}
Fl_Value_Slider sldr_extract_timeout {
label {Timeout (secs)}
callback {progdefaults.extract_timeout=o->value();
progdefaults.changed=true;}
tooltip {Extract times out after NN seconds of inactivity.} xywh {40 199 364 21} type {Horz Knob} color 54 selection_color 0 align 8 minimum 1 maximum 10 step 0.5 value 4 textsize 14
code0 {o->value(progdefaults.extract_timeout);}
}
Fl_Input txt_flmsg_pathname {
label {flmsg:}
callback {progdefaults.flmsg_pathname = o->value();
progdefaults.changed = true;}
tooltip {Enter full path-filename for flmsg} xywh {74 231 330 24} when 1
code0 {o->value(progdefaults.flmsg_pathname.c_str());}
class Fl_Input2
}
Fl_Button btn_select_flmsg {
label {Locate flmsg}
callback {select_flmsg_pathname();}
tooltip {Locate flmsg executable} xywh {411 231 100 24}
}
}
}
Fl_Group tabPskmail {

Wyświetl plik

@ -408,9 +408,11 @@ extern Fl_Group *tabNBEMS;
extern Fl_Check_Button *chkAutoExtract;
extern Fl_Check_Button *chk_open_wrap_folder;
extern Fl_Check_Button *chk_open_flmsg;
extern Fl_Check_Button *chk_open_flmsg_print;
#include <FL/Fl_Value_Slider.H>
extern Fl_Value_Slider *sldr_extract_timeout;
extern Fl_Input2 *txt_flmsg_pathname;
extern Fl_Button *btn_select_flmsg;
extern Fl_Check_Button *chk_open_flmsg_print;
extern Fl_Group *tabPskmail;
extern Fl_Counter2 *cntServerCarrier;
extern Fl_Counter2 *cntServerOffset;

Wyświetl plik

@ -729,6 +729,9 @@
ELEM_(std::string, flmsg_pathname, "FLMSG_PATHNAME", \
"Full pathname to the flmsg executable", \
"") \
ELEM_(double, extract_timeout, "EXTRACT_TIMEOUT", \
"Abort message extraction after nn.n seconds of inactivity", \
2.0) \
ELEM_(std::string, cty_dat_pathname, "CTYDAT_PATHNAME", \
"Full pathname to the cty.dat data file", \
"") \

Wyświetl plik

@ -38,6 +38,7 @@
#include "confdialog.h"
#include "debug.h"
#include "icons.h"
#include "qrunner.h"
using namespace std;
@ -74,6 +75,23 @@ void rx_extract_reset()
extracting = false;
}
void rx_extract_timer(void *)
{
rx_extract_msg = "Extract timed out";
put_status(rx_extract_msg.c_str(), 20, STATUS_CLEAR);
rx_extract_reset();
}
void rx_add_timer()
{
Fl::add_timeout(progdefaults.extract_timeout, rx_extract_timer, NULL);
}
void rx_remove_timer()
{
Fl::remove_timeout(rx_extract_timer);
}
void rx_extract_add(int c)
{
if (!c) return;
@ -96,9 +114,14 @@ void rx_extract_add(int c)
memset(rx_extract_buff, ' ', bufsize);
extracting = true;
REQ(rx_remove_timer);
REQ(rx_add_timer);
} else if (extracting) {
rx_buff += ch;
REQ(rx_remove_timer);
REQ(rx_add_timer);
if (strstr(rx_extract_buff, end) != NULL) {
REQ(rx_remove_timer);
struct tm tim;
time_t t;
time(&t);
@ -169,10 +192,6 @@ void rx_extract_add(int c)
#endif
}
rx_extract_reset();
} else if (rx_buff.length() > 16384) {
rx_extract_msg = "Extract length exceeded 16384 bytes";
put_status(rx_extract_msg.c_str(), 20, STATUS_CLEAR);
rx_extract_reset();
}
}
}