New upstream version 6.0.24.38

This commit is contained in:
Hibby 2024-06-09 21:48:39 +01:00
parent 933e6c5b86
commit 951f1d912a
26 changed files with 4891 additions and 219 deletions

View File

@ -2187,7 +2187,7 @@ static int APRSProcessLine(char * buf)
CrossPortMap[Port][0] = FALSE; // Cancel Default APRSIS
if (Context == NULL || Context[0] == 0)
return FALSE;
return TRUE;
ptr = strtok_s(NULL, ",\t\n\r", &Context);

View File

@ -3279,31 +3279,40 @@ char * get_aprs()
"\n"
"var myTimeout;\n"
"\n"
"var server1 = \"http://server1.g8bpq.net:7383\"\n"
"var server2 = \"http://server2.g8bpq.net:7383\"\n"
//https://tile.openstreetmap.org/{zoom}/{x}/{y}.png
// "var server1 = \"http://server1.g8bpq.net:7383\"\n"
// "var server2 = \"http://server2.g8bpq.net:7383\"\n"
"var server1 = \"tile.openstreetmap.org\"\n"
"var server2 = \"tile.openstreetmap.org\"\n"
"\n"
"function getMap(p)\n"
"{\n"
" var gl = L.maplibreGL({style: server1 + '/styles/G8BPQ/style.json'});\n"
" gl.addTo(p);\n"
" var maplibreMap = gl.getMaplibreMap();\n"
"\n"
" // if load from first server fails, switch to backup\n"
"\n"
" maplibreMap.on('error', e =>\n"
" {\n"
" console.log(e.error);\n"
"\n"
" if (e && e.error == 'Error: Failed to fetch')\n"
" {\n"
" console.log('failed to load from ' + server1 + ', trying ' + server2);\n"
" var gl2 = L.maplibreGL({style: server2 + '/styles/G8BPQ/style.json'});\n"
" p.removeLayer(gl)\n"
" gl2.addTo(p);\n"
" }\n"
" });\n"
"\n"
" p.attributionControl.addAttribution('Map data from <a href=https://www.openstreetmap.org/copyright>OpenStreetMap</a><a href=https://github.com/maplibre/maplibre-gl-leaflet> using maplibre-gl</a> <a href=https://github.com/mapbox/mapbox-gl-styles>Styles based on Mapbox gl');\n"
" L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution: '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(p);\r\n"
// " var gl = L.maplibreGL({style: server1 + '/styles/G8BPQ/style.json'});\n"
// " gl.addTo(p);\n"
// " var maplibreMap = gl.getMaplibreMap();\n"
// "\n"
// " // if load from first server fails, switch to backup\n"
// "\n"
// " maplibreMap.on('error', e =>\n"
// " {\n"
// " console.log(e.error);\n"
// "\n"
// " if (e && e.error == 'Error: Failed to fetch')\n"
// " {\n"
// " console.log('failed to load from ' + server1 + ', trying ' + server2);\n"
// " var gl2 = L.maplibreGL({style: server2 + '/styles/G8BPQ/style.json'});\n"
// " p.removeLayer(gl)\n"
// " gl2.addTo(p);\n"
// " }\n"
// " });\n"
// "\n"
// " p.attributionControl.addAttribution('Map data from <a href=https://www.openstreetmap.org/copyright>OpenStreetMap</a><a href=https://github.com/maplibre/maplibre-gl-leaflet> using maplibre-gl</a> <a href=https://github.com/mapbox/mapbox-gl-styles>Styles based on Mapbox gl');\n"
" L.control.scale().addTo(p);\n"
"}\n"
"\n"

View File

