New upstream version 6.0.24.71+repack

This commit is contained in:
Hibby 2025-05-21 21:33:52 +01:00
parent 96197688e7
commit 0d3ee7fd56
53 changed files with 892 additions and 849 deletions

View File

@ -888,6 +888,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
{
if (TNC->SessionTimeLimit && STREAM->ConnectTime && time(NULL) > (TNC->SessionTimeLimit + STREAM->ConnectTime))
{
Debugprintf("ARDOP closing session on SessionTimelimit");
ARDOPSendCommand(TNC, "DISCONNECT", TRUE);
STREAM->ReportDISC = 1;
STREAM->AttachTime = 0;
@ -900,6 +901,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
{
if (STREAM->AttachTime && TNC->AttachTimeLimit && time(NULL) > (TNC->AttachTimeLimit + STREAM->AttachTime))
{
Debugprintf("ARDOP closing session on AttachTimelimit");
STREAM->ReportDISC = 1;
STREAM->AttachTime = 0;
}
@ -3141,6 +3143,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
// Incoming Connect
TNC->SessionTimeLimit = TNC->DefaultSessionTimeLimit; // Reset Limit
STREAM->AttachTime = time(NULL);
// Stop other ports in same group

View File

@ -10586,7 +10586,7 @@ int Connected(int Stream)
char callsign[10];
int port, paclen, maxframe, l4window;
char ConnectedMsg[] = "*** CONNECTED ";
char Msg[100];
char Msg[256];
char Title[100];
int64_t Freq = 0;
int Mode = 0;
@ -10669,7 +10669,13 @@ int Connected(int Stream)
}
}
}
if (Mode < 0 || Mode > 54)
Mode = 0;
if (Freq < 0 || Freq > 11000000000)
Freq = 0;
memset(conn, 0, sizeof(ConnectionInfo)); // Clear everything
conn->Active = TRUE;
conn->BPQStream = Stream;
@ -10734,7 +10740,7 @@ int Connected(int Stream)
LongFreq = GetPortFrequency(port, FreqString);
#endif
}
Length += sprintf(MailBuffer, "New User %s Connected to Mailbox on Port %d Freq %d Mode %ld\r\n", callsign, port, LongFreq, Mode);
Length += sprintf(MailBuffer, "New User %s Connected to Mailbox on Port %d Freq %lld Mode %d\r\n", callsign, port, LongFreq, Mode);
sprintf(Title, "New User %s", callsign);
@ -10794,10 +10800,10 @@ int Connected(int Stream)
}
if (port)
n=sprintf_s(Msg, sizeof(Msg), "Incoming Connect from %s on Port %d Freq %d Mode %s",
n = sprintf_s(Msg, sizeof(Msg), "Incoming Connect from %s on Port %d Freq %lld Mode %s",
user->Call, port, Freq, WL2KModes[Mode]);
else
n=sprintf_s(Msg, sizeof(Msg), "Incoming Connect from %s", user->Call);
n = sprintf_s(Msg, sizeof(Msg), "Incoming Connect from %s", user->Call);
// Send SID and Prompt (Unless Sync)

574
BPQINP3.c

File diff suppressed because it is too large Load Diff

View File

@ -1152,6 +1152,7 @@
// Fixes to using {FormFolder} in Webmail Templates (68)
// Save FBB transfer restart data over program restarts (69)
// Add Send and Receive byte counts to status displays (69)
// Validate Mode and Frequency and fix formatting in Connected Message (71)
#include "bpqmail.h"
#include "winstdint.h"

14
Bpq32.c
View File

@ -1257,8 +1257,16 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Fix RigConrol with Chanxx but no other settings (66)
// Add option to compress L2 frames (67)
// Sort Routes displays (67)
// Fix Ardop session premature close (70)
// Add timestamps to log entries in Web Driver windows (70)
// Generate stack backtrace if SIGSEGV or SIGABRT occur (Linux) (70)
// Remove some debug logging from L2 code (70)
// Fix compiling LinBPQ with nomqtt option (70)
// Improve handling of binary data in RHP interface (70)
// Fix sending KISS commands to multiport or multidropped TNCs (70)
// Add MHUV and MHLV commands (Verbose listing with timestamps in clock time) (70)
// Improvements to INP3 (71)
// Improvements to KAM driver including support for GTOR connects (71)
#define CKernel
@ -2380,6 +2388,8 @@ FirstInit()
}
timeLoadedMS = GetTickCount();
srand(time(NULL));
INITIALISEPORTS();

113
Cmd.c
View File

@ -1229,38 +1229,81 @@ VOID CMDSTATS(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
}
#define PFBIT 0x10 // POLL/FINAL BIT IN CONTROL BYTE
VOID InformPartner(struct _LINKTABLE * LINK, int Reason);
VOID L2SENDCOMMAND(struct _LINKTABLE * LINK, int CMD);
BOOL FindLink(UCHAR * LinkCall, UCHAR * OurCall, int Port, struct _LINKTABLE ** REQLINK);
VOID CMDL00(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
{
// PROCESS 'LINKS' MESSAGE
struct _LINKTABLE * LINK = LINKS;
int n = MAXLINKS;
int len;
int len, Count;
char Normcall[11] = "";
UCHAR DEST[7];
UCHAR ORIGIN[7];
int Port = 0;
char * ptr = 0, * Context;
Bufferptr = Cmdprintf(Session, Bufferptr, "Links\r");
ptr = strtok_s(CmdTail, " ", &Context);
while (n--)
if (ptr && _stricmp(ptr, "reset") == 0)
{
if (LINK->LINKCALL[0])
ptr = strtok_s(NULL, " ", &Context);
if (ptr)
ConvToAX25(ptr, DEST);
ptr = strtok_s(NULL, " ", &Context);
if (ptr)
ConvToAX25(ptr, ORIGIN);
ptr = strtok_s(NULL, " ", &Context);
if (ptr)
Port = atoi(ptr);
if (FindLink(DEST, ORIGIN, Port, &LINK))
{
len = ConvFromAX25(LINK->LINKCALL, Normcall);
InformPartner(LINK, NORMALCLOSE); // TELL OTHER END ITS GONE
Bufferptr = Cmdprintf(Session, Bufferptr, "%s", Normcall);
LINK->L2RETRIES -= 1; // Just send one DISC
LINK->L2STATE = 4; // CLOSING
len = ConvFromAX25(LINK->OURCALL, Normcall);
Bufferptr = Cmdprintf(Session, Bufferptr, "%s", Normcall);
if (LINK->Ver2point2)
Bufferptr = Cmdprintf(Session, Bufferptr, " S=%d P=%d T=%d V=2.2\r",
LINK->L2STATE, LINK->LINKPORT->PORTNUMBER, LINK->LINKTYPE);
else
Bufferptr = Cmdprintf(Session, Bufferptr, " S=%d P=%d T=%d V=%d\r",
LINK->L2STATE, LINK->LINKPORT->PORTNUMBER, LINK->LINKTYPE, 2 - LINK->VER1FLAG);
L2SENDCOMMAND(LINK, DISC | PFBIT);
Bufferptr = Cmdprintf(Session, Bufferptr, "Link Reset\r");
}
LINK++;
}
else
Bufferptr = Cmdprintf(Session, Bufferptr, "Link Not Found\r");
}
else
{
Bufferptr = Cmdprintf(Session, Bufferptr, "Links\r");
while (n--)
{
if (LINK->LINKCALL[0])
{
len = ConvFromAX25(LINK->LINKCALL, Normcall);
Count = COUNT_AT_L2(LINK);
Bufferptr = Cmdprintf(Session, Bufferptr, "%s", Normcall);
len = ConvFromAX25(LINK->OURCALL, Normcall);
Bufferptr = Cmdprintf(Session, Bufferptr, "%s", Normcall);
if (LINK->Ver2point2)
Bufferptr = Cmdprintf(Session, Bufferptr, " S=%d P=%d T=%d V=2.2 Q=%d\r",
LINK->L2STATE, LINK->LINKPORT->PORTNUMBER, LINK->LINKTYPE, Count);
else
Bufferptr = Cmdprintf(Session, Bufferptr, " S=%d P=%d T=%d V=%d Q=%d\r",
LINK->L2STATE, LINK->LINKPORT->PORTNUMBER, LINK->LINKTYPE, 2 - LINK->VER1FLAG, Count);
}
LINK++;
}
}
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
}
@ -2845,7 +2888,7 @@ char * DoOneNode(TRANSPORTENTRY * Session, char * Bufferptr, struct DEST_LIST *
char Normcall[10];
char Alias[10];
struct NR_DEST_ROUTE_ENTRY * NRRoute;
struct DEST_ROUTE_ENTRY * Route;
struct INP3_DEST_ROUTE_ENTRY * Route;
struct ROUTE * Neighbour;
int i, Active, len;
@ -2886,7 +2929,7 @@ char * DoOneNode(TRANSPORTENTRY * Session, char * Bufferptr, struct DEST_LIST *
// DISPLAY INP3 ROUTES
Route = &Dest->ROUTE[0];
Route = &Dest->INP3ROUTE[0];
Active = Dest->DEST_ROUTE;
@ -2943,17 +2986,17 @@ int DoINP3ViaEntry(struct DEST_LIST * Dest, int n, char * line, int cursor)
int len;
double srtt;
if (Dest->ROUTE[n].ROUT_NEIGHBOUR != 0)
if (Dest->INP3ROUTE[n].ROUT_NEIGHBOUR != 0)
{
srtt = Dest->ROUTE[n].SRTT/1000.0;
srtt = Dest->INP3ROUTE[n].SRTT/1000.0;
len=ConvFromAX25(Dest->ROUTE[n].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Portcall);
len=ConvFromAX25(Dest->INP3ROUTE[n].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, Portcall);
Portcall[len]=0;
len=sprintf(&line[cursor],"%s %d %d %4.2fs ",
Portcall,
Dest->ROUTE[n].ROUT_NEIGHBOUR->NEIGHBOUR_PORT,
Dest->ROUTE[n].Hops, srtt);
Dest->INP3ROUTE[n].ROUT_NEIGHBOUR->NEIGHBOUR_PORT,
Dest->INP3ROUTE[n].Hops, srtt);
cursor+=len;
@ -3241,7 +3284,7 @@ NODE_VIA:
{
Dest+=1;
if (Dest->NRROUTE[0].ROUT_NEIGHBOUR == 0 && Dest->ROUTE[0].ROUT_NEIGHBOUR == 0)
if (Dest->NRROUTE[0].ROUT_NEIGHBOUR == 0 && Dest->INP3ROUTE[0].ROUT_NEIGHBOUR == 0)
continue;
@ -3249,9 +3292,9 @@ NODE_VIA:
|| (Dest->NRROUTE[1].ROUT_NEIGHBOUR && CompareCalls(Dest->NRROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL))
|| (Dest->NRROUTE[2].ROUT_NEIGHBOUR && CompareCalls(Dest->NRROUTE[2].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL))
|| (Dest->ROUTE[0].ROUT_NEIGHBOUR && CompareCalls(Dest->ROUTE[0].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL))
|| (Dest->ROUTE[1].ROUT_NEIGHBOUR && CompareCalls(Dest->ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL))
|| (Dest->ROUTE[2].ROUT_NEIGHBOUR && CompareCalls(Dest->ROUTE[2].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL)))
|| (Dest->INP3ROUTE[0].ROUT_NEIGHBOUR && CompareCalls(Dest->INP3ROUTE[0].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL))
|| (Dest->INP3ROUTE[1].ROUT_NEIGHBOUR && CompareCalls(Dest->INP3ROUTE[1].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL))
|| (Dest->INP3ROUTE[2].ROUT_NEIGHBOUR && CompareCalls(Dest->INP3ROUTE[2].ROUT_NEIGHBOUR->NEIGHBOUR_CALL, AXCALL)))
{
len=ConvFromAX25(Dest->DEST_CALL,Normcall);
@ -3622,7 +3665,7 @@ VOID MHCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CM
}
else
{
if (CMD->String[2] == 'V') // MHV
if (CMD->String[2] == 'V' || CMD->String[3] == 'V') // MHV
{
Bufferptr = Cmdprintf(Session, Bufferptr, "MHeard List %s for Port %d\r", MYNODECALL, Port);
Bufferptr = Cmdprintf(Session, Bufferptr, "Callsign Last heard Pkts RX via Digi ;) \r");
@ -4326,6 +4369,8 @@ struct CMDX COMMANDS[] =
"MHU ",3,MHCMD,0, // UTC Times
"MHL ",3,MHCMD,0, // Local Times
"MHV ",3,MHCMD,0,
"MHUV ",3,MHCMD,0, // UTC Times
"MHLV ",3,MHCMD,0, // Local Times
"MHEARD ",1,MHCMD,0,
"APRS ",2,APRSCMD,0,
"ATTACH ",1,ATTACHCMD,0,
@ -5543,22 +5588,14 @@ VOID KISSCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct
KISS = (struct KISSINFO *) PORT;
if (KISS->FIRSTPORT != KISS)
{
Bufferptr = Cmdprintf(Session, Bufferptr, "Not first port of a Multidrop Set\r");
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
return;
}
// Send Command
KissLen = KissEncode(KissString, ENCBUFF, KissLen);
PORT = (struct PORTCONTROL *)KISS->FIRSTPORT; // ALL FRAMES GO ON SAME Q
PORT->Session = Session;
PORT->LastKISSCmdTime = time(NULL);
PORT = (struct PORTCONTROL *)KISS->FIRSTPORT; // ALL FRAMES GO ON SAME Q
ASYSEND(PORT, ENCBUFF, KissLen);
Bufferptr = Cmdprintf(Session, Bufferptr, "Command Sent\r");

View File

@ -77,6 +77,8 @@ char * stristr (char *ch1, char *ch2);
extern VOID * ENDBUFFERPOOL;
extern int PoolBuilt;
// Read/Write length field in a buffer header
@ -363,7 +365,7 @@ BOK1:
if (n > 1000)
{
Debugprintf("Loop searching free chain - pointer = %p %p", debug, pointer);
Debugprintf("Releasebuffer Loop searching free chain - pointer = %p %p from %s Line %d", debug, pointer, File, Line);
return 0;
}
}
@ -376,6 +378,11 @@ BOK1:
QCOUNT++;
if (PoolBuilt && QCOUNT > MAXBUFFS)
{
Debugprintf("Releasebuffer QCOUNT > MAXBUFFS - pointer = %p from %s Line %d", pointer, File, Line);
return 0;
}
return 0;
}
@ -473,7 +480,7 @@ int C_Q_ADD_NP(VOID *PQ, VOID *PBUFF)
next = Q[0];
while (next[0] != 0)
next=next[0]; // Chain to end of queue
next = next[0]; // Chain to end of queue
next[0] = BUFF; // New one on end
@ -1061,6 +1068,7 @@ BOOL ReadConfigFile(int Port, int ProcLine(char * buf, int Port))
WritetoConsoleLocal("\n");
WritetoConsoleLocal("Bad config record ");
WritetoConsoleLocal(errbuf);
WritetoConsoleLocal("\n");
}
}
}

View File

@ -2065,7 +2065,7 @@ BOOL LookupRestart(CIRCUIT * conn, struct FBBHeaderLine * FBBHeader)
RestartRec->Count++;
if (RestartRec->Count > 3)
if (RestartRec->Count > 10)
{
len = sprintf_s(Msg, sizeof(Msg), "Too many restarts for %s - Requesting restart from beginning",
FBBHeader->BID);

View File

@ -452,6 +452,11 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
TNC->lasttime = ltime;
ConnecttoFreeData(port);
}
while (TNC->PortRecord->UI_Q)
{
buffptr = Q_REM(&TNC->PortRecord->UI_Q);
ReleaseBuffer(buffptr);
}
}

View File

