Merge branch 'debian/latest' into debian/bookworm

This commit is contained in:
Dave Hibberd 2023-12-08 12:30:40 +00:00
commit 3c4fd182da
No known key found for this signature in database
GPG Key ID: 03A1FB7A1904771B
35 changed files with 510 additions and 136 deletions

View File

@ -1581,9 +1581,9 @@ OK:
// Copy frame to a DIGIMessage Struct // Copy frame to a DIGIMessage Struct
memcpy(&Msg, monbuff, 21 + (7 * Digis)); // Header, Dest, Source, Addresses and Digis memcpy(&Msg, monbuff, MSGHDDRLEN + 14 + (7 * Digis)); // Header, Dest, Source, Addresses and Digis
len = Msg.LENGTH - 21 - (7 * Digis); // Payload Length (including CTL and PID len = Msg.LENGTH - (MSGHDDRLEN + 14) - (7 * Digis); // Payload Length (including CTL and PID
memcpy(&Msg.CTL, &AdjBuff->CTL, len); memcpy(&Msg.CTL, &AdjBuff->CTL, len);

View File

@ -1,2 +0,0 @@
g8bpq
very bad phrase

View File

@ -358,9 +358,7 @@ VOID ProcessINP3RIF(struct ROUTE * Route, UCHAR * ptr1, int msglen, int Port)
// Update Timestamp on Route // Update Timestamp on Route
time((time_t *)&Stamp); Stamp = time(NULL) % 86400; // Secs into day
Stamp = Stamp % 86400; // Secs into day
HH = Stamp / 3600; HH = Stamp / 3600;
Stamp -= HH * 3600; Stamp -= HH * 3600;
@ -370,6 +368,12 @@ VOID ProcessINP3RIF(struct ROUTE * Route, UCHAR * ptr1, int msglen, int Port)
while (msglen > 0) while (msglen > 0)
{ {
if (msglen < 10)
{
Debugprintf("Corrupt INP3 Message");
return;
}
memset(alias, ' ', 6); memset(alias, ' ', 6);
memcpy(axcall, ptr1, 7); memcpy(axcall, ptr1, 7);

View File

@ -1122,6 +1122,7 @@
// Add FBB reject.sys style filters (3) // Add FBB reject.sys style filters (3)
// Improve Webmail on 64 bit builds // Improve Webmail on 64 bit builds
// Fix setting status '$' on Bulls sent via WebMail (22)

View File

@ -614,6 +614,11 @@ VOID CALLBACK SetupTermSessions(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dw
AppendMenu(hMonCfgMenu,MF_STRING | MF_UNCHECKED,BPQBASE + i,msg); AppendMenu(hMonCfgMenu,MF_STRING | MF_UNCHECKED,BPQBASE + i,msg);
} }
if (mtxparam & 0x80)
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_CHECKED);
else
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_UNCHECKED);
if (mtxparam & 1) if (mtxparam & 1)
CheckMenuItem(hMonCfgMenu,BPQMTX,MF_CHECKED); CheckMenuItem(hMonCfgMenu,BPQMTX,MF_CHECKED);
else else
@ -1733,6 +1738,10 @@ LRESULT CALLBACK MonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
break; break;
} }
case MONLOCALTIME:
ToggleLocalTime();
break;
case BPQMTX: case BPQMTX:
@ -4266,6 +4275,24 @@ int ToggleMTX(HWND hWnd)
return (0); return (0);
}
int ToggleLocalTime(HWND hWnd)
{
mtxparam = mtxparam ^ 0x80;
if (mtxparam & 0x80)
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_CHECKED);
else
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_UNCHECKED);
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
return (0);
} }
int ToggleMCOM(HWND hWnd) int ToggleMCOM(HWND hWnd)
{ {

View File

@ -1195,7 +1195,14 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Allow zero resptime (send RR immediately) (13) // Allow zero resptime (send RR immediately) (13)
// Make sure CMD bit is set on UI frames // Make sure CMD bit is set on UI frames
// Add setting Modem Flags in QtSM AGW mode // Add setting Modem Flags in QtSM AGW mode
// If FT847 om PTC Port send a "Cat On" command (16) // If FT847 om PTC Port send a "Cat On" command (17)
// Fix some 63 port bugs in RigCOntrol (17)
// Fix 63 port bug in Bridging (18)
// Add FTDX10 Rigcontrol (19)
// Fix 64 bit bug in displaying INP3 Messages (20)
// Improve restart of WinRPR TNC on remote host (21)
// Fix some Rigcontrol issues with empty timebands (22)
// Fix 64 bit bug in processing INP3 Messages (22)
#define CKernel #define CKernel

View File

@ -40,6 +40,7 @@
#define CHATTERM 1179 #define CHATTERM 1179
#define IDM_CLOSEWINDOW 1180 #define IDM_CLOSEWINDOW 1180
#define MONITORAPRS 1181 #define MONITORAPRS 1181
#define MONLOCALTIME 1182
#define MON_UI_ONLY 40006 #define MON_UI_ONLY 40006
#define StopALLMon 40007 #define StopALLMon 40007

View File

@ -1,16 +0,0 @@
IZ4FVW 0 Giulio Cesena ITA JN64ce, 1k2 bps radio link¬55¬0
N5UXT 0 Angelo th New Orleans, La¬99¬0
N0NJY 0 Rick Oak Island, NC¬76¬0
KB8UVN 0 Matt Johnstown, Ohio¬95¬0
WA3WLH 0 Rich East Greenville, PA¬55¬0
EI2GYB 0 Steve_353 Donegal, Ireland (IO65JG)¬55¬0
PE1RRR 0 Red Network Hub Monitor¬91¬0
PE1NNZ 0 Guido nr Eindhoven¬91¬0
G7TAJ 0 Steve_44 E.Sussex UK,JO00FU¬91¬0
N3HYM 0 Ray Frederick, Md¬97¬0
VE3CGH 0 Ted ?_qth¬71¬0
WE1H 0 Matt Merrimack, NH¬26¬0
W9IKU 0 Greg Portage, Wisconsin USA¬55¬0
KA3VSP 0 Brian New Castle, DE¬91¬0
G8BPQ 0 John Nottingham¬26¬0
GM8BPQ 40 John ?_qth¬14¬0

View File

@ -4955,6 +4955,7 @@ VOID SendWebRequest(SOCKET sock, char * Host, char * Request, char * Params, int
{ {
strlop(Buffer, 13); strlop(Buffer, 13);
Debugprintf("Map Update Params - %s", Params); Debugprintf("Map Update Params - %s", Params);
Debugprintf("Map Update failed - %s", Buffer); Debugprintf("Map Update failed - %s", Buffer);
} }
return; return;

60
FormatHTML.cpp Normal file
View File

@ -0,0 +1,60 @@
// FormatHTML.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
int main () {
FILE *fp, *fp2;
char str[256];
char newstr[256];
char * ptr, * inptr;
/* opening file for reading */
fp = fopen("D:/AtomProject/test.html" , "r");
fp2 = fopen("D:/AtomProject/test.html.c" , "w");
if(fp == NULL) {
perror("Error opening file");
return(-1);
}
while(fgets (str, 256, fp) != NULL)
{
// Replace any " with \" and add " on front and \r\n" on end
char c;
ptr = newstr;
inptr = str;
c = *(inptr++);
*(ptr++) = '"';
while (c && c != 10)
{
if (c == '"')
*(ptr++) = '\\';
*(ptr++) = c;
c = *(inptr++);
}
*(ptr++) = '\\';
*(ptr++) = 'r';
*(ptr++) = '\\';
*(ptr++) = 'n';
*(ptr++) = '"';
*(ptr++) = 10;
*(ptr++) = 0;
puts(newstr);
fputs(newstr, fp2);
}
fclose(fp);
fclose(fp2);
return(0);
}

219
FormatHTML.vcproj Normal file
View File

@ -0,0 +1,219 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="FormatHTML"
ProjectGUID="{2B892B53-6549-4872-AF51-45280ADC8AB5}"
RootNamespace="FormatHTML"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib $(NoInherit)"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib $(NoInherit)"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\FormatHTML.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
CompileAs="1"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\stdafx.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\stdafx.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -233,7 +233,7 @@ UCHAR ourMACAddr[6] = {02,'B','P','Q',1,1};
UCHAR RealMacAddress[6]; UCHAR RealMacAddress[6];
int IPPortMask = 0; uint64_t IPPortMask = 0;
IPSTATS IPStats = {0}; IPSTATS IPStats = {0};
@ -1548,7 +1548,8 @@ VOID ProcessEthIPMsg(PETHMSG Buffer)
VOID ProcessEthARPMsg(PETHARP arpptr, BOOL FromTAP) VOID ProcessEthARPMsg(PETHARP arpptr, BOOL FromTAP)
{ {
int i=0, Mask=IPPortMask; int i=0;
uint64_t Mask=IPPortMask;
PARPDATA Arp; PARPDATA Arp;
PROUTEENTRY Route; PROUTEENTRY Route;
BOOL Found; BOOL Found;
@ -1748,12 +1749,12 @@ ProxyARPReply:
memset(AXARPREQMSG.TARGETHWADDR, 0, 7); memset(AXARPREQMSG.TARGETHWADDR, 0, 7);
AXARPREQMSG.ARPOPCODE = 0x0100; AXARPREQMSG.ARPOPCODE = 0x0100;
for (i=1; i<=NUMBEROFPORTS; i++) for (i = 1; i <= MaxBPQPortNo; i++)
{ {
if (Mask & 1) if (Mask & 1)
Send_AX_Datagram((PMESSAGE)&AXARPREQMSG, 46, i, QST); Send_AX_Datagram((PMESSAGE)&AXARPREQMSG, 46, i, QST);
Mask>>=1; Mask >>= 1;
} }
break; break;
@ -1847,7 +1848,8 @@ SendBack:
VOID ProcessAXARPMsg(PAXARP arpptr) VOID ProcessAXARPMsg(PAXARP arpptr)
{ {
int i=0, Mask=IPPortMask; int i=0;
uint64_t Mask=IPPortMask;
PARPDATA Arp; PARPDATA Arp;
PROUTEENTRY Route; PROUTEENTRY Route;
@ -1954,13 +1956,13 @@ AXProxyARPReply:
AXARPREQMSG.TARGETIPADDR = arpptr->TARGETIPADDR; AXARPREQMSG.TARGETIPADDR = arpptr->TARGETIPADDR;
AXARPREQMSG.SENDIPADDR = arpptr->SENDIPADDR; AXARPREQMSG.SENDIPADDR = arpptr->SENDIPADDR;
for (i=1; i<=NUMBEROFPORTS; i++) for (i=1; i<=MaxBPQPortNo; i++)
{ {
if (i != arpptr->MSGHDDR.PORT) if (i != arpptr->MSGHDDR.PORT)
if (Mask & 1) if (Mask & 1)
Send_AX_Datagram((PMESSAGE)&AXARPREQMSG, 46, i, QST); Send_AX_Datagram((PMESSAGE)&AXARPREQMSG, 46, i, QST);
Mask>>=1; Mask >>= 1;
} }
memset(ETHARPREQMSG.MSGHDDR.DEST, 0xff, 6); memset(ETHARPREQMSG.MSGHDDR.DEST, 0xff, 6);
@ -3281,7 +3283,7 @@ static BOOL ReadConfigFile()
static int ProcessLine(char * buf) static int ProcessLine(char * buf)
{ {
char * ptr, * p_value, * p_origport, * p_host, * p_port; char * ptr, * p_value, * p_origport, * p_host;
int port, mappedport, ipad, mappedipad; int port, mappedport, ipad, mappedipad;
BOOL NATTAP = FALSE; BOOL NATTAP = FALSE;
int i; int i;
@ -3447,16 +3449,28 @@ static int ProcessLine(char * buf)
if (_stricmp(ptr,"IPPorts") == 0) if (_stricmp(ptr,"IPPorts") == 0)
{ {
p_port = strtok(p_value, " ,\t\n\r"); struct _EXTPORTDATA * PORTVEC;
while (p_port != NULL) while (p_value != NULL)
{ {
i=atoi(p_port); i=atoi(p_value);
if (i == 0) return FALSE; if (i == 0) return FALSE;
if (i > NUMBEROFPORTS) return FALSE;
IPPortMask |= 1 << (i-1); PORTVEC = (struct _EXTPORTDATA * )GetPortTableEntryFromPortNum(i);
p_port = strtok(NULL, " ,\t\n\r");
if (PORTVEC == NULL)
return FALSE;
// if not KISS, make sure it can send UI frames
if (PORTVEC->PORTCONTROL.PORTTYPE == 16) // EXTERNAL
if (PORTVEC->PORTCONTROL.PROTOCOL == 10) // Pactor/WINMOR
if (PORTVEC->PORTCONTROL.UICAPABLE == 0)
return FALSE;
IPPortMask |= (uint64_t)1 << (i-1);
p_value = strlop(p_value, ',');
} }
return (TRUE); return (TRUE);
} }

View File

@ -10,7 +10,7 @@
// Generated from the TEXTINCLUDE 2 resource. // Generated from the TEXTINCLUDE 2 resource.
// //
#include "afxres.h" #include "afxres.h"
#include "bpqtermmdi.h" #include "BpqTermMDI.h"
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS #undef APSTUDIO_READONLY_SYMBOLS
@ -241,6 +241,7 @@ BEGIN
END END
POPUP "Monitor" POPUP "Monitor"
BEGIN BEGIN
MENUITEM "Use Local Time", MONLOCALTIME
MENUITEM "Monitor TX", BPQMTX MENUITEM "Monitor TX", BPQMTX
MENUITEM "Monitor Supervisory", BPQMCOM MENUITEM "Monitor Supervisory", BPQMCOM
MENUITEM "Monitor UI Only", MON_UI_ONLY MENUITEM "Monitor UI Only", MON_UI_ONLY
@ -276,13 +277,13 @@ INCOMINGCALL WAVE MOVEABLE PURE "Ring.wav"
BEGIN BEGIN
"kernelresource.h\0" "kernelresource.h\0"
"""\r\n" """\r\n"
"bpqtermmdi.h\0" "BpqTermMDI.h\0"
END END
2 TEXTINCLUDE DISCARDABLE 2 TEXTINCLUDE DISCARDABLE
BEGIN BEGIN
"#include ""afxres.h""\r\n" "#include ""afxres.h""\r\n"
"#include ""bpqtermmdi.h""\r\n" "#include ""BpqTermMDI.h""\r\n"
"\0" "\0"
END END

View File

@ -115,7 +115,7 @@ VOID NETROMMSG(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * L3MSG)
{ {
// INP3 // INP3
ProcessINP3RIF(LINK->NEIGHBOUR, &L3MSG->L3SRCE[1], L3MSG->LENGTH - 9, L3MSG->Port); ProcessINP3RIF(LINK->NEIGHBOUR, &L3MSG->L3SRCE[1], L3MSG->LENGTH - (MSGHDDRLEN + 2), L3MSG->Port); // = 2 = PID + FF Flag
ReleaseBuffer(L3MSG); ReleaseBuffer(L3MSG);
return; return;
} }

View File

@ -1581,8 +1581,8 @@ int main(int argc, char * argv[])
{ {
if (GenerateTrafficReport && (LastTrafficTime + 86400) < NOW) if (GenerateTrafficReport && (LastTrafficTime + 86400) < NOW)
{ {
LastTrafficTime = NOW;
CreateBBSTrafficReport(); CreateBBSTrafficReport();
LastTrafficTime = NOW;
} }
} }
} }

View File

View File

@ -74,6 +74,7 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental> <LinkIncremental>true</LinkIncremental>
<OutDir>D:\linbpq</OutDir>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(Configuration)\</OutDir> <OutDir>C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(Configuration)\</OutDir>
@ -117,10 +118,10 @@
<PrecompiledHeader> <PrecompiledHeader>
</PrecompiledHeader> </PrecompiledHeader>
<WarningLevel>Level3</WarningLevel> <WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat> <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalDependencies>kernel32.lib;WS2_32.Lib;..\lib\libconfigd.lib;DbgHelp.lib;setupapi.lib;miniupnpc.lib;zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>kernel32.lib;WS2_32.Lib;C:\OneDrive\Dev\Source\bpq32\libconfig\x64\Release\libconfig.lib;DbgHelp.lib;setupapi.lib;C:\Dev\Msdev2005\projects\bpq32\CKernel\x64\Debug\miniupnpc.lib;C:\OneDrive\Dev\Source\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatDebug\zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\LINBPQ\$(ProjectName).exe</OutputFile> <OutputFile>c:\LINBPQ\$(ProjectName).exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile> <GenerateMapFile>true</GenerateMapFile>
@ -215,6 +216,7 @@
<ClCompile Include="FBBRoutines.c" /> <ClCompile Include="FBBRoutines.c" />
<ClCompile Include="FLDigi.c" /> <ClCompile Include="FLDigi.c" />
<ClCompile Include="FreeDATA.c" /> <ClCompile Include="FreeDATA.c" />
<ClCompile Include="getopt.c" />
<ClCompile Include="HALDriver.c" /> <ClCompile Include="HALDriver.c" />
<ClCompile Include="HanksRT.c" /> <ClCompile Include="HanksRT.c" />
<ClCompile Include="HFCommon.c" /> <ClCompile Include="HFCommon.c" />

View File

@ -315,6 +315,9 @@
<ClCompile Include="WPRoutines.c"> <ClCompile Include="WPRoutines.c">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="getopt.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="png.h"> <ClInclude Include="png.h">

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommand>C:\Dev\Msdev2005\projects\bpq32\BPQMail\x64\Debug\LinBPQ.exe</LocalDebuggerCommand> <LocalDebuggerCommand>c:\linbpq\linbpq.exe</LocalDebuggerCommand>
<LocalDebuggerWorkingDirectory>c:\linbpq</LocalDebuggerWorkingDirectory> <LocalDebuggerWorkingDirectory>c:\linbpq</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup> </PropertyGroup>

View File

@ -634,7 +634,7 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
// If an INP3 RIF (type <> UI) decode as such // If an INP3 RIF (type <> UI) decode as such
if (ADJBUFFER->CTL != 3) // UI if (ADJBUFFER->CTL != 3) // UI
return DisplayINP3RIF(&ADJBUFFER->L2DATA[1], Output, MsgLen - 24); return DisplayINP3RIF(&ADJBUFFER->L2DATA[1], Output, MsgLen - (MSGHDDRLEN + 14 + 3));
memcpy(Alias, ++ptr, 6); memcpy(Alias, ++ptr, 6);

View File

@ -1,26 +0,0 @@
G8BPQ-1 1681280155
GM8BPQ-3 1681280155
KB8UVN-6 1681280155
N8BHL-6 1681280155
KF8MZ-6 1681280155
W8BAP-6 1681280155
G8BPQ-4 1681280155
EI2GYB-4 1681280155
IZ4FVW-10 1681280155
PE1NNZ-5 1681280155
PI1LAP-4 1681280155
K8OPG-14 1681280155
KB9PVH-11 1681280155
N0NJY-11 1681280155
N3MEL-3 1681280155
K5DAT-11 1681280155
N2UEM-11 1681280155
W9IKU-11 1681280155
WA3WLH-11 1681280155
WA3WLH-14 1681280155
PE1RRR-4 1681280155
MS0HFI-4 1681280155
AE5E-2 1681280155
G0BMH-4 1681280155
OH5RM-8 1681280155
GM8BPQ-4 1681280155

View File

@ -175,9 +175,10 @@ char FTRXModes[8][6] = {"LSB", "USB", "CW", "AM", "FM", "RTTY", "PKT", ""};
char KenwoodModes[16][6] = {"????", "LSB", "USB", "CW", "FM", "AM", "FSK", "????"}; char KenwoodModes[16][6] = {"????", "LSB", "USB", "CW", "FM", "AM", "FSK", "????"};
//char FT2000Modes[16][6] = {"????", "LSB", "USB", "CW", "FM", "AM", "FSK", "PKT-L", "FSK-R", "PKT-FM", "FM-N", "PKT-U", "????"};
char FT2000Modes[16][6] = {"????", "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "PKT-L", "FSK-R", "PKT-FM", "FM-N", "PKT-U", "????"}; char FT2000Modes[16][6] = {"????", "LSB", "USB", "CW", "FM", "AM", "FSK", "CW-R", "PKT-L", "FSK-R", "PKT-FM", "FM-N", "PKT-U", "????"};
char FTDX10Modes[16][9] = {"????", "LSB", "USB", "CW-U", "FM", "AM", "RTTY-L", "CW-L", "DATA-L", "RTTY-U", "DATA-FM", "FM-N", "DATA-U", "AM-N", "PSK", "DATA-FM-N"};
char FT991AModes[16][9] = {"????", "LSB", "USB", "CW-U", "FM", "AM", "RTTY-LSB", "CW-L", "DATA-LSB", "RTTY-USB", "DATA-FM", "FM-N", "DATA-USB", "AM-N", "C4FM", "????"}; char FT991AModes[16][9] = {"????", "LSB", "USB", "CW-U", "FM", "AM", "RTTY-LSB", "CW-L", "DATA-LSB", "RTTY-USB", "DATA-FM", "FM-N", "DATA-USB", "AM-N", "C4FM", "????"};
char FLEXModes[16][6] = {"LSB", "USB", "DSB", "CWL", "CWU", "FM", "AM", "DIGU", "SPEC", "DIGL", "SAM", "DRM"}; char FLEXModes[16][6] = {"LSB", "USB", "DSB", "CWL", "CWU", "FM", "AM", "DIGU", "SPEC", "DIGL", "SAM", "DRM"};
@ -202,7 +203,7 @@ char * RigWebPage = 0;
int RigWebPageLen = 0; int RigWebPageLen = 0;
struct RIGPORTINFO * PORTInfo[34] = {NULL}; // Records are Malloc'd struct RIGPORTINFO * PORTInfo[MAXBPQPORTS + 2] = {NULL}; // Records are Malloc'd
struct RIGINFO * DLLRIG = NULL; // Rig record for dll PTT interface (currently only for UZ7HO); struct RIGINFO * DLLRIG = NULL; // Rig record for dll PTT interface (currently only for UZ7HO);
@ -564,6 +565,7 @@ VOID Rig_PTTEx(struct RIGINFO * RIG, BOOL PTTState, struct TNCINFO * TNC)
case ICOM: case ICOM:
case KENWOOD: case KENWOOD:
case FT2000: case FT2000:
case FTDX10:
case FT991A: case FT991A:
case FLEX: case FLEX:
case NMEA: case NMEA:
@ -782,7 +784,7 @@ int Rig_Command(TRANSPORTENTRY * Session, char * Command)
{ {
RIG = &PORT->Rigs[i]; RIG = &PORT->Rigs[i];
if (RIG->BPQPort & (1 << Port)) if (RIG->BPQPort & ((uint64_t)1 << Port))
goto portok; goto portok;
} }
} }
@ -1285,6 +1287,7 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
case KENWOOD: case KENWOOD:
case FT991A: case FT991A:
case FT2000: case FT2000:
case FTDX10:
case FLEX: case FLEX:
case NMEA: case NMEA:
@ -1870,6 +1873,7 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
case KENWOOD: case KENWOOD:
case FT2000: case FT2000:
case FTDX10:
case FT991A: case FT991A:
case FLEX: case FLEX:
@ -1885,6 +1889,10 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
if (_stricmp(FT2000Modes[ModeNo], Mode) == 0) if (_stricmp(FT2000Modes[ModeNo], Mode) == 0)
break; break;
if (PORT->PortType == FTDX10)
if (_stricmp(FTDX10Modes[ModeNo], Mode) == 0)
break;
if (PORT->PortType == FT991A) if (PORT->PortType == FT991A)
if (_stricmp(FT991AModes[ModeNo], Mode) == 0) if (_stricmp(FT991AModes[ModeNo], Mode) == 0)
break; break;
@ -1925,8 +1933,8 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
if (PORT->PortType == FT2000) if (PORT->PortType == FT2000)
FreqPtr->Cmd1Len = sprintf(Poll, "FA%s;MD0%X;FA;MD;", &FreqString[1], ModeNo); FreqPtr->Cmd1Len = sprintf(Poll, "FA%s;MD0%X;FA;MD;", &FreqString[1], ModeNo);
else else
if (PORT->PortType == FT991A) if (PORT->PortType == FT991A || PORT->PortType == FTDX10)
FreqPtr->Cmd1Len = sprintf(Poll, "FA%s;MD0%X;FA;MD;", &FreqString, ModeNo); FreqPtr->Cmd1Len = sprintf(Poll, "FA%s;MD0%X;FA;MD;", FreqString, ModeNo);
else else
if (PORT->PortType == FLEX) if (PORT->PortType == FLEX)
FreqPtr->Cmd1Len = sprintf(Poll, "ZZFA00%s;ZZMD%02d;ZZFA;ZZMD;", &FreqString[1], ModeNo); FreqPtr->Cmd1Len = sprintf(Poll, "ZZFA00%s;ZZMD%02d;ZZFA;ZZMD;", &FreqString[1], ModeNo);
@ -2201,12 +2209,12 @@ DllExport BOOL APIENTRY Rig_Init()
NumberofPorts = 0; NumberofPorts = 0;
for (port = 0; port < 32; port++) for (port = 0; port < MAXBPQPORTS; port++)
PORTInfo[port] = NULL; PORTInfo[port] = NULL;
// See if any rigcontrol defined (either RADIO or RIGCONTROL lines) // See if any rigcontrol defined (either RADIO or RIGCONTROL lines)
for (port = 0; port < 32; port++) for (port = 0; port < MAXBPQPORTS; port++)
{ {
if (RadioConfigMsg[port]) if (RadioConfigMsg[port])
NeedRig++; NeedRig++;
@ -2362,15 +2370,6 @@ DllExport BOOL APIENTRY Rig_Init()
} }
else else
PORT->hPTTDevice = PORT->hDevice; // Use same port for PTT PORT->hPTTDevice = PORT->hDevice; // Use same port for PTT
// Looks like FT847 Needa a "Cat On" Command. If PTC port need to send it here
if (PORT->PTC && strcmp(PORT->Rigs[0].RigName, "FT847") == 0)
{
UCHAR CATON[6] = {0,0,0,0,0};
SendPTCRadioCommand(PORT->PTC, CATON, 5);
}
} }
for (p = 0; p < NumberofPorts; p++) for (p = 0; p < NumberofPorts; p++)
@ -2381,7 +2380,7 @@ DllExport BOOL APIENTRY Rig_Init()
{ {
int j; int j;
int k = 0; int k = 0;
int BitMask; uint64_t BitMask;
struct _EXTPORTDATA * PortEntry; struct _EXTPORTDATA * PortEntry;
RIG = &PORT->Rigs[i]; RIG = &PORT->Rigs[i];
@ -2395,7 +2394,7 @@ DllExport BOOL APIENTRY Rig_Init()
// then those with neither // then those with neither
BitMask = RIG->BPQPort; BitMask = RIG->BPQPort;
for (j = 0; j < 32; j++) for (j = 0; j < MAXBPQPORTS; j++)
{ {
if (BitMask & 1) if (BitMask & 1)
{ {
@ -2408,7 +2407,7 @@ DllExport BOOL APIENTRY Rig_Init()
} }
BitMask = RIG->BPQPort; BitMask = RIG->BPQPort;
for (j = 0; j < 32; j++) for (j = 0; j < MAXBPQPORTS; j++)
{ {
if (BitMask & 1) if (BitMask & 1)
{ {
@ -2421,7 +2420,7 @@ DllExport BOOL APIENTRY Rig_Init()
} }
BitMask = RIG->BPQPort; BitMask = RIG->BPQPort;
for (j = 0; j < 32; j++) for (j = 0; j < MAXBPQPORTS; j++)
{ {
if (BitMask & 1) if (BitMask & 1)
{ {
@ -2703,6 +2702,7 @@ BOOL Rig_Poll()
case KENWOOD: case KENWOOD:
case FT2000: case FT2000:
case FTDX10:
case FT991A: case FT991A:
case FLEX: case FLEX:
case NMEA: case NMEA:
@ -2772,7 +2772,7 @@ int OpenRigCOMMPort(struct RIGPORTINFO * PORT, VOID * Port, int Speed)
if (PORT->remoteSock) // Using WINMORCONTROL if (PORT->remoteSock) // Using WINMORCONTROL
return TRUE; return TRUE;
if (PORT->PortType == FT2000 || PORT->PortType == FT991A || strcmp(PORT->Rigs[0].RigName, "FT847") == 0) // FT2000 and similar seem to need two stop bits if (PORT->PortType == FT2000 || PORT->PortType == FT991A || PORT->PortType == FTDX10 || strcmp(PORT->Rigs[0].RigName, "FT847") == 0) // FT2000 and similar seem to need two stop bits
PORT->hDevice = OpenCOMPort((VOID *)Port, Speed, FALSE, FALSE, PORT->Alerted, TWOSTOPBITS); PORT->hDevice = OpenCOMPort((VOID *)Port, Speed, FALSE, FALSE, PORT->Alerted, TWOSTOPBITS);
else if (PORT->PortType == NMEA) else if (PORT->PortType == NMEA)
PORT->hDevice = OpenCOMPort((VOID *)Port, Speed, FALSE, FALSE, PORT->Alerted, ONESTOPBIT); PORT->hDevice = OpenCOMPort((VOID *)Port, Speed, FALSE, FALSE, PORT->Alerted, ONESTOPBIT);
@ -2985,6 +2985,7 @@ void CheckRX(struct RIGPORTINFO * PORT)
case KENWOOD: case KENWOOD:
case FT2000: case FT2000:
case FTDX10:
case FT991A: case FT991A:
case FLEX: case FLEX:
@ -3266,7 +3267,7 @@ CheckOtherPorts:
{ {
PortRecord = RIG->PortRecord[i]; PortRecord = RIG->PortRecord[i];
if (PortRecord->PORT_EXT_ADDR(6, PortRecord->PORTCONTROL.PORTNUMBER, 1)) if (PortRecord->PORT_EXT_ADDR && PortRecord->PORT_EXT_ADDR(6, PortRecord->PORTCONTROL.PORTNUMBER, 1))
{ {
// 1 means can't change - release all // 1 means can't change - release all
@ -4779,6 +4780,17 @@ Loop:
strcpy(RIG->WEB_MODE, FT991AModes[Mode]); strcpy(RIG->WEB_MODE, FT991AModes[Mode]);
strcpy(RIG->ModeString, RIG->WEB_MODE); strcpy(RIG->ModeString, RIG->WEB_MODE);
} }
else if (PORT->PortType == FTDX10)
{
Mode = Msg[3] - 48;
if (Mode > 16)
Mode -= 7;
if (Mode > 15) Mode = 15;
SetWindowText(RIG->hMODE, FTDX10Modes[Mode]);
strcpy(RIG->WEB_MODE, FTDX10Modes[Mode]);
strcpy(RIG->ModeString, RIG->WEB_MODE);
}
else if (PORT->PortType == FLEX) else if (PORT->PortType == FLEX)
{ {
Mode = atoi(&Msg[3]); Mode = atoi(&Msg[3]);
@ -5902,6 +5914,13 @@ PortFound:
PORT->PortType = FT2000; PORT->PortType = FT2000;
} }
// FTDX10 seems to be different to most other YAESU types
if (strcmp(RigName, "FTDX10") == 0 && PORT->PortType == YAESU)
{
PORT->PortType = FTDX10;
}
// FT991A seems to be different to most other YAESU types // FT991A seems to be different to most other YAESU types
if (strcmp(RigName, "FT991A") == 0 && PORT->PortType == YAESU) if (strcmp(RigName, "FT991A") == 0 && PORT->PortType == YAESU)
@ -6193,7 +6212,7 @@ CheckOtherParams:
RIG->defaultFreq = atoi(&ptr[12]); RIG->defaultFreq = atoi(&ptr[12]);
} }
else if (atoi(ptr)) else if (atoi(ptr) || ptr[2] == ':')
break; // Not scan freq oe timeband, so see if another param break; // Not scan freq oe timeband, so see if another param
ptr = strtok_s(NULL, " \t\n\r", &Context); ptr = strtok_s(NULL, " \t\n\r", &Context);
@ -6462,7 +6481,7 @@ CheckOtherParams:
strcpy(RIG->PTTOff, "TX0;"); strcpy(RIG->PTTOff, "TX0;");
RIG->PTTOffLen = 4; RIG->PTTOffLen = 4;
} }
else if (PORT->PortType == FT991A) else if (PORT->PortType == FT991A || PORT->PortType == FTDX10)
{ {
RIG->PollLen = 7; RIG->PollLen = 7;
strcpy(RIG->Poll, "FA;MD0;"); strcpy(RIG->Poll, "FA;MD0;");
@ -6571,7 +6590,7 @@ CheckScan:
VARAMode[0] = 0; VARAMode[0] = 0;
Dwell = 0.0; Dwell = 0.0;
while (strchr(ptr, ':')) while (ptr && strchr(ptr, ':'))
{ {
// New TimeBand // New TimeBand
@ -6593,6 +6612,9 @@ CheckScan:
ptr = strtok_s(NULL, " \t\n\r", &Context); ptr = strtok_s(NULL, " \t\n\r", &Context);
} }
if (ptr == 0)
break;
if (strchr(ptr, ',')) // New Format if (strchr(ptr, ',')) // New Format
{ {
DecodeModePtr(ptr, &Dwell, &Freq, Mode, &PMinLevel, &PMaxLevel, &PacketMode, DecodeModePtr(ptr, &Dwell, &Freq, Mode, &PMinLevel, &PMaxLevel, &PacketMode,
@ -6793,6 +6815,24 @@ CheckScan:
} }
break; break;
case FTDX10:
for (ModeNo = 0; ModeNo < 16; ModeNo++)
{
if (strlen(Mode) == 1)
{
if (FTDX10Modes[ModeNo][0] == Mode[0])
break;
}
else
{
if (_stricmp(FTDX10Modes[ModeNo], Mode) == 0)
break;
}
}
break;
case FT100: case FT100:
@ -7172,7 +7212,7 @@ CheckScan:
{ {
FreqPtr[0]->Cmd1Len = sprintf(CmdPtr, "FA%s;MD0%X;FA;MD;", &FreqString[1], ModeNo); FreqPtr[0]->Cmd1Len = sprintf(CmdPtr, "FA%s;MD0%X;FA;MD;", &FreqString[1], ModeNo);
} }
else if (PORT->PortType == FT991A) else if (PORT->PortType == FT991A || PORT->PortType == FTDX10)
{ {
FreqPtr[0]->Cmd1Len = sprintf(CmdPtr, "FA%s;MD0%X;FA;MD0;", &FreqString, ModeNo); FreqPtr[0]->Cmd1Len = sprintf(CmdPtr, "FA%s;MD0%X;FA;MD0;", &FreqString, ModeNo);
} }
@ -7330,7 +7370,7 @@ VOID SetupScanInterLockGroups(struct RIGINFO *RIG)
if (TNC->RXRadio == Interlock) if (TNC->RXRadio == Interlock)
{ {
int p = PortRecord->PORTNUMBER; int p = PortRecord->PORTNUMBER;
RIG->BPQPort |= (1 << p); RIG->BPQPort |= ((uint64_t)1 << p);
sprintf(PortString, "%s,%d", PortString, p); sprintf(PortString, "%s,%d", PortString, p);
TNC->RIG = RIG; TNC->RIG = RIG;
@ -7340,7 +7380,7 @@ VOID SetupScanInterLockGroups(struct RIGINFO *RIG)
if (TNC->TXRadio == Interlock && TNC->TXRadio != TNC->RXRadio) if (TNC->TXRadio == Interlock && TNC->TXRadio != TNC->RXRadio)
{ {
int p = PortRecord->PORTNUMBER; int p = PortRecord->PORTNUMBER;
RIG->BPQPort |= (1 << p); RIG->BPQPort |= ((uint64_t)1 << p);
sprintf(TxPortString, "%s,%d", TxPortString, p); sprintf(TxPortString, "%s,%d", TxPortString, p);
TNC->TXRIG = RIG; TNC->TXRIG = RIG;
@ -9912,7 +9952,7 @@ void ProcessSDRANGELFrame(struct RIGPORTINFO * PORT)
// As we mess with the message, save a copy and restore for each Rig // As we mess with the message, save a copy and restore for each Rig
save = strdup(ptr3); save = _strdup(ptr3);
for (i = 0; i < PORT->ConfiguredRigs; i++) for (i = 0; i < PORT->ConfiguredRigs; i++)
{ {

View File

@ -122,6 +122,7 @@ VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
void SCSTryToSendDATA(struct TNCINFO * TNC, int Stream); void SCSTryToSendDATA(struct TNCINFO * TNC, int Stream);
VOID UpdateMHwithDigis(struct TNCINFO * TNC, UCHAR * Call, char Mode, char Direction); VOID UpdateMHwithDigis(struct TNCINFO * TNC, UCHAR * Call, char Mode, char Direction);
int standardParams(struct TNCINFO * TNC, char * buf); int standardParams(struct TNCINFO * TNC, char * buf);
int SendPTCRadioCommand(struct TNCINFO * TNC, char * Block, int Length);
#define FEND 0xC0 // KISS CONTROL CODES #define FEND 0xC0 // KISS CONTROL CODES
#define FESC 0xDB #define FESC 0xDB
@ -3180,9 +3181,22 @@ VOID ProcessDEDFrame(struct TNCINFO * TNC, UCHAR * Msg, int framelen)
{ {
// Just come up // Just come up
struct RIGPORTINFO * PORT;
TNC->TNCOK = TRUE; TNC->TNCOK = TRUE;
sprintf(TNC->WEB_COMMSSTATE,"%s TNC link OK", TNC->PortRecord->PORTCONTROL.SerialPortName); sprintf(TNC->WEB_COMMSSTATE,"%s TNC link OK", TNC->PortRecord->PORTCONTROL.SerialPortName);
SetWindowText(TNC->xIDC_COMMSSTATE, TNC->WEB_COMMSSTATE); SetWindowText(TNC->xIDC_COMMSSTATE, TNC->WEB_COMMSSTATE);
// If using an FT847 on PTC Port it needa a "Cat On" Command. Send it here
PORT = TNC->RIG->PORT;
if (PORT->PTC && strcmp(PORT->Rigs[0].RigName, "FT847") == 0)
{
UCHAR CATON[6] = {0,0,0,0,0};
SendPTCRadioCommand(PORT->PTC, CATON, 5);
}
} }
Stream = RealStream = Msg[2]; Stream = RealStream = Msg[2];

View File

@ -10,14 +10,14 @@
#endif #endif
#define KVers 6,0,24,16 #define KVers 6,0,24,22
#define KVerstring "6.0.24.16\0" #define KVerstring "6.0.24.22\0"
#ifdef CKernel #ifdef CKernel
#define Vers KVers #define Vers KVers
#define Verstring KVerstring #define Verstring KVerstring
#define Datestring "October 2023" #define Datestring "November 2023"
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring #define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
#define VerCopyright "Copyright © 2001-2023 John Wiseman G8BPQ\0" #define VerCopyright "Copyright © 2001-2023 John Wiseman G8BPQ\0"
#define VerDesc "BPQ32 Switch\0" #define VerDesc "BPQ32 Switch\0"

View File

@ -2773,6 +2773,9 @@ VOID SaveNewMessage(struct HTTPConnectionInfo * Session, char * MsgPtr, char * R
BuildNNTPList(Msg); // Build NNTP Groups list BuildNNTPList(Msg); // Build NNTP Groups list
if (Msg->status != 'H' && Msg->type == 'B' && memcmp(Msg->fbbs, zeros, NBMASK) != 0)
Msg->status = '$'; // Has forwarding
if (EnableUI) if (EnableUI)
SendMsgUI(Msg); SendMsgUI(Msg);
@ -3698,6 +3701,9 @@ VOID WriteOneRecipient(struct MsgInfo * Msg, WebMailInfo * WebMail, int MsgLen,
MatchMessagetoBBSList(Msg, 0); MatchMessagetoBBSList(Msg, 0);
if (Msg->status != 'H' && Msg->type == 'B' && memcmp(Msg->fbbs, zeros, NBMASK) != 0)
Msg->status = '$'; // Has forwarding
BuildNNTPList(Msg); // Build NNTP Groups list BuildNNTPList(Msg); // Build NNTP Groups list
} }
@ -4278,6 +4284,9 @@ VOID BuildMessageFromHTMLInput(struct HTTPConnectionInfo * Session, char * Reply
MatchMessagetoBBSList(Msg, 0); MatchMessagetoBBSList(Msg, 0);
if (Msg->status != 'H' && Msg->type == 'B' && memcmp(Msg->fbbs, zeros, NBMASK) != 0)
Msg->status = '$'; // Has forwarding
BuildNNTPList(Msg); // Build NNTP Groups list BuildNNTPList(Msg); // Build NNTP Groups list
SaveMessageDatabase(); SaveMessageDatabase();

View File

@ -106,6 +106,7 @@ int ConnecttoWinRPR(int port);
BOOL KillOldTNC(char * Path); BOOL KillOldTNC(char * Path);
int KillTNC(struct TNCINFO * TNC); int KillTNC(struct TNCINFO * TNC);
void CountRestarts(struct TNCINFO * TNC);
static BOOL RestartTNC(struct TNCINFO * TNC) static BOOL RestartTNC(struct TNCINFO * TNC)
{ {
@ -789,16 +790,15 @@ void * WinRPRExtInit(EXTPORTDATA * PortEntry)
return ExtProc; return ExtProc;
} }
if (TNC->AutoStartDelay == 0)
TNC->AutoStartDelay = 2000;
sprintf(msg,"WinRPR Host %s %d", TNC->HostName, htons(TNC->destaddr.sin_port)); sprintf(msg,"WinRPR Host %s %d", TNC->HostName, htons(TNC->destaddr.sin_port));
WritetoConsoleLocal(msg); WritetoConsoleLocal(msg);
TNC->Port = port; TNC->Port = port;
TNC->Hardware = H_WINRPR; TNC->Hardware = H_WINRPR;
if (TNC->ProgramPath)
TNC->WeStartedTNC = RestartTNC(TNC);
// Set up DED addresses for streams // Set up DED addresses for streams
for (Stream = 0; Stream <= MaxStreams; Stream++) for (Stream = 0; Stream <= MaxStreams; Stream++)
@ -887,6 +887,9 @@ void * WinRPRExtInit(EXTPORTDATA * PortEntry)
TNC->WEB_MODE = zalloc(20); TNC->WEB_MODE = zalloc(20);
TNC->WEB_BUFFERS = zalloc(100); TNC->WEB_BUFFERS = zalloc(100);
TNC->WEB_TRAFFIC = zalloc(100); TNC->WEB_TRAFFIC = zalloc(100);
TNC->WEB_RESTARTTIME = zalloc(100);
TNC->WEB_RESTARTS = zalloc(100);
#ifndef LINBPQ #ifndef LINBPQ
@ -1451,14 +1454,9 @@ VOID WinRPRThread(void * portptr)
// can only check if running on local host // can only check if running on local host
TNC->PID = GetListeningPortsPID(TNC->destaddr.sin_port); TNC->PID = GetListeningPortsPID(TNC->destaddr.sin_port);
if (TNC->PID == 0)
{
TNC->CONNECTING = FALSE;
sprintf(TNC->WEB_COMMSSTATE, "Waiting for TNC");
MySetWindowText(TNC->xIDC_COMMSSTATE, TNC->WEB_COMMSSTATE);
return; // Not listening so no point trying to connect if (TNC->PID == 0)
} goto TNCNotRunning;
// Get the File Name in case we want to restart it. // Get the File Name in case we want to restart it.
@ -1480,17 +1478,25 @@ VOID WinRPRThread(void * portptr)
} }
} }
} }
goto TNCRunning;
} }
#endif #endif
// // If we started the TNC make sure it is still running. TNCNotRunning:
// if (!IsProcess(TNC->PID)) // Not running or can't check, restart if we have a path
// {
// RestartTNC(TNC);
// Sleep(3000);
// }
if (TNC->ProgramPath)
{
Consoleprintf("Trying to (re)start TNC %s", TNC->ProgramPath);
if (RestartTNC(TNC))
CountRestarts(TNC);
Sleep(TNC->AutoStartDelay);
}
TNCRunning:
TNC->destaddr.sin_addr.s_addr = inet_addr(TNC->HostName); TNC->destaddr.sin_addr.s_addr = inet_addr(TNC->HostName);
TNC->Datadestaddr.sin_addr.s_addr = inet_addr(TNC->HostName); TNC->Datadestaddr.sin_addr.s_addr = inet_addr(TNC->HostName);

View File

@ -2213,7 +2213,7 @@ L2Packet:
// Bridge if requested // Bridge if requested
for (toPort = 1; toPort <= NUMBEROFPORTS; toPort++) for (toPort = 1; toPort <= MaxBPQPortNo; toPort++)
{ {
if (BridgeMap[CURRENTPORT][toPort]) if (BridgeMap[CURRENTPORT][toPort])
{ {

View File

@ -158,7 +158,7 @@ struct CONFIGTABLE
char C_IDMSG[512]; char C_IDMSG[512];
char C_CTEXT[512]; char C_CTEXT[512];
char C_INFOMSG[2048]; char C_INFOMSG[2048];
UCHAR CfgBridgeMap[MaxBPQPortNo][MaxBPQPortNo]; UCHAR CfgBridgeMap[MaxBPQPortNo + 1][MaxBPQPortNo + 1];
struct ROUTECONFIG C_ROUTE[MaxLockedRoutes]; struct ROUTECONFIG C_ROUTE[MaxLockedRoutes];
struct APPLCONFIG C_APPL[NumberofAppls]; struct APPLCONFIG C_APPL[NumberofAppls];
struct PORTCONFIG C_PORT[MaxBPQPortNo + 4]; struct PORTCONFIG C_PORT[MaxBPQPortNo + 4];

6
debian/changelog vendored
View File

@ -1,8 +1,8 @@
linbpq (6.0.24.16-1~bpo12+1) bookworm; urgency=medium linbpq (6.0.24.22-1) unstable; urgency=medium
* Rebuild for bookworm. * New Upstream Release
-- Dave Hibberd <d@vehibberd.com> Tue, 31 Oct 2023 22:51:45 +0000 -- Dave Hibberd <d@vehibberd.com> Fri, 08 Dec 2023 12:29:40 +0000
linbpq (6.0.24.16-1) unstable; urgency=medium linbpq (6.0.24.16-1) unstable; urgency=medium

View File

View File

@ -1,2 +0,0 @@
2021/03/24 16:23:50 - 0 Active Nodes
|

View File

@ -67,7 +67,7 @@ struct RIGINFO
void * BPQtoRADIO_Q; // Frames from switch for radio void * BPQtoRADIO_Q; // Frames from switch for radio
UINT BPQPort; // Port this radio is attached to. Bit Map, as may be more than one port controlling radio uint64_t BPQPort; // Port this radio is attached to. Bit Map, as may be more than one port controlling radio
// int PortNum; // Number of port that defined this rig // int PortNum; // Number of port that defined this rig
int Interlock; // Interlock group for this Radio int Interlock; // Interlock group for this Radio
int IC735; // Old ICOM with shorter freq message int IC735; // Old ICOM with shorter freq message
@ -202,6 +202,7 @@ struct RIGINFO
//G7TAJ //G7TAJ
#define SDRANGEL 19 #define SDRANGEL 19
//G7TAJ //G7TAJ
#define FTDX10 20
// Yease seem to have lots of variants of the same model // Yease seem to have lots of variants of the same model

View File

View File

14
upnp.c
View File

@ -39,13 +39,23 @@ POSSIBILITY OF SUCH DAMAGE.
#include "miniupnpc.h" #include "miniupnpc.h"
#include "upnperrors.h" #include "upnperrors.h"
#include <winsock2.h> #include <winsock2.h>
#else #endif
#ifdef LINBPQ
#ifndef MACBPQ
#ifndef WIN32
#include <miniupnpc/upnpcommands.h> #include <miniupnpc/upnpcommands.h>
#include <miniupnpc/miniupnpc.h> #include <miniupnpc/miniupnpc.h>
#include <miniupnpc/upnperrors.h> #include <miniupnpc/upnperrors.h>
#include <stdio.h> #include <stdio.h>
#endif #endif
#endif
#endif
#ifdef MACBPQ
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnpcommands.h>
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/miniupnpc.h>
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnperrors.h>
#include <stdio.h>
#endif
int AddMap(char * controlURL, char * eport, char * iport, char * proto); int AddMap(char * controlURL, char * eport, char * iport, char * proto);
int DeleteMap(char * controlURL, char * eport, char * iport, char * proto); int DeleteMap(char * controlURL, char * eport, char * iport, char * proto);