@ -225,7 +225,7 @@ extern BOOL EventsEnabled;
extern BPQVECSTRUC BPQHOSTVECTOR[BPQHOSTSTREAMS + 5];
/* --- TAJ PG Server--- */
/* --- G7TAJ PG Server--- */
void run_pg( CIRCUIT * conn, struct UserInfo * user );
void startrun_pgThread( RUNPGARGS_PTR Args );
@ -234,7 +234,7 @@ char * SERVERLIST[256][3];
int NUM_SERVERS = 0;
/*------- TAJ END ----------*/
/*------- G7TAJ END ----------*/
#ifdef LINBPQ
@ -1038,20 +1038,6 @@ Next:
}
SortBBSChain();
/*------- TAJ PG SERVER ----------*/
#ifndef WIN32
printf("Number of PG Servers = %d\n", NUM_SERVERS );
for ( int i=0; i< NUM_SERVERS; i++ ) {
printf("Server #%d\t%s\tExec->%s\tDESC->%s\n", i, SERVERLIST[i][0], SERVERLIST[i][1], SERVERLIST[i][2]);
}
#endif
/*------- TAJ END ----------*/
}
VOID CopyUserDatabase()
@ -8241,6 +8227,7 @@ InBand:
else
Delay = 1000;
conn->BBSFlags &= ~RunningConnectScript; // so it doesn't get reentered
Disconnect(conn->BPQStream);
@ -8385,6 +8372,14 @@ InBand:
goto LoopBack;
}
if (_memicmp(Cmd, "IDLETIME ", 9) == 0)
{
int idle = atoi(&Cmd[9]);
ChangeSessionIdletime(conn->BPQStream, idle);
goto LoopBack;
}
if (_memicmp(Cmd, "RADIO AUTH", 10) == 0)
{
// Generate a Password to enable RADIO commands on a remote node
@ -9185,12 +9180,14 @@ VOID FWDTimerProc()
struct BBSForwardingInfo * ForwardingInfo ;
time_t NOW = time(NULL);
// Entered every 2 seconds
for (user = BBSChain; user; user = user->BBSNext)
{
// See if any messages are queued for this BBS
ForwardingInfo = user->ForwardingInfo;
ForwardingInfo->FwdTimer+=10;
ForwardingInfo->FwdTimer += 2;
if (ForwardingInfo->FwdTimer >= ForwardingInfo->FwdInterval)
{
@ -10852,15 +10849,15 @@ int Disconnected (int Stream)
conn->InputBufferLen = 0;
}
/* ---- TAJ PG SERVER ---- */
/* ---- G7TAJ PG SERVER ---- */
if (conn->UserPointer && conn->UserPointer->Temp && conn->UserPointer->Temp->RUNPGPARAMS)
{
printf("Freeing RUNPGPARAMS\n");
Debugprintf("Freeing RUNPGPARAMS");
free(conn->UserPointer->Temp->RUNPGPARAMS);
conn->UserPointer->Temp->RUNPGPARAMS = NULL;
}
/*------- TAJ END --------- */
/*------- G7TAJ END --------- */
if (conn->InputMode == 'B')
{
@ -10977,7 +10974,7 @@ int DoReceivedData(int Stream)
}
/* ---------- TAJ START - PG server --------- */
/* ---------- G7TAJ START - PG server --------- */
if (conn->InputMode == 'P') // Inside PG Server
{
@ -10985,7 +10982,7 @@ int DoReceivedData(int Stream)
run_pg(conn, user);
return 0;
}
/* ---------- TAJ END --------- */
/* ---------- G7TAJ END --------- */
if (conn->InputMode == 'B')
{
@ -11736,7 +11733,7 @@ extern UCHAR * infile;
BOOL CheckforMIME(SocketConn * sockptr, char * Msg, char ** Body, int * MsgLen);
/* ---TAJ PG Server --- */
/* ---G7TAJ PG Server --- */
#ifndef WIN32
#define verbose 1
@ -11758,22 +11755,23 @@ typedef struct _POPENRET
void run_pgTimeoutThread( pid_t process )
{
printf("watchdog thread: PID of subprocess: %d\n", process);
fflush(stdout);
Sleep(5000);
// if still running PID (?) then kill.
if ( getpgid(process) >= 0 ) {
printf("watchdog thread: Still running, so killing %d ... ", process);
// if ( kill( process, SIGTERM ) == 0 ) {
if ( kill( -process, SIGKILL ) == 0 ) {
printf("Killed\n");
} else {
printf("Failed\n");
}
}
printf("watchdog thread: PID=%d Exit\n", process);
fflush(stdout);
//return;
printf("watchdog thread: PID of subprocess: %d\n", process);
fflush(stdout);
Sleep(5000);
// if still running PID (?) then kill.
if ( getpgid(process) >= 0 )
{
Debugprintf("watchdog thread: Still running, so killing %d ... ", process);
if ( kill( -process, SIGKILL ) == 0 )
Debugprintf("Killed PG watchdog Process %d", process);
else
Debugprintf("Failed to kill PG watchdog Process %d", process);
}
Debugprintf("watchdog thread: PID=%d Exit", process);
fflush(stdout);
//return;
}
@ -11802,7 +11800,7 @@ POPENRET my_popen(char *program, char *type, CIRCUIT *conn)
if (*type == 'r') {
if (pdes[1] != 1) {
dup2(pdes[1], 1);
dup2(pdes[1], 2); /* stderr, too! */
dup2(pdes[1], 2);
(void)close(pdes[1]);
}
(void)close(pdes[0]);
@ -11819,9 +11817,8 @@ POPENRET my_popen(char *program, char *type, CIRCUIT *conn)
_exit(1);
}
/* parent; assume fdopen can't fail... */
/* parent */
printf("PID=%d\n", pid );
_beginthread((void (*)(void *))run_pgTimeoutThread, 0, (VOID *) pid );
if (*type == 'r') {
@ -11833,17 +11830,13 @@ POPENRET my_popen(char *program, char *type, CIRCUIT *conn)
}
char buffer[128];
while (fgets(buffer, sizeof(buffer), iop) != NULL) {
BBSputs(conn, buffer);
// printf("%s", buffer);
// sleep(200);
buffer[0] = '\0';
while (fgets(buffer, sizeof(buffer), iop) != NULL)
{
BBSputs(conn, buffer);
buffer[0] = '\0';
}
// BBSputs(conn,"\n");
PRET.fp = iop;
PRET.pid= pid;
// (void)close(pdes[0]);
// (void)close(pdes[1]);
return(PRET);
}
@ -11869,92 +11862,82 @@ my_pclose( POPENRET pret )
sigprocmask(SIG_SETMASK, &omask, NULL);
if (pid == -1 || !WIFEXITED(stat_loc))
return -1;
// return WEXITSTATUS(stat_loc);
printf( "return = %d\n", WEXITSTATUS(stat_loc));
return stat_loc;
}
int run_server (char **cmd, int nb_cmd, int mode, char *log, char *pgdir, char *data, CIRCUIT * conn)
{
int i;
int ret = 0;
FILE *fp;
int i;
int ret = 0;
FILE *fp;
POPENRET PRET;
pid_t pid;
char *ptr;
char file[256];
char buf[256];
char dir[256];
char arg[256];
char *ptr;
char file[256];
char buf[256];
char dir[256];
char arg[256];
if (mode)
// sprintf (file, " </dev/null >%s", log);
// sprintf (file, " >>%s", log);
// sprintf (file, " | tee -a %s", log);
if (mode)
// sprintf (file, " >>%s", log);
// sprintf (file, " | tee -a %s", log);
sprintf(file, "" );
else
sprintf (file, " </dev/null");
else
sprintf (file, " </dev/null");
if (pgdir)
{
/* remove ';' security reasons */
ptr = strchr(pgdir, ';');
if (ptr)
*ptr = '\0';
if (pgdir)
{
/* remove ';' security reasons */
ptr = strchr(pgdir, ';');
if (ptr)
*ptr = '\0';
sprintf (dir, "cd %s ; ", pgdir);
}
else
*dir = '\0';
sprintf (dir, "cd %s ; ", pgdir);
}
else
*dir = '\0';
*arg = '\0';
*arg = '\0';
if (data)
{
/* remove ';' security reasons */
ptr = strchr(data, ';');
if (ptr)
*ptr = '\0';
if (data)
{
/* remove ';' security reasons */
ptr = strchr(data, ';');
if (ptr)
*ptr = '\0';
sprintf (arg, " %s ", data);
}
sprintf (arg, " %s ", data);
}
for (i = 0; i < nb_cmd; i++)
{
/* remove ';' security reasons */
ptr = strchr(cmd[i], ';');
if (ptr)
*ptr = '\0';
for (i = 0; i < nb_cmd; i++)
{
/* remove ';' security reasons */
ptr = strchr(cmd[i], ';');
if (ptr)
*ptr = '\0';
sprintf (buf, "%s%s%s%s", dir, cmd[i], arg, file);
sprintf (buf, "%s%s%s%s", dir, cmd[i], arg, file);
PRET = my_popen (buf, "r", conn);
PRET = my_popen (buf, "r", conn);
if (PRET.fp == NULL)
printf ("Failed to run command\n" );
// else {
/* start timeout thread to kill process if it runs for more than 5 sec (make configurable?)*/
// _beginthread((void (*)(void *))run_pgTimeoutThread, 0, (VOID *) PRET.pid );
// }
if (PRET.fp == NULL)
Debugprintf ("Failed to run PG command %s\n", cmd[i] );
//ret = (int)PRET.pid;
//wait(&ret);
ret = my_pclose( PRET );
ret = ret >> 8;
if (verbose) {
printf ("Debug: command = {%s}\n", buf);
printf ("Debug: exit code = %d\n", ret);
}
if (verbose) {
Debugprintf ("Debug: command = {%s}\n", buf);
Debugprintf ("Debug: exit code = %d\n", ret);
}
/* fail-safe bypass if filter executable isn't found (exit code 127) (was ret ==127)*/
if (ret > 5) // should never be more than 5
ret = 0;
}
return ( ret );
/* fail-safe bypass if executable isn't found (exit code 127) (was ret ==127)*/
if (ret > 5) // should never be more than 5
ret = 0;
}
return ( ret );
}
@ -11962,7 +11945,6 @@ void run_pg( CIRCUIT * conn, struct UserInfo * user )
{
if (!user->Temp->RUNPGPARAMS) {
// printf("Allocating new RUNPGPARAMS\n");
user->Temp->RUNPGPARAMS = (RUNPGARGS_PTR) zalloc(sizeof(RUNPGARGS));
}
@ -11972,7 +11954,7 @@ void run_pg( CIRCUIT * conn, struct UserInfo * user )
user->Temp->RUNPGPARAMS->Len = conn->InputLen;
if ( conn == 0 || user == 0 ) {
printf("run_pg null err\n");
Debugprintf("run_pg null err");
return;
}
@ -11984,65 +11966,80 @@ void run_pg( CIRCUIT * conn, struct UserInfo * user )
void startrun_pgThread( RUNPGARGS_PTR Args ) {
CIRCUIT * conn = Args->conn;
struct UserInfo * user = Args->user;
CIRCUIT * conn = Args->conn;
struct UserInfo * user = Args->user;
char cmd[20];
sprintf( cmd, "./%s", SERVERLIST[user->Temp->PG_SERVER][1] );
char *ptr = cmd;
char pg_dir[] = "/home/pi/linbpq/linbpq/downloads/new/linbpq/pg/";
char log_file[50] = "pg.log";
char call[6];
char data[80];
char line[80];
char *line_ptr = line;
int index;
char *data_ptr = data;
size_t bufsize = 80;
char cmd[20];
sprintf( cmd, "./%s", SERVERLIST[user->Temp->PG_SERVER][1] );
char *ptr = cmd;
char pg_dir[MAX_PATH];
char log_file[50] = "pg.log";
char call[6];
char data[80];
char line[80];
char *line_ptr = line;
int index;
char *data_ptr = data;
size_t bufsize = 80;
strcpy( call, conn->UserPointer->Call);
// sprintf( log_file, "%s-%d.log", call, conn);
index = user->Temp->PG_INDEX;
strcpy(pg_dir, BaseDir);
strcat(pg_dir, "/PG/");
line[0] = '\0';
int Len = Args->Len;
UCHAR * Msg = Args->InputBuffer;
strncpy( line, Msg, Len);
line[ Len - 1 ] = 0; //remove LF
sprintf(line, "%s%s", pg_dir, SERVERLIST[user->Temp->PG_SERVER][1]);
sprintf( data, "%s %d 0 0 %s", call, index, line);
// check file exists and is executable
if (access(line, F_OK) == -1 || access(line, X_OK) == -1) {
Debugprintf("%s FileNotFound || Not EXE", line);
BBSputs(conn, "Error running PG Server\r");
conn->InputMode=0;
SendPrompt(conn, user);
return;
}
// clear the input queue
conn->InputLen = 0;
conn->InputBufferLen = 0;
int ret = run_server (&ptr, 1, 1, log_file, pg_dir, data_ptr, conn);
strcpy( call, conn->UserPointer->Call);
// sprintf( log_file, "%s-%d.log", call, conn);
index = user->Temp->PG_INDEX;
switch (ret)
{
case -1: // ERROR or forced closed
case 0: index=0; // Goodbye/Exit
conn->InputMode=0;
SendPrompt(conn, user);
break;
case 1: index++; // inc & keep in PG
break;
case 2: index=0; // disconnect
conn->InputMode=0;
Disconnect(conn->BPQStream);
break;
case 3: printf("data->BBS & end\n");
break;
case 4: printf("data->BBS and inc %d\n", index++);
break;
case 5: printf("call no inc %d\n", ret);
break;
line[0] = '\0';
int Len = Args->Len;
UCHAR * Msg = Args->InputBuffer;
strncpy( line, Msg, Len);
line[ Len - 1 ] = 0; //remove LF
}
sprintf( data, "%s %d 0 0 %s", call, index, line);
// clear the input queue
conn->InputLen = 0;
conn->InputBufferLen = 0;
int ret = run_server (&ptr, 1, 1, log_file, pg_dir, data_ptr, conn);
switch (ret)
{
case -1: // ERROR or forced closed
case 0: index=0; // Goodbye/Exit
conn->InputMode=0;
SendPrompt(conn, user);
break;
case 1: index++; // inc & keep in PG
break;
case 2: index=0; // disconnect
conn->InputMode=0;
Disconnect(conn->BPQStream);
break;
case 3: Debugprintf("data->BBS & end");
break;
case 4: Debugprintf("data->BBS and inc %d", index++);
break;
case 5: Debugprintf("call no inc %d", ret);
break;
}
user->Temp->PG_INDEX=index;
}
/*---- TAJ END ----- */
/*---- G7TAJ END ----- */
#else
@ -12075,7 +12072,7 @@ void run_pg( CIRCUIT * conn, struct UserInfo * user )
int index = 0;
int ret = 0;
// if first entay allocate RUNPGPARAMS
// if first entry allocate RUNPGPARAMS
if (!user->Temp->RUNPGPARAMS)
{
user->Temp->RUNPGPARAMS = (RUNPGARGS_PTR) zalloc(sizeof(RUNPGARGS));
@ -13063,7 +13060,7 @@ VOID ProcessLine(CIRCUIT * conn, struct UserInfo * user, char* Buffer, int len)
return;
}
/*---- TAJ PG Server ----- */
/*---- G7TAJ PG Server ----- */
if (_stricmp(Cmd, "PG") == 0)
@ -13106,11 +13103,13 @@ VOID ProcessLine(CIRCUIT * conn, struct UserInfo * user, char* Buffer, int len)
return;
}
}
BBSputs(conn, "No server found\r");
SendPrompt(conn, user);
return;
}
}
/*---- TAJ END ---- */
/*---- G7TAJ END ---- */
if (conn->Flags == 0)
{
@ -15750,6 +15749,7 @@ VOID GetPGConfig()
char buf[256],errbuf[256];
char * p_prog, * p_name, * p_desc;
int n = 0;
int i = 0;
strcpy(FN, BaseDir);
@ -15761,6 +15761,9 @@ VOID GetPGConfig()
while(fgets(buf, 255, file) != NULL)
{
if ( buf[0] == '#')
continue;
strcpy(errbuf,buf); // save in case of error
p_prog = strtok(buf, ",\n\r");
@ -15784,6 +15787,15 @@ VOID GetPGConfig()
NUM_SERVERS = n;
fclose(file);
/*------- G7TAJ PG SERVER ----------*/
Debugprintf("Number of PG Servers = %d", NUM_SERVERS );
for (i=0; i< NUM_SERVERS; i++ )
{
Debugprintf("Server #%d,%s,%s,%s", i, SERVERLIST[i][0], SERVERLIST[i][1], SERVERLIST[i][2]);
}
/*------- G7TAJ END ----------*/
}
void SendMessageReadEvent(char * call, struct MsgInfo * Msg)

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1131,6 +1131,8 @@
// Add Send P to multiple BBS's when routing on HR (30)
// Fix Traffic stats for T messages received via B2 forwarding (31)
// Fix possible failure to update last listed count when user disconnects without using B command
// Add short random delay (<30 secs) when forward new Messages immediately is enabled (35)
// Fix Connect Script IDLETIME (38)
#include "bpqmail.h"
#include "winstdint.h"
@ -2160,7 +2162,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
CheckTimer();
TCPTimer();
BBSSlowTimer();
FWDTimerProc();
if (MaintClock < NOW)
{
while (MaintClock < NOW) // in case large time step
@ -2182,6 +2183,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
My__except_Routine("Slow Timer");
}
if (wParam == 3) // Forward (2 Secs)
{
__try
{
FWDTimerProc();
}
My__except_Routine("Fwd Timer");
}
else
__try
{
@ -3310,6 +3319,7 @@ BOOL Initialise()
SetTimer(hWnd,1,10000,NULL); // Slow Timer (10 Secs)
SetTimer(hWnd,2,100,NULL); // Send to Node and TCP Poll (100 ms)
SetTimer(hWnd,3,2000,NULL); // Forward Check (2 secs)
// Calulate time to run Housekeeping
{

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1213,6 +1213,12 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Improve validation of Web Beacon Config (33)
// Support SNMP via host ip stack as well as IPGateway (34)
// Switch APRS Map to OSM tile servers (36)
// Fix potential buffer overflow in Telnet login (36)
// Allow longer serial device names (37)
// Fix ICF8101 Mode setting (37)
#define CKernel
#include "Versions.h"

View File

@ -37,7 +37,7 @@
Name="Release|Win32"
>
<DebugSettings
Command=""
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"

View File

@ -2184,7 +2184,7 @@ int OpenCOMMPort(struct TNCINFO * conn, char * Port, int Speed, BOOL Quiet)
HANDLE OpenCOMPort(char * pPort, int speed, BOOL SetDTR, BOOL SetRTS, BOOL Quiet, int Stopbits)
{
char szPort[80];
char szPort[256];
BOOL fRetVal ;
COMMTIMEOUTS CommTimeOuts ;
int Err;
@ -2576,8 +2576,9 @@ BOOL WriteCOMBlock(HANDLE fd, char * Block, int BytesToWrite)
int ToSend = BytesToWrite;
int Sent = 0, ret;
int loops = 100;
while (ToSend)
while (ToSend && loops-- > 0)
{
ret = write(fd, &Block[Sent], ToSend);
@ -2596,6 +2597,12 @@ BOOL WriteCOMBlock(HANDLE fd, char * Block, int BytesToWrite)
Sent += ret;
ToSend -= ret;
}
// if (ToSend)
// {
// // Send timed out. Close and reopen device
//
// }
return TRUE;
}

View File

@ -639,8 +639,8 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
if (buffptr == 0) return (0); // No buffers, so ignore
buffptr->Len = 36;
memcpy(&buffptr->Data[0], "No Connection to TNC\r", 36);
buffptr->Len = 21;
memcpy(&buffptr->Data[0], "No Connection to TNC\r", 21);
C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr);

View File

@ -2220,7 +2220,10 @@ BOOL CheckIPChecksum(PIPMSG IPptr)
checksum = cksum((unsigned short *)IPptr, 20);
if (checksum == 0xffff) return TRUE; else return FALSE;
if (checksum == 0xffff)
return TRUE;
else
return FALSE;
}
BOOL Check_Checksum(VOID * ptr1, int Len)
@ -2229,7 +2232,10 @@ BOOL Check_Checksum(VOID * ptr1, int Len)
checksum = cksum((unsigned short *)ptr1, Len);
if (checksum == 0xffff) return TRUE; else return FALSE;
if (checksum == 0xffff)
return TRUE;
else
return FALSE;
}
USHORT Generate_CHECKSUM(VOID * ptr1, int Len)

