Skip to content
Snippets Groups Projects
Commit 1ed8bdac authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

When processing AreaRequest with -R (rescan), rescan existing echoes too

If the body of the request mesages message contains a list of area-tags,
even if we already have the node linked to those echoes, do the rescan for
each listed echo. Previously, only newly-added echoes would be rescanned
via this method.

Apparently the D'bridge built-in method of generating AreaManager requests
uses this syntax (per Ward Dossche).

Also, when rescanning due to AreaManager rescan request and generating a
response netmail message, include the total number of messages exported as a
result.

Increase SBBSecho version number to v3.22 (Please upgrade, Fernando) :-)
parent bf6bec26
No related branches found
No related tags found
No related merge requests found
Pipeline #7138 passed
...@@ -115,7 +115,7 @@ int lprintf(int level, char *fmt, ...) ...@@ -115,7 +115,7 @@ int lprintf(int level, char *fmt, ...)
; ;
int mv(const char *insrc, const char *indest, bool copy); int mv(const char *insrc, const char *indest, bool copy);
time32_t fmsgtime(const char *str); time32_t fmsgtime(const char *str);
void export_echomail(const char *sub_code, const nodecfg_t*, bool rescan); ulong export_echomail(const char *sub_code, const nodecfg_t*, bool rescan);
const char* area_desc(const char* areatag); const char* area_desc(const char* areatag);
/* FTN-compliant "Program Identifier"/PID (also used as a "Tosser Identifier"/TID) */ /* FTN-compliant "Program Identifier"/PID (also used as a "Tosser Identifier"/TID) */
...@@ -1706,11 +1706,6 @@ void alter_areas(str_list_t add_area, str_list_t del_area, nodecfg_t* nodecfg, c ...@@ -1706,11 +1706,6 @@ void alter_areas(str_list_t add_area, str_list_t del_area, nodecfg_t* nodecfg, c
return; return;
} }
memcpy(&cfg.area[u].link[cfg.area[u].links-1],&addr,sizeof(fidoaddr_t)); memcpy(&cfg.area[u].link[cfg.area[u].links-1],&addr,sizeof(fidoaddr_t));
bool rescanned = false;
if(rescan && is_valid_subnum(&scfg, cfg.area[u].sub)) {
rescanned = true;
export_echomail(scfg.sub[cfg.area[u].sub]->code, nodecfg, true);
}
fprintf(afileout,"%-*s %-*s " fprintf(afileout,"%-*s %-*s "
,LEN_EXTCODE, code ,LEN_EXTCODE, code
...@@ -1721,13 +1716,17 @@ void alter_areas(str_list_t add_area, str_list_t del_area, nodecfg_t* nodecfg, c ...@@ -1721,13 +1716,17 @@ void alter_areas(str_list_t add_area, str_list_t del_area, nodecfg_t* nodecfg, c
if(comment[0]) if(comment[0])
fprintf(afileout,"%s",comment); fprintf(afileout,"%s",comment);
fprintf(afileout,"\n"); fprintf(afileout,"\n");
fprintf(nmfile,"%s added%s.\r\n",echotag, rescanned ? " and rescanned" : ""); fprintf(nmfile,"%s added.\r\n",echotag);
added++; added++;
break; break;
} }
} }
if(u==cfg.areas) /* Something screwy going on */ if(u==cfg.areas) /* Something screwy going on */
fprintf(afileout,"%s\n",fields); fprintf(afileout,"%s\n",fields);
else if(rescan && area_is_linked(u,&addr) && is_valid_subnum(&scfg, cfg.area[u].sub)) {
ulong exported = export_echomail(scfg.sub[cfg.area[u].sub]->code, nodecfg, true);
fprintf(nmfile,"%s rescanned and %lu messages exported.\r\n", echotag, exported);
}
continue; /* Area match so continue on */ continue; /* Area match so continue on */
} }
nomatch=1; /* This area wasn't in there */ nomatch=1; /* This area wasn't in there */
...@@ -2102,10 +2101,9 @@ bool areafix_command(char* instr, nodecfg_t* nodecfg, const char* to, bool resca ...@@ -2102,10 +2101,9 @@ bool areafix_command(char* instr, nodecfg_t* nodecfg, const char* to, bool resca
if(stricmp(instr, "RESCAN") == 0) { if(stricmp(instr, "RESCAN") == 0) {
lprintf(LOG_INFO, "AreaFix (for %s) Rescanning all areas", faddrtoa(&addr)); lprintf(LOG_INFO, "AreaFix (for %s) Rescanning all areas", faddrtoa(&addr));
export_echomail(NULL, nodecfg, true); ulong exported = export_echomail(NULL, nodecfg, true);
create_netmail(to,/* msg: */NULL, "Rescan Areas" snprintf(str, sizeof str, "All connected areas have been rescanned and %lu messages exported.", exported);
,"All connected areas carried by your hub have been rescanned." create_netmail(to,/* msg: */NULL, "Rescan Areas", str, /* dest: */addr, /* src: */NULL);
,/* dest: */addr, /* src: */NULL);
return true; return true;
} }
...@@ -2119,8 +2117,8 @@ bool areafix_command(char* instr, nodecfg_t* nodecfg, const char* to, bool resca ...@@ -2119,8 +2117,8 @@ bool areafix_command(char* instr, nodecfg_t* nodecfg, const char* to, bool resca
else if(subnum == INVALID_SUB) else if(subnum == INVALID_SUB)
SAFEPRINTF(str, "Connected area '%s' is pass-through: cannot be rescanned", p); SAFEPRINTF(str, "Connected area '%s' is pass-through: cannot be rescanned", p);
else { else {
export_echomail(scfg.sub[subnum]->code, nodecfg, true); ulong exported = export_echomail(scfg.sub[subnum]->code, nodecfg, true);
SAFEPRINTF(str, "Connected area '%s' has been rescanned.", p); snprintf(str, sizeof str, "Connected area '%s' has been rescanned and %lu messages exported.", p, exported);
} }
lprintf(LOG_INFO, "AreaFix (for %s) %s", faddrtoa(&addr), str); lprintf(LOG_INFO, "AreaFix (for %s) %s", faddrtoa(&addr), str);
create_netmail(to,/* msg: */NULL, "Rescan Area" create_netmail(to,/* msg: */NULL, "Rescan Area"
...@@ -2186,7 +2184,7 @@ bool areafix_command(char* instr, nodecfg_t* nodecfg, const char* to, bool resca ...@@ -2186,7 +2184,7 @@ bool areafix_command(char* instr, nodecfg_t* nodecfg, const char* to, bool resca
if(stricmp(instr, "-ALL") == 0) { if(stricmp(instr, "-ALL") == 0) {
str_list_t del_area=strListInit(); str_list_t del_area=strListInit();
strListPush(&del_area, instr); strListPush(&del_area, instr);
alter_areas(NULL,del_area,nodecfg,to,rescan); alter_areas(NULL,del_area,nodecfg,to, /* rescan */false);
strListFree(&del_area); strListFree(&del_area);
return true; return true;
} }
...@@ -4716,7 +4714,7 @@ static void write_export_ptr(int subnum, uint32_t ptr, const char* tag) ...@@ -4716,7 +4714,7 @@ static void write_export_ptr(int subnum, uint32_t ptr, const char* tag)
empty address as 'addr' designates that a rescan should be done for that empty address as 'addr' designates that a rescan should be done for that
address. address.
******************************************************************************/ ******************************************************************************/
void export_echomail(const char* sub_code, const nodecfg_t* nodecfg, bool rescan) ulong export_echomail(const char* sub_code, const nodecfg_t* nodecfg, bool rescan)
{ {
char str[256],tear,cr; char str[256],tear,cr;
char* buf=NULL; char* buf=NULL;
...@@ -5083,6 +5081,7 @@ void export_echomail(const char* sub_code, const nodecfg_t* nodecfg, bool rescan ...@@ -5083,6 +5081,7 @@ void export_echomail(const char* sub_code, const nodecfg_t* nodecfg, bool rescan
if(exported) if(exported)
lprintf(LOG_INFO,"Exported: %5lu msgs total", exported); lprintf(LOG_INFO,"Exported: %5lu msgs total", exported);
exported_echomail += exported; exported_echomail += exported;
return exported;
} }
void del_file_attachments(smbmsg_t* msg) void del_file_attachments(smbmsg_t* msg)
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "ini_file.h" #include "ini_file.h"
#define SBBSECHO_VERSION_MAJOR 3 #define SBBSECHO_VERSION_MAJOR 3
#define SBBSECHO_VERSION_MINOR 21 #define SBBSECHO_VERSION_MINOR 22
#define SBBSECHO_PRODUCT_CODE 0x12FF /* from http://ftsc.org/docs/ftscprod.013 */ #define SBBSECHO_PRODUCT_CODE 0x12FF /* from http://ftsc.org/docs/ftscprod.013 */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment