New upstream version 6.0.25.1+repack
This commit is contained in:
parent
fa3201d982
commit
7c796758d1
|
@ -118,6 +118,7 @@ void ReleaseWebMailStruct(WebMailInfo * WebMail);
|
|||
VOID TidyWelcomeMsg(char ** pPrompt);
|
||||
int MailAPIProcessHTTPMessage(struct HTTPConnectionInfo * Session, char * response, char * Method, char * URL, char * request, BOOL LOCAL, char * Param, char * Token);
|
||||
void UndoTransparency(char * input);
|
||||
int GetMessageSlotFromMessageNumber(int msgno);
|
||||
|
||||
char UNC[] = "";
|
||||
char CHKD[] = "checked=checked ";
|
||||
|
@ -2442,8 +2443,8 @@ VOID ProcessMsgFwdUpdate(struct HTTPConnectionInfo * Session, char * MsgPtr, cha
|
|||
set_fwd_bit(Msg->fbbs, BBSNumber);
|
||||
User->ForwardingInfo->MsgCount++;
|
||||
clear_fwd_bit(Msg->forw, BBSNumber);
|
||||
if (FirstMessageIndextoForward > Msg->number)
|
||||
FirstMessageIndextoForward = Msg->number;
|
||||
if (FirstMessageIndextoForward > GetMessageSlotFromMessageNumber(Msg->number))
|
||||
FirstMessageIndextoForward = GetMessageSlotFromMessageNumber(Msg->number);
|
||||
|
||||
}
|
||||
*RLen = SendMessageDetails(Msg, Reply, Session->Key);
|
||||
|
|
|
@ -532,6 +532,19 @@ struct MsgInfo * GetMsgFromNumber(int msgno)
|
|||
return MsgnotoMsg[msgno];
|
||||
}
|
||||
|
||||
int GetMessageSlotFromMessageNumber(int msgno)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=1; i <= NumberofMessages; i++)
|
||||
{
|
||||
if (MsgHddrPtr[i]->number == msgno)
|
||||
return i;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct UserInfo * AllocateUserRecord(char * Call)
|
||||
{
|
||||
struct UserInfo * User = zalloc(sizeof (struct UserInfo));
|
||||
|
|
|
@ -491,7 +491,7 @@ VOID UpdateNode(struct ROUTE * Route, UCHAR * axcall, UCHAR * alias, int hops,
|
|||
{
|
||||
APPL=&APPLCALLTABLE[App];
|
||||
|
||||
if (APPL->APPLHASALIAS == 0 && CompareCalls(axcall, APPL->APPLCALL))
|
||||
if (CompareCalls(axcall, APPL->APPLCALL))
|
||||
{
|
||||
Debugprintf("INP3 for an APPLCALL - discarding");
|
||||
return;
|
||||
|
@ -557,7 +557,7 @@ Found:
|
|||
if (Dest->DEST_STATE & 0x80) // Application Entry
|
||||
{
|
||||
Debugprintf("INP3 Application Entry - discarding");
|
||||
return; // Tsble Full
|
||||
return;
|
||||
}
|
||||
|
||||
// Update ALIAS
|
||||
|
@ -565,7 +565,6 @@ Found:
|
|||
ConvFromAX25(Dest->DEST_CALL, call);
|
||||
Debugprintf("INP3 Updating Node %s Hops %d RTT %d", call, hops, rtt);
|
||||
|
||||
|
||||
if (alias[0] > ' ')
|
||||
memcpy(Dest->DEST_ALIAS, alias, 6);
|
||||
|
||||
|
|
|
@ -1154,6 +1154,8 @@
|
|||
// Add Send and Receive byte counts to status displays (69)
|
||||
// Validate Mode and Frequency and fix formatting in Connected Message (71)
|
||||
// Fix using OpenBCM on other than Telnet connections (75)
|
||||
// Fix sending + in Webmail (80)
|
||||
// Fix forwarding problem when using Web interface to change message routing (73)
|
||||
|
||||
#include "bpqmail.h"
|
||||
#include "winstdint.h"
|
||||
|
|
24
BPQTermMDI.c
24
BPQTermMDI.c
|
@ -2974,6 +2974,30 @@ LRESULT APIENTRY InputProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (wParam == 0x7) // BEL (Ctrl/G)
|
||||
{
|
||||
// Get buffer, append 07 and write back
|
||||
|
||||
Cinfo->kbptr = SendMessage(Cinfo->hwndInput, WM_GETTEXT, INPUTLEN-1,
|
||||
(LPARAM) (LPCSTR)Cinfo->kbbuf);
|
||||
|
||||
|
||||
Cinfo->kbbuf[Cinfo->kbptr++] = 7;
|
||||
Cinfo->kbbuf[Cinfo->kbptr] = 0;
|
||||
|
||||
SendMessage(Cinfo->hwndInput,WM_SETTEXT,0,(LPARAM)(LPCSTR) Cinfo->kbbuf);
|
||||
|
||||
// Send cursor right
|
||||
|
||||
for (i = 0; i < strlen(Cinfo->kbbuf); i++)
|
||||
{
|
||||
SendMessage(Cinfo->hwndInput, WM_KEYDOWN, VK_RIGHT, 0);
|
||||
SendMessage(Cinfo->hwndInput, WM_KEYUP, VK_RIGHT, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return CallWindowProc(Cinfo->wpOrigInputProc, hwnd, uMsg, wParam, lParam);
|
||||
|
|
4
Bpq32.c
4
Bpq32.c
|
@ -1279,6 +1279,10 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
// Fix to L4Compress from Steve G7TAJ (77)
|
||||
// Fix possible FRMR when RNR is cleared by SREJ (78)
|
||||
// Fix error in .77 L4Compress fix (mine, not Steve's!) (78)
|
||||
// Fix possible stuck L2 session when handling SREJ (79)
|
||||
// Allow sending CTRL/G From console (Windows) (80)
|
||||
// Fix Webmail autorefresh extra threads problem (websock connection lost handling) (82)
|
||||
// Fix overwriting application alias (83)
|
||||
|
||||
#define CKernel
|
||||
|
||||
|
|
|
@ -984,6 +984,29 @@ LRESULT APIENTRY InputProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (wParam == 0x7) // BEL (Ctrl/G)
|
||||
{
|
||||
// Get buffer, append 07 and write back
|
||||
|
||||
Cinfo->kbptr = SendMessage(Cinfo->hwndInput, WM_GETTEXT, INPUTLEN-1,
|
||||
(LPARAM) (LPCSTR)Cinfo->kbbuf);
|
||||
|
||||
|
||||
Cinfo->kbbuf[Cinfo->kbptr++] = 7;
|
||||
Cinfo->kbbuf[Cinfo->kbptr] = 0;
|
||||
|
||||
SendMessage(Cinfo->hwndInput,WM_SETTEXT,0,(LPARAM)(LPCSTR) Cinfo->kbbuf);
|
||||
|
||||
// Send cursor right
|
||||
|
||||
for (i = 0; i < strlen(Cinfo->kbbuf); i++)
|
||||
{
|
||||
SendMessage(Cinfo->hwndInput, WM_KEYDOWN, VK_RIGHT, 0);
|
||||
SendMessage(Cinfo->hwndInput, WM_KEYUP, VK_RIGHT, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return CallWindowProc(Cinfo->wpOrigInputProc, hwnd, uMsg, wParam, lParam);
|
||||
|
|
20
HTTPcode.c
20
HTTPcode.c
|
@ -4839,7 +4839,14 @@ void ProcessWebmailWebSockThread(void * conn)
|
|||
|
||||
Sent = send(sockptr->socket, _REPLYBUFFER, ReplyLen, 0);
|
||||
|
||||
while (Sent != ReplyLen && Loops++ < 3000) // 100 secs max
|
||||
if (Sent == -1) // Connecton lost
|
||||
{
|
||||
closesocket(sockptr->socket);
|
||||
free(conn);
|
||||
return;
|
||||
}
|
||||
|
||||
while (Sent != ReplyLen && Loops++ < 3000) // 90 secs max
|
||||
{
|
||||
if (Sent > 0) // something sent
|
||||
{
|
||||
|
@ -4885,11 +4892,16 @@ void ProcessWebmailWebSockThread(void * conn)
|
|||
|
||||
CloseHandle(hPipe);
|
||||
|
||||
// ?? do we need a thread to handle write which may block
|
||||
|
||||
Sent = send(sockptr->socket, Reply, ReplyLen, 0);
|
||||
|
||||
while (Sent != ReplyLen && Loops++ < 3000) // 100 secs max
|
||||
if (Sent == -1) // Connecton lost
|
||||
{
|
||||
free(conn);
|
||||
closesocket(sockptr->socket);
|
||||
return;
|
||||
}
|
||||
|
||||
while (Sent != ReplyLen && Loops++ < 3000) // 90 secs max
|
||||
{
|
||||
// Debugprintf("%d out of %d sent %d Loops", Sent, InputLen, Loops);
|
||||
|
||||
|
|
|
@ -1229,7 +1229,7 @@ void chkctl(ChatCIRCUIT *ckt_from, char * Buffer, int Len)
|
|||
|
||||
for (i = 1; i < (Len - 1); i++)
|
||||
{
|
||||
if (Buffer[i] < 32)
|
||||
if (Buffer[i] < 32 && Buffer[i] != 7) // Accept BELL
|
||||
{
|
||||
if (Buffer[i] == 9)
|
||||
{
|
||||
|
|
44
L2Code.c
44
L2Code.c
|
@ -2177,6 +2177,8 @@ VOID SFRAME(struct _LINKTABLE * LINK, struct PORTCONTROL * PORT, UCHAR CTL, UCHA
|
|||
MESSAGE * Msg;
|
||||
MESSAGE * Buffer;
|
||||
|
||||
LINK->L2FLAGS &= ~POLLSENT; // CLEAR I(P) or RR(P) SET
|
||||
|
||||
Msg = LINK->FRAMES[NS]; // is frame available?
|
||||
|
||||
if (Msg == NULL)
|
||||
|
@ -2977,6 +2979,43 @@ VOID SDETX(struct _LINKTABLE * LINK)
|
|||
// if (LINK->L2RESEQ_Q)
|
||||
// return;
|
||||
|
||||
// **** Debug code **** look for stuck links
|
||||
|
||||
if (LINK->LASTFRAMESENT && (time(NULL) - LINK->LASTFRAMESENT) > 60) // No send for 60 secs
|
||||
{
|
||||
if (COUNT_AT_L2(LINK) > 16)
|
||||
{
|
||||
// Dump Link State
|
||||
|
||||
char Normcall[11] = "";
|
||||
char Normcall2[11] = "";
|
||||
|
||||
int Count = COUNT_AT_L2(LINK);
|
||||
int secs = time(NULL) - LINK->LASTFRAMESENT;
|
||||
|
||||
ConvFromAX25(LINK->LINKCALL, Normcall);
|
||||
ConvFromAX25(LINK->OURCALL, Normcall2);
|
||||
|
||||
Debugprintf("*** Stuck L2 Session for %d Secs %s %s %d", secs, Normcall, Normcall2, Count);
|
||||
Debugprintf("LINK->LINKNS %d LINK->LINKOWS %d SDTSLOT %d LINKWINDOW %d L2FLAGS %d", LINK->LINKNS, LINK->LINKOWS, LINK->SDTSLOT, LINK->LINKWINDOW, LINK->L2FLAGS);
|
||||
Debugprintf("Slots %x %x %x %x %x %x %x %x", LINK->FRAMES[0], LINK->FRAMES[1], LINK->FRAMES[2], LINK->FRAMES[3],
|
||||
LINK->FRAMES[4], LINK->FRAMES[5], LINK->FRAMES[6], LINK->FRAMES[7]);
|
||||
|
||||
// Reset Link
|
||||
|
||||
|
||||
InformPartner(LINK, NORMALCLOSE); // TELL OTHER END ITS GONE
|
||||
|
||||
LINK->L2RETRIES -= 1; // Just send one DISC
|
||||
LINK->L2STATE = 4; // CLOSING
|
||||
|
||||
L2SENDCOMMAND(LINK, DISC | PFBIT);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Outstanding = LINK->LINKNS - LINK->LINKOWS; // Was WS not NS
|
||||
|
||||
if (Outstanding < 0)
|
||||
|
@ -2994,6 +3033,10 @@ VOID SDETX(struct _LINKTABLE * LINK)
|
|||
Msg = Q_REM(&LINK->TX_Q);
|
||||
Msg->CHAIN = NULL;
|
||||
|
||||
LINK->LASTFRAMESENT = time(NULL);
|
||||
LINK->LASTSENTQCOUNT = COUNT_AT_L2(LINK);
|
||||
|
||||
|
||||
if (LINK->AllowCompress && Msg->LENGTH > 20 && LINK->TX_Q && Msg->PID == 240) // if short and no more not worth trying compression
|
||||
{
|
||||
int complen = 0;
|
||||
|
@ -3018,6 +3061,7 @@ VOID SDETX(struct _LINKTABLE * LINK)
|
|||
// I think I need to know how many slots are available, so I don't compress too much
|
||||
// Then collect data, compressing after each frame to make sure will fit in available space
|
||||
|
||||
|
||||
while (LINK->FRAMES[n] == NULL && slots < 8)
|
||||
{
|
||||
slots++;
|
||||
|
|
8
L3Code.c
8
L3Code.c
|
@ -277,7 +277,7 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
|
|||
{
|
||||
APPL=&APPLCALLTABLE[App];
|
||||
|
||||
if (APPL->APPLHASALIAS == 0 && CompareCalls(Msg->ORIGIN, APPL->APPLCALL))
|
||||
if (CompareCalls(Msg->ORIGIN, APPL->APPLCALL))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -454,10 +454,10 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
|
|||
if (CheckExcludeList(ptr1) == 0) // Excluded
|
||||
continue;
|
||||
|
||||
for (n = 0; n < 32; n++)
|
||||
for (n = 0; n < NumberofAppls; n++)
|
||||
{
|
||||
if (CompareCalls(ptr1, APPLCALLTABLE[n].APPLCALL))
|
||||
continue;
|
||||
goto IgnoreNode; // Don't update our applications
|
||||
}
|
||||
|
||||
// MAKE SURE ITS NOT CORRUPTED
|
||||
|
@ -566,7 +566,7 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
|
|||
|
||||
ptr1 += 7;
|
||||
|
||||
// UPDATE ALIAS
|
||||
// UPDATE ALIAS#
|
||||
|
||||
memcpy(DEST->DEST_ALIAS, ptr1, 6);
|
||||
|
||||
|
|
|
@ -945,6 +945,30 @@ LRESULT APIENTRY InputProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (wParam == 0x7) // BEL (Ctrl/G)
|
||||
{
|
||||
// Get buffer, append 07 and write back
|
||||
|
||||
Cinfo->kbptr = SendMessage(Cinfo->hwndInput, WM_GETTEXT, INPUTLEN-1,
|
||||
(LPARAM) (LPCSTR)Cinfo->kbbuf);
|
||||
|
||||
|
||||
Cinfo->kbbuf[Cinfo->kbptr++] = 7;
|
||||
Cinfo->kbbuf[Cinfo->kbptr] = 0;
|
||||
|
||||
SendMessage(Cinfo->hwndInput,WM_SETTEXT,0,(LPARAM)(LPCSTR) Cinfo->kbbuf);
|
||||
|
||||
// Send cursor right
|
||||
|
||||
for (i = 0; i < strlen(Cinfo->kbbuf); i++)
|
||||
{
|
||||
SendMessage(Cinfo->hwndInput, WM_KEYDOWN, VK_RIGHT, 0);
|
||||
SendMessage(Cinfo->hwndInput, WM_KEYUP, VK_RIGHT, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return CallWindowProc(Cinfo->wpOrigInputProc, hwnd, uMsg, wParam, lParam);
|
||||
|
|
21
RigControl.c
21
RigControl.c
|
@ -5450,7 +5450,26 @@ void DecodeCM108(int Port, char * ptr)
|
|||
hid_device *handle = NULL;
|
||||
|
||||
if (strlen(ptr) > 16)
|
||||
CM108Device = _strdup(ptr);
|
||||
{
|
||||
path_to_open = _strdup(ptr);
|
||||
|
||||
handle = hid_open_path(path_to_open);
|
||||
|
||||
if (handle)
|
||||
{
|
||||
hid_close(handle);
|
||||
CM108Device = _strdup(path_to_open);
|
||||
}
|
||||
else
|
||||
{
|
||||
char msg[128];
|
||||
sprintf(msg,"Port %d Unable to open CM108 device %s", Port, path_to_open);
|
||||
WritetoConsole(msg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
else
|
||||
{
|
||||
VID = strtol(ptr, &next, 0);
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
// ScanHID.cpp : Defines the entry point for the console application.
|
||||
//
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#define _CRT_SECURE_NO_DEPRECATE
|
||||
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "hidapi.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
char product[256];
|
||||
char sernum[256] = "NULL";
|
||||
|
||||
struct hid_device_info *devs, *cur_dev;
|
||||
const char *path_to_open = NULL;
|
||||
hid_device *handle = NULL;
|
||||
|
||||
// Look for Device
|
||||
|
||||
devs = hid_enumerate(0,0); // so we list devices(USHORT)VID, (USHORT)PID);
|
||||
cur_dev = devs;
|
||||
while (cur_dev)
|
||||
{
|
||||
wcstombs(product, cur_dev->product_string, 255);
|
||||
if (cur_dev->serial_number)
|
||||
wcstombs(sernum, cur_dev->serial_number, 255);
|
||||
|
||||
if (product)
|
||||
printf("HID Device %s VID %X PID %X Ser %s\r\n Path %s\r\n\r\n", product, cur_dev->vendor_id, cur_dev->product_id, sernum, cur_dev->path);
|
||||
else
|
||||
printf("HID Device %s VID %X PID %X Ser %s\r\n Path %s\r\n\r\n", "Missing Product", cur_dev->vendor_id, cur_dev->product_id, sernum, cur_dev->path);
|
||||
|
||||
|
||||
cur_dev = cur_dev->next;
|
||||
}
|
||||
|
||||
|
||||
hid_free_enumeration(devs);
|
||||
printf("Press any key to Exit");
|
||||
_getch();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -5018,24 +5018,21 @@ int DataSocket_ReadHTTP(struct TNCINFO * TNC, struct ConnectionInfo * sockptr, S
|
|||
{
|
||||
// Failed or closed - clear connection
|
||||
|
||||
// if Websock connection till app
|
||||
// if Websock connection tell app
|
||||
|
||||
if (sockptr->WebSocks)
|
||||
{
|
||||
if (memcmp(sockptr->WebURL, "rhp", 3) == 0)
|
||||
{
|
||||
ProcessRHPWebSockClosed(sockptr->socket);
|
||||
|
||||
DataSocket_Disconnect(TNC, sockptr);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
TNC->Streams[sockptr->Number].ReportDISC = TRUE; //Tell Node
|
||||
DataSocket_Disconnect(TNC, sockptr);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
MsgPtr = &sockptr->InputBuffer[0];
|
||||
sockptr->InputLen += len;
|
||||
|
|
|
@ -10,15 +10,15 @@
|
|||
|
||||
#endif
|
||||
|
||||
#define KVers 6,0,24,78
|
||||
#define KVerstring "6.0.24.78\0"
|
||||
#define KVers 6,0,25,1
|
||||
#define KVerstring "6.0.25.1\0"
|
||||
|
||||
|
||||
#ifdef CKernel
|
||||
|
||||
#define Vers KVers
|
||||
#define Verstring KVerstring
|
||||
#define Datestring "July 2025"
|
||||
#define Datestring "August 2025"
|
||||
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
||||
#define VerCopyright "Copyright © 2001-2025 John Wiseman G8BPQ\0"
|
||||
#define VerDesc "BPQ32 Switch\0"
|
||||
|
|
|
@ -2662,10 +2662,10 @@ VOID SaveNewMessage(struct HTTPConnectionInfo * Session, char * MsgPtr, char * R
|
|||
if (strlen(WebMail->BID) > 12)
|
||||
WebMail->BID[12] = 0;
|
||||
|
||||
UndoTransparency(WebMail->BID);
|
||||
UndoTransparency(WebMail->To);
|
||||
UndoTransparency(WebMail->Subject);
|
||||
UndoTransparency(WebMail->Body);
|
||||
// UndoTransparency(WebMail->BID);
|
||||
// UndoTransparency(WebMail->To);
|
||||
// UndoTransparency(WebMail->Subject);
|
||||
// UndoTransparency(WebMail->Body);
|
||||
|
||||
MsgLen = strlen(WebMail->Body);
|
||||
|
||||
|
|
|
@ -930,6 +930,9 @@ typedef struct _LINKTABLE
|
|||
VOID * FRAMES[8]; // FRAMES WAITING ACK
|
||||
VOID * RXFRAMES[8]; // Frames received out of sequence
|
||||
|
||||
time_t LASTFRAMESENT; // For detecting stuck links
|
||||
int LASTSENTQCOUNT; //
|
||||
|
||||
UCHAR L2STATE; // PROCESSING STATE
|
||||
UCHAR Ver2point2; // Set if running 2.2
|
||||
USHORT L2TIMER; // FRAME RETRY TIMER
|
||||
|
|
|
@ -73,6 +73,9 @@
|
|||
//.25
|
||||
|
||||
// Increase size of status display buffers (7)
|
||||
// Allow sending BEL (CTRL/G) (79)
|
||||
// Fix sending BEL (CTRL/G) (81)
|
||||
|
||||
|
||||
#include "BPQChat.h"
|
||||
#include "Dbghelp.h"
|
||||
|
|
45
cMain.c
45
cMain.c
|
@ -52,6 +52,9 @@ int CanPortDigi(int Port);
|
|||
int KissEncode(UCHAR * inbuff, UCHAR * outbuff, int len);
|
||||
void MQTTTimer();
|
||||
void SaveMH();
|
||||
VOID InformPartner(struct _LINKTABLE * LINK, int Reason);
|
||||
VOID L2SENDCOMMAND(struct _LINKTABLE * LINK, int CMD);
|
||||
|
||||
|
||||
#include "configstructs.h"
|
||||
|
||||
|
@ -62,6 +65,7 @@ extern int needADSB;
|
|||
struct PORTCONFIG * PortRec;
|
||||
|
||||
#define RNRSET 0x2 // RNR RECEIVED FROM OTHER END
|
||||
#define PFBIT 0x10 // POLL/FINAL BIT IN CONTROL BYTE
|
||||
|
||||
// STATION INFORMATION
|
||||
|
||||
|
@ -2506,6 +2510,47 @@ ENDOFLIST:
|
|||
|
||||
if ((LINK->L2FLAGS & RNRSET) == 0)
|
||||
SDETX(LINK);
|
||||
else
|
||||
{
|
||||
// Stuck link debug check
|
||||
|
||||
if (LINK->LASTFRAMESENT && (time(NULL) - LINK->LASTFRAMESENT) > 60) // No send for 60 secs
|
||||
{
|
||||
if (COUNT_AT_L2(LINK) > 16)
|
||||
{
|
||||
// Dump Link State
|
||||
|
||||
char Normcall[11] = "";
|
||||
char Normcall2[11] = "";
|
||||
|
||||
int Count = COUNT_AT_L2(LINK);
|
||||
int secs = time(NULL) - LINK->LASTFRAMESENT;
|
||||
|
||||
|
||||
ConvFromAX25(LINK->LINKCALL, Normcall);
|
||||
ConvFromAX25(LINK->OURCALL, Normcall2);
|
||||
|
||||
Debugprintf("*** Stuck L2 Session for %d Secs RNR Set %s %s %d", secs, Normcall, Normcall2, Count);
|
||||
Debugprintf("LINK->LINKNS %d LINK->LINKOWS %d SDTSLOT %d LINKWINDOW %d L2FLAGS %d", LINK->LINKNS, LINK->LINKOWS, LINK->SDTSLOT, LINK->LINKWINDOW, LINK->L2FLAGS);
|
||||
Debugprintf("Slots %x %x %x %x %x %x %x %x", LINK->FRAMES[0], LINK->FRAMES[1], LINK->FRAMES[2], LINK->FRAMES[3],
|
||||
LINK->FRAMES[4], LINK->FRAMES[5], LINK->FRAMES[6], LINK->FRAMES[7]);
|
||||
|
||||
// Reset Link
|
||||
|
||||
|
||||
InformPartner(LINK, NORMALCLOSE); // TELL OTHER END ITS GONE
|
||||
|
||||
LINK->L2RETRIES -= 1; // Just send one DISC
|
||||
LINK->L2STATE = 4; // CLOSING
|
||||
|
||||
L2SENDCOMMAND(LINK, DISC | PFBIT);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
LINK++;
|
||||
|
|
|
@ -18,5 +18,5 @@ Chat :
|
|||
MonitorSize = "828,1644,148,770";
|
||||
DebugSize = "0,0,0,0";
|
||||
WindowSize = "231,835,254,602";
|
||||
Version = "6,0,24,32";
|
||||
Version = "6,0,24,81";
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue