Fax server
git-svn-id: svn://10.65.10.50/trunk@3258 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4bb131e5cf
commit
620fe209fc
131
ba/bafax.cpp
131
ba/bafax.cpp
@ -61,6 +61,8 @@ class TFax_data : public TAssoc_array
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void set(const char* key, const char* value);
|
void set(const char* key, const char* value);
|
||||||
|
const char* get(const char* key) const;
|
||||||
|
|
||||||
void set_file(const char* file) { set("FILELIST", file); }
|
void set_file(const char* file) { set("FILELIST", file); }
|
||||||
char* get_char_star(const char* name) const;
|
char* get_char_star(const char* name) const;
|
||||||
|
|
||||||
@ -85,8 +87,24 @@ void TFax_data::set(const char* key, const char* value)
|
|||||||
add(key, TString(value), TRUE);
|
add(key, TString(value), TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* TFax_data::get_char_star(const char* name) const
|
const char* TFax_data::get(const char* key) const
|
||||||
{
|
{
|
||||||
|
const TString* s = (const TString*)((TAssoc_array*)this)->objptr(key);
|
||||||
|
return s ? (const char*)*s : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char* TFax_data::get_char_star(const char* name) const
|
||||||
|
{
|
||||||
|
if (stricmp(name, "FULLDESTFAX") == 0)
|
||||||
|
{
|
||||||
|
TString num(24);
|
||||||
|
num << get("DIALING");
|
||||||
|
num << get("PREFIX");
|
||||||
|
num << get("DESTFAX");
|
||||||
|
((TFax_data*)this)->set(name, num);
|
||||||
|
}
|
||||||
|
|
||||||
const TString* s = (const TString*)((TAssoc_array*)this)->objptr(name);
|
const TString* s = (const TString*)((TAssoc_array*)this)->objptr(name);
|
||||||
return s ? (char*)(const char*)*s : "";
|
return s ? (char*)(const char*)*s : "";
|
||||||
}
|
}
|
||||||
@ -238,7 +256,7 @@ protected:
|
|||||||
bool exec_command(const TString& comm, TToken_string& args);
|
bool exec_command(const TString& comm, TToken_string& args);
|
||||||
void handle_fax_message(word wparam, long lparam);
|
void handle_fax_message(word wparam, long lparam);
|
||||||
void handle_drop_files(word wparam);
|
void handle_drop_files(word wparam);
|
||||||
|
|
||||||
// @cmember Ritorna TRUE se il server non e' in attesa di nessun lavoro
|
// @cmember Ritorna TRUE se il server non e' in attesa di nessun lavoro
|
||||||
bool can_close() const;
|
bool can_close() const;
|
||||||
|
|
||||||
@ -262,6 +280,8 @@ public:
|
|||||||
bool set_destination(const TString& tipo, const TString& codice, TFax_data& data) const;
|
bool set_destination(const TString& tipo, const TString& codice, TFax_data& data) const;
|
||||||
bool push_destination(const TString& tipo, const TString& codice);
|
bool push_destination(const TString& tipo, const TString& codice);
|
||||||
|
|
||||||
|
void auto_configure();
|
||||||
|
|
||||||
TDDE_fax();
|
TDDE_fax();
|
||||||
virtual ~TDDE_fax();
|
virtual ~TDDE_fax();
|
||||||
};
|
};
|
||||||
@ -294,12 +314,23 @@ public:
|
|||||||
|
|
||||||
TFax_mask::TFax_mask(TDDE_fax* fax)
|
TFax_mask::TFax_mask(TDDE_fax* fax)
|
||||||
: TMask("bafax01"), _fax(fax)
|
: TMask("bafax01"), _fax(fax)
|
||||||
{
|
{
|
||||||
|
const char* pippe[] = { "DESTFAX", "FROMFAX", "PREFIX", NULL };
|
||||||
|
|
||||||
for (int i = fields()-1; i >= 0; i--)
|
for (int i = fields()-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
TMask_field& f = fld(i);
|
TMask_field& f = fld(i);
|
||||||
if (f.in_group(1))
|
if (f.in_group(1))
|
||||||
|
{
|
||||||
f.set_handler(code_handler);
|
f.set_handler(code_handler);
|
||||||
|
const TFieldref* c = f.field();
|
||||||
|
if (c != NULL)
|
||||||
|
{
|
||||||
|
for (int p = 0; pippe[p] != NULL; p++)
|
||||||
|
if (c->name() == pippe[p])
|
||||||
|
f.allow_pipe();
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
if (f.in_group(2))
|
if (f.in_group(2))
|
||||||
f.set_handler(button_handler);
|
f.set_handler(button_handler);
|
||||||
@ -479,6 +510,7 @@ bool TLog_mask::log_notify(TSheet_field& s, int, KEY k)
|
|||||||
const char* strid = s.row(i).get(0);
|
const char* strid = s.row(i).get(0);
|
||||||
unsigned long id; sscanf(strid, "%lu", &id);
|
unsigned long id; sscanf(strid, "%lu", &id);
|
||||||
m._fax->log_delete(log, id);
|
m._fax->log_delete(log, id);
|
||||||
|
do_events();
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -569,31 +601,29 @@ TDDE_fax::TDDE_fax()
|
|||||||
: _pappinfo(NULL), _log_mask(NULL), _fax_mask(NULL),
|
: _pappinfo(NULL), _log_mask(NULL), _fax_mask(NULL),
|
||||||
_close_when_idle(FALSE)
|
_close_when_idle(FALSE)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
const bool already = initiate(get_app_name(), "");
|
const bool already = initiate(get_app_name(), "");
|
||||||
if (already)
|
if (already)
|
||||||
{
|
{
|
||||||
terminate();
|
terminate();
|
||||||
xvt_statbar_set("C'e' gia' un server in esecuzione");
|
xvt_statbar_set("C'e' gia' un server in esecuzione");
|
||||||
beep();
|
beep();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
*/
|
||||||
|
_pappinfo = FaxRegisterApp(get_app_name(), hwnd());
|
||||||
|
if (_pappinfo)
|
||||||
|
{
|
||||||
|
start_server(); // Inizia DDE server
|
||||||
|
FaxSubscribe(_pappinfo, SUBSCRIBE_LOG_ALL); // Connettiti a Faxman
|
||||||
|
update_all_logs(); // Aggiorna tutte le code
|
||||||
|
DragAcceptFiles((HWND)hwnd(), TRUE); // Attiva Drag'n'drop
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
_pappinfo = FaxRegisterApp(get_app_name(), hwnd());
|
xvt_statbar_set("Impossibile connettersi a FAXMAN");
|
||||||
if (_pappinfo)
|
beep();
|
||||||
{
|
}
|
||||||
DragAcceptFiles((HWND)hwnd(), TRUE); // Attiva Drag'n'drop
|
|
||||||
|
|
||||||
FaxSubscribe(_pappinfo, SUBSCRIBE_LOG_ALL); // Connettiti a FAxman
|
|
||||||
update_all_logs();
|
|
||||||
|
|
||||||
start_server(); // Inizia DDE server
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xvt_statbar_set("Impossibile connettersi a FAXMAN");
|
|
||||||
beep();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TDDE_fax::~TDDE_fax()
|
TDDE_fax::~TDDE_fax()
|
||||||
@ -669,6 +699,8 @@ bool TDDE_fax::do_execute(word id, const TString& cmd)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Genera il nome di un file temporaneo e gli cambia l'estensione:
|
||||||
|
// se esiste gia' ripete il ciclo.
|
||||||
void TDDE_fax::choose_temp_name(TFilename& name) const
|
void TDDE_fax::choose_temp_name(TFilename& name) const
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
@ -815,9 +847,6 @@ bool TDDE_fax::send_next_fax()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
tw.maximize();
|
tw.maximize();
|
||||||
|
|
||||||
if (_port.first_one() < 0)
|
|
||||||
warning_box("Non c'e nessun modem-fax collegato");
|
|
||||||
|
|
||||||
CHECK(_fax_mask == NULL, "Double fax mask");
|
CHECK(_fax_mask == NULL, "Double fax mask");
|
||||||
_fax_mask = new TFax_mask(this);
|
_fax_mask = new TFax_mask(this);
|
||||||
@ -835,7 +864,7 @@ bool TDDE_fax::send_next_fax()
|
|||||||
PSEND_FAX sf = &_send_fax;
|
PSEND_FAX sf = &_send_fax;
|
||||||
FaxInitSendStruct(_pappinfo, sf);
|
FaxInitSendStruct(_pappinfo, sf);
|
||||||
|
|
||||||
sf->szDestFax = data.get_char_star("DESTFAX");
|
sf->szDestFax = data.get_char_star("FULLDESTFAX");
|
||||||
sf->szDestName = data.get_char_star("DESTNAME");
|
sf->szDestName = data.get_char_star("DESTNAME");
|
||||||
sf->szToCompany = data.get_char_star("DESTFIRM");
|
sf->szToCompany = data.get_char_star("DESTFIRM");
|
||||||
|
|
||||||
@ -954,29 +983,31 @@ void TDDE_fax::update_all_logs()
|
|||||||
_failed.destroy();
|
_failed.destroy();
|
||||||
_complete.destroy();
|
_complete.destroy();
|
||||||
|
|
||||||
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_PENDING) < MAXITERATORS) {
|
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_PENDING) < MAXITERATORS)
|
||||||
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) {
|
{
|
||||||
|
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT)
|
||||||
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_SENDING) < MAXITERATORS) {
|
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_SENDING) < MAXITERATORS)
|
||||||
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) {
|
{
|
||||||
|
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT)
|
||||||
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_COMPLETE) < MAXITERATORS) {
|
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_COMPLETE) < MAXITERATORS)
|
||||||
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) {
|
{
|
||||||
|
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT)
|
||||||
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_FAILED) < MAXITERATORS) {
|
if (FaxLogInit(_pappinfo, SUBSCRIBE_LOG_FAILED) < MAXITERATORS)
|
||||||
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT) {
|
{
|
||||||
|
while (FaxLogNext(_pappinfo, &tmpsf) == LOGERR_CONTINUEIT)
|
||||||
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
do_custom_message(WM_FAXMSG, FAXLOGADD, (LPARAM)&tmpsf);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FaxEnumDevices(_pappinfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDDE_fax::update_log(int log)
|
void TDDE_fax::update_log(int log)
|
||||||
@ -997,6 +1028,13 @@ void TDDE_fax::log_delete(int log, unsigned long id)
|
|||||||
FaxLogDelete(_pappinfo, id, log);
|
FaxLogDelete(_pappinfo, id, log);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TDDE_fax::auto_configure()
|
||||||
|
{
|
||||||
|
const int err = FaxAddDevice(_pappinfo, 0);
|
||||||
|
if (err == 0)
|
||||||
|
error_box("Impossibile trovare il server Faxman");
|
||||||
|
}
|
||||||
|
|
||||||
bool TDDE_fax::run_mask()
|
bool TDDE_fax::run_mask()
|
||||||
{
|
{
|
||||||
const bool ok = _log_mask == NULL;
|
const bool ok = _log_mask == NULL;
|
||||||
@ -1178,10 +1216,12 @@ bool TFax_server::create()
|
|||||||
const bool ok = _fax->ok();
|
const bool ok = _fax->ok();
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
TTemp_window w(TASK_WIN);
|
bool show_status = FALSE;
|
||||||
w.iconize();
|
|
||||||
|
|
||||||
if (argc() > 3)
|
if (argc() == 2)
|
||||||
|
show_status = stricmp(argv(1), "-S") == 0;
|
||||||
|
|
||||||
|
if (argc() > 2)
|
||||||
{
|
{
|
||||||
const TString tipo = argv(1);
|
const TString tipo = argv(1);
|
||||||
const TString codice = argv(2);
|
const TString codice = argv(2);
|
||||||
@ -1201,6 +1241,16 @@ bool TFax_server::create()
|
|||||||
msg = mb.next_s(topic);
|
msg = mb.next_s(topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (show_status)
|
||||||
|
{
|
||||||
|
dispatch_e_menu(MENU_ITEM(1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TTemp_window w(TASK_WIN);
|
||||||
|
w.iconize();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
destroy(); // Non verrebbe mai chiamata
|
destroy(); // Non verrebbe mai chiamata
|
||||||
@ -1226,6 +1276,9 @@ bool TFax_server::menu(MENU_TAG mt)
|
|||||||
case MENU_ITEM(1):
|
case MENU_ITEM(1):
|
||||||
_fax->run_mask();
|
_fax->run_mask();
|
||||||
break;
|
break;
|
||||||
|
case MENU_ITEM(2):
|
||||||
|
_fax->auto_configure();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
11
ba/bafax.url
11
ba/bafax.url
@ -1,6 +1,13 @@
|
|||||||
|
#define APPNAME EASYFAX
|
||||||
|
#define QAPPNAME "EASYFAX"
|
||||||
|
|
||||||
#include <default.url>
|
#include <default.url>
|
||||||
|
|
||||||
MENU TASK_MENUBAR
|
MENU TASK_MENUBAR
|
||||||
SUBMENU MENU_FILE "~File"
|
SUBMENU MENU_FILE "~File"
|
||||||
ITEM MENU_ITEM(1) "~Stato"
|
SUBMENU BAR_ITEM(1) "~Modem/Fax"
|
||||||
|
|
||||||
|
MENU BAR_ITEM(1)
|
||||||
|
ITEM MENU_ITEM(1) "~Stato"
|
||||||
|
ITEM MENU_ITEM(2) "~Azzera"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user