6.0.23.77

This commit is contained in:
g8bpq 2023-06-29 18:13:31 +01:00
parent 75b5bcc9a9
commit ed81fc5267
20 changed files with 2179 additions and 58 deletions

View File

@ -71,7 +71,6 @@ static RECT Rect;
static char status[8][8] = {"STANDBY", "PHASING", "CHGOVER", "IDLE", "TRAFFIC", "ERROR", "RQ", "XXXX"};
struct TNCINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
BOOL CloseConnection(struct TNCINFO * conn);
static BOOL WriteCommBlock(struct TNCINFO * TNC);

17
Bpq32.c
View File

@ -1173,6 +1173,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Detect loss of DED application (76)
// Fix connects to Application Alias with UZ7HO Driver (76)
// Fix Interlock of ports on same UZ7HO modem. (76)
// Add extended Ports command
#define CKernel
@ -2576,6 +2577,22 @@ BOOL APIENTRY DllMain(HANDLE hInst, DWORD ul_reason_being_called, LPVOID lpReser
return 0;
}
if (sizeof(struct KISSINFO) > PORTENTRYLEN + 200) // 200 bytes of Hardwaredata
{
// Catastrophic - Refuse to load
MessageBox(NULL,"BPQ32 Too much KISS data - Recompile","BPQ32", MB_OK);
return 0;
}
if (sizeof(struct _EXTPORTDATA) > PORTENTRYLEN + 200) // 200 bytes of Hardwaredata
{
// Catastrophic - Refuse to load
MessageBox(NULL,"BPQ32 Too much _EXTPORTDATA data - Recompile","BPQ32", MB_OK);
return 0;
}
if (sizeof(LINKTABLE) != LINK_TABLE_LEN)
{
// Catastrophic - Refuse to load

166
Cmd.c
View File

@ -37,6 +37,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "CHeaders.h"
#include "bpqaprs.h"
#include "kiss.h"
#pragma pack()
@ -1313,19 +1314,182 @@ CMDS60:
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
}
extern int MasterPort[MAXBPQPORTS+1]; // Pointer to first BPQ port for a specific MPSK or UZ7HO host
VOID CMDP00(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
// Process PORTS Message
// If extended show state of TNC (Open, Active, etc)
struct PORTCONTROL * PORT = PORTTABLE;
char Extended = CmdTail[0];
struct PORTCONTROL * SAVEPORT;
Bufferptr = Cmdprintf(Session, Bufferptr, "Ports\r");
while (PORT)
{
if (PORT->Hide == 0)
char Status[32] = "???????";
int Portno = PORT->PORTNUMBER;
if (PORT->Hide)
{
PORT = PORT->PORTPOINTER;
continue;
}
if (Extended != 'E')
{
Bufferptr = Cmdprintf(Session, Bufferptr, " %2d %s\r", PORT->PORTNUMBER, PORT->PORTDESCRIPTION);
PORT = PORT->PORTPOINTER;
continue;
}
// Try to get port status - may not be possible with some
if (PORT->PortStopped)
{
strcpy(Status, "Stopped");
Bufferptr = Cmdprintf(Session, Bufferptr, " %2d %-7s %s\r", PORT->PORTNUMBER, Status, PORT->PORTDESCRIPTION);
PORT = PORT->PORTPOINTER;
continue;
}
if (PORT->PORTTYPE == 0)
{
struct KISSINFO * KISS = (struct KISSINFO *)PORT;
NPASYINFO Port;
SAVEPORT = PORT;
if (KISS->FIRSTPORT && KISS->FIRSTPORT != KISS)
{
// Not first port on device
PORT = (struct PORTCONTROL *)KISS->FIRSTPORT;
Port = KISSInfo[Portno];
}
Port = KISSInfo[PORT->PORTNUMBER];
if (Port)
{
// KISS like - see if connected
if (PORT->PORTIPADDR.s_addr || PORT->KISSSLAVE)
{
// KISS over UDP or TCP
if (PORT->KISSTCP)
{
if (Port->Connected)
strcpy(Status, "Open ");
else
if (PORT->KISSSLAVE)
strcpy(Status, "Listen");
else
strcpy(Status, "Closed");
}
else
strcpy(Status, "UDP");
}
else
if (Port->idComDev) // Serial port Open
strcpy(Status, "Open ");
else
strcpy(Status, "Closed");
PORT = SAVEPORT;
}
}
else if (PORT->PORTTYPE == 14) // Loopback
strcpy(Status, "Open ");
else if (PORT->PORTTYPE == 16) // External
{
if (PORT->PROTOCOL == 10) // 'HF' Port
{
struct TNCINFO * TNC = TNCInfo[Portno];
if (TNC == NULL)
{
PORT = PORT->PORTPOINTER;
continue;
}
switch (TNC->Hardware) // Hardware Type
{
case H_SCS:
case H_KAM:
case H_AEA:
case H_HAL:
case H_TRK:
case H_SERIAL:
// Serial
if (TNC->hDevice)
strcpy(Status, "Open ");
else
strcpy(Status, "Closed");
break;
case H_UZ7HO:
if (TNCInfo[MasterPort[Portno]]->CONNECTED)
strcpy(Status, "Open ");
else
strcpy(Status, "Closed");
break;
case H_WINMOR:
case H_V4:
case H_MPSK:
case H_FLDIGI:
case H_UIARQ:
case H_ARDOP:
case H_VARA:
case H_KISSHF:
case H_WINRPR:
case H_FREEDATA:
// TCP
if (TNC->CONNECTED)
{
if (TNC->Streams[0].Attached)
strcpy(Status, "In Use");
else
strcpy(Status, "Open ");
}
else
strcpy(Status, "Closed");
break;
case H_TELNET:
strcpy(Status, "Open ");
}
}
else
{
// External but not HF - AXIP, BPQETHER VKISS, ??
struct _EXTPORTDATA * EXTPORT = (struct _EXTPORTDATA *)PORT;
strcpy(Status, "Open ");
}
}
Bufferptr = Cmdprintf(Session, Bufferptr, " %2d %-7s %s\r", PORT->PORTNUMBER, Status, PORT->PORTDESCRIPTION);
PORT = PORT->PORTPOINTER;
}

View File

@ -64,7 +64,6 @@ static char status[23][50] = {"IDLE", "TFC", "RQ", "ERR", "PHS", "OVER", "FSK TX
"FREE SIGNAL TX (AMTOR)", "FREE SIGNAL TX TIMED OUT (AMTOR)"};
struct TNCINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
static BOOL WriteCommBlock(struct TNCINFO * TNC);
static void CheckRX(struct TNCINFO * TNC);

View File

@ -252,9 +252,6 @@ ConfigLine:
static int MaxStreams = 26;
struct TNCINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
BOOL CloseConnection(struct TNCINFO * conn);
static BOOL WriteCommBlock(struct TNCINFO * TNC);
BOOL DestroyTTYInfo(int port);

View File

@ -552,7 +552,6 @@ extern int POP3Timer;
#include <stdio.h>
#include <sys/select.h>
#include <termios.h>
#include <stropts.h>
int _kbhit() {
static const int STDIN = 0;

1975
LinBPQ.c~ Normal file

File diff suppressed because it is too large Load Diff

View File

@ -84,7 +84,7 @@ extern UCHAR BPQDirectory[];
static int MPSKChannel[MAXBPQPORTS+1]; // BPQ Port to MPSK Port
static int BPQPort[MAXMPSKPORTS][MAXBPQPORTS+1]; // MPSK Port and Connection to BPQ Port
static int MasterPort[MAXBPQPORTS+1]; // Pointer to first BPQ port for a specific MPSK host
extern int MasterPort[MAXBPQPORTS+1]; // Pointer to first BPQ port for a specific MPSK host
// Each port may be on a different machine. We only open one connection to each MPSK instance

View File

@ -70,8 +70,6 @@ VOID __cdecl Debugprintf(const char * format, ...);
struct RIGINFO * RigConfig(struct TNCINFO * TNC, char * buf, int Port);
struct RIGPORTINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
BOOL RigCloseConnection(struct RIGPORTINFO * PORT);
BOOL RigWriteCommBlock(struct RIGPORTINFO * PORT);
BOOL DestroyTTYInfo(int port);

View File

@ -355,8 +355,7 @@ ConfigLine:
}
struct TNCINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
BOOL CloseConnection(struct TNCINFO * conn);
BOOL WriteCommBlock(struct TNCINFO * TNC);
BOOL DestroyTTYInfo(int port);

View File

@ -140,9 +140,7 @@ ConfigLine:
}
struct TNCINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
BOOL CloseConnection(struct TNCINFO * conn);
static BOOL WriteCommBlock(struct TNCINFO * TNC);
BOOL DestroyTTYInfo(int port);

