diff --git a/APRSCode.c b/APRSCode.c index 5f93809..e8f6257 100644 --- a/APRSCode.c +++ b/APRSCode.c @@ -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]; diff --git a/BPQINP3.c b/BPQINP3.c index a5598e6..a01767b 100644 --- a/BPQINP3.c +++ b/BPQINP3.c @@ -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); @@ -143,7 +145,7 @@ VOID InitialiseRTT() VOID TellINP3LinkGone(struct ROUTE * Route) { - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; char call[11]=""; ConvFromAX25(Route->NEIGHBOUR_CALL, call); @@ -163,7 +165,7 @@ VOID TellINP3LinkGone(struct ROUTE * Route) VOID DeleteINP3Routes(struct ROUTE * Route) { int i; - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; char Call1[10]; char Call2[10]; @@ -246,7 +248,7 @@ VOID DeleteINP3Routes(struct ROUTE * Route) VOID DecayNETROMRoutes(struct ROUTE * Route) { int i; - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; Dest--; @@ -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); @@ -1515,7 +1573,7 @@ VOID SendRIFToOtherNeighbours(struct DEST_LIST * Dest, UCHAR * alias, struct INP VOID SendRIFToNewNeighbour(struct ROUTE * Route) { int i; - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; struct INP3_DEST_ROUTE_ENTRY * Entry; struct _L3MESSAGEBUFFER * Msg; int sendHops, sendTT; @@ -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); @@ -1609,7 +1667,7 @@ VOID FlushRIFs() VOID SendNegativeInfo() { int i; - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; struct INP3_DEST_ROUTE_ENTRY * Entry; char call[11]=""; @@ -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)); @@ -1676,7 +1733,7 @@ VOID SendNegativeInfo() VOID SendPositiveInfo() { int i; - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; struct INP3_DEST_ROUTE_ENTRY * Entry; Dest--; @@ -1700,7 +1757,7 @@ VOID SendPositiveInfo() VOID SendNewInfo() { int i; - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; struct INP3_DEST_ROUTE_ENTRY * Entry; Dest--; @@ -1733,7 +1790,7 @@ struct ROUTE * Route = NULL; VOID sendAlltoOneNeigbour(struct ROUTE * Route) { char Call[10]; - struct DEST_LIST * Dest = DESTS; + struct DEST_LIST * Dest = DESTS; struct INP3_DEST_ROUTE_ENTRY * Entry; int i; @@ -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) diff --git a/Bpq32.c b/Bpq32.c index 801eb82..3b5121f 100644 --- a/Bpq32.c +++ b/Bpq32.c @@ -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 diff --git a/Cmd.c b/Cmd.c index b059b32..36fc09d 100644 --- a/Cmd.c +++ b/Cmd.c @@ -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); diff --git a/Debug/BuildLog.htm b/Debug/BuildLog.htm deleted file mode 100644 index 2bc0071..0000000 Binary files a/Debug/BuildLog.htm and /dev/null differ diff --git a/Debug/NodeMapTest.exe.embed.manifest b/Debug/NodeMapTest.exe.embed.manifest deleted file mode 100644 index 4b15fbf..0000000 --- a/Debug/NodeMapTest.exe.embed.manifest +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Debug/NodeMapTest.exe.embed.manifest.res b/Debug/NodeMapTest.exe.embed.manifest.res deleted file mode 100644 index 7b55d19..0000000 Binary files a/Debug/NodeMapTest.exe.embed.manifest.res and /dev/null differ diff --git a/Debug/NodeMapTest.exe.intermediate.manifest b/Debug/NodeMapTest.exe.intermediate.manifest deleted file mode 100644 index b390755..0000000 --- a/Debug/NodeMapTest.exe.intermediate.manifest +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Debug/NodeMapTest.obj b/Debug/NodeMapTest.obj deleted file mode 100644 index e304913..0000000 Binary files a/Debug/NodeMapTest.obj and /dev/null differ diff --git a/Debug/mt.dep b/Debug/mt.dep deleted file mode 100644 index 3c6aa05..0000000 --- a/Debug/mt.dep +++ /dev/null @@ -1 +0,0 @@ -Manifest resource last updated at 18:43:52.23 on 29/04/2026 diff --git a/Debug/vc80.idb b/Debug/vc80.idb deleted file mode 100644 index 6189aa5..0000000 Binary files a/Debug/vc80.idb and /dev/null differ diff --git a/Debug/vc80.pdb b/Debug/vc80.pdb deleted file mode 100644 index fbf30aa..0000000 Binary files a/Debug/vc80.pdb and /dev/null differ diff --git a/Events.c b/Events.c index 51a0c27..5d8d1be 100644 --- a/Events.c +++ b/Events.c @@ -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; diff --git a/L3Code.c b/L3Code.c index 30dac2a..2ca3d93 100644 --- a/L3Code.c +++ b/L3Code.c @@ -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 diff --git a/Versions.h b/Versions.h index ec3c8f0..1115329 100644 --- a/Versions.h +++ b/Versions.h @@ -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 diff --git a/asmstrucs.h b/asmstrucs.h index 5465101..5e7fb29 100644 --- a/asmstrucs.h +++ b/asmstrucs.h @@ -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; diff --git a/cMain.c b/cMain.c index 56116a1..fee87e5 100644 --- a/cMain.c +++ b/cMain.c @@ -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: