master
John Wiseman 3 days ago
parent d84bcdac5c
commit 45dc77a4e1

@ -7316,7 +7316,7 @@ VOID APRSProcessHTTPMessage(SOCKET sock, char * MsgPtr, BOOL LOCAL, BOOL COOKIE)
if (memcmp(MsgPtr, "POST" , 3) == 0)
{
char * To;
char * To = "";
char * Msg = "";
URL = &MsgPtr[5];

@ -50,6 +50,8 @@ VOID SortRoutes(struct DEST_LIST * Dest);
VOID SendRTTMsg(struct ROUTE * Route);
VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame);
void NETROMCloseTCP(struct ROUTE * Route);
VOID UpdateTTforRoute(struct ROUTE * Route, int TTChange);
static VOID SendNetFrame(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame)
{
@ -134,7 +136,7 @@ VOID InitialiseRTT()
memset(&RTTMsg, ' ', sizeof(struct _RTTMSG));
memcpy(RTTMsg.ID, "L3RTT: ", 7);
memcpy(RTTMsg.VERSION, "LEVEL3_V2.1 ", 12);
memcpy(RTTMsg.SWVERSION, "BPQ32002 ", 9);
memcpy(RTTMsg.SWVERSION, "BPQ32003 ", 9); // Follows XR by not adding route time before sending RIF
_snprintf(temp, sizeof(temp), "$M%d $N $H%d ", MAXRTT, MaxHops); // trailing spaces extend to ensure padding if the length of characters for MAXRTT changes.
memcpy(RTTMsg.FLAGS, temp, 20); // But still limit the actual characters copied.
memcpy(RTTMsg.ALIAS, &MYALIASTEXT, 6);
@ -348,6 +350,7 @@ VOID ProcessRTTReply(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Buff)
{
uint32_t RTT;
uint32_t OrigTime;
int32_t TTChange; // Old SRTT
char Normcall[10];
@ -356,9 +359,9 @@ VOID ProcessRTTReply(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Buff)
Route->Timeout = 0; // Got Response
sscanf(&Buff->L4DATA[6], "%u", &OrigTime);
RTT = GetTickCountINP3() - OrigTime; // We work internally in mS
RTT = GetTickCountINP3() - OrigTime;
if (RTT > 60000 || RTT < 0)
if (RTT > 60000)
return; // Ignore if more than 60 secs (why ??)
if (RTT == 0)
@ -378,15 +381,34 @@ VOID ProcessRTTReply(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Buff)
if (Route->RTTIncrement == 0)
Route->RTTIncrement = 1;
if (Route->OldBPQ)
Route->TXRTTIncrement = Route->RTTIncrement;
else
Route->TXRTTIncrement = 0;
if ((Route->Status & GotRTTResponse) == 0)
{
// Link is just starting
if (DEBUGINP3) Debugprintf("INP3 got first RTT reply from %s - Link is (Re)staring", Normcall);
if (DEBUGINP3) Debugprintf("INP3 got first RTT reply from %s - Link is (Re)starting", Normcall);
Route->Status |= GotRTTResponse;
Route->STTAtLastChange = Route->RTTIncrement;
}
else
{
// if significant change update dests via this route
TTChange = Route->RTTIncrement - Route->STTAtLastChange; // Change since last reported in 10mS units
if (TTChange > 10 || TTChange < - 10)
{
if (DEBUGINP3) Debugprintf("INP3 Significant change to RTT by %s %d - updating routes", Normcall, TTChange);
UpdateTTforRoute(Route, TTChange);
Route->STTAtLastChange = Route->RTTIncrement;
}
}
}
VOID ProcessINP3RIF(struct ROUTE * Route, UCHAR * ptr1, int msglen, int Port)
@ -453,10 +475,11 @@ VOID ProcessINP3RIF(struct ROUTE * Route, UCHAR * ptr1, int msglen, int Port)
// if other end is old bpq then value is mS otherwise 10 mS unita
if (Route->OldBPQ)
if (Route->OldBPQ == 1)
rtt /= 10;
// rtt += Route->SRTT; // Don't do this - other end has added linkrtt
if (Route->OldBPQ == 0)
rtt += Route->RTTIncrement; // Don't do this if OldBPQ set - other end has added it
msglen -= 10;
@ -507,12 +530,18 @@ VOID UpdateNode(struct ROUTE * Route, UCHAR * axcall, UCHAR * alias, int hops,
// SEE IF any of OUR CALLs - DONT WANT TO PUT IT IN LIST!
if (CompareCalls(axcall, MYCALL))
{
if (DEBUGINP3) Debugprintf("INP3 RIF for our Nodecall - discarding");
return;
}
if (CompareCalls(axcall, NETROMCALL))
{
if (DEBUGINP3) Debugprintf("INP3 for our Nodecall - discarding");
if (DEBUGINP3) Debugprintf("INP3 RIF for our NETROMCALL - discarding");
return;
}
if (CheckExcludeList(axcall) == 0)
{
if (DEBUGINP3) Debugprintf("INP3 excluded - discarding");
@ -525,7 +554,7 @@ VOID UpdateNode(struct ROUTE * Route, UCHAR * axcall, UCHAR * alias, int hops,
if (CompareCalls(axcall, APPL->APPLCALL))
{
if (DEBUGINP3) Debugprintf("INP3 for an APPLCALL - discarding");
if (DEBUGINP3) Debugprintf("INP3 RIF for an APPLCALL - discarding");
return;
}
}
@ -599,21 +628,15 @@ VOID UpdateNode(struct ROUTE * Route, UCHAR * axcall, UCHAR * alias, int hops,
// Adding New Node
if (Dest->RouteLastTT)
free(Dest->RouteLastTT);
memset(Dest, 0, sizeof(struct DEST_LIST));
memcpy(Dest->DEST_CALL, axcall, 7);
memcpy(Dest->DEST_ALIAS, alias, 6);
// Set up First Route
Dest->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
Dest->INP3ROUTE[0].Hops = hops;
Dest->INP3ROUTE[0].STT = rtt;
Dest->RouteLastTT[Route->recNum] = 0;
Dest->INP3FLAGS = NewNode;
@ -685,11 +708,10 @@ Found:
if (DEBUGINP3) Debugprintf("INP3 adding as route[%d]", i);
AddHere(ROUTEPTR, Route, hops, rtt);
if (i == 0)
Dest->RouteLastTT[Route->recNum] = 0;
Dest->LastTT = 0;
SortRoutes(Dest);
return;
}
ROUTEPTR++;
}
if (DEBUGINP3) Debugprintf("INP3 All entries in use - see if this is better than existing");
@ -863,6 +885,33 @@ VOID SortRoutes(struct DEST_LIST * Dest)
}
VOID UpdateTTforRoute(struct ROUTE * Route, int TTChange)
{
// Look for any Nodes with INP3 routes via Route and adjust STT. Called when an RTT messages detects a change in RTT to Route
struct DEST_LIST * Dest = DESTS;
int i, n;
for (i = 0; i < MAXDESTS; i++)
{
for (n = 0; n < 3; n++)
{
if (Dest->INP3ROUTE[n].ROUT_NEIGHBOUR == Route)
{
int newTT = Dest->INP3ROUTE[n].STT +TTChange;
if (newTT > 0)
{
Dest->INP3ROUTE[n].STT = newTT;
SortRoutes(Dest);
}
break;
}
}
Dest++;
}
}
VOID UpdateRoute(struct DEST_LIST * Dest, struct INP3_DEST_ROUTE_ENTRY * ROUTEPTR, int hops, int rtt)
@ -951,6 +1000,8 @@ VOID ProcessRTTMsg(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Buff, int Len
if (memcmp(RTTMsg->SWVERSION, "BPQ32001 ", 9) == 0)
Route->OldBPQ = 1;
else if (memcmp(RTTMsg->SWVERSION, "BPQ32002 ", 9) == 0)
Route->OldBPQ = 2; // XR mode
else
Route->OldBPQ = 0;
@ -1050,12 +1101,12 @@ VOID SendRTTMsg(struct ROUTE * Route)
SendNetFrame(Route, Msg);
if (Route->Status & SentRTTRequest)
{
if (DEBUGINP3) Debugprintf("INP3 Sending first RTT Msg to %s", Normcall);
return;
}
Route->Status |= SentRTTRequest;
if (DEBUGINP3) Debugprintf("INP3 Sending first RTT Msg to %s", Normcall);
}
VOID SendKeepAlive(struct ROUTE * Route)
@ -1137,14 +1188,17 @@ VOID SendOurRIF(struct ROUTE * Route)
int totLen = 1;
int App;
APPLCALLS * APPL;
int sendTT = Route->RTTIncrement;
int sendTT = Route->TXRTTIncrement;
char Normcall[10];
if (sendTT == 0)
sendTT = 1;// For no logical reason XR sends our routes at 10mS
Normcall[ConvFromAX25(Route->NEIGHBOUR_CALL, Normcall)] = 0;
if (DEBUGINP3) Debugprintf("INP3 Sending Our Call and Applcalls to %s ", Normcall);
if (Route->OldBPQ) // old bpq bug - send mS not 10 mS units
if (Route->OldBPQ == 1) // old bpq bug - send mS not 10 mS units
sendTT *= 10;
Msg = GetBuff();
@ -1346,6 +1400,12 @@ int SendRIPTimer()
{
Route->BCTimer = RTTInterval + rand() % 4;
Route->Retries = RTTRetries;
if (DEBUGINP3)
{
Normcall[ConvFromAX25(Route->NEIGHBOUR_CALL, Normcall)] = 0;
Debugprintf("INP3 Sending RTT Msg to %s BCTimer = %d", Normcall, Route->BCTimer);
}
SendRTTMsg(Route);
}
}
@ -1406,15 +1466,13 @@ VOID SendRIFToOtherNeighbours(struct DEST_LIST * Dest, UCHAR * alias, struct INP
{
if (Routes->INP3Node && Routes->Status && Routes != Entry->ROUT_NEIGHBOUR)
{
// as the value sent will be different for each link, we need to check if change is enough here
sendHops = Entry->Hops + 1;
if (Entry->STT < 60000)
sendTT = Entry->STT + Routes->RTTIncrement;
sendTT = Entry->STT + Routes->TXRTTIncrement;
else
sendTT = 60000;
lastTT = Dest->RouteLastTT[Routes->recNum];
lastTT = Dest->LastTT;
destCall[ConvFromAX25(Routes->NEIGHBOUR_CALL, destCall)] = 0;
@ -1450,7 +1508,7 @@ VOID SendRIFToOtherNeighbours(struct DEST_LIST * Dest, UCHAR * alias, struct INP
if (memcmp(Routes->NEIGHBOUR_CALL, axcall, 7) == 0)
{
if (DEBUGINP3) Debugprintf("INP3 SendRIFToOtherNeighbours Don't send %s to itself", NodeCall);
Dest->RouteLastTT[Routes->recNum] = sendTT; // But update or we will keep re-entering
Dest->LastTT = sendTT; // But update or we will keep re-entering
Routes+=1;
continue;
}
@ -1464,7 +1522,7 @@ VOID SendRIFToOtherNeighbours(struct DEST_LIST * Dest, UCHAR * alias, struct INP
if (portNum)
Routes->Status &= ~SentOurRIF;
Dest->RouteLastTT[Routes->recNum] = sendTT;
Dest->LastTT = sendTT;
// send, but only if within their constraints
@ -1495,7 +1553,7 @@ VOID SendRIFToOtherNeighbours(struct DEST_LIST * Dest, UCHAR * alias, struct INP
if (Msg)
{
if (Routes->OldBPQ) // old bpq bug - send mS not 10 mS units
if (Routes->OldBPQ == 1) // old bpq bug - send mS not 10 mS units
sendTT *= 10;
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], axcall, alias, sendHops, sendTT, destCall);
@ -1543,8 +1601,8 @@ VOID SendRIFToNewNeighbour(struct ROUTE * Route)
sendHops = Entry->Hops + 1;
sendTT = Entry->STT + Entry->ROUT_NEIGHBOUR->RTTIncrement;
Dest->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum] = sendTT;
sendTT = Entry->STT + Entry->ROUT_NEIGHBOUR->TXRTTIncrement;
Dest->LastTT = sendTT;
if ((Route->RemoteMAXHOPS == 0 || Route->RemoteMAXHOPS >= Entry->Hops || Entry->Hops > 30) &&
(Route->RemoteMAXRTT == 0 || Route->RemoteMAXRTT >= Entry->STT || Entry->STT == 60000))
@ -1557,7 +1615,7 @@ VOID SendRIFToNewNeighbour(struct ROUTE * Route)
if (Msg == NULL)
return;
if (Route->OldBPQ) // old bpq bug - send mS not 10 mS units
if (Route->OldBPQ == 1) // old bpq bug - send mS not 10 mS units
sendTT *= 10;
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], Dest->DEST_CALL, Dest->DEST_ALIAS, sendHops, sendTT, Normcall);
@ -1652,7 +1710,6 @@ VOID SendNegativeInfo()
}
else
{
memset(Dest->RouteLastTT, 0, MAXNEIGHBOURS * sizeof(uint16_t)); // So next scan will check if rtt has increaced enough to need a RIF
memcpy(&Dest->INP3ROUTE[0], &Dest->INP3ROUTE[1], sizeof(struct INP3_DEST_ROUTE_ENTRY));
memcpy(&Dest->INP3ROUTE[1], &Dest->INP3ROUTE[2], sizeof(struct INP3_DEST_ROUTE_ENTRY));
memset(&Dest->INP3ROUTE[2], 0, sizeof(struct INP3_DEST_ROUTE_ENTRY));
@ -1756,10 +1813,12 @@ VOID sendAlltoOneNeigbour(struct ROUTE * Route)
if (Msg == 0)
return;
if (Route->OldBPQ)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], MYCALL, MYALIASTEXT, 1, Route->RTTIncrement * 10, Call);
if (Route->OldBPQ == 1)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], MYCALL, MYALIASTEXT, 1, Route->TXRTTIncrement * 10, Call);
else if (Route->OldBPQ == 2)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], MYCALL, MYALIASTEXT, 1, Route->TXRTTIncrement, Call);
else
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], MYCALL, MYALIASTEXT, 1, Route->RTTIncrement, Call);
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], MYCALL, MYALIASTEXT, 1, 1, Call);
for (App = 0; App < NumberofAppls; App++)
{
@ -1767,11 +1826,12 @@ VOID sendAlltoOneNeigbour(struct ROUTE * Route)
if (APPL->APPLQUAL > 0)
{
if (Route->OldBPQ)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], APPL->APPLCALL, APPL->APPLALIAS_TEXT, 1, Route->RTTIncrement * 10, Call);
if (Route->OldBPQ == 1)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], APPL->APPLCALL, APPL->APPLALIAS_TEXT, 1, Route->TXRTTIncrement * 10, Call);
else if (Route->OldBPQ == 2)
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], APPL->APPLCALL, APPL->APPLALIAS_TEXT, 1, Route->TXRTTIncrement, Call);
else
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], APPL->APPLCALL, APPL->APPLALIAS_TEXT, 1, Route->RTTIncrement, Call);
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], APPL->APPLCALL, APPL->APPLALIAS_TEXT, 1, 1, Call);
}
}
@ -1797,15 +1857,14 @@ VOID sendAlltoOneNeigbour(struct ROUTE * Route)
if (memcmp(Route->NEIGHBOUR_CALL, Dest->DEST_CALL, 7) == 0)
{
if (DEBUGINP3) Debugprintf("INP3 Timer RIF Don't send %s to itself", Call);
Route++;
continue;
}
sendHops = Entry->Hops + 1;
sendTT = Entry->STT + Entry->ROUT_NEIGHBOUR->RTTIncrement;
lastTT = Dest->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum];
sendTT = Entry->STT + Entry->ROUT_NEIGHBOUR->TXRTTIncrement;
lastTT = Dest->LastTT;
Dest->RouteLastTT[Entry->ROUT_NEIGHBOUR->recNum] = sendTT;
Dest->LastTT = sendTT;
// send, but only if within their constraints
@ -1818,7 +1877,7 @@ VOID sendAlltoOneNeigbour(struct ROUTE * Route)
if (Msg)
{
if (Route->OldBPQ)
if (Route->OldBPQ == 1)
sendTT *= 10;
Msg->LENGTH += BuildRIF(&Msg->L3SRCE[Msg->LENGTH], Dest->DEST_CALL, Dest->DEST_ALIAS, sendHops, sendTT, Call);
@ -1963,7 +2022,7 @@ UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, int msglen)
{
if (!isupper(call[i]) && !isdigit(call[i]) && call[i] != '-')
{
ptr2+=sprintf(ptr2, " Corrupt RIF\r");
ptr2+=sprintf(ptr2, " Corrupt RIF Call\r");
return ptr2;
}
}
@ -1988,7 +2047,7 @@ UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, int msglen)
if (len < 2 || len > msglen)
{
ptr2+=sprintf(ptr2, " Corrupt RIF\r");
ptr2+=sprintf(ptr2, " Corrupt RIF Opcode %d Len %d MsgLen %d \r", opcode, len, msglen);
return ptr2;
}
if (opcode == 0 && len < 9)

