New upstream version 6.0.24.22

This commit is contained in:
Dave Hibberd 2023-12-08 12:26:52 +00:00
parent 120df97dc7
commit 2ccd083256
35 changed files with 694 additions and 133 deletions

View File

@ -1581,9 +1581,9 @@ OK:
// 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);

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

View File

@ -1122,6 +1122,7 @@
// Add FBB reject.sys style filters (3)
// 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);
}
if (mtxparam & 0x80)
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_CHECKED);
else
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_UNCHECKED);
if (mtxparam & 1)
CheckMenuItem(hMonCfgMenu,BPQMTX,MF_CHECKED);
else
@ -1733,6 +1738,10 @@ LRESULT CALLBACK MonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
break;
}
case MONLOCALTIME:
ToggleLocalTime();
break;
case BPQMTX:
@ -4266,6 +4275,24 @@ int ToggleMTX(HWND hWnd)
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)
{

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)
// Make sure CMD bit is set on UI frames
// 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

View File

@ -40,6 +40,7 @@
#define CHATTERM 1179
#define IDM_CLOSEWINDOW 1180
#define MONITORAPRS 1181
#define MONLOCALTIME 1182
#define MON_UI_ONLY 40006
#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);
Debugprintf("Map Update Params - %s", Params);
Debugprintf("Map Update failed - %s", Buffer);
}
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];
int IPPortMask = 0;
uint64_t IPPortMask = 0;
IPSTATS IPStats = {0};
@ -1548,7 +1548,8 @@ VOID ProcessEthIPMsg(PETHMSG Buffer)
VOID ProcessEthARPMsg(PETHARP arpptr, BOOL FromTAP)
{
int i=0, Mask=IPPortMask;
int i=0;
uint64_t Mask=IPPortMask;
PARPDATA Arp;
PROUTEENTRY Route;
BOOL Found;
@ -1748,7 +1749,7 @@ ProxyARPReply:
memset(AXARPREQMSG.TARGETHWADDR, 0, 7);
AXARPREQMSG.ARPOPCODE = 0x0100;
for (i=1; i<=NUMBEROFPORTS; i++)
for (i = 1; i <= MaxBPQPortNo; i++)
{
if (Mask & 1)
Send_AX_Datagram((PMESSAGE)&AXARPREQMSG, 46, i, QST);
@ -1847,7 +1848,8 @@ SendBack:
VOID ProcessAXARPMsg(PAXARP arpptr)
{
int i=0, Mask=IPPortMask;
int i=0;
uint64_t Mask=IPPortMask;
PARPDATA Arp;
PROUTEENTRY Route;
@ -1954,7 +1956,7 @@ AXProxyARPReply:
AXARPREQMSG.TARGETIPADDR = arpptr->TARGETIPADDR;
AXARPREQMSG.SENDIPADDR = arpptr->SENDIPADDR;
for (i=1; i<=NUMBEROFPORTS; i++)
for (i=1; i<=MaxBPQPortNo; i++)
{
if (i != arpptr->MSGHDDR.PORT)
if (Mask & 1)
@ -3281,7 +3283,7 @@ static BOOL ReadConfigFile()
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;
BOOL NATTAP = FALSE;
int i;
@ -3447,16 +3449,28 @@ static int ProcessLine(char * buf)
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 > NUMBEROFPORTS) return FALSE;
IPPortMask |= 1 << (i-1);
p_port = strtok(NULL, " ,\t\n\r");
PORTVEC = (struct _EXTPORTDATA * )GetPortTableEntryFromPortNum(i);
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);
}

View File

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

View File

@ -115,7 +115,7 @@ VOID NETROMMSG(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * L3MSG)
{
// 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);
return;
}

View File

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

View File

View File

@ -74,6 +74,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>D:\linbpq</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(Configuration)\</OutDir>
@ -117,10 +118,10 @@
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<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>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
@ -215,6 +216,7 @@
<ClCompile Include="FBBRoutines.c" />
<ClCompile Include="FLDigi.c" />
<ClCompile Include="FreeDATA.c" />
<ClCompile Include="getopt.c" />
<ClCompile Include="HALDriver.c" />
<ClCompile Include="HanksRT.c" />
<ClCompile Include="HFCommon.c" />

View File

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

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<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>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</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 (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);

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 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 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 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;
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);
@ -564,6 +565,7 @@ VOID Rig_PTTEx(struct RIGINFO * RIG, BOOL PTTState, struct TNCINFO * TNC)
case ICOM:
case KENWOOD:
case FT2000:
case FTDX10:
case FT991A:
case FLEX:
case NMEA:
@ -782,7 +784,7 @@ int Rig_Command(TRANSPORTENTRY * Session, char * Command)
{
RIG = &PORT->Rigs[i];
if (RIG->BPQPort & (1 << Port))
if (RIG->BPQPort & ((uint64_t)1 << Port))
goto portok;
}
}
@ -1285,6 +1287,7 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
case KENWOOD:
case FT991A:
case FT2000:
case FTDX10:
case FLEX:
case NMEA:
@ -1870,6 +1873,7 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
case KENWOOD:
case FT2000:
case FTDX10:
case FT991A:
case FLEX:
@ -1885,6 +1889,10 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
if (_stricmp(FT2000Modes[ModeNo], Mode) == 0)
break;
if (PORT->PortType == FTDX10)
if (_stricmp(FTDX10Modes[ModeNo], Mode) == 0)
break;
if (PORT->PortType == FT991A)
if (_stricmp(FT991AModes[ModeNo], Mode) == 0)
break;
@ -1925,8 +1933,8 @@ int Rig_CommandEx(struct RIGPORTINFO * PORT, struct RIGINFO * RIG, TRANSPORTENTR
if (PORT->PortType == FT2000)
FreqPtr->Cmd1Len = sprintf(Poll, "FA%s;MD0%X;FA;MD;", &FreqString[1], ModeNo);
else
if (PORT->PortType == FT991A)
FreqPtr->Cmd1Len = sprintf(Poll, "FA%s;MD0%X;FA;MD;", &FreqString, ModeNo);
if (PORT->PortType == FT991A || PORT->PortType == FTDX10)
FreqPtr->Cmd1Len = sprintf(Poll, "FA%s;MD0%X;FA;MD;", FreqString, ModeNo);
else
if (PORT->PortType == FLEX)
FreqPtr->Cmd1Len = sprintf(Poll, "ZZFA00%s;ZZMD%02d;ZZFA;ZZMD;", &FreqString[1], ModeNo);
@ -2201,12 +2209,12 @@ DllExport BOOL APIENTRY Rig_Init()
NumberofPorts = 0;
for (port = 0; port < 32; port++)
for (port = 0; port < MAXBPQPORTS; port++)
PORTInfo[port] = NULL;
// 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])
NeedRig++;
@ -2362,15 +2370,6 @@ DllExport BOOL APIENTRY Rig_Init()
}
else
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++)
@ -2381,7 +2380,7 @@ DllExport BOOL APIENTRY Rig_Init()
{
int j;
int k = 0;
int BitMask;
uint64_t BitMask;
struct _EXTPORTDATA * PortEntry;
RIG = &PORT->Rigs[i];
@ -2395,7 +2394,7 @@ DllExport BOOL APIENTRY Rig_Init()
// then those with neither
BitMask = RIG->BPQPort;
for (j = 0; j < 32; j++)
for (j = 0; j < MAXBPQPORTS; j++)
{
if (BitMask & 1)
{
@ -2408,7 +2407,7 @@ DllExport BOOL APIENTRY Rig_Init()
}
BitMask = RIG->BPQPort;
for (j = 0; j < 32; j++)
for (j = 0; j < MAXBPQPORTS; j++)
{
if (BitMask & 1)
{
@ -2421,7 +2420,7 @@ DllExport BOOL APIENTRY Rig_Init()
}
BitMask = RIG->BPQPort;
for (j = 0; j < 32; j++)
for (j = 0; j < MAXBPQPORTS; j++)
{
if (BitMask & 1)
{
@ -2703,6 +2702,7 @@ BOOL Rig_Poll()
case KENWOOD:
case FT2000:
case FTDX10:
case FT991A:
case FLEX:
case NMEA:
@ -2772,7 +2772,7 @@ int OpenRigCOMMPort(struct RIGPORTINFO * PORT, VOID * Port, int Speed)
if (PORT->remoteSock) // Using WINMORCONTROL
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);
else if (PORT->PortType == NMEA)
PORT->hDevice = OpenCOMPort((VOID *)Port, Speed, FALSE, FALSE, PORT->Alerted, ONESTOPBIT);
@ -2985,6 +2985,7 @@ void CheckRX(struct RIGPORTINFO * PORT)
case KENWOOD:
case FT2000:
case FTDX10:
case FT991A:
case FLEX:
@ -3266,7 +3267,7 @@ CheckOtherPorts:
{
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
@ -4779,6 +4780,17 @@ Loop:
strcpy(RIG->WEB_MODE, FT991AModes[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)
{
Mode = atoi(&Msg[3]);
@ -5902,6 +5914,13 @@ PortFound:
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
if (strcmp(RigName, "FT991A") == 0 && PORT->PortType == YAESU)
@ -6193,7 +6212,7 @@ CheckOtherParams:
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
ptr = strtok_s(NULL, " \t\n\r", &Context);
@ -6462,7 +6481,7 @@ CheckOtherParams:
strcpy(RIG->PTTOff, "TX0;");
RIG->PTTOffLen = 4;
}
else if (PORT->PortType == FT991A)
else if (PORT->PortType == FT991A || PORT->PortType == FTDX10)
{
RIG->PollLen = 7;
strcpy(RIG->Poll, "FA;MD0;");
@ -6571,7 +6590,7 @@ CheckScan:
VARAMode[0] = 0;
Dwell = 0.0;
while (strchr(ptr, ':'))
while (ptr && strchr(ptr, ':'))
{
// New TimeBand
@ -6593,6 +6612,9 @@ CheckScan:
ptr = strtok_s(NULL, " \t\n\r", &Context);
}
if (ptr == 0)
break;
if (strchr(ptr, ',')) // New Format
{
DecodeModePtr(ptr, &Dwell, &Freq, Mode, &PMinLevel, &PMaxLevel, &PacketMode,
@ -6793,6 +6815,24 @@ CheckScan:
}
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:
@ -7172,7 +7212,7 @@ CheckScan:
{
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);
}
@ -7330,7 +7370,7 @@ VOID SetupScanInterLockGroups(struct RIGINFO *RIG)
if (TNC->RXRadio == Interlock)
{
int p = PortRecord->PORTNUMBER;
RIG->BPQPort |= (1 << p);
RIG->BPQPort |= ((uint64_t)1 << p);
sprintf(PortString, "%s,%d", PortString, p);
TNC->RIG = RIG;
@ -7340,7 +7380,7 @@ VOID SetupScanInterLockGroups(struct RIGINFO *RIG)
if (TNC->TXRadio == Interlock && TNC->TXRadio != TNC->RXRadio)
{
int p = PortRecord->PORTNUMBER;
RIG->BPQPort |= (1 << p);
RIG->BPQPort |= ((uint64_t)1 << p);
sprintf(TxPortString, "%s,%d", TxPortString, p);
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
save = strdup(ptr3);
save = _strdup(ptr3);
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 UpdateMHwithDigis(struct TNCINFO * TNC, UCHAR * Call, char Mode, char Direction);
int standardParams(struct TNCINFO * TNC, char * buf);
int SendPTCRadioCommand(struct TNCINFO * TNC, char * Block, int Length);
#define FEND 0xC0 // KISS CONTROL CODES
#define FESC 0xDB
@ -3180,9 +3181,22 @@ VOID ProcessDEDFrame(struct TNCINFO * TNC, UCHAR * Msg, int framelen)
{
// Just come up
struct RIGPORTINFO * PORT;
TNC->TNCOK = TRUE;
sprintf(TNC->WEB_COMMSSTATE,"%s TNC link OK", TNC->PortRecord->PORTCONTROL.SerialPortName);
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];

View File

@ -10,14 +10,14 @@
#endif
#define KVers 6,0,24,16
#define KVerstring "6.0.24.16\0"
#define KVers 6,0,24,22
#define KVerstring "6.0.24.22\0"
#ifdef CKernel
#define Vers KVers
#define Verstring KVerstring
#define Datestring "October 2023"
#define Datestring "November 2023"
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
#define VerCopyright "Copyright © 2001-2023 John Wiseman G8BPQ\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
if (Msg->status != 'H' && Msg->type == 'B' && memcmp(Msg->fbbs, zeros, NBMASK) != 0)
Msg->status = '$'; // Has forwarding
if (EnableUI)
SendMsgUI(Msg);
@ -3698,6 +3701,9 @@ VOID WriteOneRecipient(struct MsgInfo * Msg, WebMailInfo * WebMail, int MsgLen,
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
}
@ -4278,6 +4284,9 @@ VOID BuildMessageFromHTMLInput(struct HTTPConnectionInfo * Session, char * Reply
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
SaveMessageDatabase();

View File

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

View File

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

View File

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

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
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 Interlock; // Interlock group for this Radio
int IC735; // Old ICOM with shorter freq message
@ -202,6 +202,7 @@ struct RIGINFO
//G7TAJ
#define SDRANGEL 19
//G7TAJ
#define FTDX10 20
// 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 "upnperrors.h"
#include <winsock2.h>
#else
#endif
#ifdef LINBPQ
#ifndef MACBPQ
#ifndef WIN32
#include <miniupnpc/upnpcommands.h>
#include <miniupnpc/miniupnpc.h>
#include <miniupnpc/upnperrors.h>
#include <stdio.h>
#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 DeleteMap(char * controlURL, char * eport, char * iport, char * proto);

187
upnp.c.bak Normal file
View File

@ -0,0 +1,187 @@
// Includes code from MiniUPnPc, used subject to the following conditions:
/*
MiniUPnPc
Copyright (c) 2005-2020, Thomas BERNARD
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
#define MINIUPNP_STATICLIB
#include <stdio.h>
#ifdef _WIN32
#include "upnpcommands.h"
#include "miniupnpc.h"
#include "upnperrors.h"
#include <winsock2.h>
#else
#include <miniupnpc/upnpcommands.h>
#include <miniupnpc/miniupnpc.h>
#include <miniupnpc/upnperrors.h>
#include <stdio.h>
#endif
int AddMap(char * controlURL, char * eport, char * iport, char * proto);
int DeleteMap(char * controlURL, char * eport, char * iport, char * proto);
void Consoleprintf(const char * format, ...);
struct UPNP
{
struct UPNP * Next;
char * Protocol;
char * LANport;
char * WANPort;
};
extern struct UPNP * UPNPConfig;
char * controlURL = 0;
char * servicetype = 0;
char iaddr[] = "IP";
char * inClient = NULL;
#ifdef LINBPQ
char desc[] = "LinBPQ ";
#else
char desc[] = "BPQ32 ";
#endif
char * remoteHost = NULL;
char * leaseDuration = NULL;
struct UPNPDev * devlist = 0;
char lanaddr[64] = "unset"; /* my ip address on the LAN */
struct UPNPUrls urls;
struct IGDdatas data;
int i;
const char * rootdescurl = 0;
const char * multicastif = 0;
const char * minissdpdpath = 0;
int localport = UPNP_LOCAL_PORT_ANY;
int retcode = 0;
int error = 0;
int ipv6 = 0;
int ignore = 0;
unsigned char ttl = 2;
int upnpInit()
{
struct UPNP * Config = UPNPConfig;
int i;
#ifdef WIN32
WSADATA wsaData;
int nResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if(nResult != NO_ERROR)
{
fprintf(stderr, "WSAStartup() failed.\n");
return -1;
}
#endif
while (Config)
{
if (devlist == NULL)
{
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
if (devlist == NULL)
{
Consoleprintf("Failed to find a UPNP device");
return 0;
}
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
}
AddMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
Config = Config->Next;
}
return 0;
}
int upnpClose()
{
struct UPNP * Config = UPNPConfig;
int i;
while (Config)
{
if (devlist == NULL)
{
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
if (devlist == NULL)
{
Consoleprintf("Failed to find a UPNP device");
return 0;
}
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
}
DeleteMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
Config = Config->Next;
}
return 0;
}
int AddMap(char * controlURL, char * eport, char * iport, char * proto)
{
int r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
eport, iport, lanaddr, desc,
proto, remoteHost, leaseDuration);
if (r != UPNPCOMMAND_SUCCESS)
{
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
return -2;
}
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
return 0;
}
int DeleteMap(char * controlURL, char * eport, char * iport, char * proto)
{
int r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, proto, remoteHost);
if(r != UPNPCOMMAND_SUCCESS)
{
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
return -2;
}
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
return 0;
}