mirror of git://vps1.g8bpq.net/linbpq
parent
2af4cf380b
commit
fcb3973abd
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,402 +1,402 @@
|
|||||||
/*
|
/*
|
||||||
Copyright 2001-2022 John Wiseman G8BPQ
|
Copyright 2001-2022 John Wiseman G8BPQ
|
||||||
|
|
||||||
This file is part of LinBPQ/BPQ32.
|
This file is part of LinBPQ/BPQ32.
|
||||||
|
|
||||||
LinBPQ/BPQ32 is free software: you can redistribute it and/or modify
|
LinBPQ/BPQ32 is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
(at your option) any later version.
|
(at your option) any later version.
|
||||||
|
|
||||||
LinBPQ/BPQ32 is distributed in the hope that it will be useful,
|
LinBPQ/BPQ32 is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//
|
//
|
||||||
// C replacement for TNCCode.asm
|
// C replacement for TNCCode.asm
|
||||||
//
|
//
|
||||||
#define Kernel
|
#define Kernel
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
|
||||||
#pragma data_seg("_BPQDATA")
|
#pragma data_seg("_BPQDATA")
|
||||||
|
|
||||||
#include "time.h"
|
#include "time.h"
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#include "cheaders.h"
|
#include "cheaders.h"
|
||||||
#include "tncinfo.h"
|
#include "tncinfo.h"
|
||||||
|
|
||||||
int C_Q_COUNT(VOID *PQ);
|
int C_Q_COUNT(VOID *PQ);
|
||||||
VOID SENDUIMESSAGE(struct DATAMESSAGE * Msg);
|
VOID SENDUIMESSAGE(struct DATAMESSAGE * Msg);
|
||||||
|
|
||||||
VOID TNCTimerProc()
|
VOID TNCTimerProc()
|
||||||
{
|
{
|
||||||
// CALLED AT 10 HZ
|
// CALLED AT 10 HZ
|
||||||
|
|
||||||
int n = BPQHOSTSTREAMS;
|
int n = BPQHOSTSTREAMS;
|
||||||
PBPQVECSTRUC HOSTSESS = BPQHOSTVECTOR;
|
PBPQVECSTRUC HOSTSESS = BPQHOSTVECTOR;
|
||||||
TRANSPORTENTRY * Session;
|
TRANSPORTENTRY * Session;
|
||||||
UCHAR DISCFLAG = 0;
|
UCHAR DISCFLAG = 0;
|
||||||
|
|
||||||
while (n--)
|
while (n--)
|
||||||
{
|
{
|
||||||
// Action any DISC Requests (must be done in timer owning process)
|
// Action any DISC Requests (must be done in timer owning process)
|
||||||
|
|
||||||
if (HOSTSESS->HOSTFLAGS & 0x40) // DISC REQUEST
|
if (HOSTSESS->HOSTFLAGS & 0x40) // DISC REQUEST
|
||||||
{
|
{
|
||||||
if (HOSTSESS->HOSTFLAGS & 0x20) // Stay?
|
if (HOSTSESS->HOSTFLAGS & 0x20) // Stay?
|
||||||
DISCFLAG = 'S';
|
DISCFLAG = 'S';
|
||||||
|
|
||||||
HOSTSESS->HOSTFLAGS &= 0x9F; // Clear Flags
|
HOSTSESS->HOSTFLAGS &= 0x9F; // Clear Flags
|
||||||
|
|
||||||
Session = HOSTSESS->HOSTSESSION;
|
Session = HOSTSESS->HOSTSESSION;
|
||||||
|
|
||||||
if (Session == 0) // Gone??
|
if (Session == 0) // Gone??
|
||||||
{
|
{
|
||||||
HOSTSESS->HOSTFLAGS |= 3; // STATE CHANGE
|
HOSTSESS->HOSTFLAGS |= 3; // STATE CHANGE
|
||||||
#ifndef LINBPQ
|
#ifndef LINBPQ
|
||||||
if (HOSTSESS->HOSTHANDLE);
|
if (HOSTSESS->HOSTHANDLE);
|
||||||
{
|
{
|
||||||
PostMessage(HOSTSESS->HOSTHANDLE, BPQMsg, HOSTSESS->HOSTSTREAM, 4);
|
PostMessage(HOSTSESS->HOSTHANDLE, BPQMsg, HOSTSESS->HOSTSTREAM, 4);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Session->L4CROSSLINK)
|
if (Session->L4CROSSLINK)
|
||||||
Session->L4CROSSLINK->STAYFLAG = DISCFLAG;
|
Session->L4CROSSLINK->STAYFLAG = DISCFLAG;
|
||||||
|
|
||||||
HOSTSESS->HOSTSESSION = 0;
|
HOSTSESS->HOSTSESSION = 0;
|
||||||
HOSTSESS->HOSTFLAGS |= 3; // STATE CHANGE
|
HOSTSESS->HOSTFLAGS |= 3; // STATE CHANGE
|
||||||
|
|
||||||
PostStateChange(Session);
|
PostStateChange(Session);
|
||||||
|
|
||||||
CloseSessionPartner(Session); // SEND CLOSE TO PARTNER (IF PRESENT)
|
CloseSessionPartner(Session); // SEND CLOSE TO PARTNER (IF PRESENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check Trace Q
|
// Check Trace Q
|
||||||
|
|
||||||
if (HOSTSESS->HOSTAPPLFLAGS & 0x80)
|
if (HOSTSESS->HOSTAPPLFLAGS & 0x80)
|
||||||
{
|
{
|
||||||
if (HOSTSESS->HOSTTRACEQ)
|
if (HOSTSESS->HOSTTRACEQ)
|
||||||
{
|
{
|
||||||
int Count = C_Q_COUNT(&HOSTSESS->HOSTTRACEQ);
|
int Count = C_Q_COUNT(&HOSTSESS->HOSTTRACEQ);
|
||||||
|
|
||||||
if (Count > 100)
|
if (Count > 100)
|
||||||
ReleaseBuffer((void *)Q_REM((void *)&HOSTSESS->HOSTTRACEQ));
|
ReleaseBuffer((void *)Q_REM((void *)&HOSTSESS->HOSTTRACEQ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
HOSTSESS++;
|
HOSTSESS++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID SendSmartID(struct PORTCONTROL * PORT)
|
VOID SendSmartID(struct PORTCONTROL * PORT)
|
||||||
{
|
{
|
||||||
struct _MESSAGE * ID = IDMSG;
|
struct _MESSAGE * ID = IDMSG;
|
||||||
struct _MESSAGE * Buffer;
|
struct _MESSAGE * Buffer;
|
||||||
|
|
||||||
PORT->SmartIDNeeded = 0;
|
PORT->SmartIDNeeded = 0;
|
||||||
|
|
||||||
Buffer = GetBuff();
|
Buffer = GetBuff();
|
||||||
|
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
{
|
{
|
||||||
memcpy(Buffer, ID, ID->LENGTH);
|
memcpy(Buffer, ID, ID->LENGTH);
|
||||||
|
|
||||||
Buffer->PORT = PORT->PORTNUMBER;
|
Buffer->PORT = PORT->PORTNUMBER;
|
||||||
|
|
||||||
// IF PORT HAS A CALLSIGN DEFINED, SEND THAT INSTEAD
|
// IF PORT HAS A CALLSIGN DEFINED, SEND THAT INSTEAD
|
||||||
|
|
||||||
if (PORT->PORTCALL[0] > 0x40)
|
if (PORT->PORTCALL[0] > 0x40)
|
||||||
{
|
{
|
||||||
memcpy(Buffer->ORIGIN, PORT->PORTCALL, 7);
|
memcpy(Buffer->ORIGIN, PORT->PORTCALL, 7);
|
||||||
Buffer->ORIGIN[6] |= 1; // SET END OF CALL BIT
|
Buffer->ORIGIN[6] |= 1; // SET END OF CALL BIT
|
||||||
}
|
}
|
||||||
|
|
||||||
// If Pactor Style add to UI_Q
|
// If Pactor Style add to UI_Q
|
||||||
|
|
||||||
if (PORT->PROTOCOL == 10 && PORT->TNC && PORT->TNC->Hardware != H_KISSHF && PORT->UICAPABLE)
|
if (PORT->PROTOCOL == 10 && PORT->TNC && PORT->TNC->Hardware != H_KISSHF && PORT->UICAPABLE)
|
||||||
{
|
{
|
||||||
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
|
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
|
||||||
|
|
||||||
C_Q_ADD(&EXTPORT->UI_Q, Buffer);
|
C_Q_ADD(&EXTPORT->UI_Q, Buffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PUT_ON_PORT_Q(PORT, Buffer);
|
PUT_ON_PORT_Q(PORT, Buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID SENDIDMSG()
|
VOID SENDIDMSG()
|
||||||
{
|
{
|
||||||
struct PORTCONTROL * PORT = PORTTABLE;
|
struct PORTCONTROL * PORT = PORTTABLE;
|
||||||
struct _MESSAGE * ID = IDMSG;
|
struct _MESSAGE * ID = IDMSG;
|
||||||
struct _MESSAGE * Buffer;
|
struct _MESSAGE * Buffer;
|
||||||
|
|
||||||
while (PORT)
|
while (PORT)
|
||||||
{
|
{
|
||||||
if (PORT->PROTOCOL < 10) // Not Pactor-style
|
if (PORT->PROTOCOL < 10) // Not Pactor-style
|
||||||
{
|
{
|
||||||
Buffer = GetBuff();
|
Buffer = GetBuff();
|
||||||
|
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
{
|
{
|
||||||
memcpy(Buffer, ID, ID->LENGTH);
|
memcpy(Buffer, ID, ID->LENGTH);
|
||||||
|
|
||||||
Buffer->PORT = PORT->PORTNUMBER;
|
Buffer->PORT = PORT->PORTNUMBER;
|
||||||
|
|
||||||
// IF PORT HAS A CALLSIGN DEFINED, SEND THAT INSTEAD
|
// IF PORT HAS A CALLSIGN DEFINED, SEND THAT INSTEAD
|
||||||
|
|
||||||
if (PORT->PORTCALL[0] > 0x40)
|
if (PORT->PORTCALL[0] > 0x40)
|
||||||
{
|
{
|
||||||
memcpy(Buffer->ORIGIN, PORT->PORTCALL, 7);
|
memcpy(Buffer->ORIGIN, PORT->PORTCALL, 7);
|
||||||
Buffer->ORIGIN[6] |= 1; // SET END OF CALL BIT
|
Buffer->ORIGIN[6] |= 1; // SET END OF CALL BIT
|
||||||
}
|
}
|
||||||
C_Q_ADD(&IDMSG_Q, Buffer);
|
C_Q_ADD(&IDMSG_Q, Buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PORT = PORT->PORTPOINTER;
|
PORT = PORT->PORTPOINTER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VOID SENDBTMSG()
|
VOID SENDBTMSG()
|
||||||
{
|
{
|
||||||
struct PORTCONTROL * PORT = PORTTABLE;
|
struct PORTCONTROL * PORT = PORTTABLE;
|
||||||
struct _MESSAGE * Buffer;
|
struct _MESSAGE * Buffer;
|
||||||
char * ptr1, * ptr2;
|
char * ptr1, * ptr2;
|
||||||
|
|
||||||
while (PORT)
|
while (PORT)
|
||||||
{
|
{
|
||||||
if (PORT->PROTOCOL >= 10 || PORT->PORTUNPROTO == 0) // Pactor-style or no UNPROTO ADDR?
|
if (PORT->PROTOCOL >= 10 || PORT->PORTUNPROTO == 0) // Pactor-style or no UNPROTO ADDR?
|
||||||
{
|
{
|
||||||
PORT = PORT->PORTPOINTER;
|
PORT = PORT->PORTPOINTER;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer = GetBuff();
|
Buffer = GetBuff();
|
||||||
|
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
{
|
{
|
||||||
memcpy(Buffer->DEST, PORT->PORTUNPROTO, 7);
|
memcpy(Buffer->DEST, PORT->PORTUNPROTO, 7);
|
||||||
Buffer->DEST[6] |= 0xC0; // Set Command bits
|
Buffer->DEST[6] |= 0xC0; // Set Command bits
|
||||||
|
|
||||||
// Send from BBSCALL unless PORTBCALL defined
|
// Send from BBSCALL unless PORTBCALL defined
|
||||||
|
|
||||||
if (PORT->PORTBCALL[0] > 32)
|
if (PORT->PORTBCALL[0] > 32)
|
||||||
memcpy(Buffer->ORIGIN, PORT->PORTBCALL, 7);
|
memcpy(Buffer->ORIGIN, PORT->PORTBCALL, 7);
|
||||||
else if (APPLCALLTABLE->APPLCALL[0] > 32)
|
else if (APPLCALLTABLE->APPLCALL[0] > 32)
|
||||||
memcpy(Buffer->ORIGIN, APPLCALLTABLE->APPLCALL, 7);
|
memcpy(Buffer->ORIGIN, APPLCALLTABLE->APPLCALL, 7);
|
||||||
else
|
else
|
||||||
memcpy(Buffer->ORIGIN, MYCALL, 7);
|
memcpy(Buffer->ORIGIN, MYCALL, 7);
|
||||||
|
|
||||||
ptr1 = &PORT->PORTUNPROTO[7]; // First Digi
|
ptr1 = &PORT->PORTUNPROTO[7]; // First Digi
|
||||||
ptr2 = &Buffer->CTL; // Digi field in buffer
|
ptr2 = &Buffer->CTL; // Digi field in buffer
|
||||||
|
|
||||||
// Copy any digis
|
// Copy any digis
|
||||||
|
|
||||||
while (*(ptr1))
|
while (*(ptr1))
|
||||||
{
|
{
|
||||||
memcpy(ptr2, ptr1, 7);
|
memcpy(ptr2, ptr1, 7);
|
||||||
ptr1 += 7;
|
ptr1 += 7;
|
||||||
ptr2 += 7;
|
ptr2 += 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
*(ptr2 - 1) |= 1; // Set End of Address
|
*(ptr2 - 1) |= 1; // Set End of Address
|
||||||
*(ptr2++) = UI;
|
*(ptr2++) = UI;
|
||||||
|
|
||||||
memcpy(ptr2, &BTHDDR.PID, BTHDDR.LENGTH);
|
memcpy(ptr2, &BTHDDR.PID, BTHDDR.LENGTH);
|
||||||
ptr2 += BTHDDR.LENGTH;
|
ptr2 += BTHDDR.LENGTH;
|
||||||
Buffer->LENGTH = (int)(ptr2 - (char *)Buffer);
|
Buffer->LENGTH = (int)(ptr2 - (char *)Buffer);
|
||||||
Buffer->PORT = PORT->PORTNUMBER;
|
Buffer->PORT = PORT->PORTNUMBER;
|
||||||
|
|
||||||
C_Q_ADD(&IDMSG_Q, Buffer);
|
C_Q_ADD(&IDMSG_Q, Buffer);
|
||||||
}
|
}
|
||||||
PORT = PORT->PORTPOINTER;
|
PORT = PORT->PORTPOINTER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID SENDUIMESSAGE(struct DATAMESSAGE * Msg)
|
VOID SENDUIMESSAGE(struct DATAMESSAGE * Msg)
|
||||||
{
|
{
|
||||||
struct PORTCONTROL * PORT = PORTTABLE;
|
struct PORTCONTROL * PORT = PORTTABLE;
|
||||||
struct _MESSAGE * Buffer;
|
struct _MESSAGE * Buffer;
|
||||||
char * ptr1, * ptr2;
|
char * ptr1, * ptr2;
|
||||||
|
|
||||||
Msg->LENGTH -= MSGHDDRLEN; // Remove Header
|
Msg->LENGTH -= MSGHDDRLEN; // Remove Header
|
||||||
|
|
||||||
while (PORT)
|
while (PORT)
|
||||||
{
|
{
|
||||||
if ((PORT->PROTOCOL == 10 && PORT->UICAPABLE == 0) || PORT->PORTUNPROTO == 0) // Pactor-style or no UNPROTO ADDR?
|
if ((PORT->PROTOCOL == 10 && PORT->UICAPABLE == 0) || PORT->PORTUNPROTO == 0) // Pactor-style or no UNPROTO ADDR?
|
||||||
{
|
{
|
||||||
PORT = PORT->PORTPOINTER;
|
PORT = PORT->PORTPOINTER;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer = GetBuff();
|
Buffer = GetBuff();
|
||||||
|
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
{
|
{
|
||||||
memcpy(Buffer->DEST, PORT->PORTUNPROTO, 7);
|
memcpy(Buffer->DEST, PORT->PORTUNPROTO, 7);
|
||||||
Buffer->DEST[6] |= 0xC0; // Set Command bits
|
Buffer->DEST[6] |= 0xC0; // Set Command bits
|
||||||
|
|
||||||
// Send from BBSCALL unless PORTBCALL defined
|
// Send from BBSCALL unless PORTBCALL defined
|
||||||
|
|
||||||
if (PORT->PORTBCALL[0] > 32)
|
if (PORT->PORTBCALL[0] > 32)
|
||||||
memcpy(Buffer->ORIGIN, PORT->PORTBCALL, 7);
|
memcpy(Buffer->ORIGIN, PORT->PORTBCALL, 7);
|
||||||
else if (APPLCALLTABLE->APPLCALL[0] > 32)
|
else if (APPLCALLTABLE->APPLCALL[0] > 32)
|
||||||
memcpy(Buffer->ORIGIN, APPLCALLTABLE->APPLCALL, 7);
|
memcpy(Buffer->ORIGIN, APPLCALLTABLE->APPLCALL, 7);
|
||||||
else
|
else
|
||||||
memcpy(Buffer->ORIGIN, MYCALL, 7);
|
memcpy(Buffer->ORIGIN, MYCALL, 7);
|
||||||
|
|
||||||
ptr1 = &PORT->PORTUNPROTO[7]; // First Digi
|
ptr1 = &PORT->PORTUNPROTO[7]; // First Digi
|
||||||
ptr2 = &Buffer->CTL; // Digi field in buffer
|
ptr2 = &Buffer->CTL; // Digi field in buffer
|
||||||
|
|
||||||
// Copy any digis
|
// Copy any digis
|
||||||
|
|
||||||
while (*(ptr1))
|
while (*(ptr1))
|
||||||
{
|
{
|
||||||
memcpy(ptr2, ptr1, 7);
|
memcpy(ptr2, ptr1, 7);
|
||||||
ptr1 += 7;
|
ptr1 += 7;
|
||||||
ptr2 += 7;
|
ptr2 += 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
*(ptr2 - 1) |= 1; // Set End of Address
|
*(ptr2 - 1) |= 1; // Set End of Address
|
||||||
*(ptr2++) = UI;
|
*(ptr2++) = UI;
|
||||||
|
|
||||||
memcpy(ptr2, &Msg->PID, Msg->LENGTH);
|
memcpy(ptr2, &Msg->PID, Msg->LENGTH);
|
||||||
ptr2 += Msg->LENGTH;
|
ptr2 += Msg->LENGTH;
|
||||||
Buffer->LENGTH = (int)(ptr2 - (char *)Buffer);
|
Buffer->LENGTH = (int)(ptr2 - (char *)Buffer);
|
||||||
Buffer->PORT = PORT->PORTNUMBER;
|
Buffer->PORT = PORT->PORTNUMBER;
|
||||||
|
|
||||||
if (PORT->PROTOCOL == 10)
|
if (PORT->PROTOCOL == 10)
|
||||||
{
|
{
|
||||||
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
|
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
|
||||||
C_Q_ADD(&EXTPORT->UI_Q, Buffer);
|
C_Q_ADD(&EXTPORT->UI_Q, Buffer);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
C_Q_ADD(&IDMSG_Q, Buffer);
|
C_Q_ADD(&IDMSG_Q, Buffer);
|
||||||
}
|
}
|
||||||
PORT = PORT->PORTPOINTER;
|
PORT = PORT->PORTPOINTER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Dll VOID APIENTRY Send_AX(UCHAR * Block, DWORD Len, UCHAR Port)
|
Dll VOID APIENTRY Send_AX(UCHAR * Block, DWORD Len, UCHAR Port)
|
||||||
{
|
{
|
||||||
// Block included the 7/11 byte header, Len does not
|
// Block included the 7/11 byte header, Len does not
|
||||||
|
|
||||||
struct PORTCONTROL * PORT;
|
struct PORTCONTROL * PORT;
|
||||||
PMESSAGE Copy;
|
PMESSAGE Copy;
|
||||||
|
|
||||||
if (Len > 360 - 15)
|
if (Len > 360 - 15)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (QCOUNT < 50)
|
if (QCOUNT < 50)
|
||||||
return; // Running low
|
return; // Running low
|
||||||
|
|
||||||
PORT = GetPortTableEntryFromPortNum(Port);
|
PORT = GetPortTableEntryFromPortNum(Port);
|
||||||
|
|
||||||
if (PORT == 0)
|
if (PORT == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Copy = GetBuff();
|
Copy = GetBuff();
|
||||||
|
|
||||||
if (Copy == 0)
|
if (Copy == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
memcpy(&Copy->DEST[0], &Block[MSGHDDRLEN], Len);
|
memcpy(&Copy->DEST[0], &Block[MSGHDDRLEN], Len);
|
||||||
|
|
||||||
Copy->LENGTH = (USHORT)Len + MSGHDDRLEN;
|
Copy->LENGTH = (USHORT)Len + MSGHDDRLEN;
|
||||||
|
|
||||||
if (PORT->PROTOCOL == 10 && PORT->TNC && PORT->TNC->Hardware != H_KISSHF)
|
if (PORT->PROTOCOL == 10 && PORT->TNC && PORT->TNC->Hardware != H_KISSHF)
|
||||||
{
|
{
|
||||||
// Pactor Style. Probably will only be used for Tracker uneless we do APRS over V4 or WINMOR
|
// Pactor Style. Probably will only be used for Tracker uneless we do APRS over V4 or WINMOR
|
||||||
|
|
||||||
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
|
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
|
||||||
|
|
||||||
if (EXTPORT->UI_Q)
|
if (EXTPORT->UI_Q)
|
||||||
C_Q_ADD(&EXTPORT->UI_Q, Copy);
|
C_Q_ADD(&EXTPORT->UI_Q, Copy);
|
||||||
else
|
else
|
||||||
C_Q_ADD(&EXTPORT->UI_Q, Copy);
|
C_Q_ADD(&EXTPORT->UI_Q, Copy);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Copy->PORT = Port;
|
Copy->PORT = Port;
|
||||||
|
|
||||||
PUT_ON_PORT_Q(PORT, Copy);
|
PUT_ON_PORT_Q(PORT, Copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TRANSPORTENTRY * SetupSessionFromHost(PBPQVECSTRUC HOST, UINT ApplMask)
|
TRANSPORTENTRY * SetupSessionFromHost(PBPQVECSTRUC HOST, UINT ApplMask)
|
||||||
{
|
{
|
||||||
// Create a Transport (L4) session linked to an incoming HOST (API) Session
|
// Create a Transport (L4) session linked to an incoming HOST (API) Session
|
||||||
|
|
||||||
TRANSPORTENTRY * NewSess = L4TABLE;
|
TRANSPORTENTRY * NewSess = L4TABLE;
|
||||||
int Index = 0;
|
int Index = 0;
|
||||||
|
|
||||||
|
|
||||||
while (Index < MAXCIRCUITS)
|
while (Index < MAXCIRCUITS)
|
||||||
{
|
{
|
||||||
if (NewSess->L4USER[0] == 0)
|
if (NewSess->L4USER[0] == 0)
|
||||||
{
|
{
|
||||||
// Got One
|
// Got One
|
||||||
|
|
||||||
UCHAR * ourcall = &MYCALL[0];
|
UCHAR * ourcall = &MYCALL[0];
|
||||||
|
|
||||||
// IF APPL PORT USE APPL CALL, ELSE NODE CALL
|
// IF APPL PORT USE APPL CALL, ELSE NODE CALL
|
||||||
|
|
||||||
if (ApplMask)
|
if (ApplMask)
|
||||||
{
|
{
|
||||||
// Circuit for APPL - look for an APPLCALL
|
// Circuit for APPL - look for an APPLCALL
|
||||||
|
|
||||||
APPLCALLS * APPL = APPLCALLTABLE;
|
APPLCALLS * APPL = APPLCALLTABLE;
|
||||||
|
|
||||||
while ((ApplMask & 1) == 0)
|
while ((ApplMask & 1) == 0)
|
||||||
{
|
{
|
||||||
ApplMask >>= 1;
|
ApplMask >>= 1;
|
||||||
APPL++;
|
APPL++;
|
||||||
}
|
}
|
||||||
if (APPL->APPLCALL[0] > 0x40) // We have an applcall
|
if (APPL->APPLCALL[0] > 0x40) // We have an applcall
|
||||||
ourcall = &APPL->APPLCALL[0];
|
ourcall = &APPL->APPLCALL[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(NewSess->L4USER, ourcall, 7);
|
memcpy(NewSess->L4USER, ourcall, 7);
|
||||||
memcpy(NewSess->L4MYCALL, ourcall, 7);
|
memcpy(NewSess->L4MYCALL, ourcall, 7);
|
||||||
|
|
||||||
NewSess->CIRCUITINDEX = Index; //OUR INDEX
|
NewSess->CIRCUITINDEX = Index; //OUR INDEX
|
||||||
NewSess->CIRCUITID = NEXTID;
|
NewSess->CIRCUITID = NEXTID;
|
||||||
|
|
||||||
NEXTID++;
|
NEXTID++;
|
||||||
if (NEXTID == 0)
|
if (NEXTID == 0)
|
||||||
NEXTID++; // Keep Non-Zero
|
NEXTID++; // Keep Non-Zero
|
||||||
|
|
||||||
NewSess->L4TARGET.HOST = HOST;
|
NewSess->L4TARGET.HOST = HOST;
|
||||||
NewSess->L4STATE = 5;
|
NewSess->L4STATE = 5;
|
||||||
|
|
||||||
|
|
||||||
NewSess->SESSIONT1 = L4T1;
|
NewSess->SESSIONT1 = L4T1;
|
||||||
NewSess->L4WINDOW = (UCHAR)L4DEFAULTWINDOW;
|
NewSess->L4WINDOW = (UCHAR)L4DEFAULTWINDOW;
|
||||||
NewSess->SESSPACLEN = PACLEN; // Default;
|
NewSess->SESSPACLEN = PACLEN; // Default;
|
||||||
|
|
||||||
return NewSess;
|
return NewSess;
|
||||||
}
|
}
|
||||||
Index++;
|
Index++;
|
||||||
NewSess++;
|
NewSess++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Table Full
|
// Table Full
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,217 +1,217 @@
|
|||||||
// Includes code from MiniUPnPc, used subject to the following conditions:
|
// Includes code from MiniUPnPc, used subject to the following conditions:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
MiniUPnPc
|
MiniUPnPc
|
||||||
Copyright (c) 2005-2020, Thomas BERNARD
|
Copyright (c) 2005-2020, Thomas BERNARD
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are met:
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
this list of conditions and the following disclaimer.
|
this list of conditions and the following disclaimer.
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
this list of conditions and the following disclaimer in the documentation
|
this list of conditions and the following disclaimer in the documentation
|
||||||
and/or other materials provided with the distribution.
|
and/or other materials provided with the distribution.
|
||||||
* The name of the author may not be used to endorse or promote products
|
* The name of the author may not be used to endorse or promote products
|
||||||
derived from this software without specific prior written permission.
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
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
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MINIUPNP_STATICLIB
|
#define MINIUPNP_STATICLIB
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "upnpcommands.h"
|
#include "upnpcommands.h"
|
||||||
#include "miniupnpc.h"
|
#include "miniupnpc.h"
|
||||||
#include "upnperrors.h"
|
#include "upnperrors.h"
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINBPQ
|
#ifdef LINBPQ
|
||||||
#ifndef MACBPQ
|
#ifndef MACBPQ
|
||||||
#ifndef WIN32
|
#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
|
||||||
#endif
|
#endif
|
||||||
#ifdef MACBPQ
|
#ifdef MACBPQ
|
||||||
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnpcommands.h>
|
#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/miniupnpc.h>
|
||||||
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnperrors.h>
|
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnperrors.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#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);
|
||||||
|
|
||||||
void Consoleprintf(const char * format, ...);
|
void Consoleprintf(const char * format, ...);
|
||||||
|
|
||||||
struct UPNP
|
struct UPNP
|
||||||
{
|
{
|
||||||
struct UPNP * Next;
|
struct UPNP * Next;
|
||||||
char * Protocol;
|
char * Protocol;
|
||||||
char * LANport;
|
char * LANport;
|
||||||
char * WANPort;
|
char * WANPort;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct UPNP * UPNPConfig;
|
extern struct UPNP * UPNPConfig;
|
||||||
|
|
||||||
char * controlURL = 0;
|
char * controlURL = 0;
|
||||||
char * servicetype = 0;
|
char * servicetype = 0;
|
||||||
char iaddr[] = "IP";
|
char iaddr[] = "IP";
|
||||||
char * inClient = NULL;
|
char * inClient = NULL;
|
||||||
#ifdef LINBPQ
|
#ifdef LINBPQ
|
||||||
char desc[] = "LinBPQ ";
|
char desc[] = "LinBPQ ";
|
||||||
#else
|
#else
|
||||||
char desc[] = "BPQ32 ";
|
char desc[] = "BPQ32 ";
|
||||||
#endif
|
#endif
|
||||||
char * remoteHost = NULL;
|
char * remoteHost = NULL;
|
||||||
char * leaseDuration = NULL;
|
char * leaseDuration = NULL;
|
||||||
|
|
||||||
struct UPNPDev * devlist = 0;
|
struct UPNPDev * devlist = 0;
|
||||||
char lanaddr[64] = "unset"; /* my ip address on the LAN */
|
char lanaddr[64] = "unset"; /* my ip address on the LAN */
|
||||||
char wanaddr[64] = "unset"; /* my ip address on the LAN */
|
char wanaddr[64] = "unset"; /* my ip address on the LAN */
|
||||||
struct UPNPUrls urls;
|
struct UPNPUrls urls;
|
||||||
struct IGDdatas data;
|
struct IGDdatas data;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
const char * rootdescurl = 0;
|
const char * rootdescurl = 0;
|
||||||
const char * multicastif = 0;
|
const char * multicastif = 0;
|
||||||
const char * minissdpdpath = 0;
|
const char * minissdpdpath = 0;
|
||||||
#ifdef UPNP_LOCAL_PORT_ANY
|
#ifdef UPNP_LOCAL_PORT_ANY
|
||||||
int localport = UPNP_LOCAL_PORT_ANY;
|
int localport = UPNP_LOCAL_PORT_ANY;
|
||||||
#else
|
#else
|
||||||
#pragma message "API 10"
|
#pragma message "API 10"
|
||||||
int localport = 0;
|
int localport = 0;
|
||||||
#endif
|
#endif
|
||||||
int retcode = 0;
|
int retcode = 0;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
int ipv6 = 0;
|
int ipv6 = 0;
|
||||||
int ignore = 0;
|
int ignore = 0;
|
||||||
unsigned char ttl = 2;
|
unsigned char ttl = 2;
|
||||||
|
|
||||||
|
|
||||||
int upnpInit()
|
int upnpInit()
|
||||||
{
|
{
|
||||||
struct UPNP * Config = UPNPConfig;
|
struct UPNP * Config = UPNPConfig;
|
||||||
int i;
|
int i;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
int nResult = WSAStartup(MAKEWORD(2,2), &wsaData);
|
int nResult = WSAStartup(MAKEWORD(2,2), &wsaData);
|
||||||
if(nResult != NO_ERROR)
|
if(nResult != NO_ERROR)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "WSAStartup() failed.\n");
|
fprintf(stderr, "WSAStartup() failed.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (Config)
|
while (Config)
|
||||||
{
|
{
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
#if MINIUPNPC_API_VERSION == 10
|
#if MINIUPNPC_API_VERSION == 10
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
||||||
#else
|
#else
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
||||||
#endif
|
#endif
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
Consoleprintf("Failed to find a UPNP device");
|
Consoleprintf("Failed to find a UPNP device");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MINIUPNPC_API_VERSION == 18
|
#if MINIUPNPC_API_VERSION == 18
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
||||||
#else
|
#else
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
AddMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
AddMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
||||||
Config = Config->Next;
|
Config = Config->Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int upnpClose()
|
int upnpClose()
|
||||||
{
|
{
|
||||||
struct UPNP * Config = UPNPConfig;
|
struct UPNP * Config = UPNPConfig;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
while (Config)
|
while (Config)
|
||||||
{
|
{
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
#if MINIUPNPC_API_VERSION == 10
|
#if MINIUPNPC_API_VERSION == 10
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
||||||
#else
|
#else
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
||||||
#endif
|
#endif
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
Consoleprintf("Failed to find a UPNP device");
|
Consoleprintf("Failed to find a UPNP device");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MINIUPNPC_API_VERSION == 18
|
#if MINIUPNPC_API_VERSION == 18
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
||||||
#else
|
#else
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DeleteMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
DeleteMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
||||||
Config = Config->Next;
|
Config = Config->Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AddMap(char * controlURL, char * eport, char * iport, char * proto)
|
int AddMap(char * controlURL, char * eport, char * iport, char * proto)
|
||||||
{
|
{
|
||||||
int r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
|
int r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
|
||||||
eport, iport, lanaddr, desc,
|
eport, iport, lanaddr, desc,
|
||||||
proto, remoteHost, leaseDuration);
|
proto, remoteHost, leaseDuration);
|
||||||
|
|
||||||
if (r != UPNPCOMMAND_SUCCESS)
|
if (r != UPNPCOMMAND_SUCCESS)
|
||||||
{
|
{
|
||||||
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DeleteMap(char * controlURL, char * eport, char * iport, char * proto)
|
int DeleteMap(char * controlURL, char * eport, char * iport, char * proto)
|
||||||
{
|
{
|
||||||
int r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, proto, remoteHost);
|
int r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, proto, remoteHost);
|
||||||
|
|
||||||
if(r != UPNPCOMMAND_SUCCESS)
|
if(r != UPNPCOMMAND_SUCCESS)
|
||||||
{
|
{
|
||||||
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,207 @@
|
|||||||
|
|
||||||
|
#ifndef CONFIGSTRUCT
|
||||||
|
#define CONFIGSTRUCT
|
||||||
|
|
||||||
|
|
||||||
|
// MAKE SURE SHORTS ARE CORRECTLY ALLIGNED FOR ARMV5
|
||||||
|
|
||||||
|
struct PORTCONFIG
|
||||||
|
{
|
||||||
|
short PORTNUM;
|
||||||
|
char ID[30]; //2
|
||||||
|
short TYPE; // 32,
|
||||||
|
short PROTOCOL; // 34,
|
||||||
|
short IOADDR; // 36,
|
||||||
|
short INTLEVEL; // 38,
|
||||||
|
unsigned short SPEED; // 40,
|
||||||
|
unsigned char CHANNEL; // 42,
|
||||||
|
unsigned char pad;
|
||||||
|
short BBSFLAG; // 44,
|
||||||
|
short QUALITY; // 46,
|
||||||
|
short MAXFRAME; // 48,
|
||||||
|
short TXDELAY; // 50,
|
||||||
|
short SLOTTIME; // 52,
|
||||||
|
short PERSIST; // 54,
|
||||||
|
|
||||||
|
short FULLDUP; // 56,
|
||||||
|
short SOFTDCD; // 58,
|
||||||
|
short FRACK; // 60,
|
||||||
|
short RESPTIME; // 62,
|
||||||
|
short RETRIES; // 64,
|
||||||
|
|
||||||
|
short PACLEN; // 66,
|
||||||
|
short QUALADJUST; // 68,
|
||||||
|
UCHAR DIGIFLAG; // 70,
|
||||||
|
UCHAR DIGIPORT; // 71
|
||||||
|
short DIGIMASK; // 72
|
||||||
|
short USERS; // 74,
|
||||||
|
short TXTAIL; // 76
|
||||||
|
unsigned char ALIAS_IS_BBS; // 78
|
||||||
|
unsigned char pad2;
|
||||||
|
char CWID[10]; // 80,
|
||||||
|
char PORTCALL[10]; // 90,
|
||||||
|
char PORTALIAS[10]; // 100,
|
||||||
|
char L3ONLY; // 110,
|
||||||
|
char IGNOREUNLOCKED; // 111
|
||||||
|
short KISSOPTIONS; // 112,
|
||||||
|
short INTERLOCK; // 114,
|
||||||
|
short NODESPACLEN; // 116,
|
||||||
|
short TXPORT; // 118,
|
||||||
|
UCHAR MHEARD; // 120,
|
||||||
|
UCHAR CWIDTYPE; // 121,
|
||||||
|
char MINQUAL; // 122,
|
||||||
|
char MAXDIGIS; // 123,
|
||||||
|
char DefaultNoKeepAlives; // 124
|
||||||
|
char UIONLY; // 125,
|
||||||
|
unsigned short ListenPort; // 126
|
||||||
|
char UNPROTO[72]; // 128,
|
||||||
|
char PORTALIAS2[10]; // 200,
|
||||||
|
char DLLNAME[16]; // 210,
|
||||||
|
char BCALL[10]; // 226,
|
||||||
|
unsigned long IPADDR; // 236
|
||||||
|
char I2CMode; // 240
|
||||||
|
char I2CAddr; // 241
|
||||||
|
char INP3ONLY; // 242
|
||||||
|
char NoNormalize; // 243 Normalise Nodes Qualities
|
||||||
|
unsigned short TCPPORT; // 244
|
||||||
|
char Pad2[10]; // 246
|
||||||
|
char VALIDCALLS[256]; // 256 - 512
|
||||||
|
struct WL2KInfo * WL2K; // 512
|
||||||
|
char * SerialPortName; // 516
|
||||||
|
struct XDIGI * XDIGIS; // 596 Cross port digi setup
|
||||||
|
int RIGPORT; // Linked port with RigControl
|
||||||
|
unsigned int PERMITTEDAPPLS; // Appls allowed on this port
|
||||||
|
int HavePermittedAppls; // Indicated PERMITTEDAPPLS uses
|
||||||
|
int Hide; // Don't show on Ports display or AGW Connect Menu
|
||||||
|
// long long txOffset; // Transverter tx offset
|
||||||
|
// long long rxOffset; // Transverter rx offset ppa
|
||||||
|
int SmartID;
|
||||||
|
unsigned char * KissParams;
|
||||||
|
int SendtoM0LTEMap;
|
||||||
|
uint64_t PortFreq;
|
||||||
|
char * M0LTEMapInfo;
|
||||||
|
int QtSMPort;
|
||||||
|
int AllowINP3;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ROUTECONFIG
|
||||||
|
{
|
||||||
|
char call[80]; // May have VIA
|
||||||
|
int quality;
|
||||||
|
int port;
|
||||||
|
int pwind;
|
||||||
|
int pfrack;
|
||||||
|
int ppacl;
|
||||||
|
int farQual;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CONFIGTABLE
|
||||||
|
{
|
||||||
|
// CONFIGURATION DATA STRUCTURE
|
||||||
|
|
||||||
|
// DEFINES LAYOUT OF CONFIG RECORD PRODUCED BY CONFIGURATION PROG
|
||||||
|
|
||||||
|
char C_NODECALL[10]; // OFFSET = 0
|
||||||
|
char C_NODEALIAS[10]; // OFFSET = 10
|
||||||
|
char C_BBSCALL[10]; // OFFSET = 20
|
||||||
|
char C_BBSALIAS[10]; // OFFSET = 30
|
||||||
|
|
||||||
|
short C_OBSINIT; // OFFSET = 40
|
||||||
|
short C_OBSMIN; // OFFSET = 42
|
||||||
|
short C_NODESINTERVAL; // OFFSET = 44
|
||||||
|
short C_L3TIMETOLIVE; // OFFSET = 46
|
||||||
|
short C_L4RETRIES; // OFFSET = 48
|
||||||
|
short C_L4TIMEOUT; // OFFSET = 50
|
||||||
|
short C_BUFFERS; // OFFSET = 52
|
||||||
|
short C_PACLEN; // OFFSET = 54
|
||||||
|
short C_TRANSDELAY; // OFFSET = 56
|
||||||
|
short C_T3; // OFFSET = 58
|
||||||
|
short Spare1; // OFFSET = 60
|
||||||
|
short Spare2; // OFFSET = 62
|
||||||
|
short C_IDLETIME; // OFFSET = 64
|
||||||
|
UCHAR C_EMSFLAG; // OFFSET = 66
|
||||||
|
UCHAR C_LINKEDFLAG; // OFFSET = 67
|
||||||
|
UCHAR C_BBS; // OFFSET = 68
|
||||||
|
UCHAR C_NODE; // OFFSET = 69
|
||||||
|
UCHAR C_HOSTINTERRUPT; // OFFSET = 70
|
||||||
|
UCHAR C_DESQVIEW; // OFFSET = 71
|
||||||
|
short C_MAXLINKS; // OFFSET = 72
|
||||||
|
short C_MAXDESTS;
|
||||||
|
short C_MAXNEIGHBOURS;
|
||||||
|
short C_MAXCIRCUITS; // 78
|
||||||
|
UCHAR C_TNCPORTLIST[16]; // OFFSET = 80
|
||||||
|
short C_IDINTERVAL; // 96
|
||||||
|
short C_FULLCTEXT; // 98 ; SPARE (WAS DIGIFLAG)
|
||||||
|
short C_MINQUAL; // 100
|
||||||
|
UCHAR C_HIDENODES; // 102
|
||||||
|
UCHAR C_AUTOSAVE; // 103
|
||||||
|
short C_L4DELAY; // 104
|
||||||
|
short C_L4WINDOW; // 106
|
||||||
|
short C_BTINTERVAL; // 108
|
||||||
|
UCHAR C_L4APPL; // 110
|
||||||
|
UCHAR C_C; // 111 "C" = HOST Command Enabled
|
||||||
|
UCHAR C_IP; // 112 IP Enabled
|
||||||
|
UCHAR C_MAXRTT; // 113
|
||||||
|
UCHAR C_MAXHOPS; // 114
|
||||||
|
UCHAR C_PM; // 115 Poermapper Enabled
|
||||||
|
UCHAR C_LogL4Connects; // 116
|
||||||
|
UCHAR C_SaveMH; // 117
|
||||||
|
short C_BBSQUAL; // 118
|
||||||
|
UCHAR C_WASUNPROTO;
|
||||||
|
UCHAR C_BTEXT[120]; // 121
|
||||||
|
char C_VERSTRING[10]; // 241 Version String from Config File
|
||||||
|
UCHAR C_ADIF;
|
||||||
|
UCHAR C_EVENTS;
|
||||||
|
UCHAR C_LogAllConnects;
|
||||||
|
UCHAR C_SaveAPRSMsgs;
|
||||||
|
UCHAR C_M0LTEMap;
|
||||||
|
UCHAR C_VERSION; // CONFIG PROG VERSION
|
||||||
|
// Reuse C_APPLICATIONS - no longer used
|
||||||
|
char C_NETROMCALL[10];
|
||||||
|
UCHAR C_EXCLUDE[71];
|
||||||
|
char C_IDMSG[512];
|
||||||
|
char C_CTEXT[512];
|
||||||
|
char C_INFOMSG[2048];
|
||||||
|
UCHAR CfgBridgeMap[MaxBPQPortNo + 1][MaxBPQPortNo + 1];
|
||||||
|
struct ROUTECONFIG C_ROUTE[MaxLockedRoutes];
|
||||||
|
struct APPLCONFIG C_APPL[NumberofAppls];
|
||||||
|
struct PORTCONFIG C_PORT[MaxBPQPortNo + 4];
|
||||||
|
int C_MQTT;
|
||||||
|
char C_MQTT_HOST[80];
|
||||||
|
int C_MQTT_PORT;
|
||||||
|
char C_MQTT_USER[80];
|
||||||
|
char C_MQTT_PASS[80];
|
||||||
|
int C_L4Compress;
|
||||||
|
int C_L4CompMaxframe;
|
||||||
|
int C_L4CompPaclen;
|
||||||
|
int C_L2Compress;
|
||||||
|
int C_L2CompMaxframe;
|
||||||
|
int C_L2CompPaclen;
|
||||||
|
int C_PREFERINP3ROUTES;
|
||||||
|
int C_OnlyVer2point0;
|
||||||
|
|
||||||
|
|
||||||
|
//#define ApplOffset 80000 // Applications offset in config buffer
|
||||||
|
//#define InfoOffset 85000 // Infomsg offset in buffer
|
||||||
|
//#define InfoMax 2000 // Max Info
|
||||||
|
|
||||||
|
//#define C_IDMSG 512
|
||||||
|
//#define C_ROUTES 90000 // Allow 2500
|
||||||
|
//#define C_CTEXT 2048
|
||||||
|
//#define C_PORTS 2560
|
||||||
|
//#define C_INFOMSG 85000
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
struct UPNP
|
||||||
|
{
|
||||||
|
struct UPNP * Next;
|
||||||
|
char * Protocol;
|
||||||
|
char * LANport;
|
||||||
|
char * WANPort;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,434 +1,434 @@
|
|||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
|
||||||
#ifndef NOMQTT
|
#ifndef NOMQTT
|
||||||
|
|
||||||
#include "MQTTAsync.h"
|
#include "MQTTAsync.h"
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cheaders.h"
|
#include "cheaders.h"
|
||||||
#include "asmstrucs.h"
|
#include "asmstrucs.h"
|
||||||
#include "mqtt.h"
|
#include "mqtt.h"
|
||||||
|
|
||||||
extern int MQTT_Connecting;
|
extern int MQTT_Connecting;
|
||||||
extern int MQTT_Connected;
|
extern int MQTT_Connected;
|
||||||
|
|
||||||
|
|
||||||
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen);
|
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen);
|
||||||
|
|
||||||
MQTTAsync client = NULL;
|
MQTTAsync client = NULL;
|
||||||
|
|
||||||
time_t MQTTLastStatus = 0;
|
time_t MQTTLastStatus = 0;
|
||||||
|
|
||||||
void MQTTSendStatus()
|
void MQTTSendStatus()
|
||||||
{
|
{
|
||||||
char topic[256];
|
char topic[256];
|
||||||
char payload[128];
|
char payload[128];
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/%s", NODECALLLOPPED);
|
sprintf(topic, "PACKETNODE/%s", NODECALLLOPPED);
|
||||||
strcpy(payload,"{\"status\":\"online\"}");
|
strcpy(payload,"{\"status\":\"online\"}");
|
||||||
|
|
||||||
MQTTSend(topic, payload, strlen(payload));
|
MQTTSend(topic, payload, strlen(payload));
|
||||||
MQTTLastStatus = time(NULL);
|
MQTTLastStatus = time(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTTimer()
|
void MQTTTimer()
|
||||||
{
|
{
|
||||||
if (MQTT_Connecting == 0 && MQTT_Connected == 0)
|
if (MQTT_Connecting == 0 && MQTT_Connected == 0)
|
||||||
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
||||||
|
|
||||||
if ((time(NULL) - MQTTLastStatus) > 1800)
|
if ((time(NULL) - MQTTLastStatus) > 1800)
|
||||||
MQTTSendStatus();
|
MQTTSendStatus();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MQTTDisconnect()
|
void MQTTDisconnect()
|
||||||
{
|
{
|
||||||
if (MQTT_Connected)
|
if (MQTT_Connected)
|
||||||
{
|
{
|
||||||
MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
|
MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
|
||||||
|
|
||||||
MQTTAsync_disconnect(client, &disc_opts);
|
MQTTAsync_disconnect(client, &disc_opts);
|
||||||
|
|
||||||
MQTT_Connecting = MQTT_Connected = 0;
|
MQTT_Connecting = MQTT_Connected = 0;
|
||||||
|
|
||||||
// Try to recconect. If it fails system will rety every minute
|
// Try to recconect. If it fails system will rety every minute
|
||||||
|
|
||||||
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen)
|
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
|
|
||||||
pubmsg.payload = Msg;
|
pubmsg.payload = Msg;
|
||||||
pubmsg.payloadlen = MsgLen;
|
pubmsg.payloadlen = MsgLen;
|
||||||
rc = MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
rc = MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
||||||
|
|
||||||
if (rc)
|
if (rc)
|
||||||
MQTTDisconnect();
|
MQTTDisconnect();
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void onConnect(void* context, MQTTAsync_successData* response)
|
void onConnect(void* context, MQTTAsync_successData* response)
|
||||||
{
|
{
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
|
|
||||||
MQTT_Connecting = 0;
|
MQTT_Connecting = 0;
|
||||||
MQTT_Connected = 1;
|
MQTT_Connected = 1;
|
||||||
|
|
||||||
printf("Successful MQTT connection\n");
|
printf("Successful MQTT connection\n");
|
||||||
|
|
||||||
// Send start up message
|
// Send start up message
|
||||||
|
|
||||||
MQTTSendStatus();
|
MQTTSendStatus();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onConnectFailure(void* context, MQTTAsync_failureData* response)
|
void onConnectFailure(void* context, MQTTAsync_failureData* response)
|
||||||
{
|
{
|
||||||
printf("MQTT connection failed, rc %d\n", response ? response->code : 0);
|
printf("MQTT connection failed, rc %d\n", response ? response->code : 0);
|
||||||
MQTT_Connecting = 0;
|
MQTT_Connecting = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char* jsonEncodeMessage(MESSAGE *msg)
|
char* jsonEncodeMessage(MESSAGE *msg)
|
||||||
{
|
{
|
||||||
char From[10];
|
char From[10];
|
||||||
char To[10];
|
char To[10];
|
||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
unsigned long long SaveMMASK = MMASK;
|
unsigned long long SaveMMASK = MMASK;
|
||||||
BOOL SaveMTX = MTX;
|
BOOL SaveMTX = MTX;
|
||||||
BOOL SaveMCOM = MCOM;
|
BOOL SaveMCOM = MCOM;
|
||||||
BOOL SaveMUI = MUIONLY;
|
BOOL SaveMUI = MUIONLY;
|
||||||
int len;
|
int len;
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
char payload_timestamp[16];
|
char payload_timestamp[16];
|
||||||
|
|
||||||
struct tm * TM = localtime(&msg->Timestamp);
|
struct tm * TM = localtime(&msg->Timestamp);
|
||||||
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
||||||
|
|
||||||
|
|
||||||
IntSetTraceOptionsEx(MMASK, TRUE, TRUE, FALSE);
|
IntSetTraceOptionsEx(MMASK, TRUE, TRUE, FALSE);
|
||||||
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
||||||
To[ConvFromAX25(msg->DEST, To)] = 0;
|
To[ConvFromAX25(msg->DEST, To)] = 0;
|
||||||
|
|
||||||
len = IntDecodeFrame(msg, buffer, msg->Timestamp, 0xffffffffffffffff, FALSE, FALSE);
|
len = IntDecodeFrame(msg, buffer, msg->Timestamp, 0xffffffffffffffff, FALSE, FALSE);
|
||||||
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
||||||
|
|
||||||
buffer[len] = 0;
|
buffer[len] = 0;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
msg_str = zalloc(2048);
|
msg_str = zalloc(2048);
|
||||||
|
|
||||||
sprintf(msg_str, "{\"from\": \"%s\", \"to\": \"%s\", \"payload\": \"%s\", \"port\": %d, \"timestamp\": \"%s\"}",
|
sprintf(msg_str, "{\"from\": \"%s\", \"to\": \"%s\", \"payload\": \"%s\", \"port\": %d, \"timestamp\": \"%s\"}",
|
||||||
From, To, buffer, msg->PORT, payload_timestamp);
|
From, To, buffer, msg->PORT, payload_timestamp);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
json_t *root;
|
json_t *root;
|
||||||
|
|
||||||
root = json_object();
|
root = json_object();
|
||||||
|
|
||||||
json_object_set_new(root, "from", json_string(From));
|
json_object_set_new(root, "from", json_string(From));
|
||||||
json_object_set_new(root, "to", json_string(To));
|
json_object_set_new(root, "to", json_string(To));
|
||||||
|
|
||||||
|
|
||||||
json_object_set_new(root, "payload", json_string(buffer));
|
json_object_set_new(root, "payload", json_string(buffer));
|
||||||
json_object_set_new(root, "port", json_integer(msg->PORT));
|
json_object_set_new(root, "port", json_integer(msg->PORT));
|
||||||
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
||||||
json_object_set_new(root, "timestamp", json_string(payload_timestamp));
|
json_object_set_new(root, "timestamp", json_string(payload_timestamp));
|
||||||
msg_str = json_dumps(root, 0);
|
msg_str = json_dumps(root, 0);
|
||||||
json_decref(root);
|
json_decref(root);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return msg_str;
|
return msg_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSTX(void *message)
|
void MQTTKISSTX(void *message)
|
||||||
{
|
{
|
||||||
MESSAGE *msg = (MESSAGE *)message;
|
MESSAGE *msg = (MESSAGE *)message;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/sent/%d", NODECALLLOPPED, msg->PORT);
|
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/sent/%d", NODECALLLOPPED, msg->PORT);
|
||||||
|
|
||||||
msg_str = jsonEncodeMessage(msg);
|
msg_str = jsonEncodeMessage(msg);
|
||||||
|
|
||||||
MQTTSend(topic, msg_str, strlen(msg_str));
|
MQTTSend(topic, msg_str, strlen(msg_str));
|
||||||
|
|
||||||
free(msg_str);
|
free(msg_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT)
|
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT)
|
||||||
{
|
{
|
||||||
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/kiss/%s/sent/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
sprintf(topic, "PACKETNODE/kiss/%s/sent/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
||||||
|
|
||||||
MQTTSend(topic, buffer, bufferLength);
|
MQTTSend(topic, buffer, bufferLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MQTTKISSRX(void *message)
|
void MQTTKISSRX(void *message)
|
||||||
{
|
{
|
||||||
MESSAGE *msg = (MESSAGE *)message;
|
MESSAGE *msg = (MESSAGE *)message;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
|
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/rcvd/%d", NODECALLLOPPED, msg->PORT);
|
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/rcvd/%d", NODECALLLOPPED, msg->PORT);
|
||||||
msg_str = jsonEncodeMessage(msg);
|
msg_str = jsonEncodeMessage(msg);
|
||||||
|
|
||||||
MQTTSend(topic, msg_str, strlen(msg_str));
|
MQTTSend(topic, msg_str, strlen(msg_str));
|
||||||
|
|
||||||
free(msg_str);
|
free(msg_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT)
|
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT)
|
||||||
{
|
{
|
||||||
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/kiss/%s/rcvd/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
sprintf(topic, "PACKETNODE/kiss/%s/rcvd/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
||||||
|
|
||||||
MQTTSend(topic, buffer, bufferLength);
|
MQTTSend(topic, buffer, bufferLength);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTReportSession(char * Msg)
|
void MQTTReportSession(char * Msg)
|
||||||
{
|
{
|
||||||
char topic[256];
|
char topic[256];
|
||||||
sprintf(topic, "PACKETNODE/stats/session/%s", NODECALLLOPPED);
|
sprintf(topic, "PACKETNODE/stats/session/%s", NODECALLLOPPED);
|
||||||
|
|
||||||
MQTTSend(topic, Msg, strlen(Msg));
|
MQTTSend(topic, Msg, strlen(Msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char* replace(char* str, char* a, char* b)
|
char* replace(char* str, char* a, char* b)
|
||||||
{
|
{
|
||||||
int len = strlen(str);
|
int len = strlen(str);
|
||||||
int lena = strlen(a), lenb = strlen(b);
|
int lena = strlen(a), lenb = strlen(b);
|
||||||
char * p;
|
char * p;
|
||||||
|
|
||||||
for (p = str; p = strstr(p, a); p) {
|
for (p = str; p = strstr(p, a); p) {
|
||||||
if (lena != lenb) // shift end as needed
|
if (lena != lenb) // shift end as needed
|
||||||
memmove(p + lenb, p + lena,
|
memmove(p + lenb, p + lena,
|
||||||
len - (p - str) + lenb);
|
len - (p - str) + lenb);
|
||||||
memcpy(p, b, lenb);
|
memcpy(p, b, lenb);
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MQTTPublish(void *message, char *topic)
|
int MQTTPublish(void *message, char *topic)
|
||||||
{
|
{
|
||||||
MESSAGE *msg = (MESSAGE *)message;
|
MESSAGE *msg = (MESSAGE *)message;
|
||||||
char From[10];
|
char From[10];
|
||||||
char To[10];
|
char To[10];
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
|
|
||||||
unsigned long long SaveMMASK = MMASK;
|
unsigned long long SaveMMASK = MMASK;
|
||||||
BOOL SaveMTX = MTX;
|
BOOL SaveMTX = MTX;
|
||||||
BOOL SaveMCOM = MCOM;
|
BOOL SaveMCOM = MCOM;
|
||||||
BOOL SaveMUI = MUIONLY;
|
BOOL SaveMUI = MUIONLY;
|
||||||
int len;
|
int len;
|
||||||
char* replaced_buffer;
|
char* replaced_buffer;
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
|
|
||||||
time_t timestamp = msg->Timestamp;
|
time_t timestamp = msg->Timestamp;
|
||||||
|
|
||||||
|
|
||||||
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
||||||
To[ConvFromAX25(msg->DEST, To)] = 0;
|
To[ConvFromAX25(msg->DEST, To)] = 0;
|
||||||
|
|
||||||
|
|
||||||
IntSetTraceOptionsEx(8, TRUE, TRUE, FALSE);
|
IntSetTraceOptionsEx(8, TRUE, TRUE, FALSE);
|
||||||
len = IntDecodeFrame(msg, buffer, timestamp, 1, FALSE, FALSE);
|
len = IntDecodeFrame(msg, buffer, timestamp, 1, FALSE, FALSE);
|
||||||
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
||||||
|
|
||||||
// MQTT _really_ doesn't like \r, so replace it with something
|
// MQTT _really_ doesn't like \r, so replace it with something
|
||||||
// that is at least human readable
|
// that is at least human readable
|
||||||
|
|
||||||
replaced_buffer = replace(buffer, "\r", "\r\n");
|
replaced_buffer = replace(buffer, "\r", "\r\n");
|
||||||
|
|
||||||
pubmsg.payload = replaced_buffer;
|
pubmsg.payload = replaced_buffer;
|
||||||
pubmsg.payloadlen = strlen(replaced_buffer);
|
pubmsg.payloadlen = strlen(replaced_buffer);
|
||||||
|
|
||||||
printf("%s\n", replaced_buffer);
|
printf("%s\n", replaced_buffer);
|
||||||
|
|
||||||
return MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
return MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
int MQTTConnect(char* host, int port, char* user, char* pass)
|
int MQTTConnect(char* host, int port, char* user, char* pass)
|
||||||
{
|
{
|
||||||
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
|
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
|
||||||
int rc;
|
int rc;
|
||||||
char hostString[256];
|
char hostString[256];
|
||||||
|
|
||||||
sprintf(hostString, "tcp://%s:%d", host, port);
|
sprintf(hostString, "tcp://%s:%d", host, port);
|
||||||
|
|
||||||
printf("MQTT Connect to %s\n", hostString);
|
printf("MQTT Connect to %s\n", hostString);
|
||||||
|
|
||||||
rc = MQTTAsync_create(&client, hostString, NODECALLLOPPED, MQTTCLIENT_PERSISTENCE_NONE, NULL);
|
rc = MQTTAsync_create(&client, hostString, NODECALLLOPPED, MQTTCLIENT_PERSISTENCE_NONE, NULL);
|
||||||
|
|
||||||
if (rc != MQTTASYNC_SUCCESS)
|
if (rc != MQTTASYNC_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("Failed to create client, return code %d\n", rc);
|
printf("Failed to create client, return code %d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn_opts.keepAliveInterval = 20;
|
conn_opts.keepAliveInterval = 20;
|
||||||
conn_opts.cleansession = 1;
|
conn_opts.cleansession = 1;
|
||||||
conn_opts.username = user;
|
conn_opts.username = user;
|
||||||
conn_opts.password = pass;
|
conn_opts.password = pass;
|
||||||
conn_opts.onSuccess = onConnect;
|
conn_opts.onSuccess = onConnect;
|
||||||
conn_opts.onFailure = onConnectFailure;
|
conn_opts.onFailure = onConnectFailure;
|
||||||
// conn_opts.automaticReconnect = 1;
|
// conn_opts.automaticReconnect = 1;
|
||||||
// conn_opts.minRetryInterval = 30;
|
// conn_opts.minRetryInterval = 30;
|
||||||
// conn_opts.maxRetryInterval = 300;
|
// conn_opts.maxRetryInterval = 300;
|
||||||
|
|
||||||
rc = MQTTAsync_connect(client, &conn_opts);
|
rc = MQTTAsync_connect(client, &conn_opts);
|
||||||
|
|
||||||
if (rc != MQTTASYNC_SUCCESS)
|
if (rc != MQTTASYNC_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("Failed to start connect, return code %d\n", rc);
|
printf("Failed to start connect, return code %d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
MQTT_Connecting = 1;
|
MQTT_Connecting = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Message Database Entry. Designed to be compatible with FBB
|
// Message Database Entry. Designed to be compatible with FBB
|
||||||
|
|
||||||
#define NBBBS 160 // Max BBSes we can forward to. Must be Multiple of 8, and must be 80 for FBB compatibliliy
|
#define NBBBS 160 // Max BBSes we can forward to. Must be Multiple of 8, and must be 80 for FBB compatibliliy
|
||||||
#define NBMASK NBBBS/8 // Number of bytes in Forward bitlists.
|
#define NBMASK NBBBS/8 // Number of bytes in Forward bitlists.
|
||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
struct MsgInfo
|
struct MsgInfo
|
||||||
{
|
{
|
||||||
char type;
|
char type;
|
||||||
char status;
|
char status;
|
||||||
int number;
|
int number;
|
||||||
int length;
|
int length;
|
||||||
int xdatereceived;
|
int xdatereceived;
|
||||||
char bbsfrom[7]; // ? BBS we got it from ?
|
char bbsfrom[7]; // ? BBS we got it from ?
|
||||||
char via[41];
|
char via[41];
|
||||||
char from[7];
|
char from[7];
|
||||||
char to[7];
|
char to[7];
|
||||||
char bid[13];
|
char bid[13];
|
||||||
char title[61];
|
char title[61];
|
||||||
int nntpnum; // Number within topic (ie Bull TO Addr) - used for nntp
|
int nntpnum; // Number within topic (ie Bull TO Addr) - used for nntp
|
||||||
|
|
||||||
UCHAR B2Flags; // Not all flags specific to B2
|
UCHAR B2Flags; // Not all flags specific to B2
|
||||||
|
|
||||||
#define B2Msg 1 // Set if Message File is a formatted B2 message
|
#define B2Msg 1 // Set if Message File is a formatted B2 message
|
||||||
#define Attachments 2 // Set if B2 message has attachments
|
#define Attachments 2 // Set if B2 message has attachments
|
||||||
#define FromPaclink 4
|
#define FromPaclink 4
|
||||||
#define FromCMS 8
|
#define FromCMS 8
|
||||||
#define FromRMSExpress 16
|
#define FromRMSExpress 16
|
||||||
#define RadioOnlyMsg 32 // Received using call-T
|
#define RadioOnlyMsg 32 // Received using call-T
|
||||||
#define RadioOnlyFwd 64 // Received using call-R
|
#define RadioOnlyFwd 64 // Received using call-R
|
||||||
#define WarnNotForwardedSent 128
|
#define WarnNotForwardedSent 128
|
||||||
|
|
||||||
int xdatecreated;
|
int xdatecreated;
|
||||||
int xdatechanged;
|
int xdatechanged;
|
||||||
UCHAR fbbs[NBMASK];
|
UCHAR fbbs[NBMASK];
|
||||||
UCHAR forw[NBMASK];
|
UCHAR forw[NBMASK];
|
||||||
char emailfrom[41];
|
char emailfrom[41];
|
||||||
char Locked; // Set if selected for sending (NTS Pickup)
|
char Locked; // Set if selected for sending (NTS Pickup)
|
||||||
char Defered; // FBB response '=' received
|
char Defered; // FBB response '=' received
|
||||||
UCHAR UTF8; // Set if Message is in UTF8 (ie from POP/SMTP)
|
UCHAR UTF8; // Set if Message is in UTF8 (ie from POP/SMTP)
|
||||||
|
|
||||||
// For 64 bit time_t compatibility define as long long
|
// For 64 bit time_t compatibility define as long long
|
||||||
// (so struct is same with 32 or 64 bit time_t)
|
// (so struct is same with 32 or 64 bit time_t)
|
||||||
|
|
||||||
int64_t datereceived;
|
int64_t datereceived;
|
||||||
int64_t datecreated;
|
int64_t datecreated;
|
||||||
int64_t datechanged;
|
int64_t datechanged;
|
||||||
|
|
||||||
char Spare[61 - 24]; // For future use
|
char Spare[61 - 24]; // For future use
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
void MQTTMessageEvent(void* message)
|
void MQTTMessageEvent(void* message)
|
||||||
{
|
{
|
||||||
struct MsgInfo* msg = (struct MsgInfo *)message;
|
struct MsgInfo* msg = (struct MsgInfo *)message;
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
char * ptr;
|
char * ptr;
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
|
|
||||||
json_t *root = json_object();
|
json_t *root = json_object();
|
||||||
json_object_set_new(root, "id", json_integer(msg->number));
|
json_object_set_new(root, "id", json_integer(msg->number));
|
||||||
json_object_set_new(root, "size", json_integer(msg->length));
|
json_object_set_new(root, "size", json_integer(msg->length));
|
||||||
json_object_set_new(root, "type", json_string(msg->type == 'P' ? "P" : "B"));
|
json_object_set_new(root, "type", json_string(msg->type == 'P' ? "P" : "B"));
|
||||||
json_object_set_new(root, "to", json_string(msg->to));
|
json_object_set_new(root, "to", json_string(msg->to));
|
||||||
json_object_set_new(root, "from", json_string(msg->from));
|
json_object_set_new(root, "from", json_string(msg->from));
|
||||||
json_object_set_new(root, "subj", json_string(msg->title));
|
json_object_set_new(root, "subj", json_string(msg->title));
|
||||||
|
|
||||||
switch(msg->status) {
|
switch(msg->status) {
|
||||||
case 'N':
|
case 'N':
|
||||||
json_object_set_new(root, "event", json_string("newmsg"));
|
json_object_set_new(root, "event", json_string("newmsg"));
|
||||||
break;
|
break;
|
||||||
case 'F':
|
case 'F':
|
||||||
json_object_set_new(root, "event", json_string("fwded"));
|
json_object_set_new(root, "event", json_string("fwded"));
|
||||||
break;
|
break;
|
||||||
case 'R':
|
case 'R':
|
||||||
json_object_set_new(root, "event", json_string("read"));
|
json_object_set_new(root, "event", json_string("read"));
|
||||||
break;
|
break;
|
||||||
case 'K':
|
case 'K':
|
||||||
json_object_set_new(root, "event", json_string("killed"));
|
json_object_set_new(root, "event", json_string("killed"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_str = json_dumps(root, 0);
|
msg_str = json_dumps(root, 0);
|
||||||
|
|
||||||
pubmsg.payload = msg_str;
|
pubmsg.payload = msg_str;
|
||||||
pubmsg.payloadlen = strlen(msg_str);
|
pubmsg.payloadlen = strlen(msg_str);
|
||||||
|
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/event/%s/pmsg", NODECALLLOPPED);
|
sprintf(topic, "PACKETNODE/event/%s/pmsg", NODECALLLOPPED);
|
||||||
|
|
||||||
MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// Dummies ofr build without MQTT libraries
|
// Dummies ofr build without MQTT libraries
|
||||||
|
|
||||||
int MQTTConnect(char* host, int port, char* user, char* pass)
|
int MQTTConnect(char* host, int port, char* user, char* pass)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSTX(void *message) {};
|
void MQTTKISSTX(void *message) {};
|
||||||
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
||||||
void MQTTKISSRX(void *message) {};
|
void MQTTKISSRX(void *message) {};
|
||||||
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
||||||
void MQTTTimer() {};
|
void MQTTTimer() {};
|
||||||
void MQTTReportSession(char * Msg) {};
|
void MQTTReportSession(char * Msg) {};
|
||||||
void MQTTMessageEvent(void* message) {};
|
void MQTTMessageEvent(void* message) {};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,126 +1,126 @@
|
|||||||
|
|
||||||
#ifdef Kernel
|
#ifdef Kernel
|
||||||
|
|
||||||
#define Vers 5,2,9,2
|
#define Vers 5,2,9,2
|
||||||
#define Verstring "5.2.9.2\0"
|
#define Verstring "5.2.9.2\0"
|
||||||
#define Datestring "September 2012"
|
#define Datestring "September 2012"
|
||||||
#define VerComments "G8BPQ Packet Switch V5.2.9.2\0"
|
#define VerComments "G8BPQ Packet Switch V5.2.9.2\0"
|
||||||
#define VerCopyright "Copyright © 2001-2012 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2001-2012 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "BPQ32 Switch\0"
|
#define VerDesc "BPQ32 Switch\0"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KVers 6,0,24,71
|
#define KVers 6,0,24,71
|
||||||
#define KVerstring "6.0.24.71\0"
|
#define KVerstring "6.0.24.71\0"
|
||||||
|
|
||||||
|
|
||||||
#ifdef CKernel
|
#ifdef CKernel
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define Datestring "April 2025"
|
#define Datestring "April 2025"
|
||||||
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
||||||
#define VerCopyright "Copyright © 2001-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2001-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "BPQ32 Switch\0"
|
#define VerDesc "BPQ32 Switch\0"
|
||||||
#define VerProduct "BPQ32"
|
#define VerProduct "BPQ32"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TermTCP
|
#ifdef TermTCP
|
||||||
|
|
||||||
#define Vers 1,0,16,2
|
#define Vers 1,0,16,2
|
||||||
#define Verstring "1.0.16.2\0"
|
#define Verstring "1.0.16.2\0"
|
||||||
#define VerComments "Internet Terminal for G8BPQ Packet Switch\0"
|
#define VerComments "Internet Terminal for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Simple TCP Terminal Program for G8BPQ Switch\0"
|
#define VerDesc "Simple TCP Terminal Program for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQTermTCP"
|
#define VerProduct "BPQTermTCP"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BPQTerm
|
#ifdef BPQTerm
|
||||||
|
|
||||||
#define Vers 2,2,5,2
|
#define Vers 2,2,5,2
|
||||||
#define Verstring "2.2.5.2\0"
|
#define Verstring "2.2.5.2\0"
|
||||||
#define VerComments "Simple Terminal for G8BPQ Packet Switch\0"
|
#define VerComments "Simple Terminal for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Simple Terminal Program for G8BPQ Switch\0"
|
#define VerDesc "Simple Terminal Program for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQTerminal"
|
#define VerProduct "BPQTerminal"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BPQTermMDI
|
#ifdef BPQTermMDI
|
||||||
|
|
||||||
#define Vers 2,2,0,3
|
#define Vers 2,2,0,3
|
||||||
#define Verstring "2.2.0.3\0"
|
#define Verstring "2.2.0.3\0"
|
||||||
#define VerComments "MDI Terminal for G8BPQ Packet Switch\0"
|
#define VerComments "MDI Terminal for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "MDI Terminal Program for G8BPQ Switch\0"
|
#define VerDesc "MDI Terminal Program for G8BPQ Switch\0"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MAIL
|
#ifdef MAIL
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define VerComments "Mail server for G8BPQ Packet Switch\0"
|
#define VerComments "Mail server for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Mail server for G8BPQ's 32 Bit Switch\0"
|
#define VerDesc "Mail server for G8BPQ's 32 Bit Switch\0"
|
||||||
#define VerProduct "BPQMail"
|
#define VerProduct "BPQMail"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HOSTMODES
|
#ifdef HOSTMODES
|
||||||
|
|
||||||
#define Vers 1,1,8,1
|
#define Vers 1,1,8,1
|
||||||
#define Verstring "1.1.8.1\0"
|
#define Verstring "1.1.8.1\0"
|
||||||
//#define SPECIALVERSION "Test 3"
|
//#define SPECIALVERSION "Test 3"
|
||||||
#define VerComments "Host Modes Emulator for G8BPQ Packet Switch\0"
|
#define VerComments "Host Modes Emulator for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2009-2019 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2009-2019 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Host Modes Emulator for G8BPQ's 32 Bit Switch\0"
|
#define VerDesc "Host Modes Emulator for G8BPQ's 32 Bit Switch\0"
|
||||||
#define VerProduct "BPQHostModes"
|
#define VerProduct "BPQHostModes"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef UIUTIL
|
#ifdef UIUTIL
|
||||||
|
|
||||||
#define Vers 0,1,3,1
|
#define Vers 0,1,3,1
|
||||||
#define Verstring "0.1.3.1\0"
|
#define Verstring "0.1.3.1\0"
|
||||||
#define VerComments "Beacon Utility for G8BPQ Packet Switch\0"
|
#define VerComments "Beacon Utility for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2011-2019 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2011-2019 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Beacon Utility for G8BPQ Switch\0"
|
#define VerDesc "Beacon Utility for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQUIUtil"
|
#define VerProduct "BPQUIUtil"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef AUTH
|
#ifdef AUTH
|
||||||
|
|
||||||
#define Vers 0,1,0,0
|
#define Vers 0,1,0,0
|
||||||
#define Verstring "0.1.0.0\0"
|
#define Verstring "0.1.0.0\0"
|
||||||
#define VerComments "Password Generation Utility for G8BPQ Packet Switch\0"
|
#define VerComments "Password Generation Utility for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Password Generation Utility for G8BPQ Switch\0"
|
#define VerDesc "Password Generation Utility for G8BPQ Switch\0"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef APRS
|
#ifdef APRS
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define VerComments "APRS Client for G8BPQ Switch\0"
|
#define VerComments "APRS Client for G8BPQ Switch\0"
|
||||||
#define VerCopyright "Copyright © 2012-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2012-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "APRS Client for G8BPQ Switch\0"
|
#define VerDesc "APRS Client for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQAPRS"
|
#define VerProduct "BPQAPRS"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CHAT
|
#ifdef CHAT
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define VerComments "Chat server for G8BPQ Packet Switch\0"
|
#define VerComments "Chat server for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Chat server for G8BPQ's 32 Bit Switch\0"
|
#define VerDesc "Chat server for G8BPQ's 32 Bit Switch\0"
|
||||||
#define VerProduct "BPQChat"
|
#define VerProduct "BPQChat"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -0,0 +1,126 @@
|
|||||||
|
|
||||||
|
#ifdef Kernel
|
||||||
|
|
||||||
|
#define Vers 5,2,9,2
|
||||||
|
#define Verstring "5.2.9.2\0"
|
||||||
|
#define Datestring "September 2012"
|
||||||
|
#define VerComments "G8BPQ Packet Switch V5.2.9.2\0"
|
||||||
|
#define VerCopyright "Copyright © 2001-2012 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "BPQ32 Switch\0"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define KVers 6,0,24,72
|
||||||
|
#define KVerstring "6.0.24.72\0"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CKernel
|
||||||
|
|
||||||
|
#define Vers KVers
|
||||||
|
#define Verstring KVerstring
|
||||||
|
#define Datestring "April 2025"
|
||||||
|
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
||||||
|
#define VerCopyright "Copyright © 2001-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "BPQ32 Switch\0"
|
||||||
|
#define VerProduct "BPQ32"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef TermTCP
|
||||||
|
|
||||||
|
#define Vers 1,0,16,2
|
||||||
|
#define Verstring "1.0.16.2\0"
|
||||||
|
#define VerComments "Internet Terminal for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "Simple TCP Terminal Program for G8BPQ Switch\0"
|
||||||
|
#define VerProduct "BPQTermTCP"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BPQTerm
|
||||||
|
|
||||||
|
#define Vers 2,2,5,2
|
||||||
|
#define Verstring "2.2.5.2\0"
|
||||||
|
#define VerComments "Simple Terminal for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "Simple Terminal Program for G8BPQ Switch\0"
|
||||||
|
#define VerProduct "BPQTerminal"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BPQTermMDI
|
||||||
|
|
||||||
|
#define Vers 2,2,0,3
|
||||||
|
#define Verstring "2.2.0.3\0"
|
||||||
|
#define VerComments "MDI Terminal for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "MDI Terminal Program for G8BPQ Switch\0"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MAIL
|
||||||
|
|
||||||
|
#define Vers KVers
|
||||||
|
#define Verstring KVerstring
|
||||||
|
#define VerComments "Mail server for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "Mail server for G8BPQ's 32 Bit Switch\0"
|
||||||
|
#define VerProduct "BPQMail"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HOSTMODES
|
||||||
|
|
||||||
|
#define Vers 1,1,8,1
|
||||||
|
#define Verstring "1.1.8.1\0"
|
||||||
|
//#define SPECIALVERSION "Test 3"
|
||||||
|
#define VerComments "Host Modes Emulator for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 2009-2019 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "Host Modes Emulator for G8BPQ's 32 Bit Switch\0"
|
||||||
|
#define VerProduct "BPQHostModes"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef UIUTIL
|
||||||
|
|
||||||
|
#define Vers 0,1,3,1
|
||||||
|
#define Verstring "0.1.3.1\0"
|
||||||
|
#define VerComments "Beacon Utility for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 2011-2019 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "Beacon Utility for G8BPQ Switch\0"
|
||||||
|
#define VerProduct "BPQUIUtil"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef AUTH
|
||||||
|
|
||||||
|
#define Vers 0,1,0,0
|
||||||
|
#define Verstring "0.1.0.0\0"
|
||||||
|
#define VerComments "Password Generation Utility for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "Password Generation Utility for G8BPQ Switch\0"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef APRS
|
||||||
|
|
||||||
|
#define Vers KVers
|
||||||
|
#define Verstring KVerstring
|
||||||
|
#define VerComments "APRS Client for G8BPQ Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 2012-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "APRS Client for G8BPQ Switch\0"
|
||||||
|
#define VerProduct "BPQAPRS"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CHAT
|
||||||
|
|
||||||
|
#define Vers KVers
|
||||||
|
#define Verstring KVerstring
|
||||||
|
#define VerComments "Chat server for G8BPQ Packet Switch\0"
|
||||||
|
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
||||||
|
#define VerDesc "Chat server for G8BPQ's 32 Bit Switch\0"
|
||||||
|
#define VerProduct "BPQChat"
|
||||||
|
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,206 +1,206 @@
|
|||||||
|
|
||||||
#ifndef CONFIGSTRUCT
|
#ifndef CONFIGSTRUCT
|
||||||
#define CONFIGSTRUCT
|
#define CONFIGSTRUCT
|
||||||
|
|
||||||
|
|
||||||
// MAKE SURE SHORTS ARE CORRECTLY ALLIGNED FOR ARMV5
|
// MAKE SURE SHORTS ARE CORRECTLY ALLIGNED FOR ARMV5
|
||||||
|
|
||||||
struct PORTCONFIG
|
struct PORTCONFIG
|
||||||
{
|
{
|
||||||
short PORTNUM;
|
short PORTNUM;
|
||||||
char ID[30]; //2
|
char ID[30]; //2
|
||||||
short TYPE; // 32,
|
short TYPE; // 32,
|
||||||
short PROTOCOL; // 34,
|
short PROTOCOL; // 34,
|
||||||
short IOADDR; // 36,
|
short IOADDR; // 36,
|
||||||
short INTLEVEL; // 38,
|
short INTLEVEL; // 38,
|
||||||
unsigned short SPEED; // 40,
|
unsigned short SPEED; // 40,
|
||||||
unsigned char CHANNEL; // 42,
|
unsigned char CHANNEL; // 42,
|
||||||
unsigned char pad;
|
unsigned char pad;
|
||||||
short BBSFLAG; // 44,
|
short BBSFLAG; // 44,
|
||||||
short QUALITY; // 46,
|
short QUALITY; // 46,
|
||||||
short MAXFRAME; // 48,
|
short MAXFRAME; // 48,
|
||||||
short TXDELAY; // 50,
|
short TXDELAY; // 50,
|
||||||
short SLOTTIME; // 52,
|
short SLOTTIME; // 52,
|
||||||
short PERSIST; // 54,
|
short PERSIST; // 54,
|
||||||
|
|
||||||
short FULLDUP; // 56,
|
short FULLDUP; // 56,
|
||||||
short SOFTDCD; // 58,
|
short SOFTDCD; // 58,
|
||||||
short FRACK; // 60,
|
short FRACK; // 60,
|
||||||
short RESPTIME; // 62,
|
short RESPTIME; // 62,
|
||||||
short RETRIES; // 64,
|
short RETRIES; // 64,
|
||||||
|
|
||||||
short PACLEN; // 66,
|
short PACLEN; // 66,
|
||||||
short QUALADJUST; // 68,
|
short QUALADJUST; // 68,
|
||||||
UCHAR DIGIFLAG; // 70,
|
UCHAR DIGIFLAG; // 70,
|
||||||
UCHAR DIGIPORT; // 71
|
UCHAR DIGIPORT; // 71
|
||||||
short DIGIMASK; // 72
|
short DIGIMASK; // 72
|
||||||
short USERS; // 74,
|
short USERS; // 74,
|
||||||
short TXTAIL; // 76
|
short TXTAIL; // 76
|
||||||
unsigned char ALIAS_IS_BBS; // 78
|
unsigned char ALIAS_IS_BBS; // 78
|
||||||
unsigned char pad2;
|
unsigned char pad2;
|
||||||
char CWID[10]; // 80,
|
char CWID[10]; // 80,
|
||||||
char PORTCALL[10]; // 90,
|
char PORTCALL[10]; // 90,
|
||||||
char PORTALIAS[10]; // 100,
|
char PORTALIAS[10]; // 100,
|
||||||
char L3ONLY; // 110,
|
char L3ONLY; // 110,
|
||||||
char IGNOREUNLOCKED; // 111
|
char IGNOREUNLOCKED; // 111
|
||||||
short KISSOPTIONS; // 112,
|
short KISSOPTIONS; // 112,
|
||||||
short INTERLOCK; // 114,
|
short INTERLOCK; // 114,
|
||||||
short NODESPACLEN; // 116,
|
short NODESPACLEN; // 116,
|
||||||
short TXPORT; // 118,
|
short TXPORT; // 118,
|
||||||
UCHAR MHEARD; // 120,
|
UCHAR MHEARD; // 120,
|
||||||
UCHAR CWIDTYPE; // 121,
|
UCHAR CWIDTYPE; // 121,
|
||||||
char MINQUAL; // 122,
|
char MINQUAL; // 122,
|
||||||
char MAXDIGIS; // 123,
|
char MAXDIGIS; // 123,
|
||||||
char DefaultNoKeepAlives; // 124
|
char DefaultNoKeepAlives; // 124
|
||||||
char UIONLY; // 125,
|
char UIONLY; // 125,
|
||||||
unsigned short ListenPort; // 126
|
unsigned short ListenPort; // 126
|
||||||
char UNPROTO[72]; // 128,
|
char UNPROTO[72]; // 128,
|
||||||
char PORTALIAS2[10]; // 200,
|
char PORTALIAS2[10]; // 200,
|
||||||
char DLLNAME[16]; // 210,
|
char DLLNAME[16]; // 210,
|
||||||
char BCALL[10]; // 226,
|
char BCALL[10]; // 226,
|
||||||
unsigned long IPADDR; // 236
|
unsigned long IPADDR; // 236
|
||||||
char I2CMode; // 240
|
char I2CMode; // 240
|
||||||
char I2CAddr; // 241
|
char I2CAddr; // 241
|
||||||
char INP3ONLY; // 242
|
char INP3ONLY; // 242
|
||||||
char NoNormalize; // 243 Normalise Nodes Qualities
|
char NoNormalize; // 243 Normalise Nodes Qualities
|
||||||
unsigned short TCPPORT; // 244
|
unsigned short TCPPORT; // 244
|
||||||
char Pad2[10]; // 246
|
char Pad2[10]; // 246
|
||||||
char VALIDCALLS[256]; // 256 - 512
|
char VALIDCALLS[256]; // 256 - 512
|
||||||
struct WL2KInfo * WL2K; // 512
|
struct WL2KInfo * WL2K; // 512
|
||||||
char * SerialPortName; // 516
|
char * SerialPortName; // 516
|
||||||
struct XDIGI * XDIGIS; // 596 Cross port digi setup
|
struct XDIGI * XDIGIS; // 596 Cross port digi setup
|
||||||
int RIGPORT; // Linked port with RigControl
|
int RIGPORT; // Linked port with RigControl
|
||||||
unsigned int PERMITTEDAPPLS; // Appls allowed on this port
|
unsigned int PERMITTEDAPPLS; // Appls allowed on this port
|
||||||
int HavePermittedAppls; // Indicated PERMITTEDAPPLS uses
|
int HavePermittedAppls; // Indicated PERMITTEDAPPLS uses
|
||||||
int Hide; // Don't show on Ports display or AGW Connect Menu
|
int Hide; // Don't show on Ports display or AGW Connect Menu
|
||||||
// long long txOffset; // Transverter tx offset
|
// long long txOffset; // Transverter tx offset
|
||||||
// long long rxOffset; // Transverter rx offset ppa
|
// long long rxOffset; // Transverter rx offset ppa
|
||||||
int SmartID;
|
int SmartID;
|
||||||
unsigned char * KissParams;
|
unsigned char * KissParams;
|
||||||
int SendtoM0LTEMap;
|
int SendtoM0LTEMap;
|
||||||
uint64_t PortFreq;
|
uint64_t PortFreq;
|
||||||
char * M0LTEMapInfo;
|
char * M0LTEMapInfo;
|
||||||
int QtSMPort;
|
int QtSMPort;
|
||||||
int AllowINP3;
|
int AllowINP3;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ROUTECONFIG
|
struct ROUTECONFIG
|
||||||
{
|
{
|
||||||
char call[80]; // May have VIA
|
char call[80]; // May have VIA
|
||||||
int quality;
|
int quality;
|
||||||
int port;
|
int port;
|
||||||
int pwind;
|
int pwind;
|
||||||
int pfrack;
|
int pfrack;
|
||||||
int ppacl;
|
int ppacl;
|
||||||
int farQual;
|
int farQual;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CONFIGTABLE
|
struct CONFIGTABLE
|
||||||
{
|
{
|
||||||
// CONFIGURATION DATA STRUCTURE
|
// CONFIGURATION DATA STRUCTURE
|
||||||
|
|
||||||
// DEFINES LAYOUT OF CONFIG RECORD PRODUCED BY CONFIGURATION PROG
|
// DEFINES LAYOUT OF CONFIG RECORD PRODUCED BY CONFIGURATION PROG
|
||||||
|
|
||||||
char C_NODECALL[10]; // OFFSET = 0
|
char C_NODECALL[10]; // OFFSET = 0
|
||||||
char C_NODEALIAS[10]; // OFFSET = 10
|
char C_NODEALIAS[10]; // OFFSET = 10
|
||||||
char C_BBSCALL[10]; // OFFSET = 20
|
char C_BBSCALL[10]; // OFFSET = 20
|
||||||
char C_BBSALIAS[10]; // OFFSET = 30
|
char C_BBSALIAS[10]; // OFFSET = 30
|
||||||
|
|
||||||
short C_OBSINIT; // OFFSET = 40
|
short C_OBSINIT; // OFFSET = 40
|
||||||
short C_OBSMIN; // OFFSET = 42
|
short C_OBSMIN; // OFFSET = 42
|
||||||
short C_NODESINTERVAL; // OFFSET = 44
|
short C_NODESINTERVAL; // OFFSET = 44
|
||||||
short C_L3TIMETOLIVE; // OFFSET = 46
|
short C_L3TIMETOLIVE; // OFFSET = 46
|
||||||
short C_L4RETRIES; // OFFSET = 48
|
short C_L4RETRIES; // OFFSET = 48
|
||||||
short C_L4TIMEOUT; // OFFSET = 50
|
short C_L4TIMEOUT; // OFFSET = 50
|
||||||
short C_BUFFERS; // OFFSET = 52
|
short C_BUFFERS; // OFFSET = 52
|
||||||
short C_PACLEN; // OFFSET = 54
|
short C_PACLEN; // OFFSET = 54
|
||||||
short C_TRANSDELAY; // OFFSET = 56
|
short C_TRANSDELAY; // OFFSET = 56
|
||||||
short C_T3; // OFFSET = 58
|
short C_T3; // OFFSET = 58
|
||||||
short Spare1; // OFFSET = 60
|
short Spare1; // OFFSET = 60
|
||||||
short Spare2; // OFFSET = 62
|
short Spare2; // OFFSET = 62
|
||||||
short C_IDLETIME; // OFFSET = 64
|
short C_IDLETIME; // OFFSET = 64
|
||||||
UCHAR C_EMSFLAG; // OFFSET = 66
|
UCHAR C_EMSFLAG; // OFFSET = 66
|
||||||
UCHAR C_LINKEDFLAG; // OFFSET = 67
|
UCHAR C_LINKEDFLAG; // OFFSET = 67
|
||||||
UCHAR C_BBS; // OFFSET = 68
|
UCHAR C_BBS; // OFFSET = 68
|
||||||
UCHAR C_NODE; // OFFSET = 69
|
UCHAR C_NODE; // OFFSET = 69
|
||||||
UCHAR C_HOSTINTERRUPT; // OFFSET = 70
|
UCHAR C_HOSTINTERRUPT; // OFFSET = 70
|
||||||
UCHAR C_DESQVIEW; // OFFSET = 71
|
UCHAR C_DESQVIEW; // OFFSET = 71
|
||||||
short C_MAXLINKS; // OFFSET = 72
|
short C_MAXLINKS; // OFFSET = 72
|
||||||
short C_MAXDESTS;
|
short C_MAXDESTS;
|
||||||
short C_MAXNEIGHBOURS;
|
short C_MAXNEIGHBOURS;
|
||||||
short C_MAXCIRCUITS; // 78
|
short C_MAXCIRCUITS; // 78
|
||||||
UCHAR C_TNCPORTLIST[16]; // OFFSET = 80
|
UCHAR C_TNCPORTLIST[16]; // OFFSET = 80
|
||||||
short C_IDINTERVAL; // 96
|
short C_IDINTERVAL; // 96
|
||||||
short C_FULLCTEXT; // 98 ; SPARE (WAS DIGIFLAG)
|
short C_FULLCTEXT; // 98 ; SPARE (WAS DIGIFLAG)
|
||||||
short C_MINQUAL; // 100
|
short C_MINQUAL; // 100
|
||||||
UCHAR C_HIDENODES; // 102
|
UCHAR C_HIDENODES; // 102
|
||||||
UCHAR C_AUTOSAVE; // 103
|
UCHAR C_AUTOSAVE; // 103
|
||||||
short C_L4DELAY; // 104
|
short C_L4DELAY; // 104
|
||||||
short C_L4WINDOW; // 106
|
short C_L4WINDOW; // 106
|
||||||
short C_BTINTERVAL; // 108
|
short C_BTINTERVAL; // 108
|
||||||
UCHAR C_L4APPL; // 110
|
UCHAR C_L4APPL; // 110
|
||||||
UCHAR C_C; // 111 "C" = HOST Command Enabled
|
UCHAR C_C; // 111 "C" = HOST Command Enabled
|
||||||
UCHAR C_IP; // 112 IP Enabled
|
UCHAR C_IP; // 112 IP Enabled
|
||||||
UCHAR C_MAXRTT; // 113
|
UCHAR C_MAXRTT; // 113
|
||||||
UCHAR C_MAXHOPS; // 114
|
UCHAR C_MAXHOPS; // 114
|
||||||
UCHAR C_PM; // 115 Poermapper Enabled
|
UCHAR C_PM; // 115 Poermapper Enabled
|
||||||
UCHAR C_LogL4Connects; // 116
|
UCHAR C_LogL4Connects; // 116
|
||||||
UCHAR C_SaveMH; // 117
|
UCHAR C_SaveMH; // 117
|
||||||
short C_BBSQUAL; // 118
|
short C_BBSQUAL; // 118
|
||||||
UCHAR C_WASUNPROTO;
|
UCHAR C_WASUNPROTO;
|
||||||
UCHAR C_BTEXT[120]; // 121
|
UCHAR C_BTEXT[120]; // 121
|
||||||
char C_VERSTRING[10]; // 241 Version String from Config File
|
char C_VERSTRING[10]; // 241 Version String from Config File
|
||||||
UCHAR C_ADIF;
|
UCHAR C_ADIF;
|
||||||
UCHAR C_EVENTS;
|
UCHAR C_EVENTS;
|
||||||
UCHAR C_LogAllConnects;
|
UCHAR C_LogAllConnects;
|
||||||
UCHAR C_SaveAPRSMsgs;
|
UCHAR C_SaveAPRSMsgs;
|
||||||
UCHAR C_M0LTEMap;
|
UCHAR C_M0LTEMap;
|
||||||
UCHAR C_VERSION; // CONFIG PROG VERSION
|
UCHAR C_VERSION; // CONFIG PROG VERSION
|
||||||
// Reuse C_APPLICATIONS - no longer used
|
// Reuse C_APPLICATIONS - no longer used
|
||||||
char C_NETROMCALL[10];
|
char C_NETROMCALL[10];
|
||||||
UCHAR C_EXCLUDE[71];
|
UCHAR C_EXCLUDE[71];
|
||||||
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 + 1][MaxBPQPortNo + 1];
|
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];
|
||||||
int C_MQTT;
|
int C_MQTT;
|
||||||
char C_MQTT_HOST[80];
|
char C_MQTT_HOST[80];
|
||||||
int C_MQTT_PORT;
|
int C_MQTT_PORT;
|
||||||
char C_MQTT_USER[80];
|
char C_MQTT_USER[80];
|
||||||
char C_MQTT_PASS[80];
|
char C_MQTT_PASS[80];
|
||||||
int C_L4Compress;
|
int C_L4Compress;
|
||||||
int C_L4CompMaxframe;
|
int C_L4CompMaxframe;
|
||||||
int C_L4CompPaclen;
|
int C_L4CompPaclen;
|
||||||
int C_L2Compress;
|
int C_L2Compress;
|
||||||
int C_L2CompMaxframe;
|
int C_L2CompMaxframe;
|
||||||
int C_L2CompPaclen;
|
int C_L2CompPaclen;
|
||||||
int C_PREFERINP3ROUTES;
|
int C_PREFERINP3ROUTES;
|
||||||
|
|
||||||
|
|
||||||
//#define ApplOffset 80000 // Applications offset in config buffer
|
//#define ApplOffset 80000 // Applications offset in config buffer
|
||||||
//#define InfoOffset 85000 // Infomsg offset in buffer
|
//#define InfoOffset 85000 // Infomsg offset in buffer
|
||||||
//#define InfoMax 2000 // Max Info
|
//#define InfoMax 2000 // Max Info
|
||||||
|
|
||||||
//#define C_IDMSG 512
|
//#define C_IDMSG 512
|
||||||
//#define C_ROUTES 90000 // Allow 2500
|
//#define C_ROUTES 90000 // Allow 2500
|
||||||
//#define C_CTEXT 2048
|
//#define C_CTEXT 2048
|
||||||
//#define C_PORTS 2560
|
//#define C_PORTS 2560
|
||||||
//#define C_INFOMSG 85000
|
//#define C_INFOMSG 85000
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UPNP
|
struct UPNP
|
||||||
{
|
{
|
||||||
struct UPNP * Next;
|
struct UPNP * Next;
|
||||||
char * Protocol;
|
char * Protocol;
|
||||||
char * LANport;
|
char * LANport;
|
||||||
char * WANPort;
|
char * WANPort;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,451 @@
|
|||||||
|
//
|
||||||
|
// Prototypes for BPQ32 Node Functions
|
||||||
|
//
|
||||||
|
|
||||||
|
#define DllImport
|
||||||
|
|
||||||
|
#define EXCLUDEBITS
|
||||||
|
|
||||||
|
#define _WINSOCK_DEPRECATED_NO_WARNINGS
|
||||||
|
|
||||||
|
#include "compatbits.h"
|
||||||
|
|
||||||
|
#include "asmstrucs.h"
|
||||||
|
|
||||||
|
BOOL CheckExcludeList(UCHAR * Call);
|
||||||
|
|
||||||
|
Dll int ConvFromAX25(unsigned char * incall,unsigned char * outcall);
|
||||||
|
Dll BOOL ConvToAX25(unsigned char * callsign, unsigned char * ax25call);
|
||||||
|
DllExport BOOL ConvToAX25Ex(unsigned char * callsign, unsigned char * ax25call);
|
||||||
|
int WritetoConsoleLocal(char * buff);
|
||||||
|
VOID Consoleprintf(const char * format, ...);
|
||||||
|
VOID FreeConfig();
|
||||||
|
int GetListeningPortsPID(int Port);
|
||||||
|
|
||||||
|
void * InitializeExtDriver(PEXTPORTDATA PORTVEC);
|
||||||
|
|
||||||
|
VOID PutLengthinBuffer(PDATAMESSAGE buff, USHORT datalen); // Needed for arm5 portability
|
||||||
|
int GetLengthfromBuffer(PDATAMESSAGE buff);
|
||||||
|
int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BOOL APRS, BOOL MCTL);
|
||||||
|
int IntSetTraceOptionsEx(uint64_t mask, int mtxparam, int mcomparam, int monUIOnly);
|
||||||
|
int CountBits64(uint64_t in);
|
||||||
|
|
||||||
|
|
||||||
|
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
|
||||||
|
|
||||||
|
#define GetBuff() _GetBuff(__FILE__, __LINE__)
|
||||||
|
#define ReleaseBuffer(s) _ReleaseBuffer(s, __FILE__, __LINE__)
|
||||||
|
#define CheckGuardZone() _CheckGuardZone(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
#define Q_REM(s) _Q_REM(s, __FILE__, __LINE__)
|
||||||
|
#define Q_REM_NP(s) _Q_REM_NP(s, __FILE__, __LINE__)
|
||||||
|
|
||||||
|
#define C_Q_ADD(s, b) _C_Q_ADD(s, b, __FILE__, __LINE__)
|
||||||
|
|
||||||
|
void _CheckGuardZone(char * File, int Line);
|
||||||
|
|
||||||
|
VOID * _Q_REM(VOID **Q, char * File, int Line);
|
||||||
|
VOID * _Q_REM_NP(VOID *Q, char * File, int Line);
|
||||||
|
|
||||||
|
int _C_Q_ADD(VOID *Q, VOID *BUFF, char * File, int Line);
|
||||||
|
|
||||||
|
UINT _ReleaseBuffer(VOID *BUFF, char * File, int Line);
|
||||||
|
|
||||||
|
VOID * _GetBuff(char * File, int Line);
|
||||||
|
int _C_Q_ADD(VOID *PQ, VOID *PBUFF, char * File, int Line);
|
||||||
|
|
||||||
|
int C_Q_COUNT(VOID *Q);
|
||||||
|
|
||||||
|
DllExport char * APIENTRY GetApplCall(int Appl);
|
||||||
|
DllExport char * APIENTRY GetApplAlias(int Appl);
|
||||||
|
DllExport int APIENTRY FindFreeStream();
|
||||||
|
DllExport int APIENTRY DeallocateStream(int stream);
|
||||||
|
DllExport int APIENTRY SessionState(int stream, int * state, int * change);
|
||||||
|
DllExport int APIENTRY SetAppl(int stream, int flags, int mask);
|
||||||
|
DllExport int APIENTRY GetMsg(int stream, char * msg, int * len, int * count );
|
||||||
|
DllExport int APIENTRY GetConnectionInfo(int stream, char * callsign,
|
||||||
|
int * port, int * sesstype, int * paclen,
|
||||||
|
int * maxframe, int * l4window);
|
||||||
|
|
||||||
|
#define LIBCONFIG_STATIC
|
||||||
|
#include "libconfig.h"
|
||||||
|
|
||||||
|
int GetIntValue(config_setting_t * group, char * name);
|
||||||
|
BOOL GetStringValue(config_setting_t * group, char * name, char * value, int maxlen);
|
||||||
|
VOID SaveIntValue(config_setting_t * group, char * name, int value);
|
||||||
|
VOID SaveStringValue(config_setting_t * group, char * name, char * value);
|
||||||
|
|
||||||
|
int EncryptPass(char * Pass, char * Encrypt);
|
||||||
|
VOID DecryptPass(char * Encrypt, unsigned char * Pass, unsigned int len);
|
||||||
|
Dll VOID APIENTRY CreateOneTimePassword(char * Password, char * KeyPhrase, int TimeOffset);
|
||||||
|
Dll BOOL APIENTRY CheckOneTimePassword(char * Password, char * KeyPhrase);
|
||||||
|
|
||||||
|
DllExport int APIENTRY TXCount(int stream);
|
||||||
|
DllExport int APIENTRY RXCount(int stream);
|
||||||
|
DllExport int APIENTRY MONCount(int stream);
|
||||||
|
|
||||||
|
VOID ReadNodes();
|
||||||
|
int BPQTRACE(MESSAGE * Msg, BOOL APRS);
|
||||||
|
|
||||||
|
VOID CommandHandler(TRANSPORTENTRY * Session, struct DATAMESSAGE * Buffer);
|
||||||
|
|
||||||
|
VOID PostStateChange(TRANSPORTENTRY * Session);
|
||||||
|
|
||||||
|
VOID InnerCommandHandler(TRANSPORTENTRY * Session, struct DATAMESSAGE * Buffer);
|
||||||
|
VOID DoTheCommand(TRANSPORTENTRY * Session);
|
||||||
|
char * MOVEANDCHECK(TRANSPORTENTRY * Session, char * Bufferptr, char * Source, int Len);
|
||||||
|
VOID DISPLAYCIRCUIT(TRANSPORTENTRY * L4, char * Buffer);
|
||||||
|
char * strlop(char * buf, char delim);
|
||||||
|
BOOL CompareCalls(UCHAR * c1, UCHAR * c2);
|
||||||
|
|
||||||
|
VOID PostDataAvailable(TRANSPORTENTRY * Session);
|
||||||
|
int WritetoConsoleLocal(char * buff);
|
||||||
|
char * CHECKBUFFER(TRANSPORTENTRY * Session, char * Bufferptr);
|
||||||
|
VOID CLOSECURRENTSESSION(TRANSPORTENTRY * Session);
|
||||||
|
|
||||||
|
VOID SendCommandReply(TRANSPORTENTRY * Session, struct DATAMESSAGE * Buffer, int Len);
|
||||||
|
|
||||||
|
struct PORTCONTROL * APIENTRY GetPortTableEntryFromPortNum(int portnum);
|
||||||
|
|
||||||
|
int cCOUNT_AT_L2(struct _LINKTABLE * LINK);
|
||||||
|
VOID SENDL4CONNECT(TRANSPORTENTRY * Session);
|
||||||
|
|
||||||
|
VOID CloseSessionPartner(TRANSPORTENTRY * Session);
|
||||||
|
int COUNTNODES(struct ROUTE * ROUTE);
|
||||||
|
int DecodeNodeName(char * NodeName, char * ptr);;
|
||||||
|
VOID DISPLAYCIRCUIT(TRANSPORTENTRY * L4, char * Buffer);
|
||||||
|
int cCOUNT_AT_L2(struct _LINKTABLE * LINK);
|
||||||
|
void * zalloc(int len);
|
||||||
|
BOOL FindDestination(UCHAR * Call, struct DEST_LIST ** REQDEST);
|
||||||
|
|
||||||
|
BOOL ProcessConfig();
|
||||||
|
|
||||||
|
VOID PUT_ON_PORT_Q(struct PORTCONTROL * PORT, MESSAGE * Buffer);
|
||||||
|
VOID CLEAROUTLINK(struct _LINKTABLE * LINK);
|
||||||
|
VOID TellINP3LinkGone(struct ROUTE * Route);
|
||||||
|
VOID CLEARACTIVEROUTE(struct ROUTE * ROUTE, int Reason);
|
||||||
|
|
||||||
|
// Reason Equates
|
||||||
|
|
||||||
|
#define NORMALCLOSE 0
|
||||||
|
#define RETRIEDOUT 1
|
||||||
|
#define SETUPFAILED 2
|
||||||
|
#define LINKLOST 3
|
||||||
|
#define LINKSTUCK 4
|
||||||
|
|
||||||
|
int COUNT_AT_L2(struct _LINKTABLE * LINK);
|
||||||
|
VOID SENDIDMSG();
|
||||||
|
VOID SENDBTMSG();
|
||||||
|
VOID INP3TIMER();
|
||||||
|
VOID REMOVENODE(dest_list * DEST);
|
||||||
|
BOOL ACTIVATE_DEST(struct DEST_LIST * DEST);
|
||||||
|
VOID TellINP3LinkSetupFailed(struct ROUTE * Route);
|
||||||
|
BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE);
|
||||||
|
VOID PROCROUTES(struct DEST_LIST * DEST, struct ROUTE * ROUTE, int Qual);
|
||||||
|
BOOL L2SETUPCROSSLINK(PROUTE ROUTE);
|
||||||
|
VOID REMOVENODE(dest_list * DEST);
|
||||||
|
char * SetupNodeHeader(struct DATAMESSAGE * Buffer);
|
||||||
|
VOID L4CONNECTFAILED(TRANSPORTENTRY * L4);
|
||||||
|
int CountFramesQueuedOnSession(TRANSPORTENTRY * Session);
|
||||||
|
VOID CLEARSESSIONENTRY(TRANSPORTENTRY * Session);
|
||||||
|
VOID __cdecl Debugprintf(const char * format, ...);
|
||||||
|
|
||||||
|
int APIENTRY Restart();
|
||||||
|
int APIENTRY Reboot();
|
||||||
|
int APIENTRY Reconfig();
|
||||||
|
Dll int APIENTRY SaveNodes ();
|
||||||
|
|
||||||
|
|
||||||
|
struct SEM;
|
||||||
|
|
||||||
|
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line);
|
||||||
|
void FreeSemaphore(struct SEM * Semaphore);
|
||||||
|
|
||||||
|
void MySetWindowText(HWND hWnd, char * Msg);
|
||||||
|
|
||||||
|
Dll int APIENTRY SessionControl(int stream, int command, int Mask);
|
||||||
|
|
||||||
|
HANDLE OpenCOMPort(VOID * pPort, int speed, BOOL SetDTR, BOOL SetRTS, BOOL Quiet, int Stopbits);
|
||||||
|
int ReadCOMBlock(HANDLE fd, char * Block, int MaxLength);
|
||||||
|
BOOL WriteCOMBlock(HANDLE fd, char * Block, int BytesToWrite);
|
||||||
|
VOID CloseCOMPort(HANDLE fd);
|
||||||
|
|
||||||
|
VOID initUTF8();
|
||||||
|
int Is8Bit(unsigned char *cpt, int len);
|
||||||
|
int WebIsUTF8(unsigned char *ptr, int len);
|
||||||
|
int IsUTF8(unsigned char *ptr, int len);
|
||||||
|
int Convert437toUTF8(unsigned char * MsgPtr, int len, unsigned char * UTF);
|
||||||
|
int Convert1251toUTF8(unsigned char * MsgPtr, int len, unsigned char * UTF);
|
||||||
|
int Convert1252toUTF8(unsigned char * MsgPtr, int len, unsigned char * UTF);
|
||||||
|
int TrytoGuessCode(unsigned char * Char, int Len);
|
||||||
|
|
||||||
|
|
||||||
|
#define CMD_TO_APPL 1 // PASS COMMAND TO APPLICATION
|
||||||
|
#define MSG_TO_USER 2 // SEND 'CONNECTED' TO USER
|
||||||
|
#define MSG_TO_APPL 4 // SEND 'CONECTED' TO APPL
|
||||||
|
#define CHECK_FOR_ESC 8 // Look for ^d (^D) to disconnect session)
|
||||||
|
|
||||||
|
#define UI 3
|
||||||
|
#define SABM 0x2F
|
||||||
|
#define DISC 0x43
|
||||||
|
#define DM 0x0F
|
||||||
|
#define UA 0x63
|
||||||
|
#define FRMR 0x87
|
||||||
|
#define RR 1
|
||||||
|
#define RNR 5
|
||||||
|
#define REJ 9
|
||||||
|
|
||||||
|
// V2.2 Types
|
||||||
|
|
||||||
|
#define SREJ 0x0D
|
||||||
|
#define SABME 0x6F
|
||||||
|
#define XID 0xAF
|
||||||
|
#define TEST 0xE3
|
||||||
|
|
||||||
|
// XID Optional Functions
|
||||||
|
|
||||||
|
#define OPMustHave 0x02A080 // Sync TEST 16 bit FCS Extended Address
|
||||||
|
#define OPSREJ 4
|
||||||
|
#define OPSREJMult 0x200000
|
||||||
|
#define OPREJ 2
|
||||||
|
#define OPMod8 0x400
|
||||||
|
#define OPMod128 0x800
|
||||||
|
|
||||||
|
#define BPQHOSTSTREAMS 64
|
||||||
|
|
||||||
|
extern TRANSPORTENTRY * L4TABLE;
|
||||||
|
extern unsigned char NEXTID;
|
||||||
|
extern int MAXCIRCUITS;
|
||||||
|
extern int L4DEFAULTWINDOW;
|
||||||
|
extern int L4T1;
|
||||||
|
extern APPLCALLS APPLCALLTABLE[];
|
||||||
|
extern char * APPLS;
|
||||||
|
extern int NEEDMH;
|
||||||
|
extern int RFOnly;
|
||||||
|
|
||||||
|
extern char SESSIONHDDR[];
|
||||||
|
|
||||||
|
extern UCHAR NEXTID;
|
||||||
|
|
||||||
|
extern struct ROUTE * NEIGHBOURS;
|
||||||
|
extern int MAXNEIGHBOURS;
|
||||||
|
|
||||||
|
extern struct ROUTE * NEIGHBOURS;
|
||||||
|
extern int ROUTE_LEN;
|
||||||
|
extern int MAXNEIGHBOURS;
|
||||||
|
|
||||||
|
extern struct DEST_LIST * DESTS; // NODE LIST
|
||||||
|
extern struct DEST_LIST * ENDDESTLIST;
|
||||||
|
extern int DEST_LIST_LEN;
|
||||||
|
extern int MAXDESTS; // MAX NODES IN SYSTEM
|
||||||
|
|
||||||
|
extern struct _LINKTABLE * LINKS;
|
||||||
|
extern int LINK_TABLE_LEN;
|
||||||
|
extern int MAXLINKS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern char MYCALL[]; // DB 7 DUP (0) ; NODE CALLSIGN (BIT SHIFTED)
|
||||||
|
extern char MYALIASTEXT[]; // {" " ; NODE ALIAS (KEEP TOGETHER)
|
||||||
|
|
||||||
|
extern UCHAR MYCALLWITHALIAS[13];
|
||||||
|
extern APPLCALLS APPLCALLTABLE[NumberofAppls];
|
||||||
|
|
||||||
|
extern UCHAR MYNODECALL[]; // NODE CALLSIGN (ASCII)
|
||||||
|
extern char NODECALLLOPPED[]; // NODE CALLSIGN (ASCII). Null terminated
|
||||||
|
extern UCHAR MYNETROMCALL[]; // NETROM CALLSIGN (ASCII)
|
||||||
|
|
||||||
|
extern UCHAR NETROMCALL[]; // NETORM CALL (AX25)
|
||||||
|
|
||||||
|
extern VOID * FREE_Q;
|
||||||
|
|
||||||
|
extern struct PORTCONTROL * PORTTABLE;
|
||||||
|
extern int NUMBEROFPORTS;
|
||||||
|
|
||||||
|
|
||||||
|
extern int OBSINIT; // INITIAL OBSOLESCENCE VALUE
|
||||||
|
extern int OBSMIN; // MINIMUM TO BROADCAST
|
||||||
|
extern int L3INTERVAL; // "NODES" INTERVAL IN MINS
|
||||||
|
extern int IDINTERVAL; // "ID" BROADCAST INTERVAL
|
||||||
|
extern int BTINTERVAL; // "BT" BROADCAST INTERVAL
|
||||||
|
extern int MINQUAL; // MIN QUALITY FOR AUTOUPDATES
|
||||||
|
extern int HIDENODES; // N * COMMAND SWITCH
|
||||||
|
extern int BBSQUAL; // QUALITY OF BBS RELATIVE TO NODE
|
||||||
|
|
||||||
|
extern int NUMBEROFBUFFERS; // PACKET BUFFERS
|
||||||
|
extern int PACLEN; //MAX PACKET SIZE
|
||||||
|
|
||||||
|
// L2 SYSTEM TIMER RUNS AT 3 HZ
|
||||||
|
|
||||||
|
extern int T3; // LINK VALIDATION TIMER (3 MINS) (+ a bit to reduce RR collisions)
|
||||||
|
|
||||||
|
extern int L2KILLTIME; // IDLE LINK TIMER (16 MINS)
|
||||||
|
extern int L3LIVES; // MAX L3 HOPS
|
||||||
|
extern int L4N2; // LEVEL 4 RETRY COUNT
|
||||||
|
extern int L4LIMIT; // IDLE SESSION LIMIT - 15 MINS
|
||||||
|
extern int L4DELAY; // L4 DELAYED ACK TIMER
|
||||||
|
|
||||||
|
extern int BBS; // INCLUDE BBS SUPPORT
|
||||||
|
extern int NODE; // INCLUDE SWITCH SUPPORT
|
||||||
|
|
||||||
|
extern int FULL_CTEXT; // CTEXT ON ALL CONNECTS IF NZ
|
||||||
|
|
||||||
|
|
||||||
|
// Although externally streams are numbered 1 to 64, internally offsets are 0 - 63
|
||||||
|
|
||||||
|
extern BPQVECSTRUC DUMMYVEC; // Needed to force correct order of following
|
||||||
|
|
||||||
|
extern BPQVECSTRUC BPQHOSTVECTOR[BPQHOSTSTREAMS + 5];
|
||||||
|
|
||||||
|
extern int NODEORDER;
|
||||||
|
extern UCHAR LINKEDFLAG;
|
||||||
|
|
||||||
|
extern UCHAR UNPROTOCALL[80];
|
||||||
|
|
||||||
|
|
||||||
|
extern char * INFOMSG;
|
||||||
|
|
||||||
|
extern char * CTEXTMSG;
|
||||||
|
extern int CTEXTLEN;
|
||||||
|
|
||||||
|
extern UCHAR MYALIAS[7]; // ALIAS IN AX25 FORM
|
||||||
|
extern UCHAR BBSALIAS[7];
|
||||||
|
|
||||||
|
extern VOID * TRACE_Q; // TRANSMITTED FRAMES TO BE TRACED
|
||||||
|
|
||||||
|
extern char HEADERCHAR; // CHAR FOR _NODE HEADER MSGS
|
||||||
|
|
||||||
|
extern int AUTOSAVE; // AUTO SAVE NODES ON EXIT FLAG
|
||||||
|
extern int L4APPL; // Application for BBSCALL/ALIAS connects
|
||||||
|
extern int CFLAG; // C =HOST Command
|
||||||
|
|
||||||
|
extern VOID * IDMSG_Q; // ID/BEACONS WAITING TO BE SENT
|
||||||
|
|
||||||
|
extern struct DATAMESSAGE BTHDDR;
|
||||||
|
extern struct _MESSAGE IDHDDR;
|
||||||
|
|
||||||
|
extern VOID * IDMSG;
|
||||||
|
|
||||||
|
extern int L3TIMER; // TIMER FOR 'NODES' MESSAGE
|
||||||
|
extern int IDTIMER; // TIMER FOR ID MESSAGE
|
||||||
|
extern int BTTIMER; // TIMER FOR BT MESSAGE
|
||||||
|
|
||||||
|
extern int STATSTIME;
|
||||||
|
|
||||||
|
|
||||||
|
extern BOOL IPRequired;
|
||||||
|
extern int MaxHops;
|
||||||
|
extern int MAXRTT;
|
||||||
|
extern USHORT CWTABLE[];
|
||||||
|
extern TRANSPORTENTRY * L4TABLE;
|
||||||
|
extern UCHAR ROUTEQUAL;
|
||||||
|
extern UINT BPQMsg;
|
||||||
|
extern UCHAR ExcludeList[];
|
||||||
|
|
||||||
|
|
||||||
|
extern APPLCALLS APPLCALLTABLE[];
|
||||||
|
|
||||||
|
extern char VersionStringWithBuild[];
|
||||||
|
extern char VersionString[];
|
||||||
|
|
||||||
|
extern int MAXHEARDENTRIES;
|
||||||
|
extern int MHLEN;
|
||||||
|
|
||||||
|
extern int APPL1;
|
||||||
|
extern int PASSCMD;
|
||||||
|
extern int NUMBEROFCOMMANDS;
|
||||||
|
|
||||||
|
extern char * ConfigBuffer;
|
||||||
|
|
||||||
|
extern char * WL2KReportLine[];
|
||||||
|
|
||||||
|
extern struct CMDX COMMANDS[];
|
||||||
|
|
||||||
|
extern int QCOUNT, MAXBUFFS, MAXCIRCUITS, L4DEFAULTWINDOW, L4T1, CMDXLEN;
|
||||||
|
extern char CMDALIAS[ALIASLEN][NumberofAppls];
|
||||||
|
|
||||||
|
extern int SEMGETS;
|
||||||
|
extern int SEMRELEASES;
|
||||||
|
extern int SEMCLASHES;
|
||||||
|
extern int MINBUFFCOUNT;
|
||||||
|
|
||||||
|
extern UCHAR BPQDirectory[];
|
||||||
|
extern UCHAR BPQProgramDirectory[];
|
||||||
|
|
||||||
|
extern UCHAR WINMOR[];
|
||||||
|
extern UCHAR PACTORCALL[];
|
||||||
|
|
||||||
|
extern UCHAR MCOM;
|
||||||
|
extern UCHAR MUIONLY;
|
||||||
|
extern UCHAR MTX;
|
||||||
|
extern uint64_t MMASK;
|
||||||
|
|
||||||
|
extern UCHAR NODECALL[]; // NODES in ax.25
|
||||||
|
|
||||||
|
extern int L4CONNECTSOUT;
|
||||||
|
extern int L4CONNECTSIN;
|
||||||
|
extern int L4FRAMESTX;
|
||||||
|
extern int L4FRAMESRX;
|
||||||
|
extern int L4FRAMESRETRIED;
|
||||||
|
extern int OLDFRAMES;
|
||||||
|
extern int L3FRAMES;
|
||||||
|
|
||||||
|
extern char * PortConfig[];
|
||||||
|
extern struct SEM Semaphore;
|
||||||
|
extern UCHAR AuthorisedProgram; // Local Variable. Set if Program is on secure list
|
||||||
|
|
||||||
|
extern int REALTIMETICKS;
|
||||||
|
|
||||||
|
extern time_t CurrentSecs;
|
||||||
|
extern time_t lastSlowSecs;
|
||||||
|
extern time_t lastSaveSecs;
|
||||||
|
|
||||||
|
// SNMP Variables
|
||||||
|
|
||||||
|
extern int InOctets[64];
|
||||||
|
extern int OutOctets[64];
|
||||||
|
|
||||||
|
extern BOOL CloseAllNeeded;
|
||||||
|
extern int CloseOnError;
|
||||||
|
|
||||||
|
extern char * PortConfig[70];
|
||||||
|
extern struct TNCINFO * TNCInfo[71]; // Records are Malloc'd
|
||||||
|
|
||||||
|
#define MaxBPQPortNo 63 // Port 64 reserved for BBS Mon
|
||||||
|
#define MAXBPQPORTS 63
|
||||||
|
|
||||||
|
// IP, APRS use port ocnfig slots above the real port range
|
||||||
|
|
||||||
|
#define IPConfigSlot MaxBPQPortNo + 1
|
||||||
|
#define PortMapConfigSlot MaxBPQPortNo + 2
|
||||||
|
#define APRSConfigSlot MaxBPQPortNo + 3
|
||||||
|
|
||||||
|
|
||||||
|
extern char * UIUIDigi[MaxBPQPortNo + 1];
|
||||||
|
extern char UIUIDEST[MaxBPQPortNo + 1][11]; // Dest for Beacons
|
||||||
|
extern UCHAR FN[MaxBPQPortNo + 1][256]; // Filename
|
||||||
|
extern int Interval[MaxBPQPortNo + 1]; // Beacon Interval (Mins)
|
||||||
|
extern char Message[MaxBPQPortNo + 1][1000]; // Beacon Text
|
||||||
|
|
||||||
|
extern int MinCounter[MaxBPQPortNo + 1]; // Interval Countdown
|
||||||
|
extern BOOL SendFromFile[MaxBPQPortNo + 1];
|
||||||
|
|
||||||
|
extern BOOL MQTT;
|
||||||
|
extern char MQTT_HOST[80];
|
||||||
|
extern int MQTT_PORT;
|
||||||
|
extern char MQTT_USER[80];
|
||||||
|
extern char MQTT_PASS[80];
|
||||||
|
|
||||||
|
extern int SUPPORT2point2;
|
||||||
|
|
||||||
|
|
||||||
|
DllExport uint64_t APIENTRY GetPortFrequency(int PortNo, char * FreqStringMhz);
|
||||||
|
|
||||||
|
|
||||||
|
void hookL2SessionAccepted(int Port, char * remotecall, char * ourcall, struct _LINKTABLE * LINK);
|
||||||
|
void hookL2SessionDeleted(struct _LINKTABLE * LINK);
|
||||||
|
void hookL2SessionAttempt(int Port, char * ourcall, char * remotecall, struct _LINKTABLE * LINK);
|
||||||
|
|
||||||
|
void hookL4SessionAttempt(void * STREAM, char * remotecall, char * ourcall);
|
||||||
|
void hookL4SessionAccepted(void * STREAM, char * remotecall, char * ourcall);
|
||||||
|
void hookL4SessionDeleted(struct TNCINFO * TNC, void * STREAM);
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,216 +1,216 @@
|
|||||||
// Includes code from MiniUPnPc, used subject to the following conditions:
|
// Includes code from MiniUPnPc, used subject to the following conditions:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
MiniUPnPc
|
MiniUPnPc
|
||||||
Copyright (c) 2005-2020, Thomas BERNARD
|
Copyright (c) 2005-2020, Thomas BERNARD
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
modification, are permitted provided that the following conditions are met:
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
* Redistributions of source code must retain the above copyright notice,
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
this list of conditions and the following disclaimer.
|
this list of conditions and the following disclaimer.
|
||||||
* Redistributions in binary form must reproduce the above copyright notice,
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
this list of conditions and the following disclaimer in the documentation
|
this list of conditions and the following disclaimer in the documentation
|
||||||
and/or other materials provided with the distribution.
|
and/or other materials provided with the distribution.
|
||||||
* The name of the author may not be used to endorse or promote products
|
* The name of the author may not be used to endorse or promote products
|
||||||
derived from this software without specific prior written permission.
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
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
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
POSSIBILITY OF SUCH DAMAGE.
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MINIUPNP_STATICLIB
|
#define MINIUPNP_STATICLIB
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "upnpcommands.h"
|
#include "upnpcommands.h"
|
||||||
#include "miniupnpc.h"
|
#include "miniupnpc.h"
|
||||||
#include "upnperrors.h"
|
#include "upnperrors.h"
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef LINBPQ
|
#ifdef LINBPQ
|
||||||
#ifndef MACBPQ
|
#ifndef MACBPQ
|
||||||
#ifndef WIN32
|
#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
|
||||||
#endif
|
#endif
|
||||||
#ifdef MACBPQ
|
#ifdef MACBPQ
|
||||||
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnpcommands.h>
|
#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/miniupnpc.h>
|
||||||
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnperrors.h>
|
#include </usr/local/Cellar/miniupnpc/2.2.5/include/miniupnpc/upnperrors.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#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);
|
||||||
|
|
||||||
void Consoleprintf(const char * format, ...);
|
void Consoleprintf(const char * format, ...);
|
||||||
|
|
||||||
struct UPNP
|
struct UPNP
|
||||||
{
|
{
|
||||||
struct UPNP * Next;
|
struct UPNP * Next;
|
||||||
char * Protocol;
|
char * Protocol;
|
||||||
char * LANport;
|
char * LANport;
|
||||||
char * WANPort;
|
char * WANPort;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct UPNP * UPNPConfig;
|
extern struct UPNP * UPNPConfig;
|
||||||
|
|
||||||
char * controlURL = 0;
|
char * controlURL = 0;
|
||||||
char * servicetype = 0;
|
char * servicetype = 0;
|
||||||
char iaddr[] = "IP";
|
char iaddr[] = "IP";
|
||||||
char * inClient = NULL;
|
char * inClient = NULL;
|
||||||
#ifdef LINBPQ
|
#ifdef LINBPQ
|
||||||
char desc[] = "LinBPQ ";
|
char desc[] = "LinBPQ ";
|
||||||
#else
|
#else
|
||||||
char desc[] = "BPQ32 ";
|
char desc[] = "BPQ32 ";
|
||||||
#endif
|
#endif
|
||||||
char * remoteHost = NULL;
|
char * remoteHost = NULL;
|
||||||
char * leaseDuration = NULL;
|
char * leaseDuration = NULL;
|
||||||
|
|
||||||
struct UPNPDev * devlist = 0;
|
struct UPNPDev * devlist = 0;
|
||||||
char lanaddr[64] = "unset"; /* my ip address on the LAN */
|
char lanaddr[64] = "unset"; /* my ip address on the LAN */
|
||||||
char wanaddr[64] = "unset"; /* my ip address on the LAN */
|
char wanaddr[64] = "unset"; /* my ip address on the LAN */
|
||||||
struct UPNPUrls urls;
|
struct UPNPUrls urls;
|
||||||
struct IGDdatas data;
|
struct IGDdatas data;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
const char * rootdescurl = 0;
|
const char * rootdescurl = 0;
|
||||||
const char * multicastif = 0;
|
const char * multicastif = 0;
|
||||||
const char * minissdpdpath = 0;
|
const char * minissdpdpath = 0;
|
||||||
#ifdef UPNP_LOCAL_PORT_ANY
|
#ifdef UPNP_LOCAL_PORT_ANY
|
||||||
int localport = UPNP_LOCAL_PORT_ANY;
|
int localport = UPNP_LOCAL_PORT_ANY;
|
||||||
#else
|
#else
|
||||||
int localport = 0;
|
int localport = 0;
|
||||||
#endif
|
#endif
|
||||||
int retcode = 0;
|
int retcode = 0;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
int ipv6 = 0;
|
int ipv6 = 0;
|
||||||
int ignore = 0;
|
int ignore = 0;
|
||||||
unsigned char ttl = 2;
|
unsigned char ttl = 2;
|
||||||
|
|
||||||
|
|
||||||
int upnpInit()
|
int upnpInit()
|
||||||
{
|
{
|
||||||
struct UPNP * Config = UPNPConfig;
|
struct UPNP * Config = UPNPConfig;
|
||||||
int i;
|
int i;
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
WSADATA wsaData;
|
WSADATA wsaData;
|
||||||
int nResult = WSAStartup(MAKEWORD(2,2), &wsaData);
|
int nResult = WSAStartup(MAKEWORD(2,2), &wsaData);
|
||||||
if(nResult != NO_ERROR)
|
if(nResult != NO_ERROR)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "WSAStartup() failed.\n");
|
fprintf(stderr, "WSAStartup() failed.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (Config)
|
while (Config)
|
||||||
{
|
{
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
#if MINIUPNPC_API_VERSION == 10
|
#if MINIUPNPC_API_VERSION == 10
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
||||||
#else
|
#else
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
||||||
#endif
|
#endif
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
Consoleprintf("Failed to find a UPNP device");
|
Consoleprintf("Failed to find a UPNP device");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MINIUPNPC_API_VERSION == 18
|
#if MINIUPNPC_API_VERSION == 18
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
||||||
#else
|
#else
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
AddMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
AddMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
||||||
Config = Config->Next;
|
Config = Config->Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int upnpClose()
|
int upnpClose()
|
||||||
{
|
{
|
||||||
struct UPNP * Config = UPNPConfig;
|
struct UPNP * Config = UPNPConfig;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
while (Config)
|
while (Config)
|
||||||
{
|
{
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
#if MINIUPNPC_API_VERSION == 10
|
#if MINIUPNPC_API_VERSION == 10
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
|
||||||
#else
|
#else
|
||||||
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
|
||||||
#endif
|
#endif
|
||||||
if (devlist == NULL)
|
if (devlist == NULL)
|
||||||
{
|
{
|
||||||
Consoleprintf("Failed to find a UPNP device");
|
Consoleprintf("Failed to find a UPNP device");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MINIUPNPC_API_VERSION == 18
|
#if MINIUPNPC_API_VERSION == 18
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr), wanaddr, sizeof(wanaddr));
|
||||||
#else
|
#else
|
||||||
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
i = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DeleteMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
DeleteMap(devlist->descURL, Config->LANport, Config->WANPort, Config->Protocol);
|
||||||
Config = Config->Next;
|
Config = Config->Next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int AddMap(char * controlURL, char * eport, char * iport, char * proto)
|
int AddMap(char * controlURL, char * eport, char * iport, char * proto)
|
||||||
{
|
{
|
||||||
int r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
|
int r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype,
|
||||||
eport, iport, lanaddr, desc,
|
eport, iport, lanaddr, desc,
|
||||||
proto, remoteHost, leaseDuration);
|
proto, remoteHost, leaseDuration);
|
||||||
|
|
||||||
if (r != UPNPCOMMAND_SUCCESS)
|
if (r != UPNPCOMMAND_SUCCESS)
|
||||||
{
|
{
|
||||||
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
Consoleprintf("UPNP AddPortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DeleteMap(char * controlURL, char * eport, char * iport, char * proto)
|
int DeleteMap(char * controlURL, char * eport, char * iport, char * proto)
|
||||||
{
|
{
|
||||||
int r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, proto, remoteHost);
|
int r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, eport, proto, remoteHost);
|
||||||
|
|
||||||
if(r != UPNPCOMMAND_SUCCESS)
|
if(r != UPNPCOMMAND_SUCCESS)
|
||||||
{
|
{
|
||||||
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) failed with code %d (%s)", eport, iport, lanaddr, r, strupnperror(r));
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
Consoleprintf("UPNP DeletePortMapping(%s, %s, %s) Succeeded", eport, iport, lanaddr, r);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,126 +1,126 @@
|
|||||||
|
|
||||||
#ifdef Kernel
|
#ifdef Kernel
|
||||||
|
|
||||||
#define Vers 5,2,9,2
|
#define Vers 5,2,9,2
|
||||||
#define Verstring "5.2.9.2\0"
|
#define Verstring "5.2.9.2\0"
|
||||||
#define Datestring "September 2012"
|
#define Datestring "September 2012"
|
||||||
#define VerComments "G8BPQ Packet Switch V5.2.9.2\0"
|
#define VerComments "G8BPQ Packet Switch V5.2.9.2\0"
|
||||||
#define VerCopyright "Copyright © 2001-2012 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2001-2012 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "BPQ32 Switch\0"
|
#define VerDesc "BPQ32 Switch\0"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KVers 6,0,24,70
|
#define KVers 6,0,24,70
|
||||||
#define KVerstring "6.0.24.70\0"
|
#define KVerstring "6.0.24.70\0"
|
||||||
|
|
||||||
|
|
||||||
#ifdef CKernel
|
#ifdef CKernel
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define Datestring "April 2025"
|
#define Datestring "April 2025"
|
||||||
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
||||||
#define VerCopyright "Copyright © 2001-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2001-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "BPQ32 Switch\0"
|
#define VerDesc "BPQ32 Switch\0"
|
||||||
#define VerProduct "BPQ32"
|
#define VerProduct "BPQ32"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TermTCP
|
#ifdef TermTCP
|
||||||
|
|
||||||
#define Vers 1,0,16,2
|
#define Vers 1,0,16,2
|
||||||
#define Verstring "1.0.16.2\0"
|
#define Verstring "1.0.16.2\0"
|
||||||
#define VerComments "Internet Terminal for G8BPQ Packet Switch\0"
|
#define VerComments "Internet Terminal for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Simple TCP Terminal Program for G8BPQ Switch\0"
|
#define VerDesc "Simple TCP Terminal Program for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQTermTCP"
|
#define VerProduct "BPQTermTCP"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BPQTerm
|
#ifdef BPQTerm
|
||||||
|
|
||||||
#define Vers 2,2,5,2
|
#define Vers 2,2,5,2
|
||||||
#define Verstring "2.2.5.2\0"
|
#define Verstring "2.2.5.2\0"
|
||||||
#define VerComments "Simple Terminal for G8BPQ Packet Switch\0"
|
#define VerComments "Simple Terminal for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Simple Terminal Program for G8BPQ Switch\0"
|
#define VerDesc "Simple Terminal Program for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQTerminal"
|
#define VerProduct "BPQTerminal"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BPQTermMDI
|
#ifdef BPQTermMDI
|
||||||
|
|
||||||
#define Vers 2,2,0,3
|
#define Vers 2,2,0,3
|
||||||
#define Verstring "2.2.0.3\0"
|
#define Verstring "2.2.0.3\0"
|
||||||
#define VerComments "MDI Terminal for G8BPQ Packet Switch\0"
|
#define VerComments "MDI Terminal for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 1999-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "MDI Terminal Program for G8BPQ Switch\0"
|
#define VerDesc "MDI Terminal Program for G8BPQ Switch\0"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MAIL
|
#ifdef MAIL
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define VerComments "Mail server for G8BPQ Packet Switch\0"
|
#define VerComments "Mail server for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Mail server for G8BPQ's 32 Bit Switch\0"
|
#define VerDesc "Mail server for G8BPQ's 32 Bit Switch\0"
|
||||||
#define VerProduct "BPQMail"
|
#define VerProduct "BPQMail"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HOSTMODES
|
#ifdef HOSTMODES
|
||||||
|
|
||||||
#define Vers 1,1,8,1
|
#define Vers 1,1,8,1
|
||||||
#define Verstring "1.1.8.1\0"
|
#define Verstring "1.1.8.1\0"
|
||||||
//#define SPECIALVERSION "Test 3"
|
//#define SPECIALVERSION "Test 3"
|
||||||
#define VerComments "Host Modes Emulator for G8BPQ Packet Switch\0"
|
#define VerComments "Host Modes Emulator for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2009-2019 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2009-2019 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Host Modes Emulator for G8BPQ's 32 Bit Switch\0"
|
#define VerDesc "Host Modes Emulator for G8BPQ's 32 Bit Switch\0"
|
||||||
#define VerProduct "BPQHostModes"
|
#define VerProduct "BPQHostModes"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef UIUTIL
|
#ifdef UIUTIL
|
||||||
|
|
||||||
#define Vers 0,1,3,1
|
#define Vers 0,1,3,1
|
||||||
#define Verstring "0.1.3.1\0"
|
#define Verstring "0.1.3.1\0"
|
||||||
#define VerComments "Beacon Utility for G8BPQ Packet Switch\0"
|
#define VerComments "Beacon Utility for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2011-2019 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2011-2019 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Beacon Utility for G8BPQ Switch\0"
|
#define VerDesc "Beacon Utility for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQUIUtil"
|
#define VerProduct "BPQUIUtil"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef AUTH
|
#ifdef AUTH
|
||||||
|
|
||||||
#define Vers 0,1,0,0
|
#define Vers 0,1,0,0
|
||||||
#define Verstring "0.1.0.0\0"
|
#define Verstring "0.1.0.0\0"
|
||||||
#define VerComments "Password Generation Utility for G8BPQ Packet Switch\0"
|
#define VerComments "Password Generation Utility for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2011-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Password Generation Utility for G8BPQ Switch\0"
|
#define VerDesc "Password Generation Utility for G8BPQ Switch\0"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef APRS
|
#ifdef APRS
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define VerComments "APRS Client for G8BPQ Switch\0"
|
#define VerComments "APRS Client for G8BPQ Switch\0"
|
||||||
#define VerCopyright "Copyright © 2012-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2012-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "APRS Client for G8BPQ Switch\0"
|
#define VerDesc "APRS Client for G8BPQ Switch\0"
|
||||||
#define VerProduct "BPQAPRS"
|
#define VerProduct "BPQAPRS"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CHAT
|
#ifdef CHAT
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define VerComments "Chat server for G8BPQ Packet Switch\0"
|
#define VerComments "Chat server for G8BPQ Packet Switch\0"
|
||||||
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2009-2025 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "Chat server for G8BPQ's 32 Bit Switch\0"
|
#define VerDesc "Chat server for G8BPQ's 32 Bit Switch\0"
|
||||||
#define VerProduct "BPQChat"
|
#define VerProduct "BPQChat"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,435 +1,435 @@
|
|||||||
|
|
||||||
#define _CRT_SECURE_NO_DEPRECATE
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
|
||||||
#ifndef NOMQTT
|
#ifndef NOMQTT
|
||||||
|
|
||||||
#include "MQTTAsync.h"
|
#include "MQTTAsync.h"
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cheaders.h"
|
#include "cheaders.h"
|
||||||
#include "asmstrucs.h"
|
#include "asmstrucs.h"
|
||||||
#include "mqtt.h"
|
#include "mqtt.h"
|
||||||
|
|
||||||
extern int MQTT_Connecting;
|
extern int MQTT_Connecting;
|
||||||
extern int MQTT_Connected;
|
extern int MQTT_Connected;
|
||||||
|
|
||||||
|
|
||||||
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen);
|
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen);
|
||||||
|
|
||||||
MQTTAsync client = NULL;
|
MQTTAsync client = NULL;
|
||||||
|
|
||||||
time_t MQTTLastStatus = 0;
|
time_t MQTTLastStatus = 0;
|
||||||
|
|
||||||
void MQTTSendStatus()
|
void MQTTSendStatus()
|
||||||
{
|
{
|
||||||
char topic[256];
|
char topic[256];
|
||||||
char payload[128];
|
char payload[128];
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/%s", NODECALLLOPPED);
|
sprintf(topic, "PACKETNODE/%s", NODECALLLOPPED);
|
||||||
strcpy(payload,"{\"status\":\"online\"}");
|
strcpy(payload,"{\"status\":\"online\"}");
|
||||||
|
|
||||||
MQTTSend(topic, payload, strlen(payload));
|
MQTTSend(topic, payload, strlen(payload));
|
||||||
MQTTLastStatus = time(NULL);
|
MQTTLastStatus = time(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTTimer()
|
void MQTTTimer()
|
||||||
{
|
{
|
||||||
if (MQTT_Connecting == 0 && MQTT_Connected == 0)
|
if (MQTT_Connecting == 0 && MQTT_Connected == 0)
|
||||||
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
||||||
|
|
||||||
if ((time(NULL) - MQTTLastStatus) > 1800)
|
if ((time(NULL) - MQTTLastStatus) > 1800)
|
||||||
MQTTSendStatus();
|
MQTTSendStatus();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MQTTDisconnect()
|
void MQTTDisconnect()
|
||||||
{
|
{
|
||||||
if (MQTT_Connected)
|
if (MQTT_Connected)
|
||||||
{
|
{
|
||||||
MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
|
MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
|
||||||
|
|
||||||
MQTTAsync_disconnect(client, &disc_opts);
|
MQTTAsync_disconnect(client, &disc_opts);
|
||||||
|
|
||||||
MQTT_Connecting = MQTT_Connected = 0;
|
MQTT_Connecting = MQTT_Connected = 0;
|
||||||
|
|
||||||
// Try to recconect. If it fails system will rety every minute
|
// Try to recconect. If it fails system will rety every minute
|
||||||
|
|
||||||
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen)
|
DllExport int APIENTRY MQTTSend(char * topic, char * Msg, int MsgLen)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
|
|
||||||
pubmsg.payload = Msg;
|
pubmsg.payload = Msg;
|
||||||
pubmsg.payloadlen = MsgLen;
|
pubmsg.payloadlen = MsgLen;
|
||||||
rc = MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
rc = MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
||||||
|
|
||||||
if (rc)
|
if (rc)
|
||||||
MQTTDisconnect();
|
MQTTDisconnect();
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void onConnect(void* context, MQTTAsync_successData* response)
|
void onConnect(void* context, MQTTAsync_successData* response)
|
||||||
{
|
{
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
|
|
||||||
MQTT_Connecting = 0;
|
MQTT_Connecting = 0;
|
||||||
MQTT_Connected = 1;
|
MQTT_Connected = 1;
|
||||||
|
|
||||||
printf("Successful MQTT connection\n");
|
printf("Successful MQTT connection\n");
|
||||||
|
|
||||||
// Send start up message
|
// Send start up message
|
||||||
|
|
||||||
MQTTSendStatus();
|
MQTTSendStatus();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void onConnectFailure(void* context, MQTTAsync_failureData* response)
|
void onConnectFailure(void* context, MQTTAsync_failureData* response)
|
||||||
{
|
{
|
||||||
printf("MQTT connection failed, rc %d\n", response ? response->code : 0);
|
printf("MQTT connection failed, rc %d\n", response ? response->code : 0);
|
||||||
MQTT_Connecting = 0;
|
MQTT_Connecting = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char* jsonEncodeMessage(MESSAGE *msg)
|
char* jsonEncodeMessage(MESSAGE *msg)
|
||||||
{
|
{
|
||||||
char From[10];
|
char From[10];
|
||||||
char To[10];
|
char To[10];
|
||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
unsigned long long SaveMMASK = MMASK;
|
unsigned long long SaveMMASK = MMASK;
|
||||||
BOOL SaveMTX = MTX;
|
BOOL SaveMTX = MTX;
|
||||||
BOOL SaveMCOM = MCOM;
|
BOOL SaveMCOM = MCOM;
|
||||||
BOOL SaveMUI = MUIONLY;
|
BOOL SaveMUI = MUIONLY;
|
||||||
int len;
|
int len;
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
char payload_timestamp[16];
|
char payload_timestamp[16];
|
||||||
|
|
||||||
struct tm * TM = localtime(&msg->Timestamp);
|
struct tm * TM = localtime(&msg->Timestamp);
|
||||||
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
||||||
|
|
||||||
|
|
||||||
IntSetTraceOptionsEx(MMASK, TRUE, TRUE, FALSE);
|
IntSetTraceOptionsEx(MMASK, TRUE, TRUE, FALSE);
|
||||||
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
||||||
To[ConvFromAX25(msg->DEST, To)] = 0;
|
To[ConvFromAX25(msg->DEST, To)] = 0;
|
||||||
|
|
||||||
len = IntDecodeFrame(msg, buffer, msg->Timestamp, 0xffffffffffffffff, FALSE, FALSE);
|
len = IntDecodeFrame(msg, buffer, msg->Timestamp, 0xffffffffffffffff, FALSE, FALSE);
|
||||||
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
||||||
|
|
||||||
buffer[len] = 0;
|
buffer[len] = 0;
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
||||||
msg_str = zalloc(2048);
|
msg_str = zalloc(2048);
|
||||||
|
|
||||||
sprintf(msg_str, "{\"from\": \"%s\", \"to\": \"%s\", \"payload\": \"%s\", \"port\": %d, \"timestamp\": \"%s\"}",
|
sprintf(msg_str, "{\"from\": \"%s\", \"to\": \"%s\", \"payload\": \"%s\", \"port\": %d, \"timestamp\": \"%s\"}",
|
||||||
From, To, buffer, msg->PORT, payload_timestamp);
|
From, To, buffer, msg->PORT, payload_timestamp);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
json_t *root;
|
json_t *root;
|
||||||
|
|
||||||
root = json_object();
|
root = json_object();
|
||||||
|
|
||||||
json_object_set_new(root, "from", json_string(From));
|
json_object_set_new(root, "from", json_string(From));
|
||||||
json_object_set_new(root, "to", json_string(To));
|
json_object_set_new(root, "to", json_string(To));
|
||||||
|
|
||||||
|
|
||||||
json_object_set_new(root, "payload", json_string(buffer));
|
json_object_set_new(root, "payload", json_string(buffer));
|
||||||
json_object_set_new(root, "port", json_integer(msg->PORT));
|
json_object_set_new(root, "port", json_integer(msg->PORT));
|
||||||
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
sprintf(payload_timestamp, "%02d:%02d:%02d", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
||||||
json_object_set_new(root, "timestamp", json_string(payload_timestamp));
|
json_object_set_new(root, "timestamp", json_string(payload_timestamp));
|
||||||
msg_str = json_dumps(root, 0);
|
msg_str = json_dumps(root, 0);
|
||||||
json_decref(root);
|
json_decref(root);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return msg_str;
|
return msg_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSTX(void *message)
|
void MQTTKISSTX(void *message)
|
||||||
{
|
{
|
||||||
MESSAGE *msg = (MESSAGE *)message;
|
MESSAGE *msg = (MESSAGE *)message;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/sent/%d", NODECALLLOPPED, msg->PORT);
|
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/sent/%d", NODECALLLOPPED, msg->PORT);
|
||||||
|
|
||||||
msg_str = jsonEncodeMessage(msg);
|
msg_str = jsonEncodeMessage(msg);
|
||||||
|
|
||||||
MQTTSend(topic, msg_str, strlen(msg_str));
|
MQTTSend(topic, msg_str, strlen(msg_str));
|
||||||
|
|
||||||
free(msg_str);
|
free(msg_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT)
|
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT)
|
||||||
{
|
{
|
||||||
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/kiss/%s/sent/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
sprintf(topic, "PACKETNODE/kiss/%s/sent/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
||||||
|
|
||||||
MQTTSend(topic, buffer, bufferLength);
|
MQTTSend(topic, buffer, bufferLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MQTTKISSRX(void *message)
|
void MQTTKISSRX(void *message)
|
||||||
{
|
{
|
||||||
MESSAGE *msg = (MESSAGE *)message;
|
MESSAGE *msg = (MESSAGE *)message;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
|
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/rcvd/%d", NODECALLLOPPED, msg->PORT);
|
sprintf(topic, "PACKETNODE/ax25/trace/bpqformat/%s/rcvd/%d", NODECALLLOPPED, msg->PORT);
|
||||||
msg_str = jsonEncodeMessage(msg);
|
msg_str = jsonEncodeMessage(msg);
|
||||||
|
|
||||||
MQTTSend(topic, msg_str, strlen(msg_str));
|
MQTTSend(topic, msg_str, strlen(msg_str));
|
||||||
|
|
||||||
free(msg_str);
|
free(msg_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT)
|
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT)
|
||||||
{
|
{
|
||||||
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
PPORTCONTROL PPORT = (PPORTCONTROL)PORT;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/kiss/%s/rcvd/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
sprintf(topic, "PACKETNODE/kiss/%s/rcvd/%d", NODECALLLOPPED, PPORT->PORTNUMBER);
|
||||||
|
|
||||||
MQTTSend(topic, buffer, bufferLength);
|
MQTTSend(topic, buffer, bufferLength);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTReportSession(char * Msg)
|
void MQTTReportSession(char * Msg)
|
||||||
{
|
{
|
||||||
char topic[256];
|
char topic[256];
|
||||||
sprintf(topic, "PACKETNODE/stats/session/%s", NODECALLLOPPED);
|
sprintf(topic, "PACKETNODE/stats/session/%s", NODECALLLOPPED);
|
||||||
|
|
||||||
MQTTSend(topic, Msg, strlen(Msg));
|
MQTTSend(topic, Msg, strlen(Msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char* replace(char* str, char* a, char* b)
|
char* replace(char* str, char* a, char* b)
|
||||||
{
|
{
|
||||||
int len = strlen(str);
|
int len = strlen(str);
|
||||||
int lena = strlen(a), lenb = strlen(b);
|
int lena = strlen(a), lenb = strlen(b);
|
||||||
char * p;
|
char * p;
|
||||||
|
|
||||||
for (p = str; p = strstr(p, a); p) {
|
for (p = str; p = strstr(p, a); p) {
|
||||||
if (lena != lenb) // shift end as needed
|
if (lena != lenb) // shift end as needed
|
||||||
memmove(p + lenb, p + lena,
|
memmove(p + lenb, p + lena,
|
||||||
len - (p - str) + lenb);
|
len - (p - str) + lenb);
|
||||||
memcpy(p, b, lenb);
|
memcpy(p, b, lenb);
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
int MQTTPublish(void *message, char *topic)
|
int MQTTPublish(void *message, char *topic)
|
||||||
{
|
{
|
||||||
MESSAGE *msg = (MESSAGE *)message;
|
MESSAGE *msg = (MESSAGE *)message;
|
||||||
char From[10];
|
char From[10];
|
||||||
char To[10];
|
char To[10];
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
|
|
||||||
unsigned long long SaveMMASK = MMASK;
|
unsigned long long SaveMMASK = MMASK;
|
||||||
BOOL SaveMTX = MTX;
|
BOOL SaveMTX = MTX;
|
||||||
BOOL SaveMCOM = MCOM;
|
BOOL SaveMCOM = MCOM;
|
||||||
BOOL SaveMUI = MUIONLY;
|
BOOL SaveMUI = MUIONLY;
|
||||||
int len;
|
int len;
|
||||||
char* replaced_buffer;
|
char* replaced_buffer;
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
|
|
||||||
time_t timestamp = msg->Timestamp;
|
time_t timestamp = msg->Timestamp;
|
||||||
|
|
||||||
|
|
||||||
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
||||||
To[ConvFromAX25(msg->DEST, To)] = 0;
|
To[ConvFromAX25(msg->DEST, To)] = 0;
|
||||||
|
|
||||||
|
|
||||||
IntSetTraceOptionsEx(8, TRUE, TRUE, FALSE);
|
IntSetTraceOptionsEx(8, TRUE, TRUE, FALSE);
|
||||||
len = IntDecodeFrame(msg, buffer, timestamp, 1, FALSE, FALSE);
|
len = IntDecodeFrame(msg, buffer, timestamp, 1, FALSE, FALSE);
|
||||||
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
IntSetTraceOptionsEx(SaveMMASK, SaveMTX, SaveMCOM, SaveMUI);
|
||||||
|
|
||||||
// MQTT _really_ doesn't like \r, so replace it with something
|
// MQTT _really_ doesn't like \r, so replace it with something
|
||||||
// that is at least human readable
|
// that is at least human readable
|
||||||
|
|
||||||
replaced_buffer = replace(buffer, "\r", "\r\n");
|
replaced_buffer = replace(buffer, "\r", "\r\n");
|
||||||
|
|
||||||
pubmsg.payload = replaced_buffer;
|
pubmsg.payload = replaced_buffer;
|
||||||
pubmsg.payloadlen = strlen(replaced_buffer);
|
pubmsg.payloadlen = strlen(replaced_buffer);
|
||||||
|
|
||||||
printf("%s\n", replaced_buffer);
|
printf("%s\n", replaced_buffer);
|
||||||
|
|
||||||
return MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
return MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
int MQTTConnect(char* host, int port, char* user, char* pass)
|
int MQTTConnect(char* host, int port, char* user, char* pass)
|
||||||
{
|
{
|
||||||
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
|
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
|
||||||
int rc;
|
int rc;
|
||||||
char hostString[256];
|
char hostString[256];
|
||||||
|
|
||||||
sprintf(hostString, "tcp://%s:%d", host, port);
|
sprintf(hostString, "tcp://%s:%d", host, port);
|
||||||
|
|
||||||
printf("MQTT Connect to %s\n", hostString);
|
printf("MQTT Connect to %s\n", hostString);
|
||||||
|
|
||||||
rc = MQTTAsync_create(&client, hostString, NODECALLLOPPED, MQTTCLIENT_PERSISTENCE_NONE, NULL);
|
rc = MQTTAsync_create(&client, hostString, NODECALLLOPPED, MQTTCLIENT_PERSISTENCE_NONE, NULL);
|
||||||
|
|
||||||
if (rc != MQTTASYNC_SUCCESS)
|
if (rc != MQTTASYNC_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("Failed to create client, return code %d\n", rc);
|
printf("Failed to create client, return code %d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn_opts.keepAliveInterval = 20;
|
conn_opts.keepAliveInterval = 20;
|
||||||
conn_opts.cleansession = 1;
|
conn_opts.cleansession = 1;
|
||||||
conn_opts.username = user;
|
conn_opts.username = user;
|
||||||
conn_opts.password = pass;
|
conn_opts.password = pass;
|
||||||
conn_opts.onSuccess = onConnect;
|
conn_opts.onSuccess = onConnect;
|
||||||
conn_opts.onFailure = onConnectFailure;
|
conn_opts.onFailure = onConnectFailure;
|
||||||
// conn_opts.automaticReconnect = 1;
|
// conn_opts.automaticReconnect = 1;
|
||||||
// conn_opts.minRetryInterval = 30;
|
// conn_opts.minRetryInterval = 30;
|
||||||
// conn_opts.maxRetryInterval = 300;
|
// conn_opts.maxRetryInterval = 300;
|
||||||
|
|
||||||
rc = MQTTAsync_connect(client, &conn_opts);
|
rc = MQTTAsync_connect(client, &conn_opts);
|
||||||
|
|
||||||
if (rc != MQTTASYNC_SUCCESS)
|
if (rc != MQTTASYNC_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("Failed to start connect, return code %d\n", rc);
|
printf("Failed to start connect, return code %d\n", rc);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
MQTT_Connecting = 1;
|
MQTT_Connecting = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Message Database Entry. Designed to be compatible with FBB
|
// Message Database Entry. Designed to be compatible with FBB
|
||||||
|
|
||||||
#define NBBBS 160 // Max BBSes we can forward to. Must be Multiple of 8, and must be 80 for FBB compatibliliy
|
#define NBBBS 160 // Max BBSes we can forward to. Must be Multiple of 8, and must be 80 for FBB compatibliliy
|
||||||
#define NBMASK NBBBS/8 // Number of bytes in Forward bitlists.
|
#define NBMASK NBBBS/8 // Number of bytes in Forward bitlists.
|
||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
struct MsgInfo
|
struct MsgInfo
|
||||||
{
|
{
|
||||||
char type;
|
char type;
|
||||||
char status;
|
char status;
|
||||||
int number;
|
int number;
|
||||||
int length;
|
int length;
|
||||||
int xdatereceived;
|
int xdatereceived;
|
||||||
char bbsfrom[7]; // ? BBS we got it from ?
|
char bbsfrom[7]; // ? BBS we got it from ?
|
||||||
char via[41];
|
char via[41];
|
||||||
char from[7];
|
char from[7];
|
||||||
char to[7];
|
char to[7];
|
||||||
char bid[13];
|
char bid[13];
|
||||||
char title[61];
|
char title[61];
|
||||||
int nntpnum; // Number within topic (ie Bull TO Addr) - used for nntp
|
int nntpnum; // Number within topic (ie Bull TO Addr) - used for nntp
|
||||||
|
|
||||||
UCHAR B2Flags; // Not all flags specific to B2
|
UCHAR B2Flags; // Not all flags specific to B2
|
||||||
|
|
||||||
#define B2Msg 1 // Set if Message File is a formatted B2 message
|
#define B2Msg 1 // Set if Message File is a formatted B2 message
|
||||||
#define Attachments 2 // Set if B2 message has attachments
|
#define Attachments 2 // Set if B2 message has attachments
|
||||||
#define FromPaclink 4
|
#define FromPaclink 4
|
||||||
#define FromCMS 8
|
#define FromCMS 8
|
||||||
#define FromRMSExpress 16
|
#define FromRMSExpress 16
|
||||||
#define RadioOnlyMsg 32 // Received using call-T
|
#define RadioOnlyMsg 32 // Received using call-T
|
||||||
#define RadioOnlyFwd 64 // Received using call-R
|
#define RadioOnlyFwd 64 // Received using call-R
|
||||||
#define WarnNotForwardedSent 128
|
#define WarnNotForwardedSent 128
|
||||||
|
|
||||||
int xdatecreated;
|
int xdatecreated;
|
||||||
int xdatechanged;
|
int xdatechanged;
|
||||||
UCHAR fbbs[NBMASK];
|
UCHAR fbbs[NBMASK];
|
||||||
UCHAR forw[NBMASK];
|
UCHAR forw[NBMASK];
|
||||||
char emailfrom[41];
|
char emailfrom[41];
|
||||||
char Locked; // Set if selected for sending (NTS Pickup)
|
char Locked; // Set if selected for sending (NTS Pickup)
|
||||||
char Defered; // FBB response '=' received
|
char Defered; // FBB response '=' received
|
||||||
UCHAR UTF8; // Set if Message is in UTF8 (ie from POP/SMTP)
|
UCHAR UTF8; // Set if Message is in UTF8 (ie from POP/SMTP)
|
||||||
|
|
||||||
// For 64 bit time_t compatibility define as long long
|
// For 64 bit time_t compatibility define as long long
|
||||||
// (so struct is same with 32 or 64 bit time_t)
|
// (so struct is same with 32 or 64 bit time_t)
|
||||||
|
|
||||||
int64_t datereceived;
|
int64_t datereceived;
|
||||||
int64_t datecreated;
|
int64_t datecreated;
|
||||||
int64_t datechanged;
|
int64_t datechanged;
|
||||||
|
|
||||||
char Spare[61 - 24]; // For future use
|
char Spare[61 - 24]; // For future use
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
void MQTTMessageEvent(void* message)
|
void MQTTMessageEvent(void* message)
|
||||||
{
|
{
|
||||||
struct MsgInfo* msg = (struct MsgInfo *)message;
|
struct MsgInfo* msg = (struct MsgInfo *)message;
|
||||||
char *msg_str;
|
char *msg_str;
|
||||||
char * ptr;
|
char * ptr;
|
||||||
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
|
||||||
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
|
||||||
char topic[256];
|
char topic[256];
|
||||||
|
|
||||||
json_t *root = json_object();
|
json_t *root = json_object();
|
||||||
json_object_set_new(root, "id", json_integer(msg->number));
|
json_object_set_new(root, "id", json_integer(msg->number));
|
||||||
json_object_set_new(root, "size", json_integer(msg->length));
|
json_object_set_new(root, "size", json_integer(msg->length));
|
||||||
json_object_set_new(root, "type", json_string(msg->type == 'P' ? "P" : "B"));
|
json_object_set_new(root, "type", json_string(msg->type == 'P' ? "P" : "B"));
|
||||||
json_object_set_new(root, "to", json_string(msg->to));
|
json_object_set_new(root, "to", json_string(msg->to));
|
||||||
json_object_set_new(root, "from", json_string(msg->from));
|
json_object_set_new(root, "from", json_string(msg->from));
|
||||||
json_object_set_new(root, "subj", json_string(msg->title));
|
json_object_set_new(root, "subj", json_string(msg->title));
|
||||||
|
|
||||||
switch(msg->status) {
|
switch(msg->status) {
|
||||||
case 'N':
|
case 'N':
|
||||||
json_object_set_new(root, "event", json_string("newmsg"));
|
json_object_set_new(root, "event", json_string("newmsg"));
|
||||||
break;
|
break;
|
||||||
case 'F':
|
case 'F':
|
||||||
json_object_set_new(root, "event", json_string("fwded"));
|
json_object_set_new(root, "event", json_string("fwded"));
|
||||||
break;
|
break;
|
||||||
case 'R':
|
case 'R':
|
||||||
json_object_set_new(root, "event", json_string("read"));
|
json_object_set_new(root, "event", json_string("read"));
|
||||||
break;
|
break;
|
||||||
case 'K':
|
case 'K':
|
||||||
json_object_set_new(root, "event", json_string("killed"));
|
json_object_set_new(root, "event", json_string("killed"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_str = json_dumps(root, 0);
|
msg_str = json_dumps(root, 0);
|
||||||
|
|
||||||
pubmsg.payload = msg_str;
|
pubmsg.payload = msg_str;
|
||||||
pubmsg.payloadlen = strlen(msg_str);
|
pubmsg.payloadlen = strlen(msg_str);
|
||||||
|
|
||||||
|
|
||||||
sprintf(topic, "PACKETNODE/event/%s/pmsg", NODECALLLOPPED);
|
sprintf(topic, "PACKETNODE/event/%s/pmsg", NODECALLLOPPED);
|
||||||
|
|
||||||
MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
MQTTAsync_sendMessage(client, topic, &pubmsg, &opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
// Dummies ofr build without MQTT libraries
|
// Dummies ofr build without MQTT libraries
|
||||||
|
|
||||||
int MQTTConnect(char* host, int port, char* user, char* pass)
|
int MQTTConnect(char* host, int port, char* user, char* pass)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MQTTKISSTX(void *message) {};
|
void MQTTKISSTX(void *message) {};
|
||||||
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
void MQTTKISSTX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
||||||
void MQTTKISSRX(void *message) {};
|
void MQTTKISSRX(void *message) {};
|
||||||
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT) {};
|
||||||
void MQTTTimer() {};
|
void MQTTTimer() {};
|
||||||
void MQTTReportSession(char * Msg) {};
|
void MQTTReportSession(char * Msg) {};
|
||||||
void MQTTMessageEvent(void* message);
|
void MQTTMessageEvent(void* message);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in new issue