@ -1319,6 +1319,9 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Fix crash when APRS pages requested when APRS isn't configured (26)
// Add setting modem params to QTSM command (28)
// Security fixes (28)
// Change INP3 to XR 'standard' (29)
// Swap L4INDEX and L4ID in Packet Trace API (30)
// More INP3 fixes (30)
#define CKernel
@ -3912,9 +3915,6 @@ BOOL UpdateNodesForApp(int Appl)
NUMBEROFNODES++;
APPL->NODEPOINTER = DEST;
if (DEST->RouteLastTT == 0)
DEST->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
memmove (DEST->DEST_CALL,APPL->APPLCALL,13);
DEST->DEST_STATE=0x80; // SPECIAL ENTRY

@ -6570,7 +6570,7 @@ VOID QTSMCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct
ptr = strtok_s(CmdTail, " ,\r", &context);
if (_stricmp(ptr, "HELP") == 0)
if (!ptr || _stricmp(ptr, "HELP") == 0)
{
Bufferptr = Cmdprintf(Session, Bufferptr, "QTSM portno displays QTSM configuration info (if avaliable)\r", ptr);
Bufferptr = Cmdprintf(Session, Bufferptr, "Modem, Centre Freq, fx25 flags and il2p flags can be changed if you have sysop access. All prameters are optional.\r", ptr);

Binary file not shown.

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>

@ -1,8 +0,0 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>

Binary file not shown.

@ -1 +0,0 @@
Manifest resource last updated at 18:43:52.23 on 29/04/2026

Binary file not shown.

Binary file not shown.

@ -1146,10 +1146,10 @@ int decodeNETROMIFrame(unsigned char * Msg, int iLen, char * Buffer, int BufferL
if (netromx)
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"CONN REQX\", \"fromCct\": %d, \"srcUser\": \"%s\", \"srcNode\": \"%s\", \"window\": %d, \"service\": %d",
(L3MSG->L4INDEX << 8) | L3MSG->L4ID, srcUser, srcNode, L3MSG->L4DATA[0], service);
(L3MSG->L4ID << 8) | L3MSG->L4INDEX, srcUser, srcNode, L3MSG->L4DATA[0], service);
else
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"CONN REQ\", \"fromCct\": %d, \"srcUser\": \"%s\", \"srcNode\": \"%s\", \"window\": %d",
(L3MSG->L4INDEX << 8) | L3MSG->L4ID, srcUser, srcNode, L3MSG->L4DATA[0]);
(L3MSG->L4ID << 8) | L3MSG->L4INDEX, srcUser, srcNode, L3MSG->L4DATA[0]);
return Len;
@ -1159,10 +1159,10 @@ int decodeNETROMIFrame(unsigned char * Msg, int iLen, char * Buffer, int BufferL
if (L3MSG->L4FLAGS & L4BUSY)
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"CONN NAK\", \"toCct\": %d",
(L3MSG->L4INDEX << 8) | L3MSG->L4ID);
(L3MSG->L4ID << 8) | L3MSG->L4INDEX);
else
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"CONN ACK\", \"toCct\": %d, \"fromCct\": %d, \"accWin\": %d",
(L3MSG->L4INDEX << 8) | L3MSG->L4ID, (L3MSG->L4TXNO << 8) | L3MSG->L4RXNO, L3MSG->L4DATA[0]);
(L3MSG->L4ID << 8) | L3MSG->L4INDEX, (L3MSG->L4TXNO << 8) | L3MSG->L4RXNO, L3MSG->L4DATA[0]);
return Len;
@ -1170,31 +1170,31 @@ int decodeNETROMIFrame(unsigned char * Msg, int iLen, char * Buffer, int BufferL
case L4INFO:
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"INFO\", \"toCct\": %d, \"txSeq\": %d, \"rxSeq\": %d, \"paylen\": %d",
(L3MSG->L4INDEX << 8) | L3MSG->L4ID, L3MSG->L4TXNO, L3MSG->L4RXNO, iLen - 20);
(L3MSG->L4ID << 8) | L3MSG->L4INDEX, L3MSG->L4TXNO, L3MSG->L4RXNO, iLen - 20);
return Len;
case L4IACK:
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"INFO ACK\", \"toCct\": %d, \"rxSeq\": %d",
(L3MSG->L4INDEX << 8) | L3MSG->L4ID, L3MSG->L4RXNO);
(L3MSG->L4ID << 8) | L3MSG->L4INDEX, L3MSG->L4RXNO);
return Len;
case L4DREQ:
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"DISC REQ\", \"toCct\": %d", (L3MSG->L4INDEX << 8) | L3MSG->L4ID);
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"DISC REQ\", \"toCct\": %d", (L3MSG->L4ID << 8) | L3MSG->L4INDEX);
return Len;
case L4DACK:
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"DISC ACK\", \"toCct\": %d", (L3MSG->L4INDEX << 8) | L3MSG->L4ID);
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"DISC ACK\", \"toCct\": %d", (L3MSG->L4ID << 8) | L3MSG->L4INDEX);
return Len;
case L4RESET:
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"RSET\", \"fromCct\": %d", (L3MSG->L4INDEX << 8) | L3MSG->L4ID);
Len += snprintf(&Buffer[Len], BufferLen - Len, ", \"l4Type\": \"RSET\", \"fromCct\": %d", (L3MSG->L4ID << 8) | L3MSG->L4INDEX);
return Len;