View File

@ -56,9 +56,6 @@ char * strlop(char * buf, char delim);
char NodeCall[11]; // Nodecall, Null Terminated
struct TNCINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
BOOL CloseConnection(struct TNCINFO * conn);
BOOL TrkWriteCommBlock(struct TNCINFO * TNC);
BOOL DestroyTTYInfo(int port);

View File

@ -37,7 +37,6 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define IDM_DISCONNECT 2000
#define IDM_LOGGING 2100
#define MAXBLOCK 4096
#include "CHeaders.h"
#include "tncinfo.h"

View File

@ -96,7 +96,7 @@ static int BPQPort[MAXUZ7HOPORTS][MAXBPQPORTS+1]; // UZ7HO Port and Connection t
static void * UZ7HOtoBPQ_Q[MAXBPQPORTS+1]; // Frames for BPQ, indexed by BPQ Port
static void * BPQtoUZ7HO_Q[MAXBPQPORTS+1]; // Frames for UZ7HO. indexed by UZ7HO port. Only used it TCP session is blocked
static int MasterPort[MAXBPQPORTS+1]; // Pointer to first BPQ port for a specific UZ7HO host
int MasterPort[MAXBPQPORTS+1]; // Pointer to first BPQ port for a specific UZ7HO host
static struct TNCINFO * SlaveTNC[MAXBPQPORTS+1];// TNC Record Slave if present
// Each port may be on a different machine. We only open one connection to each UZ7HO instance

View File

@ -10,8 +10,8 @@
#endif
#define KVers 6,0,23,76
#define KVerstring "6.0.23.76\0"
#define KVers 6,0,23,77
#define KVerstring "6.0.23.77\0"
#ifdef CKernel

View File

@ -67,12 +67,7 @@ char * strlop(char * buf, char delim);
char NodeCall[11]; // Nodecall, Null Terminated
struct TNCINFO * CreateTTYInfo(int port, int speed);
BOOL OpenConnection(int);
BOOL SetupConnection(int);
BOOL CloseConnection(struct TNCINFO * conn);
static BOOL WriteCommBlock(struct TNCINFO * TNC);
BOOL DestroyTTYInfo(int port);
static void DEDCheckRX(struct TNCINFO * TNC);
VOID DEDPoll(int Port);
VOID StuffAndSend(struct TNCINFO * TNC, UCHAR * Msg, int Len);

View File

@ -1071,10 +1071,10 @@ BOOL Start()
KISS->KISSCMD = malloc(256);
KISS->KISSCMDLEN = KissEncode(KissString, KISS->KISSCMD, KissLen);
realloc(KISS->KISSCMD, KISS->KISSCMDLEN);
KISS->KISSCMD = realloc(KISS->KISSCMD, KISS->KISSCMDLEN);
}
if (PortRec->BBSFLAG) // Appl 1 no permitted - BBSFLAG=NOBBS
if (PortRec->BBSFLAG) // Appl 1 not permitted - BBSFLAG=NOBBS
PORT->PERMITTEDAPPLS &= 0xfffffffe; // Clear bottom bit

33
kiss.c
View File