View File

@ -174,7 +174,7 @@ VOID L2Routine(struct PORTCONTROL * PORT, PMESSAGE Buffer)
if (c == ' ') // Blank Call
{
Debugprintf("BPQ32 Blank Call Port &%", PORT->PORTNUMBER);
Debugprintf("BPQ32 Blank Call Port %d", PORT->PORTNUMBER);
ReleaseBuffer(Buffer);
return;
}
@ -1775,7 +1775,7 @@ VOID L2_PROCESS(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE * B
switch (CTL & 0x0f)
{
// is there any harm in accepoting SREJ even if we don't
// is there any harm in accepting SREJ even if we don't
// otherwise support 2.2?
case REJ:
@ -3004,6 +3004,8 @@ VOID ACKMSG(struct _LINKTABLE * LINK)
Debugprintf("Missing frame to ack Seq %d Calls %s %s", LINK->LINKOWS, Call1, Call2);
}
LINK->IFrameRetryCounter = 0;
LINK->LINKOWS++; // INCREMENT OLD WINDOW START
LINK->LINKOWS &= 7; // MODULO 8
@ -3018,6 +3020,18 @@ VOID ACKMSG(struct _LINKTABLE * LINK)
{
// NOT ALL I-FRAMES HAVE BEEN ACK'ED - RESTART TIMER
// Need to kill link if we are getting repeated RR(F) after timeout
// (Indicating other station is seeing our RR(P) but not the resent I frame)
if (LINK->IFrameRetryCounter++ > LINK->LINKPORT->PORTN2)
{
Debugprintf("Too many repeats of same I frame - closing connection");
LINK->L2TIMER = 1; // USE TIMER TO SEND DISC
LINK->L2STATE = 4; // DISCONNECTING
return;
}
LINK->L2TIMER = LINK->L2TIME;
return;
}
@ -3033,7 +3047,7 @@ VOID ACKMSG(struct _LINKTABLE * LINK)
// IF DISCONNECT REQUEST OUTSTANDING, AND NO FRAMES ON TX QUEUE, SEND DISC
if (LINK->L2FLAGS & DISCPENDING && LINK->TX_Q == 0)
if ((LINK->L2FLAGS & DISCPENDING) && LINK->TX_Q == 0)
{
LINK->L2FLAGS &= ~DISCPENDING;

View File

@ -75,6 +75,7 @@ int upnpClose();
void SaveAIS();
void initAIS();
void DRATSPoll();
VOID GetPGConfig();
extern uint64_t timeLoadedMS;
@ -1138,6 +1139,7 @@ int main(int argc, char * argv[])
GetBIDDatabase();
GetBadWordFile();
GetHTMLForms();
GetPGConfig();
// Make sure there is a user record for the BBS, with BBS bit set.
@ -1557,13 +1559,15 @@ int main(int argc, char * argv[])
{
PollStreams();
if ((Slowtimer % 20) == 0)
FWDTimerProc();
if (Slowtimer > 100) // 10 secs
{
time_t NOW = time(NULL);
struct tm * tm;
TCPTimer();
FWDTimerProc();
BBSSlowTimer();
if (MaintClock < NOW)

View File

@ -351,7 +351,7 @@ VOID DoSetIdleTime(CIRCUIT * conn, struct UserInfo * user, char * Arg1, char * C
return;
}
nodeprintf(conn, "Idle Tine set to %d\r", IdleTime);
nodeprintf(conn, "Idle Time set to %d\r", IdleTime);
SendPrompt(conn, user);
return;
}

View File

@ -10,7 +10,7 @@
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
WorkingDirectory="c:\linbpq"
CommandArguments=""
Attach="false"
DebuggerType="3"
@ -22,7 +22,7 @@
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""

View File

@ -817,14 +817,14 @@ VOID CheckAndSend(struct MsgInfo * Msg, CIRCUIT * conn, struct UserInfo * bbs)
{
struct BBSForwardingInfo * ForwardingInfo = bbs->ForwardingInfo;
if (ForwardToMe || _stricmp(bbs->Call, BBSName) != 0) // Dont forward to ourself - already here! (unless ForwardToMe set)
if (ForwardToMe || _stricmp(bbs->Call, BBSName) != 0) // Don't forward to ourself - already here! (unless ForwardToMe set)
{
if ((conn == NULL) || (!(conn->BBSFlags & BBS) || (_stricmp(conn->UserPointer->Call, bbs->Call) != 0))) // Dont send back
{
set_fwd_bit(Msg->fbbs, bbs->BBSNumber);
ForwardingInfo->MsgCount++;
if (ForwardingInfo->SendNew)
ForwardingInfo->FwdTimer = ForwardingInfo->FwdInterval;
ForwardingInfo->FwdTimer = ForwardingInfo->FwdInterval - (2 + (rand() % 30)); //Short delay to prevent all starting at once
}
}
else

View File

@ -1543,11 +1543,19 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
*(CmdPtr++) = 0x1A;
*(CmdPtr++) = 0x36; // Set mode command
*(CmdPtr++) = 0;
if (ModeNo > 10)
if (ModeNo > 19)
*(CmdPtr++) = ModeNo + 12;
else if (ModeNo > 9)
*(CmdPtr++) = ModeNo + 6;
else
*(CmdPtr++) = ModeNo;
*(CmdPtr++) = 0xFD;
// Mode = (Msg[7] >> 4);
// Mode *= 10;
// Mode += Msg[7] & 0xf;
}
}
else
@ -3980,6 +3988,8 @@ SetFinished:
strcpy(RIG->ModeString, Modes[Mode]);
SetWindowText(RIG->hMODE, RIG->WEB_MODE);
return;
}
}
@ -6995,7 +7005,10 @@ CheckScan:
*(CmdPtr++) = 0x1A;
*(CmdPtr++) = 0x36; // Set mode command
*(CmdPtr++) = 0;
if (ModeNo > 10)
if (ModeNo > 19)
*(CmdPtr++) = ModeNo + 12;
else if (ModeNo > 9)
*(CmdPtr++) = ModeNo + 6;
else
*(CmdPtr++) = ModeNo;
@ -7480,7 +7493,11 @@ VOID PTTCATThread(struct RIGINFO *RIG)
if (Handle[HIndex] == (HANDLE) -1)
{
int Err = GetLastError();
Consoleprintf("PTTMUX port BPQCOM%s Open failed code %d - trying real com port", RIG->PTTCATPort[PIndex], Err);
char errmsg[256] = "";
// Only report if both BPQCOM and Real COM fail
sprintf(errmsg, "PTTMUX port BPQCOM%s Open failed code %d - trying real com port", RIG->PTTCATPort[PIndex], Err);
// See if real com port
@ -7494,7 +7511,11 @@ VOID PTTCATThread(struct RIGINFO *RIG)
if (Handle[HIndex] == (HANDLE) -1)
{
int Err = GetLastError();
Consoleprintf("PTTMUX port COM%s Open failed code %d", RIG->PTTCATPort[PIndex], Err);
if (errmsg[0])
{
Consoleprintf("%s", errmsg);
Consoleprintf("PTTMUX port COM%s Open failed code %d", RIG->PTTCATPort[PIndex], Err);
}
}
else
{

View File

@ -423,7 +423,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
if (TNC->PortRecord->PORTCONTROL.PortStopped == 0)
OpenCOMMPort(TNC, TNC->PortRecord->PORTCONTROL.SerialPortName, TNC->PortRecord->PORTCONTROL.BAUDRATE, TRUE);
if (TNC->hDevice == 0)
return 0;

4322
SCSPactor.c.bak Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3882,8 +3882,8 @@ MsgLoop:
if (strlen(MsgPtr) > 64)
{
Debugprintf("Telnet Bad User Name %s", MsgPtr);
MsgPtr[64] = 0;
Debugprintf("Telnet Bad User Name %s", MsgPtr);
}
sprintf(logmsg,"%d %s User=%s\n", sockptr->Number, Addr, MsgPtr);
@ -3958,8 +3958,8 @@ MsgLoop:
if (strlen(MsgPtr) > 64)
{
MsgPtr[64] = 0;
Debugprintf("Telnet Bad Password %s", MsgPtr);
MsgPtr[64] = 0;
}
@ -4757,8 +4757,8 @@ MsgLoop:
if (strlen(MsgPtr) > 64)
{
Debugprintf("Telnet Bad User Name %s", MsgPtr);
MsgPtr[64] = 0;
Debugprintf("Telnet Bad User Name %s", MsgPtr);
}
sprintf(logmsg,"%d %s User=%s\n", sockptr->Number, Addr, MsgPtr);
@ -4841,8 +4841,8 @@ MsgLoop:
if (strlen(MsgPtr) > 64)
{
MsgPtr[64] = 0;
Debugprintf("Telnet Bad Password %s", MsgPtr);
MsgPtr[64] = 0;
}
sprintf(logmsg,"%d %s Password=%s\n", sockptr->Number, Addr, MsgPtr);

View File

@ -10,8 +10,8 @@
#endif
#define KVers 6,0,24,34
#define KVerstring "6.0.24.34\0"
#define KVers 6,0,24,38
#define KVerstring "6.0.24.38\0"
#ifdef CKernel

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -903,6 +903,8 @@ typedef struct _LINKTABLE
VOID * L2FRAG_Q; // DEFRAGMENTATION QUEUE
int IFrameRetryCounter; // Number of times an I frame in repeated without a frame being acked
} LINKTABLE;
#pragma pack(1)

View File

@ -1,6 +1,5 @@
/*
Copyright 2001-2022 John Wiseman G8BPQ
This file is part of LinBPQ/BPQ32.
LinBPQ/BPQ32 is free software: you can redistribute it and/or modify

View File

@ -214,8 +214,8 @@ struct RIGPORTINFO
{
int PortType; // ICOM, Yaesu, Etc
int YaesuVariant; // Yaesu seems to have lots of incompatible subtypes
char IOBASE[80];
char PTTIOBASE[80]; // Port for Hardware PTT - may be same as control port.
char IOBASE[256];
char PTTIOBASE[256]; // Port for Hardware PTT - may be same as control port.
int SPEED;
char * HIDDevice;
struct RIGINFO Rigs[10]; // Rigs off a port