@ -70,6 +70,8 @@ static RECT Rect;
int DoScanLine(struct TNCINFO * TNC, char * Buff, int Len);
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
VOID SuspendOtherPorts(struct TNCINFO * ThisTNC);
VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
static FILE * LogHandle[32] = {0};
@ -517,6 +519,28 @@ ok:
return 0;
}
VOID KAMSuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC)
{
struct STREAMINFO * STREAM = &TNC->Streams[0];
strcpy(TNC->WEB_TNCSTATE, "Interlocked");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
// STREAM->CmdSet = STREAM->CmdSave = zalloc(100);
// sprintf(STREAM->CmdSet, "I%s\r", "SCSPTC"); // Should prevent connects
}
VOID KAMReleasePort(struct TNCINFO * TNC)
{
struct STREAMINFO * STREAM = &TNC->Streams[0];
strcpy(TNC->WEB_TNCSTATE, "Free");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
}
static int WebProc(struct TNCINFO * TNC, char * Buff, BOOL LOCAL)
{
int Len = sprintf(Buff, "<html><meta http-equiv=expires content=0><meta http-equiv=refresh content=15>"
@ -595,6 +619,11 @@ void * KAMExtInit(EXTPORTDATA * PortEntry)
PortEntry->PORTCONTROL.PORTSTARTCODE = KAMStartPort;
PortEntry->PORTCONTROL.PORTSTOPCODE = KAMStopPort;
// TNC->SuspendPortProc = KAMSuspendPort;
// TNC->ReleasePortProc = KAMReleasePort;
ptr=strchr(TNC->NodeCall, ' ');
if (ptr) *(ptr) = 0; // Null Terminate
@ -1266,6 +1295,51 @@ VOID KAMPoll(int Port)
return;
}
if (memcmp(MsgPtr, "GTOR ", 5) == 0) // GTOR Connect
{
memcpy(STREAM->RemoteCall, &MsgPtr[5], 9);
STREAM->Connecting = TRUE;
// If Stream 0, Convert C CALL to PACTOR CALL
if (Stream == 0)
{
datalen = sprintf(TXMsg, "C20GTOR %s", TNC->Streams[0].RemoteCall);
// If Pactor, check busy detecters on any interlocked ports
if (TNC->HFPacket == 0 && InterlockedCheckBusy(TNC) && TNC->OverrideBusy == 0)
{
// Channel Busy. Wait
TNC->ConnectCmd = _strdup(TXMsg);
sprintf(TNC->WEB_TNCSTATE, "Waiting for clear channel");
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
TNC->BusyDelay = TNC->BusyWait * 10;
return;
}
TNC->OverrideBusy = FALSE;
sprintf(TNC->WEB_TNCSTATE, "%s Connecting to %s",
TNC->Streams[0].MyCall, TNC->Streams[0].RemoteCall);
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
}
else
datalen = sprintf(TXMsg, "C1%cC %s", Stream + '@', STREAM->RemoteCall);
EncodeAndSend(TNC, TXMsg, datalen);
TNC->Timeout = 50;
TNC->InternalCmd = 'C'; // So we dont send the reply to the user.
ReleaseBuffer(buffptr);
STREAM->Connecting = TRUE;
return;
}
if (memcmp(MsgPtr, "DISCONNECT", datalen) == 0) // Disconnect
{
if (Stream == 0)
@ -1644,6 +1718,10 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
return;
}
WritetoTrace(TNC, Buffer, Len);
// Pass to Appl
Stream = TNC->CmdStream;
@ -1790,6 +1868,10 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
if (Msg[1] == '2' && Msg[2] == 'A')
TNC->HFPacket = TRUE;
// Stop other ports in same group
SuspendOtherPorts(TNC);
ProcessIncommingConnect(TNC, Call, Stream, TRUE);
SESS = TNC->PortRecord->ATTACHEDSESSIONS[Stream];
@ -2047,7 +2129,11 @@ VOID ForcedClose(struct TNCINFO * TNC, int Stream)
VOID CloseComplete(struct TNCINFO * TNC, int Stream)
{
TNC->NeedPACTOR = 50;
sprintf(TNC->WEB_TNCSTATE, "Free");
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
ReleaseOtherPorts(TNC);
TNC->NeedPACTOR = 50;
}

View File

@ -121,6 +121,7 @@ void hookL2SessionAccepted(int Port, char * fromCall, char * toCall, struct _LIN
void hookL2SessionDeleted(struct _LINKTABLE * LINK);
void hookL2SessionAttempt(int Port, char * fromCall, char * toCall, struct _LINKTABLE * LINK);
int L2Compressit(unsigned char * Out, int OutSize, unsigned char * In, int Len);
VOID DeleteINP3Routes(struct ROUTE * Route);
extern int REALTIMETICKS;
@ -1184,8 +1185,9 @@ VOID L2LINKACTIVE(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE *
// 2. OTHER END THINKS LINK HAS DIED
// 3. RECOVERY FROM FRMR CONDITION
// 4. REPEAT OF ORIGINAL SABM COS OTHER END MISSED UA
// 5. Other end has reloaded
// FOR 1-3 IT IS REASONABLE TO FULLY RESET THE CIRCUIT, BUT IN 4
// FOR 1-3 and 5 IT IS REASONABLE TO FULLY RESET THE CIRCUIT, BUT IN 4
// SUCH ACTION WILL LOSE THE INITIAL SIGNON MSG IF CONNECTING TO A
// BBS. THE PROBLEM IS TELLING THE DIFFERENCE. I'M GOING TO SET A FLAG
// WHEN FIRST INFO RECEIVED - IF SABM REPEATED BEFORE THIS, I'LL ASSUME
@ -1198,7 +1200,7 @@ VOID L2LINKACTIVE(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE *
return;
}
InformPartner(LINK, NORMALCLOSE); // SEND DISC TO OTHER END
InformPartner(LINK, NORMALCLOSE); // SEND DISC TO OTHER END
LINK->CIRCUITPOINTER = 0;
L2SABM(LINK, PORT, Buffer, ADJBUFFER, MSGFLAG); // Process the SABM
@ -1215,6 +1217,8 @@ VOID L2SABM(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE * Buffe
TRANSPORTENTRY * Session;
int CONERROR;
struct ROUTE * ROUTE = NULL;
char toCall[12], fromCall[12];
@ -1272,6 +1276,18 @@ VOID L2SABM(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE * Buffe
if (PORT->TNC && PORT->TNC->Hardware == H_KISSHF)
AttachKISSHF(PORT, Buffer);
// if it is an INP3 connection tell INP3 it is up
if (FindNeighbour(LINK->LINKCALL, PORT->PORTNUMBER, &ROUTE))
{
if (ROUTE->INP3Node)
{
Debugprintf("INP3 Incoming connect from %s", fromCall);
DeleteINP3Routes(ROUTE);
}
}
if (NO_CTEXT == 1)
return;
@ -1955,11 +1971,23 @@ VOID L2_PROCESS(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE * B
// RESPONSE TO SABM - SET LINK UP
char fromCall[12];
struct ROUTE * ROUTE;
fromCall[ConvFromAX25(Buffer->ORIGIN, fromCall)] = 0;
RESET2X(LINK); // LEAVE QUEUED STUFF
// See if INP3 route setup
if (FindNeighbour(Buffer->ORIGIN, PORT->PORTNUMBER, &ROUTE))
{
if (ROUTE->INP3Node)
{
Debugprintf("INP3 Route to %s connected", fromCall);
}
}
SendL2ToMonMap(PORT, fromCall, '+', 'O');
LINK->L2STATE = 5;
@ -2431,12 +2459,11 @@ CheckNSLoop:
{
// Already have a copy, so discard old and keep this
Debugprintf ("Frame %d out of seq but already have copy - release it", NS);
ReleaseBuffer(Q_REM(&LINK->RXFRAMES[NS]));
}
else
{
Debugprintf ("Frame %d out of seq - save", NS);
// Debugprintf ("Frame %d out of seq - save", NS);
}
Buffer->CHAIN = 0;
@ -2793,7 +2820,7 @@ VOID RESETNS(struct _LINKTABLE * LINK, UCHAR NS)
int COUNT_AT_L2(struct _LINKTABLE * LINK)
{
// COUNTS FRAMES QUEUED ON AN L2 SESSION (IN BX)
// COUNTS FRAMES QUEUED ON AN L2 SESSION (IN LINK)
int count = 0, abovelink = 0;
int n = 0;
@ -3919,7 +3946,6 @@ CheckNSLoop2:
struct PORTCONTROL * PORT = LINK->LINKPORT;
MESSAGE * OldBuffer = Q_REM(&LINK->RXFRAMES[LINK->LINKNR]);
Debugprintf("L2 about to send REJ - process saved Frame %d", LINK->LINKNR);
PROC_I_FRAME(LINK, PORT, OldBuffer); // Passes on or releases Buffer
// NR has been updated.
@ -3978,6 +4004,8 @@ VOID CONNECTREFUSED(struct _LINKTABLE * LINK)
}
VOID L3CONNECTFAILED(struct _LINKTABLE * LINK);
VOID L3LINKSETUPFAILED(struct _LINKTABLE * LINK);
VOID ConnectFailedOrRefused(struct _LINKTABLE * LINK, char * Msg)
{
@ -3992,7 +4020,7 @@ VOID ConnectFailedOrRefused(struct _LINKTABLE * LINK, char * Msg)
if (LINK->LINKTYPE == 3)
{
L3CONNECTFAILED(LINK); // REPORT TO LEVEL 3
L3LINKSETUPFAILED(LINK); // REPORT TO LEVEL 3
return;
}

View File

@ -67,6 +67,8 @@ extern dest_list * CURRENTNODE;
int L3_10SECS = 10;
extern int PREFERINP3ROUTES;
VOID L3BG()
{
@ -135,12 +137,14 @@ VOID L3BG()
// Drop through to Activate
}
// No Active Route
if (ACTIVATE_DEST(DEST) == FALSE)
{
// Node has no routes - get rid of it
REMOVENODE(DEST);
return; // Avoid riskof looking at lod entries
return; // Avoid risk of looking at old entries
}
}
}
@ -154,22 +158,32 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
{
int n = MAXDESTS;
struct PORTCONTROL * PORT = PORTTABLE;
struct ROUTE * ROUTE;
struct ROUTE * ROUTE = NULL;
struct _LINKTABLE * LINK;
struct TNCINFO * TNC;
int ActiveRoute;
if (DEST->DEST_ROUTE == 0) // ALREADY HAVE A SELECTED ROUTE?
DEST->DEST_ROUTE = 1; // TRY TO ACTIVATE FIRST
if (DEST->DEST_ROUTE == 0) // Don't ALREADY HAVE A SELECTED ROUTE?
{
DEST->DEST_ROUTE = 1;
if (PREFERINP3ROUTES)
{
// if we have any INP3 routes use the first. It will always be the fastest. The others are there for fallback if the first fails.
if (ROUTE = DEST->INP3ROUTE[0].ROUT_NEIGHBOUR)
DEST->DEST_ROUTE = 4; // TRY TO ACTIVATE FIRST
}
}
ActiveRoute = DEST->DEST_ROUTE - 1;
ROUTE = DEST->NRROUTE[ActiveRoute].ROUT_NEIGHBOUR;
if (ROUTE == 0)
{
// Currnet Route not present
// Current Route not present
// If current route is 1, then we must have INP3 routes (or entry is corrupt)
if (DEST->DEST_ROUTE != 1)
@ -177,13 +191,17 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
// Current Route is 1
if (DEST->ROUTE[0].ROUT_NEIGHBOUR == 0)
if (DEST->INP3ROUTE[0].ROUT_NEIGHBOUR == 0)
return FALSE; // No INP3 so No Routes
DEST->DEST_ROUTE = 4; // First INP3
ROUTE = DEST->ROUTE[0].ROUT_NEIGHBOUR;
ROUTE = DEST->INP3ROUTE[0].ROUT_NEIGHBOUR;
}
if (ROUTE == 0) // Shouldn't happen
return FALSE;
// if NetROM over VARA conection is made by the driver
TNC = TNCInfo[ROUTE->NEIGHBOUR_PORT];
@ -204,7 +222,7 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
return L2SETUPCROSSLINK(ROUTE);
}
// We mst be waiting for link to come up
// We umst be waiting for link to come up
return TRUE;
@ -707,11 +725,11 @@ int COUNTNODES(struct ROUTE * ROUTE)
count++;
else if (DEST->NRROUTE[2].ROUT_NEIGHBOUR == ROUTE)
count++;
else if (DEST->ROUTE[0].ROUT_NEIGHBOUR == ROUTE)
else if (DEST->INP3ROUTE[0].ROUT_NEIGHBOUR == ROUTE)
count++;
else if (DEST->ROUTE[1].ROUT_NEIGHBOUR == ROUTE)
else if (DEST->INP3ROUTE[1].ROUT_NEIGHBOUR == ROUTE)
count++;
else if (DEST->ROUTE[2].ROUT_NEIGHBOUR == ROUTE)
else if (DEST->INP3ROUTE[2].ROUT_NEIGHBOUR == ROUTE)
count++;
DEST++;
@ -845,7 +863,7 @@ VOID SENDNEXTNODESFRAGMENT()
if (DEST->DEST_CALL[0] != 0x40 && DEST->NRROUTE[0].ROUT_QUALITY >= TXMINQUAL &&
DEST->NRROUTE[0].ROUT_OBSCOUNT >= OBSMIN &&
(NODE == 1 || DEST->DEST_STATE & 0x80)) // Only send appl nodes if DEST = 0;
(NODE == 1 || DEST->DEST_STATE & 0x80)) // Only send appl nodes if NODE = 0;
{
// Send it
@ -878,6 +896,9 @@ VOID SENDNEXTNODESFRAGMENT()
*(ptr1++) = (UCHAR)Qual;
if (Qual == 0)
continue;
Count--;
}
DEST++;
@ -924,7 +945,7 @@ VOID L3LINKCLOSED(struct _LINKTABLE * LINK, int Reason)
VOID CLEARACTIVEROUTE(struct ROUTE * ROUTE, int Reason)
{
// FIND ANY DESINATIONS WITH [ESI] AS ACTIVE NEIGHBOUR, AND
// FIND ANY DESINATIONS WITH ROUTE AS ACTIVE NEIGHBOUR, AND
// SET INACTIVE
dest_list * DEST;
@ -945,7 +966,7 @@ VOID CLEARACTIVEROUTE(struct ROUTE * ROUTE, int Reason)
if (DEST->DEST_ROUTE == 0)
continue;
if (DEST->ROUTE[DEST->DEST_ROUTE].ROUT_NEIGHBOUR == ROUTE) // Is this the active route
if (DEST->INP3ROUTE[DEST->DEST_ROUTE].ROUT_NEIGHBOUR == ROUTE) // Is this the active route
{
// Yes, so clear
@ -1120,7 +1141,7 @@ UPDEST000:
{
// Any INP3 Routes?
if (DEST->ROUTE[0].ROUT_NEIGHBOUR == 0)
if (DEST->INP3ROUTE[0].ROUT_NEIGHBOUR == 0)
{
// NO ROUTES LEFT TO DEST - REMOVE IT
@ -1292,6 +1313,32 @@ VOID REMOVENODE(dest_list * DEST)
NUMBEROFNODES--;
}
VOID L3LINKSETUPFAILED(struct _LINKTABLE * LINK)
{
// L2 LINK SETUP HAS FAILED - SEE IF ANOTHER NEIGHBOUR CAN BE USED
struct PORTCONTROL * PORT = PORTTABLE;
struct ROUTE * ROUTE;
ROUTE = LINK->NEIGHBOUR; // TO NEIGHBOUR
if (ROUTE == NULL)
return; // NOTHING ???
if (ROUTE->INP3Node)
{
char Normcall[10];
Normcall[ConvFromAX25(ROUTE->NEIGHBOUR_CALL, Normcall)] = 0;
Debugprintf("INP3 Route to %s connect failed", Normcall);
}
ROUTE->NEIGHBOUR_LINK = 0; // CLEAR IT
L3TRYNEXTDEST(ROUTE); // RESET ASSOCIATED DEST ENTRIES
}
VOID L3CONNECTFAILED(struct _LINKTABLE * LINK)
{
// L2 LINK SETUP HAS FAILED - SEE IF ANOTHER NEIGHBOUR CAN BE USED
@ -1304,6 +1351,14 @@ VOID L3CONNECTFAILED(struct _LINKTABLE * LINK)
if (ROUTE == NULL)
return; // NOTHING ???
if (ROUTE->INP3Node)
{
char Normcall[10];
Normcall[ConvFromAX25(ROUTE->NEIGHBOUR_CALL, Normcall)] = 0;
Debugprintf("INP3 Route to %s connect failed or refused", Normcall);
}
TellINP3LinkSetupFailed(ROUTE);
@ -1315,7 +1370,7 @@ VOID L3CONNECTFAILED(struct _LINKTABLE * LINK)
VOID L3TRYNEXTDEST(struct ROUTE * ROUTE)
{
// FIND ANY DESINATIONS WITH [ESI] AS ACTIVE NEIGHBOUR, AND
// FIND ANY DESINATIONS WITH ROUTE AS ACTIVE NEIGHBOUR, AND
// SET NEXT BEST NEIGHBOUR (IF ANY) ACTIVE
int n = MAXDESTS;
@ -1328,7 +1383,7 @@ VOID L3TRYNEXTDEST(struct ROUTE * ROUTE)
if (ActiveRoute)
{
ActiveRoute --; // Routes numbered 1 - 6, idex from 0
ActiveRoute --; // Routes numbered 1 - 6, index from 0
if (DEST->NRROUTE[ActiveRoute].ROUT_NEIGHBOUR == ROUTE)
{

View File

@ -304,6 +304,7 @@ VOID SENDL4MESSAGE(TRANSPORTENTRY * L4, struct DATAMESSAGE * Msg)
return;
}
L3MSG = GetBuff();
if (L3MSG == 0)

View File

@ -381,41 +381,48 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
#include <signal.h>
// Linux Signal Handlers
static void segvhandler(int sig)
{
void *array[10];
size_t size;
char msg[] = "SIGSEGV Received\n";
void *array[10];
size_t size;
char msg[] = "\nSIGSEGV Received\n";
write(STDERR_FILENO, msg, strlen(msg));
write(STDERR_FILENO, msg, strlen(msg));
// get void*'s for all entries on the stack
size = backtrace(array, 10);
// get void*'s for all entries on the stack
size = backtrace(array, 10);
// print out all the frames to stderr
// print out all the frames to stderr
backtrace_symbols_fd(array, size, STDERR_FILENO);
backtrace_symbols_fd(array, size, STDERR_FILENO);
exit(1);
write(STDOUT_FILENO, msg, strlen(msg));
backtrace_symbols_fd(array, size, STDOUT_FILENO);
exit(1);
}
static void abrthandler(int sig)
{
void *array[10];
size_t size;
char msg[] = "SIGABRT Received\n";
void *array[10];
size_t size;
char msg[] = "\nSIGABRT Received\n";
write(STDERR_FILENO, msg, strlen(msg));
write(STDERR_FILENO, msg, strlen(msg));
write(STDOUT_FILENO, msg, strlen(msg));
// get void*'s for all entries on the stack
// get void*'s for all entries on the stack
size = backtrace(array, 10);
backtrace_symbols_fd(array, size, STDERR_FILENO);
size = backtrace(array, 10);
backtrace_symbols_fd(array, size, STDERR_FILENO);
exit(1);
write(STDOUT_FILENO, msg, strlen(msg));
backtrace_symbols_fd(array, size, STDOUT_FILENO);
exit(1);
}
static void sigterm_handler(int sig)
{
syslog(LOG_INFO, "terminating on SIGTERM\n");
@ -847,6 +854,8 @@ int main(int argc, char * argv[])
printf("G8BPQ AX25 Packet Switch System Version %s %s\n", TextVerstring, Datestring);
printf("%s\n", VerCopyright);
srand(time(NULL));
// look for optarg format parameters

51
RHP.c
View File

@ -451,8 +451,13 @@ int processRHCPSend(SOCKET Socket, char * Msg, char * ReplyBuffer)
int ID;
char * Data;
char * ptr;
unsigned char * uptr;
int c;
int Len;
unsigned int HexCode1;
unsigned int HexCode2;
int n;
int Handle = 1;
@ -470,9 +475,10 @@ int processRHCPSend(SOCKET Socket, char * Msg, char * ReplyBuffer)
RHPSession = RHPSessions[Handle - 1];
// Look for \ escapes
// Look for \ escapes, Can now also get \u00c3
ptr = Data;
Len = strlen(Data); // in case no escapes
while (ptr = strchr(ptr, '\\'))
{
@ -483,23 +489,60 @@ int processRHCPSend(SOCKET Socket, char * Msg, char * ReplyBuffer)
case 'r':
*ptr = 13;
memmove(ptr + 1, ptr + 2, strlen(ptr + 1));
break;
case 'u':
HexCode1 = HexCode2 = 0;
n = toupper(ptr[2]) - '0';
if (n > 9) n = n - 7;
HexCode1 |= n << 4;
n = toupper(ptr[3]) - '0';
if (n > 9) n = n - 7;
HexCode1 |= n;
n = toupper(ptr[4]) - '0';
if (n > 9) n = n - 7;
HexCode2 |= n << 4;
n = toupper(ptr[5]) - '0';
if (n > 9) n = n - 7;
HexCode2 |= n;
if (HexCode1 == 0 || HexCode1 == 0xC2)
{
uptr = ptr;
*uptr = HexCode2;
}
else if (HexCode1 == 0xc2)
{
uptr = ptr;
*uptr = HexCode2 + 0x40;
}
memmove(ptr + 1, ptr + 6, strlen(ptr + 5));
break;
case '\\':
*ptr = '\\';
memmove(ptr + 1, ptr + 2, strlen(ptr + 1));
break;
case '"':
*ptr = '"';
memmove(ptr + 1, ptr + 2, strlen(ptr + 1));
break;
}
memmove(ptr + 1, ptr + 2, strlen(ptr + 1));
ptr++;
Len = ptr - Data;
}
Len = strlen(Data);
ptr = Data;
while (Len > RHPPaclen)
@ -640,7 +683,7 @@ void RHPPoll()
// Message is JSON so Convert CR to \r, \ to \\ " to \"
// Looks like I need to escape everything not between 0x20 and 0x7f eg \U00c3
// Looks like I need to escape everything not between 0x20 and 0x7f eg \u00c3
while (c = *(ptr))

View File

@ -322,7 +322,10 @@ Dll VOID APIENTRY Send_AX(UCHAR * Block, DWORD Len, UCHAR Port)
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
C_Q_ADD(&EXTPORT->UI_Q, Copy);
if (EXTPORT->UI_Q)
C_Q_ADD(&EXTPORT->UI_Q, Copy);
else
C_Q_ADD(&EXTPORT->UI_Q, Copy);
return;
}

View File

@ -685,6 +685,11 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
ConnecttoUZ7HO(port);
lasttime[port] = ltime;
}
while (TNC->PortRecord->UI_Q)
{
buffptr = Q_REM(&TNC->PortRecord->UI_Q);
ReleaseBuffer(buffptr);
}
}
else
{

1
VARA.c
View File

@ -1720,7 +1720,6 @@ VConnected:
GetSemaphore(&Semaphore, 52);
VARAProcessReceivedControl(TNC);
FreeSemaphore(&Semaphore);
Debugprintf("VARA Returned from processing control packet");
}
if (FD_ISSET(TNC->TCPDataSock, &readfs))

View File

@ -10,15 +10,15 @@
#endif
#define KVers 6,0,24,69
#define KVerstring "6.0.24.69\0"
#define KVers 6,0,24,71
#define KVerstring "6.0.24.71\0"
#ifdef CKernel
#define Vers KVers
#define Verstring KVerstring
#define Datestring "March 2025"
#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"

View File

@ -139,6 +139,10 @@ VOID WritetoTraceSupport(struct TNCINFO * TNC, char * Msg, int Len)
int LineLen, i;
UCHAR Save;
int SaveLen = Len;
char Time[16];
time_t T;
struct tm * tm;
if (Len < 0)
return;
@ -206,10 +210,16 @@ lineloop:
#endif
// Write to Web Buffer
T = time(NULL);
tm = gmtime(&T);
sprintf_s(Time, sizeof(Time),"%02d:%02d ", tm->tm_hour, tm->tm_min);
strcat(TNC->WebBuffer, Time);
strcat(TNC->WebBuffer, Line);
strcat(TNC->WebBuffer, "\r\n");
if (strlen(TNC->WebBuffer) > 4500)
memmove(TNC->WebBuffer, &TNC->WebBuffer[500], 4490); // Make sure null is moved
memmove(TNC->WebBuffer, &TNC->WebBuffer[500], strlen(&TNC->WebBuffer[500]) + 1); // Make sure null is moved
Skip:
ptr1 = ptr2;
@ -248,10 +258,16 @@ lineloop:
#else
index=SendMessage(TNC->hMonitor, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR) ptr1 );
#endif
T = time(NULL);
tm = gmtime(&T);
sprintf_s(Time, sizeof(Time),"%02d:%02d ", tm->tm_hour, tm->tm_min);
strcat(TNC->WebBuffer, Time);
strcat(TNC->WebBuffer, ptr1);
strcat(TNC->WebBuffer, "\r\n");
if (strlen(TNC->WebBuffer) > 4500)
memmove(TNC->WebBuffer, &TNC->WebBuffer[500], 4490); // Make sure null is moved
memmove(TNC->WebBuffer, &TNC->WebBuffer[500], strlen(&TNC->WebBuffer[500]) + 1); // Make sure null is moved
}
}

View File

@ -3073,6 +3073,13 @@ VOID GetPage(struct HTTPConnectionInfo * Session, char * NodeURL)
ptr = strchr(&NodeURL[17], ',');
Dir = HtmlFormDirs[DirNo];
if (DirNo == -1)
{
*WebMail->RLen = sprintf(WebMail->Reply, "<html><script>alert(\"No Page Selected. \");window.location.href = '/Webmail/NewMsg?%s';</script></html>", Session->Key);
return;
}
SubDir = strlop(&NodeURL[17], ':');
if (SubDir)
{

View File

@ -253,6 +253,7 @@ typedef struct ROUTE
#define GotRTTResponse 2 // Other end has sent us a RTT Response
#define GotRIF 4 // Other end has sent RIF, so is probably an INP3 Node
// (could just be monitoring RTT for some reason
#define SentRTTRequest 8
#define SentOurRIF 16 // Set when we have sent a rif for our Call and any ApplCalls
// (only sent when we have seen both a request and response)
@ -460,16 +461,18 @@ typedef struct _APPLCALLS
// This way our times adjust to changes of neighbour SRTT. We can't cater for changes to other hop RTTs,
// But if these are significant (say 25% or 100 ms) they will be retransmitted
// We treat the Routes as an array of 6. First 3 are NODES routes, next 3 are INP3 Routes. This works, but maybe is not ideal
typedef struct NR_DEST_ROUTE_ENTRY
{
struct ROUTE * ROUT_NEIGHBOUR; // POINTER TO NEXT NODE IN PATH
UCHAR ROUT_QUALITY; // QUALITY
UCHAR ROUT_OBSCOUNT;
UCHAR ROUT_LOCKED;
UCHAR Padding[4]; // SO Entries are the same length
UCHAR Padding[4]; // So Entries are the same length
} *PNR_DEST_ROUTE_ENTRY;
typedef struct DEST_ROUTE_ENTRY
typedef struct INP3_DEST_ROUTE_ENTRY
{
struct ROUTE * ROUT_NEIGHBOUR; // POINTER TO NEXT NODE IN PATH
USHORT LastRTT; // Last Value Reported
@ -493,8 +496,8 @@ typedef struct DEST_LIST
UCHAR DEST_ROUTE; // CURRENTY ACTIVE DESTINATION
UCHAR INP3FLAGS;
struct NR_DEST_ROUTE_ENTRY NRROUTE[3];// Best 3 NR neighbours for this dest
struct DEST_ROUTE_ENTRY ROUTE[3]; // Best 3 INP neighbours for this dest
struct NR_DEST_ROUTE_ENTRY NRROUTE[3]; // Best 3 NR neighbours for this dest
struct INP3_DEST_ROUTE_ENTRY INP3ROUTE[3]; // Best 3 INP neighbours for this dest
void * DEST_Q; // QUEUE OF FRAMES FOR THIS DESTINATION
@ -698,6 +701,7 @@ typedef struct PORTCONTROL
BOOL NormalizeQuality; // Normalise Node Qualities
BOOL IgnoreUnlocked; // Ignore Unlocked routes
BOOL INP3ONLY; // Default to INP3 and disallow NODES
BOOL ALLOWINP3;
void (* UIHook)(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, MESSAGE * Buffer, MESSAGE * ADJBUFFER, UCHAR CTL, UCHAR MSGFLAG); // Used for KISSARQ
struct PORTCONTROL * HookPort;

View File

@ -733,7 +733,7 @@ VOID SendFrame(struct AXIPPORTINFO * PORT, struct arp_table_entry * arp_table, U
return;
}
// Seelcte source port by choosing right socket
// Select source port by choosing right socket
// First Set Default for Protocol

18
cMain.c
View File

@ -148,6 +148,8 @@ int L2Compress = 0;
int L2CompMaxframe = 3;
int L2CompPaclen = 236;
int PREFERINP3ROUTES = 0;
BOOL LogL4Connects = FALSE;
BOOL LogAllConnects = FALSE;
BOOL AUTOSAVEMH = TRUE;
@ -165,6 +167,8 @@ char MQTT_PASS[80] = "";
int MQTT_Connecting = 0;
int MQTT_Connected = 0;
int PoolBuilt = 0;
//TNCTABLE DD 0
//NUMBEROFSTREAMS DD 0
@ -851,6 +855,9 @@ BOOL Start()
if (L2CompPaclen < 64 || L2CompPaclen > 236)
L2CompPaclen = 236;
PREFERINP3ROUTES = cfg->C_PREFERINP3ROUTES;
// Get pointers to PASSWORD and APPL1 commands
@ -977,6 +984,7 @@ BOOL Start()
PORT->NormalizeQuality = !PortRec->NoNormalize;
PORT->IgnoreUnlocked = PortRec->IGNOREUNLOCKED;
PORT->INP3ONLY = PortRec->INP3ONLY;
PORT->ALLOWINP3 = PortRec->AllowINP3;
PORT->PORTWINDOW = (UCHAR)PortRec->MAXFRAME;
@ -1001,6 +1009,9 @@ BOOL Start()
PORT->PORTPACLEN = (UCHAR)PortRec->PACLEN;
PORT->QUAL_ADJUST = (UCHAR)PortRec->QUALADJUST;
if (PORT->QUAL_ADJUST < 0 || PORT->QUAL_ADJUST > 100)
PORT->QUAL_ADJUST = 100;
PORT->DIGIFLAG = PortRec->DIGIFLAG;
if (PortRec->DIGIPORT && CanPortDigi(PortRec->DIGIPORT))
PORT->DIGIPORT = PortRec->DIGIPORT;
@ -1458,6 +1469,8 @@ BOOL Start()
ENDBUFFERPOOL = NEXTFREEDATA;
PoolBuilt = 1;
// Copy Bridge Map
@ -1575,6 +1588,7 @@ BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE)
struct ROUTE * ROUTE = NEIGHBOURS;
struct ROUTE * FIRSTSPARE = NULL;
int n = MAXNEIGHBOURS;
char Normcall[10];
while (n--)
{
@ -1587,6 +1601,10 @@ BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE)
ROUTE++;
continue;
}
Normcall[ConvFromAX25(ROUTE->NEIGHBOUR_CALL, Normcall)] = 0;
if (CompareCalls(ROUTE->NEIGHBOUR_CALL, Call))
{
*REQROUTE = ROUTE;

View File

@ -308,7 +308,7 @@ static char *keywords[] =
"BTEXT:", "NETROMCALL", "C_IS_CHAT", "MAXRTT", "MAXHOPS", // IPGATEWAY= no longer allowed
"LogL4Connects", "LogAllConnects", "SAVEMH", "ENABLEADIFLOG", "ENABLEEVENTS", "SAVEAPRSMSGS",
"EnableM0LTEMap", "MQTT", "MQTT_HOST", "MQTT_PORT", "MQTT_USER", "MQTT_PASS",
"L4Compress", "L4CompMaxframe", "L4CompPaclen", "L2Compress", "L2CompMaxframe", "L2CompPaclen"
"L4Compress", "L4CompMaxframe", "L4CompPaclen", "L2Compress", "L2CompMaxframe", "L2CompPaclen", "PREFERINP3ROUTES"
}; /* parameter keywords */
static void * offset[] =
@ -330,7 +330,8 @@ static void * offset[] =
&xxcfg.C_BTEXT, &xxcfg.C_NETROMCALL, &xxcfg.C_C, &xxcfg.C_MAXRTT, &xxcfg.C_MAXHOPS, // IPGATEWAY= no longer allowed
&xxcfg.C_LogL4Connects, &xxcfg.C_LogAllConnects, &xxcfg.C_SaveMH, &xxcfg.C_ADIF, &xxcfg.C_EVENTS, &xxcfg.C_SaveAPRSMsgs,
&xxcfg.C_M0LTEMap, &xxcfg.C_MQTT, &xxcfg.C_MQTT_HOST, &xxcfg.C_MQTT_PORT, &xxcfg.C_MQTT_USER, &xxcfg.C_MQTT_PASS,
&xxcfg.C_L4Compress, &xxcfg.C_L4CompMaxframe, &xxcfg.C_L4CompPaclen, &xxcfg.C_L2Compress, &xxcfg.C_L2CompMaxframe, &xxcfg.C_L2CompPaclen}; /* offset for corresponding data in config file */
&xxcfg.C_L4Compress, &xxcfg.C_L4CompMaxframe, &xxcfg.C_L4CompPaclen, &xxcfg.C_L2Compress, &xxcfg.C_L2CompMaxframe,
&xxcfg.C_L2CompPaclen, &xxcfg.C_PREFERINP3ROUTES}; /* offset for corresponding data in config file */
static int routine[] =
{
@ -351,7 +352,8 @@ static int routine[] =
15, 0, 2, 9, 9,
2, 2, 1, 2, 2, 2,
2, 2, 0, 1, 20, 20,
1, 1, 1, 1, 1, 1} ; // Routine to process param
1, 1, 1, 1, 1,
1, 1} ; // Routine to process param
int PARAMLIM = sizeof(routine)/sizeof(int);
//int NUMBEROFKEYWORDS = sizeof(routine)/sizeof(int);
@ -373,7 +375,7 @@ static char *pkeywords[] =
"BCALL", "DIGIMASK", "NOKEEPALIVES", "COMPORT", "DRIVER", "WL2KREPORT", "UIONLY",
"UDPPORT", "IPADDR", "I2CBUS", "I2CDEVICE", "UDPTXPORT", "UDPRXPORT", "NONORMALIZE",
"IGNOREUNLOCKEDROUTES", "INP3ONLY", "TCPPORT", "RIGPORT", "PERMITTEDAPPLS", "HIDE",
"SMARTID", "KISSCOMMAND", "SendtoM0LTEMap", "PortFreq", "M0LTEMapInfo", "QTSMPort"}; /* parameter keywords */
"SMARTID", "KISSCOMMAND", "SendtoM0LTEMap", "PortFreq", "M0LTEMapInfo", "QTSMPort", "ALLOWINP3"}; /* parameter keywords */
static void * poffset[] =
{
@ -387,7 +389,7 @@ static void * poffset[] =
&xxp.BCALL, &xxp.DIGIMASK, &xxp.DefaultNoKeepAlives, &xxp.IOADDR, &xxp.DLLNAME, &xxp.WL2K, &xxp.UIONLY,
&xxp.IOADDR, &xxp.IPADDR, &xxp.INTLEVEL, &xxp.IOADDR, &xxp.IOADDR, &xxp.ListenPort, &xxp.NoNormalize,
&xxp.IGNOREUNLOCKED, &xxp.INP3ONLY, &xxp.TCPPORT, &xxp.RIGPORT, &xxp.PERMITTEDAPPLS, &xxp.Hide,
&xxp.SmartID, &xxp.KissParams, &xxp.SendtoM0LTEMap, &xxp.PortFreq, &xxp.M0LTEMapInfo, &xxp.QtSMPort}; /* offset for corresponding data in config file */
&xxp.SmartID, &xxp.KissParams, &xxp.SendtoM0LTEMap, &xxp.PortFreq, &xxp.M0LTEMapInfo, &xxp.QtSMPort, &xxp.AllowINP3}; /* offset for corresponding data in config file */
static int proutine[] =
{
@ -401,7 +403,7 @@ static int proutine[] =
0, 1, 2, 18, 15, 16, 2,
1, 17, 1, 1, 1, 1, 2,
2, 2, 1, 1, 19, 2,
1, 20, 1, 21, 22, 1}; /* routine to process parameter */
1, 20, 1, 21, 22, 1, 1}; /* routine to process parameter */
int PPARAMLIM = sizeof(proutine)/sizeof(int);
@ -535,6 +537,8 @@ BOOL ProcessConfig()
// xxcfg.SaveMH = TRUE; // Default to save
xxcfg.C_PREFERINP3ROUTES = 0; // Default to false
GetNextLine(rec);
while (rec[0])
@ -624,6 +628,7 @@ BOOL ProcessConfig()
paramok[89]=1; // L2Compress
paramok[90]=1; // L2Compress Maxframe
paramok[91]=1; // L2Compress Paclen
paramok[92]=1; // PREFERINP3ROUTES
for (i=0; i < PARAMLIM; i++)

View File

@ -81,6 +81,7 @@ struct PORTCONFIG
uint64_t PortFreq;
char * M0LTEMapInfo;
int QtSMPort;
int AllowINP3;
};
struct ROUTECONFIG
@ -176,6 +177,7 @@ struct CONFIGTABLE
int C_L2Compress;
int C_L2CompMaxframe;
int C_L2CompPaclen;
int C_PREFERINP3ROUTES;
//#define ApplOffset 80000 // Applications offset in config buffer

11
debian/NEWS vendored
View File

@ -1,11 +0,0 @@
linbpq (6.0.24.22-2) unstable; urgency=medium
This is quite a big update, with config moving from /opt/oarc/bpq/bpq32.cfg to
/etc/bpq32.cfg. The system shall do this automatically for you, however
computers and their programmers are not perfect.
I strongly recommend at this point backing up your entire
/opt/oarc/bpq/ directory (cp -r /opt/oarc/bpq/ ~/bpq-backup/) before
proceeding with the upgrade
-- Dave Hibberd <d@vehibberd.com> Sat, 16 Dec 2023 13:30:06 +0000

23
debian/README.Debian vendored
View File

@ -1,23 +0,0 @@
README for linbpq on Debian
===========================
Please see https://wiki.oarc.uk/packet:linbpq-apt-installation for this guide
# Set config
Copy the config, edit it & set permissions.
The permissions are so linbpq web interface can edit the config.
sudo mv /usr/share/doc/linbpq/examples/bpq32.cfg /etc/bpq32.cfg
sudo nano /etc/bpq32.cfg
sudo chown :linbpq /etc/bpq32.cfg
sudo chmod 644 /etc/bpq32.cfg
# Start linbpq
sudo systemctl start linbpq
# Access your node
It shall be available by accessing http://localhost:8008 in the browser or telnet localhost 8010
-- Dave Hibberd <hibby@debian.org> Tue, 26 Mar 2024 00:53:42 +0000

50
debian/bpq32.cfg vendored
View File

@ -1,50 +0,0 @@
SIMPLE
NODECALL=MB7NAA
NODEALIAS=AANODE
LOCATOR=AA00aa
PASSWORD=xxxxxxxx
AUTOSAVE=1
NODESINTERVAL=10
MINQUAL=10
CTEXT:
Thanks for connecting.
Type ? for help.
***
PORT
PORTNUM=1
ID=VHF
TYPE=ASYNC
PROTOCOL=KISS
KISSOPTIONS=ACKMODE
COMPORT=/dev/ttyACM0
SPEED=57600
FRACK=4000
PACLEN=150
DIGIFLAG=0
QUALITY=192
MINQUAL=20
ENDPORT
PORT
PORTNUM=9
ID=Telnet
DRIVER=Telnet
CONFIG
LOGGING=1
CMS=1
DisconnectOnClose=1
SECURETELNET=1
TCPPORT=8010
FBBPORT=8011
HTTPPORT=8008
LOGINPROMPT=user:
PASSWORDPROMPT=password:
MAXSESSIONS=10
CTEXT=Thanks for connecting\n Enter ? for list of commands\n\n
USER=username,xxxxxxxx,m0aaa,,SYSOP
ENDPORT
LINCHAT
APPLICATION 2,CHAT,,MB7NAA-9,AACHAT,255

254
debian/changelog vendored
View File

@ -1,254 +0,0 @@
linbpq (6.0.24.67+repack-1) UNRELEASED; urgency=medium
* New upstream version 6.0.24.67+repack
-- Dave Hibberd <hibby@debian.org> Sat, 22 Mar 2025 00:22:40 +0000
linbpq (6.0.24.66+repack-1~hibbian+2) bookworm-hibbian-unstable; urgency=medium
* Update postinst script to be a little quieter
* MINI_BUILDD_OPTION:
auto-ports=trixie-packetrepo-unstable,bookworm-packetrepo-unstable,bullseye-packetrepo-unstable,noble-packetrepo-unstable,jammy-packetrepo-unstable
-- Dave Hibberd <hibby@debian.org> Tue, 11 Mar 2025 00:51:35 +0000
linbpq (6.0.24.66+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream version 6.0.24.66+repack
-- Dave Hibberd <hibby@debian.org> Tue, 04 Mar 2025 22:50:09 +0000
linbpq (6.0.24.65+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
-- Dave Hibberd <hibby@debian.org> Tue, 25 Feb 2025 09:33:24 +0000
linbpq (6.0.24.59a+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
* Little tweaks to makefile patch to account for new -rdynamic
-- Dave Hibberd <hibby@debian.org> Mon, 03 Feb 2025 22:32:11 +0000
linbpq (6.0.24.56+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
-- Dave Hibberd <hibby@debian.org> Mon, 06 Jan 2025 21:37:44 +0000
linbpq (6.0.24.55+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
* d/rules
- Increased hardening
-- Dave Hibberd <hibby@debian.org> Sun, 05 Jan 2025 23:35:06 +0000
linbpq (6.0.24.54+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream
* Drop AGW Patch
* Drop Spelling Patch
* Drop Dynamic Links patch
-- Dave Hibberd <hibby@debian.org> Tue, 17 Dec 2024 16:46:05 +0000
linbpq (6.0.24.53+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream
- Patches refreshed
- dropped some edits in ftbfs-gcc14
- dropped d/patches/headers.patch
-- Dave Hibberd <hibby@debian.org> Tue, 03 Dec 2024 00:57:57 +0000
linbpq (6.0.24.52+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream
- Patches happy
-- Dave Hibberd <hibby@debian.org> Sat, 30 Nov 2024 21:47:17 +0000
linbpq (6.0.24.51.1+repack-1~hibbian+2) bookworm-hibbian-unstable; urgency=medium
* Iron out an issue with time...
-- Dave Hibberd <hibby@debian.org> Fri, 29 Nov 2024 19:57:28 +0000
linbpq (6.0.24.51.1+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import after bug report
* Roll back some ftbfs-gcc14 edits
* Remove some more lib headers
-- Dave Hibberd <hibby@debian.org> Fri, 29 Nov 2024 19:30:22 +0000
linbpq (6.0.24.51+repack-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import
- Patches refreshed
* Upstream is now repacked to include less files
* Big build system review, now using Debian CFLAGS and LDFLAGS
- Hardening enabled, mostly
- A debug symbols package is now available
* Oh yeah, everything is now dynamic linking
- libpng
- libpaho-mqtt
- libjansson
- libminiupnpc
-- Dave Hibberd <hibby@debian.org> Fri, 29 Nov 2024 13:08:38 +0000
linbpq (6.0.24.50-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import
* Files excluded at origtargz generation time for cleanliness
-- Dave Hibberd <hibby@debian.org> Tue, 12 Nov 2024 21:56:38 +0000
linbpq (6.0.24.49-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New Upstream import
* Patches refreshed
* Add mqtt requirements
-- Dave Hibberd <hibby@debian.org> Tue, 05 Nov 2024 21:52:29 +0000
linbpq (6.0.24.45-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* New upstream import
* Patches refreshed
-- Dave Hibberd <hibby@debian.org> Fri, 11 Oct 2024 15:48:41 +0100
linbpq (6.0.24.42-1~hibbian+3) bookworm-hibbian-unstable; urgency=medium
* 32bit build error
- Patch updated to fix hopefully
-- Dave Hibberd <hibby@debian.org> Fri, 30 Aug 2024 12:21:57 +0100
linbpq (6.0.24.42-1~hibbian+2) bookworm-hibbian-unstable; urgency=medium
* Forgot to fix the ninotnc-smt issue, fixed now
-- Dave Hibberd <hibby@debian.org> Fri, 30 Aug 2024 12:05:54 +0100
linbpq (6.0.24.42-1~hibbian+1) bookworm-hibbian-unstable; urgency=medium
* Install config to /etc
* New upstream update
* Patches refreshed
* Debian hardening enabled
- 2 new patches created that touch almost every file
- Considered experimental.
- gcc14 builds for Debian Trixie!
-- Dave Hibberd <hibby@debian.org> Fri, 30 Aug 2024 10:15:11 +0100
linbpq (6.0.24.40-1) unstable; urgency=medium
* Fresh upstream release
- Patches refreshed
* Secure by default patch
-- Dave Hibberd <hibby@debian.org> Sun, 07 Jul 2024 16:09:28 +0100
linbpq (6.0.24.38-1) unstable; urgency=medium
* New Upstream
* Tweak config file per recommendation from 2M0MQN to make first start simple
* Bump standards to 4.7.0.0
-- Dave Hibberd <hibby@debian.org> Sun, 09 Jun 2024 22:38:40 +0100
linbpq (6.0.24.34-2) unstable; urgency=medium
* Fix config permissions bug as reported by Alex 2E1PKY
-- Dave Hibberd <hibby@debian.org> Mon, 08 Apr 2024 22:27:02 +0100
linbpq (6.0.24.34-1) unstable; urgency=medium
* Upstream bump
-- Dave Hibberd <hibby@debian.org> Sat, 06 Apr 2024 02:15:28 +0100
linbpq (6.0.24.33-1) unstable; urgency=medium
* Upstream bump
* Moved config file to examples
* Updated service to fail on no config
* Added helpful README.Debian
-- Dave Hibberd <hibby@debian.org> Tue, 26 Mar 2024 20:24:08 +0000
linbpq (6.0.24.30-1) unstable; urgency=medium
* Upstream bump
-- Dave Hibberd <hibby@debian.org> Fri, 23 Feb 2024 23:24:46 +0000
linbpq (6.0.24.29-1) unstable; urgency=medium
* Upstream bump
* Added my new details
* Tidied up some packaging errors
-- Dave Hibberd <hibby@debian.org> Tue, 13 Feb 2024 00:06:33 +0000
linbpq (6.0.24.27-2) unstable; urgency=medium
* Permissions fix for web-config-editor users
-- Dave Hibberd <d@vehibberd.com> Thu, 18 Jan 2024 10:31:56 +0000
linbpq (6.0.24.27-1) unstable; urgency=medium
* New Upstream Release
-- Dave Hibberd <d@vehibberd.com> Tue, 16 Jan 2024 20:51:43 +0000
linbpq (6.0.24.25-1) unstable; urgency=medium
* New Upstream Release
-- Dave Hibberd <d@vehibberd.com> Thu, 28 Dec 2023 10:44:47 +0000
linbpq (6.0.24.22-2) unstable; urgency=medium
* Moved config file home, caused chaos
-- Dave Hibberd <d@vehibberd.com> Sat, 16 Dec 2023 14:40:20 +0000
linbpq (6.0.24.22-1) unstable; urgency=medium
* New Upstream Release
-- Dave Hibberd <d@vehibberd.com> Fri, 08 Dec 2023 12:29:40 +0000
linbpq (6.0.24.16-1) unstable; urgency=medium
* New Upstream release
-- Dave Hibberd <d@vehibberd.com> Tue, 31 Oct 2023 22:50:01 +0000
linbpq (6.0.24.15-2) unstable; urgency=medium
* debian/conffiles introduced to stop linbpq overwriting config files
- Thanks to Mark 2M0IIG for raising concern about this bug!
-- Dave Hibberd <d@vehibberd.com> Sun, 15 Oct 2023 21:45:24 +0100
linbpq (6.0.24.15-1) unstable; urgency=medium
* New upstream release
-- Dave Hibberd <d@vehibberd.com> Tue, 10 Oct 2023 22:19:48 +0100
linbpq (6.0.24.2-1) unstable; urgency=medium
* Initial release.
-- Dave Hibberd <d@vehibberd.com> Mon, 28 Aug 2023 23:20:45 +0100

20
debian/control vendored
View File

@ -1,20 +0,0 @@
Source: linbpq
Section: hamradio
Priority: optional
Maintainer: Dave Hibberd <hibby@debian.org>
Standards-Version: 4.7.1
Vcs-Browser: https://git.hibbian.org/Hibbian/linbpq
Vcs-Git: https://git.hibbian.org/Hibbian/linbpq.git
Homepage: https://www.cantab.net/users/john.wiseman/Documents/
Build-Depends: debhelper-compat (= 13)
Build-Depends-Arch: libssl-dev, libminiupnpc-dev, libpcap-dev, libconfig-dev, zlib1g-dev, libpaho-mqtt-dev, libjansson-dev, libpng-dev
Rules-Requires-Root: no
Package: linbpq
Architecture: linux-any
Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, hibbian-archive-keyring
Description: Packet node and ax25 stack
LINBPQ is a Linux version of the BPQ32 Node, BBS and Chat Server components.
It is actively developed by John G8BPQ and contains a complete, independent
implementation of ax.25 and net/rom as well as BBS and Chat applications and
can be used either as a packet switch or as a full featured node.

36
debian/copyright vendored
View File

@ -1,36 +0,0 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: linBPQ
Upstream-Contact: John Wiseman G8BPQ <john.wiseman@cantab.net>
Source: https://www.cantab.net/users/john.wiseman/Documents/
Files-Excluded: *.vcproj* *.bak *.lib *.dll *.wav *.asm *.vcxproj* *.pdb *.exe
.gitignore XAprs zlib.h zconf.h MQTT* pcap.h miniupnpc.h upnpdev.h
igd_desc_parse.h upnpcommands.h upnperrors.h miniupnpctypes.h
Files: *
Copyright: 1990-2024 John Wiseman G8BPQ <john.wiseman@cantab.net>
License: GPL-3
Files: debian/*
Copyright: 2016-2021 Dave Hibberd <d@vehibberd.com>
License: GPL-3
Files: debian/linbpq.service
Copyright: Tom Fanning M0LTE
License: GPL-3
License: GPL-3
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
.
The GPL License which applies to this package can be found on your Debian
system at /usr/share/common-licenses/GPL-3.

2
debian/dirs vendored
View File

@ -1,2 +0,0 @@
usr/sbin
opt/oarc/bpq

3
debian/gbp.conf vendored
View File

@ -1,3 +0,0 @@
[DEFAULT]
debian-branch = hibbian/latest
upstream-branch = upstream/latest

View File

@ -1,6 +0,0 @@
include:
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
- https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
reprotest:
extends: .test-reprotest-diffoscope

1
debian/install vendored
View File

@ -1 +0,0 @@
debian/bpq32.cfg etc/

View File

@ -1 +0,0 @@
debian/bpq32.cfg

14
debian/linbpq.service vendored
View File

@ -1,14 +0,0 @@
[Unit]
Description=Linbpq systemd service file
After=network.target
ConditionPathExists=/etc/bpq32.cfg
[Service]
ExecStart=/usr/sbin/linbpq -c /etc -d /opt/oarc/bpq -l /opt/oarc/bpq
WorkingDirectory=/opt/oarc/bpq
Restart=always
User=linbpq
Group=linbpq
[Install]
WantedBy=multi-user.target

View File

@ -1,11 +0,0 @@
# weirdness from oarc packaging
linbpq: dir-or-file-in-opt [opt/oarc/]
linbpq: dir-or-file-in-opt [opt/oarc/bpq/]
# i know!
linbpq: no-manual-page [usr/sbin/linbpq]
# Directory is populated on first run
linbpq: package-contains-empty-directory [opt/oarc/bpq/]
# Code convenience
linbpq: spelling-error-in-binary Dont Don't [usr/sbin/linbpq]
linbpq: spelling-error-in-binary Paramters Parameters [usr/sbin/linbpq]
linbpq: spelling-error-in-binary lon long [usr/sbin/linbpq]

View File

@ -1,50 +0,0 @@
--- a/makefile
+++ b/makefile
@@ -2,8 +2,7 @@
# To exclude i2c support run make noi2c
-OBJS = pngwtran.o pngrtran.o pngset.o pngrio.o pngwio.o pngtrans.o pngrutil.o pngwutil.o\
- pngread.o pngwrite.o png.o pngerror.o pngget.o pngmem.o APRSIconData.o AISCommon.o\
+OBJS = APRSIconData.o AISCommon.o\
upnp.o APRSStdPages.o HSMODEM.o WinRPR.o KISSHF.o TNCEmulators.o bpqhdlc.o SerialPort.o\
adif.o WebMail.o utf8Routines.o VARA.o LzFind.o Alloc.o LzmaDec.o LzmaEnc.o LzmaLib.o \
Multicast.o ARDOP.o IPCode.o FLDigi.o linether.o CMSAuth.o APRSCode.o BPQtoAGW.o KAMPactor.o\
@@ -18,9 +17,12 @@
# Configuration:
CC = gcc
-
-all: CFLAGS = -DLINBPQ -MMD -g -rdynamic -fcommon
-all: LDFLAGS = -l:libpaho-mqtt3a.a -l:libjansson.a
+CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
+CFLAGS+=$(shell dpkg-buildflags --get CPPFLAGS)
+LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)
+
+all: CFLAGS += -DLINBPQ -MMD -g -fcommon -rdynamic
+all: LIBS = -lpaho-mqtt3a -ljansson -lminiupnpc -lrt -lm -lz -lpthread -lconfig -lpcap -lpng
all: linbpq
@@ -32,12 +34,15 @@
linbpq: $(OBJS)
- gcc $(OBJS) -Xlinker -Map=output.map -l:libminiupnpc.a -lrt -lm -lz $(LDFLAGS) -lpthread -lconfig -lpcap -o linbpq
- sudo setcap "CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep" linbpq
+ gcc $(OBJS) $(CLFAGS) $(LDFLAGS) $(LIBS) -o linbpq
+ # sudo setcap "CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep" linbpq
-include *.d
-clean :
- rm *.d
- rm linbpq $(OBJS)
-
+install:
+ install -b -m 755 -D -d debian/linbpq/usr/sbin
+ install -b -m 755 -p linbpq debian/linbpq/usr/sbin
+
+clean:
+ $(RM) *.d
+ $(RM) linbpq $(OBJS)

View File

@ -1,2 +0,0 @@
spelling-fixes.patch
makefile

View File

@ -1,11 +0,0 @@
--- a/UZ7HODrv.c
+++ b/UZ7HODrv.c
@@ -382,7 +382,7 @@
if (AGW->CenterFreq == 0)
{
- buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Invalid Modem Freqency\r");
+ buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Invalid Modem Frequency\r");
return 1;
}

47
debian/postinst vendored
View File

@ -1,47 +0,0 @@
#!/bin/sh
set -e
if [ "$1" = configure ]; then
# if ! getent group linbpq >/dev/null; then
# addgroup --system --force-badname linbpq || true
# fi
echo "Creating/updating linbpq user account..."
adduser --system --group --home /opt/oarc/bpq \
--gecos "linbpq system user" --shell /bin/false \
--quiet --disabled-password linbpq || {
# adduser failed. Why?
if getent passwd linbpq >/dev/null ; then
echo "Non-system user linbpq found. I will not overwrite a non-system" >&2
echo "user. Remove the user and reinstall linbpq." >&2
exit 1
fi
# unknown adduser error, simply exit
exit 1
}
if ! id -nGz linbpq | grep -qzxF 'dialout' ; then
adduser linbpq dialout
fi
if ! id -nGz linbpq | grep -qzxF 'plugdev' ; then
adduser linbpq plugdev
fi
chown :linbpq /opt/oarc/bpq
chmod 775 /opt/oarc/bpq
# If we have setcap is installed, set the requirements
# which allows us to install our binaries without the setuid
# bit.
if command -v setcap > /dev/null; then
setcap "CAP_NET_ADMIN=ep CAP_NET_RAW=ep CAP_NET_BIND_SERVICE=ep" /usr/sbin/linbpq
else
echo "Setcap failed on /usr/sbin/linbpq, Features may be limited" >&2
fi
else
echo "Setcap is not installed, Features may be limited" >&2
fi
#DEBHELPER#

14
debian/preinst vendored
View File

@ -1,14 +0,0 @@
#!/bin/sh
set -e
confile="/etc/bpq32.cfg"
node="/opt/oarc/bpq/bpq32.cfg"
if [ -L $confile ]; then
rm $confile
cp $node $confile
mv $node $node.bak
fi
#DEBHELPER#

6
debian/rules vendored
View File

@ -1,6 +0,0 @@
#!/usr/bin/make -f
export DEB_BUILD_MAINT_OPTIONS=hardening=+all
%:
dh $@

View File

@ -1 +0,0 @@
3.0 (quilt)

View File

3
debian/watch vendored
View File

@ -1,3 +0,0 @@
version=4
opts="pgpmode=none,dversionmangle=s/\+repack//,repacksuffix=+repack,repack,compression=xz" \
http://127.0.0.1:8000/linbpq-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))

2
kiss.c
View File

@ -2294,7 +2294,7 @@ VOID QtSMThread(struct PORTCONTROL * PORT)
char Msg[64];
int Len;
// We need tp send a QtSMPort message for each Channel sharing thia connection
// We need to send a QtSMPort message for each Channel sharing this connection
// Note struct KISSINFO and struct PORTCONTROL are different mappings of the same data
struct KISSINFO * KISS = (struct KISSINFO *)PORT;

View File

@ -19,15 +19,15 @@ OBJS = pngwtran.o pngrtran.o pngset.o pngrio.o pngwio.o pngtrans.o pngrutil.o pn
CC = gcc
all: CFLAGS = -DLINBPQ -MMD -g -rdynamic -fcommon
all: CFLAGS = -DLINBPQ -MMD -g -rdynamic -fcommon -fasynchronous-unwind-tables
all: LDFLAGS = -l:libpaho-mqtt3a.a -l:libjansson.a
all: linbpq
nomqtt: CFLAGS = -DLINBPQ -MMD -fcommon -g -rdynamic -DNOMQTT
nomqtt: CFLAGS = -DLINBPQ -MMD -fcommon -g -rdynamic -DNOMQTT -fasynchronous-unwind-tables
nomqtt: linbpq
noi2c: CFLAGS = -DLINBPQ -MMD -DNOI2C -g -rdynamic -fcommon
noi2c: CFLAGS = -DLINBPQ -MMD -DNOI2C -g -rdynamic -fcommon -fasynchronous-unwind-tables
noi2c: linbpq

2
mqtt.c
View File

@ -429,6 +429,6 @@ void MQTTKISSRX(void *message) {};
void MQTTKISSRX_RAW(char* buffer, int bufferLength, void* PORT) {};
void MQTTTimer() {};
void MQTTReportSession(char * Msg) {};
void MQTTMessageEvent(void* message) {};
#endif

14
upnp.c
View File

@ -93,7 +93,11 @@ int i;
const char * rootdescurl = 0;
const char * multicastif = 0;
const char * minissdpdpath = 0;
#ifdef UPNP_LOCAL_PORT_ANY
int localport = UPNP_LOCAL_PORT_ANY;
#else
int localport = 0;
#endif
int retcode = 0;
int error = 0;
int ipv6 = 0;
@ -119,8 +123,11 @@ int upnpInit()
{
if (devlist == NULL)
{
#if MINIUPNPC_API_VERSION == 10
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
#else
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
#endif
if (devlist == NULL)
{
Consoleprintf("Failed to find a UPNP device");
@ -150,8 +157,11 @@ int upnpClose()
{
if (devlist == NULL)
{
#if MINIUPNPC_API_VERSION == 10
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, &error);
#else
devlist = upnpDiscover(2000, multicastif, minissdpdpath, localport, ipv6, ttl, &error);
#endif
if (devlist == NULL)
{
Consoleprintf("Failed to find a UPNP device");