@ -34,17 +34,13 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
#ifndef RP2040
#include <sys/ioctl.h>
#include <termios.h>
#include <syslog.h>
#endif
#include <fcntl.h>
#include <signal.h>
#include <ctype.h>
//#include <netax25/ttyutils.h>
//#include <netax25/daemon.h>
@ -131,6 +127,9 @@ int lastcount;
UCHAR ENCBUFF[600];
NPASYINFO KISSInfo[MAXBPQPORTS] = {0};
int ASYSEND(struct PORTCONTROL * PortVector, char * buffer, int count)
{
NPASYINFO Port = KISSInfo[PortVector->PORTNUMBER];
@ -160,7 +159,7 @@ int ASYSEND(struct PORTCONTROL * PortVector, char * buffer, int count)
if (ret == -1)
{
Debugprintf ("i2c Write Error\r");
Sleep(1);
usleep(1000);
ret = i2c_smbus_write_byte(Port->idComDev, *(ptr));
}
ptr++;
@ -309,15 +308,11 @@ int ASYINIT(int comport, int speed, struct PORTCONTROL * PortVector, char Channe
}
else if (PortVector->PORTIPADDR.s_addr || PortVector->KISSSLAVE)
{
#ifndef RP2040
SOCKET sock;
u_long param=1;
BOOL bcopt=TRUE;
struct sockaddr_in sinx;
// KISS over UDP or TCP
if (PortVector->ListenPort == 0)
@ -431,7 +426,6 @@ int ASYINIT(int comport, int speed, struct PORTCONTROL * PortVector, char Channe
npKISSINFO->RXMPTR=&npKISSINFO->RXMSG[0];
OpenConnection(PortVector);
#endif
}
npKISSINFO->Portvector = PortVector;
@ -621,7 +615,7 @@ static void CheckReceivedData(struct PORTCONTROL * PORT, NPASYINFO npKISSINFO)
struct sockaddr_in rxaddr;
int addrlen = sizeof(struct sockaddr_in);
nLength = recvfrom(npKISSINFO->sock, &npKISSINFO->RXBUFFER[0], MAXBLOCK - 1, 0, (struct sockaddr *)&rxaddr, &addrlen);
nLength = recvfrom(npKISSINFO->sock, &npKISSINFO->RXBUFFER[0], KISSMAXBLOCK - 1, 0, (struct sockaddr *)&rxaddr, &addrlen);
if (nLength < 0)
{
@ -633,7 +627,7 @@ static void CheckReceivedData(struct PORTCONTROL * PORT, NPASYINFO npKISSINFO)
}
}
else
nLength = ReadCommBlock(npKISSINFO, (char *) &npKISSINFO->RXBUFFER, MAXBLOCK - 1);;
nLength = ReadCommBlock(npKISSINFO, (char *) &npKISSINFO->RXBUFFER, KISSMAXBLOCK - 1);;
npKISSINFO->RXBCOUNT = nLength;
npKISSINFO->RXBPTR = (UCHAR *)&npKISSINFO->RXBUFFER;
@ -1359,7 +1353,7 @@ int KISSRX(struct KISSINFO * KISS)
PMESSAGE Buffer;
int len;
NPASYINFO Port = KISSInfo[PORT->PORTNUMBER];
struct KISSINFO * SAVEKISS = KISS; // Save so we can restore at SeeifMode
struct KISSINFO * SAVEKISS = KISS; // Save so we can restore at SeeifMore
if (Port == NULL)
return 0;
@ -1596,13 +1590,13 @@ SeeifMore:
}
// checksum if necessary
#ifndef RP2040
if (KISS->PORT.KISSFLAGS & DRATS)
{
processDRATSFrame(&Port->RXMSG[1], len - 2, 0);
return 0;
}
#endif
if (len < 15)
return 0; // too short for AX25
@ -1829,7 +1823,6 @@ int ConnecttoTCP(NPASYINFO ASY)
VOID ConnecttoTCPThread(NPASYINFO ASY)
{
#ifndef RP2040
char Msg[255];
int err,i;
u_long param=1;
@ -1926,13 +1919,10 @@ VOID ConnecttoTCPThread(NPASYINFO ASY)
}
Sleep (57000/2); // 1/2 Mins
}
#endif
}
int KISSGetTCPMessage(NPASYINFO ASY)
{
#ifndef RP2040
int index=0;
ULONG param = 1;
@ -1973,7 +1963,7 @@ int KISSGetTCPMessage(NPASYINFO ASY)
// May have several messages per packet, or message split over packets
InputLen = recv(ASY->sock, ASY->RXBUFFER, MAXBLOCK - 1, 0);
InputLen = recv(ASY->sock, ASY->RXBUFFER, KISSMAXBLOCK - 1, 0);
if (InputLen < 0)
{
@ -2008,8 +1998,6 @@ int KISSGetTCPMessage(NPASYINFO ASY)
{
// Reopen Listening Socket
SOCKET sock;
u_long param=1;
BOOL bcopt=TRUE;
@ -2042,6 +2030,5 @@ int KISSGetTCPMessage(NPASYINFO ASY)
ASY->Listening = TRUE;
}
}
#endif
return 0;
}

9
kiss.h
View File

@ -1,6 +1,6 @@
#define MAXBLOCK 512
#define KISSMAXBLOCK 512
// KISS over TCP Slave now allows multiple connections
// so need a struct to keep track of them
@ -9,7 +9,7 @@ typedef struct _KISSTCPSess
{
struct _KISSTCPSesssion * Next;
SOCKET Socket;
UCHAR RXBuffer[MAXBLOCK];
UCHAR RXBuffer[KISSMAXBLOCK];
int RXLen;
time_t Timeout;
@ -30,7 +30,7 @@ typedef struct tagASYINFO
struct sockaddr_in destaddr;
struct PORTCONTROL * Portvector;
UCHAR RXMSG[512]; // Msg being built
UCHAR RXBUFFER[MAXBLOCK]; // Raw chars from Comms
UCHAR RXBUFFER[KISSMAXBLOCK]; // Raw chars from Comms
int RXBCOUNT; // chars in RXBUFFER
UCHAR * RXBPTR; // get pointer for RXBUFFER (put ptr is RXBCOUNT)
UCHAR * RXMPTR; // put pointer for RXMSG
@ -45,8 +45,7 @@ typedef struct tagASYINFO
} ASYINFO, *NPASYINFO ;
NPASYINFO KISSInfo[MAXBPQPORTS] = {0};
extern NPASYINFO KISSInfo[MAXBPQPORTS];
#define _fmemset memset
#define _fmemmove memmove

View File

@ -7,7 +7,6 @@
#define IDI_ICON2 2
#define MAXBLOCK 4096
struct TimeScan
{