@ -403,8 +403,6 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
memset(DEST, 0, sizeof(struct DEST_LIST));
memcpy(DEST->DEST_CALL, Msg->ORIGIN, 7);
if (DEST->RouteLastTT == 0)
DEST->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
NUMBEROFNODES++;
}
@ -584,8 +582,6 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
memset(DEST, 0, sizeof(struct DEST_LIST));
memcpy(DEST->DEST_CALL, ptr1, 7);
if (DEST->RouteLastTT == 0)
DEST->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
NUMBEROFNODES++;
}
@ -1375,9 +1371,6 @@ VOID REMOVENODE(dest_list * DEST)
L4++;
}
if (DEST->RouteLastTT)
free(DEST->RouteLastTT);
memset(DEST, 0, sizeof(struct DEST_LIST));
NUMBEROFNODES--;
}
@ -1425,7 +1418,7 @@ VOID L3TRYNEXTDEST(struct ROUTE * ROUTE)
if (ActiveRoute)
{
ActiveRoute --; // Routes numbered 1 - 6, index from 0
ActiveRoute--; // Routes numbered 1 - 6, index from 0
if (DEST->NRROUTE[ActiveRoute].ROUT_NEIGHBOUR == ROUTE)
{
@ -1457,7 +1450,7 @@ VOID L3TRYNEXTDEST(struct ROUTE * ROUTE)
DEST->DEST_ROUTE++; // TO NEXT
if (DEST->DEST_ROUTE = 7)
if (DEST->DEST_ROUTE == 7)
DEST->DEST_ROUTE = 1; // TRY TO ACTIVATE FIRST
}
}
@ -1533,9 +1526,6 @@ struct DEST_LIST * CHECKL3TABLES(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * Msg
memcpy(DEST->DEST_CALL, Msg->L3SRCE, 7);
if (DEST->RouteLastTT == 0)
DEST->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
NUMBEROFNODES++;
// MAKE SURE NEIGHBOUR IS DEFINED FOR DESTINATION

@ -10,8 +10,8 @@
#endif
#define KVers 6,0,25,28
#define KVerstring "6.0.25.28\0"
#define KVers 6,0,25,30
#define KVerstring "6.0.25.30\0"
#ifdef CKernel

@ -243,6 +243,8 @@ typedef struct ROUTE
int SRTT; // Smoothed RTT
int NeighbourSRTT; // Other End SRTT
int RTTIncrement; // Average of Ours and Neighbours SRTT in 10 ms - smoothed neighbor transport time (SNTT) in spec
int TXRTTIncrement; // RTT to add before sending RIF. Zero if latest code, RTTIncrenent if older
int STTAtLastChange; // Last value used to update Node TTs
int BCTimer; // Time to next L3RTT Broadcast
int Timeout; // Lost Response Timer
int Retries; // Lost Response Count
@ -517,8 +519,8 @@ typedef struct DEST_LIST
int DEST_RTT; // SMOOTHED ROUND TRIP TIMER
int DEST_COUNT; // FRAMES SENT
USHORT LastTT; // Last INP3 Value sent. This is our value, which we now send
uint16_t * RouteLastTT; // Last time sent should be saved for each neighbour. Area is mallod'ed as needed
} dest_list;

@ -1571,8 +1571,6 @@ BOOL Start()
DEST->DEST_STATE = 0x80; // SPECIAL ENTRY
DEST->NRROUTE[0].ROUT_QUALITY = 255;
DEST->NRROUTE[0].ROUT_OBSCOUNT = 255;
if (DEST->RouteLastTT == 0)
DEST->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
DEST++;
NUMBEROFNODES++;
@ -1594,9 +1592,6 @@ BOOL Start()
DEST->NRROUTE[0].ROUT_QUALITY = (UCHAR)APPL->APPLQUAL;
DEST->NRROUTE[0].ROUT_OBSCOUNT = 255;
APPL->NODEPOINTER = DEST;
if (DEST->RouteLastTT == 0)
DEST->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
DEST++;
@ -2132,9 +2127,6 @@ VOID ReadNodes()
memcpy(DEST->DEST_CALL, axcall, 7);
memcpy(DEST->DEST_ALIAS, FULLALIAS, 6);
if (DEST->RouteLastTT == 0)
DEST->RouteLastTT = (uint16_t *)zalloc(MAXNEIGHBOURS * sizeof(uint16_t));
NUMBEROFNODES++;
RouteLoop:

Loading…
Cancel
Save

Powered by TurnKey Linux.