Compare commits

..

27 commits

Author SHA1 Message Date
Hibby 81279b4b22
Let's fly 2024-06-09 23:02:19 +01:00
Hibby 14f7882f2f
Merge branch 'debian/latest' into ubuntu/jammy 2024-06-09 22:57:10 +01:00
Hibby fbbb08966c
ok fix this one too 2024-04-08 23:02:07 +01:00
Hibby a37d026f89
ubuntu port 2024-04-08 22:31:22 +01:00
Hibby 62be7b55b5
ubuntu backport 2024-04-06 02:23:14 +01:00
Hibby f06c172633
Merge branch 'debian/latest' into ubuntu/jammy 2024-04-06 02:20:11 +01:00
Hibby 18da0369b1
Cheeky include 2024-03-26 21:00:18 +00:00
Hibby bc090e47e9
Release 2024-03-26 20:31:19 +00:00
Hibby 056b34d0f4
Merge branch 'debian/latest' into ubuntu/jammy 2024-03-26 20:29:56 +00:00
Hibby 594377a91b
Add jammy 2024-02-23 23:34:48 +00:00
Hibby d2ff69e9ce
Merge branch 'debian/latest' into ubuntu/jammy 2024-02-23 23:33:45 +00:00
Hibby c34d15c946
Release 2024-02-13 00:18:23 +00:00
Hibby b5ff5e0f73
Merge branch 'debian/latest' into ubuntu/jammy 2024-02-13 00:15:44 +00:00
Dave Hibberd 9ab44dc753
Release 2024-01-18 10:39:54 +00:00
Dave Hibberd 3e9dcea143
Merge branch 'debian/latest' into ubuntu/jammy 2024-01-18 10:39:12 +00:00
Dave Hibberd 552b65aaf2
Merge branch 'debian/latest' into ubuntu/jammy 2024-01-16 21:00:32 +00:00
Dave Hibberd 33dde662d8
release 2023-12-16 14:45:05 +00:00
Dave Hibberd 6c9d8101fd
Merge branch 'debian/latest' into ubuntu/jammy 2023-12-16 14:44:04 +00:00
Dave Hibberd 1a97731f25
Release 2023-12-08 12:37:17 +00:00
Dave Hibberd 9dd1003e91
Merge branch 'debian/latest' into ubuntu/jammy 2023-12-08 12:36:26 +00:00
Dave Hibberd c5456dd210
Release! 2023-10-31 23:08:09 +00:00
Dave Hibberd 3ea67a184e
Merge branch 'debian/latest' into ubuntu/jammy 2023-10-31 22:56:10 +00:00
Dave Hibberd adc7c52d78
Jammy Release 2023-10-15 21:52:48 +01:00
Dave Hibberd a9804cffa7
Merge branch 'debian/latest' into ubuntu/jammy 2023-10-15 21:51:45 +01:00
Dave Hibberd 227e793b7a
release after successful build 2023-10-10 22:25:30 +01:00
Dave Hibberd c946034bca
Merge branch 'debian/latest' into ubuntu/jammy 2023-10-10 22:23:03 +01:00
Dave Hibberd 27278c3915
Jammy release 2023-08-28 23:22:56 +01:00
200 changed files with 20380 additions and 16893 deletions

BIN
250mS@1000Hz.wav Normal file

Binary file not shown.

BIN
250mS@600Hz.wav Normal file

Binary file not shown.

2130
6pack.c

File diff suppressed because it is too large Load diff

View file

@ -45,7 +45,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
//#include <process.h>
//#include <time.h>
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
#include "bpq32.h"
@ -292,7 +292,8 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
{
// Send Error Response
buffptr->Len = sprintf(buffptr->Data, "No Connection to PACTOR TNC\r");
buffptr->Len = 36;
memcpy(buffptr->Data, "No Connection to PACTOR TNC\r", 36);
C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr);
@ -382,8 +383,7 @@ VOID * AEAExtInit(EXTPORTDATA * PortEntry)
TNC->Port = port;
TNC->PortRecord = PortEntry;
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_AEA;
TNC->Hardware = H_AEA;
TNC->TEXTMODE = FALSE;
@ -391,6 +391,8 @@ VOID * AEAExtInit(EXTPORTDATA * PortEntry)
TNC->InitScript = _strupr(TNC->InitScript);
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
{
memcpy(TNC->NodeCall, MYNODECALL, 10);
@ -810,7 +812,7 @@ VOID AEAPoll(int Port)
{
// Limit amount in TX
if (TNC->Streams[0].bytesTXed - TNC->Streams[0].BytesAcked > 200)
if (TNC->Streams[0].BytesTXed - TNC->Streams[0].BytesAcked > 200)
continue;
// If in IRS state for too long, force turnround
@ -875,8 +877,8 @@ VOID AEAPoll(int Port)
EncodeAndSend(TNC, TXMsg, datalen + 1);
ReleaseBuffer(buffptr);
TNC->Streams[Stream].bytesTXed += datalen;
Debugprintf("Stream %d Sending %d, BytesTXED now %d", Stream, datalen, TNC->Streams[Stream].bytesTXed);
TNC->Streams[Stream].BytesTXed += datalen;
Debugprintf("Stream %d Sending %d, BytesTXED now %d", Stream, datalen, TNC->Streams[Stream].BytesTXed);
TNC->Timeout = 0;
TNC->DataBusy = TRUE;
@ -1210,7 +1212,7 @@ static VOID ProcessAEAPacket(struct TNCINFO * TNC, UCHAR * Msg, size_t Len)
// If nothing more to send, turn round link
if ((TNC->Streams[0].BPQtoPACTOR_Q == 0) && TNC->NeedTurnRound &&
(TNC->Streams[0].BytesAcked >= TNC->Streams[0].bytesTXed)) // Nothing following and all acked
(TNC->Streams[0].BytesAcked >= TNC->Streams[0].BytesTXed)) // Nothing following and all acked
{
Debugprintf("AEA Sent = Acked - sending Turnround");
@ -1245,7 +1247,7 @@ static VOID ProcessAEAPacket(struct TNCINFO * TNC, UCHAR * Msg, size_t Len)
Len--; // Remove Header
buffptr->Len = Len; // Length
TNC->Streams[Stream].bytesRXed += (int)Len;
TNC->Streams[Stream].BytesRXed += (int)Len;
memcpy(&buffptr->Data[0], Buffer, Len);
C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr);
@ -1416,7 +1418,7 @@ static VOID ProcessAEAPacket(struct TNCINFO * TNC, UCHAR * Msg, size_t Len)
Buffer[Len-2] = 0;
}
TNC->Streams[Stream].bytesRXed = TNC->Streams[Stream].bytesTXed = TNC->Streams[Stream].BytesAcked = 0;
TNC->Streams[Stream].BytesRXed = TNC->Streams[Stream].BytesTXed = TNC->Streams[Stream].BytesAcked = 0;
TNC->Streams[Stream].ConnectTime = time(NULL);
if (Stream == 0)

211
AGWAPI.c
View file

@ -26,7 +26,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
*/
#define _CRT_SECURE_NO_DEPRECATE
#include "cheaders.h"
#include "CHeaders.h"
#include "bpq32.h"
@ -36,15 +36,14 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
struct AGWHeader
{
uint8_t Port;
uint8_t filler1[3];
int Port;
unsigned char DataKind;
unsigned char filler2;
unsigned char PID;
unsigned char filler3;
unsigned char callfrom[10];
unsigned char callto[10];
unsigned int DataLength;
int DataLength;
int reserved;
};
@ -129,7 +128,7 @@ int DataSocket_Write(struct AGWSocketConnectionInfo * sockptr, SOCKET sock);
int AGWGetSessionKey(char * key, struct AGWSocketConnectionInfo * sockptr);
int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr);
int SendDataToAppl(int Stream, byte * Buffer, int Length);
int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * FrameType, int useLocalTime, int doNodes);
int InternalAGWDecodeFrame(char * msg, char * buffer, int Stamp, int * FrameType, int useLocalTime, int doNodes);
int AGWDataSocket_Disconnect( struct AGWSocketConnectionInfo * sockptr);
int SendRawPacket(struct AGWSocketConnectionInfo * sockptr, char *txmsg, int Length);
int ShowApps();
@ -403,7 +402,7 @@ int SetUpHostSessions()
extern struct DATAMESSAGE * REPLYBUFFER;
extern BOOL AGWActive;
VOID SHOWAGW(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
VOID SHOWAGW(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
// DISPLAY AGW Session Status
@ -564,28 +563,10 @@ int AGWConnected(struct BPQConnectionInfo * Con, int Stream)
(memcmp(sockptr->CallSign1, ApplCall, 10) == 0) || (memcmp(sockptr->CallSign2, ApplCall, 10) == 0))
{
// Create Key
char callsign[10];
int port;
int sesstype;
int paclen;
int maxframe;
int l4window;
keyptr=(byte *)&Con->CallKey;
// Try using the BPQ Port Number if a L2 connect, first free port number if not
GetConnectionInfo(Stream, callsign,
&port, &sesstype, &paclen,
&maxframe, &l4window);
if (port == 0)
port = 64;
*(keyptr++)='0' + port;
*(keyptr++)='1';
memcpy(keyptr, ApplCall, 10);
keyptr+=10;
memcpy(keyptr,ConnectingCall, 10);
@ -705,9 +686,8 @@ int AGWDoMonitorData()
struct AGWSocketConnectionInfo * sockptr;
byte AGWBuffer[1000];
int n;
int Frametype;
int Stamp, Frametype;
BOOL RXFlag;
time_t Stamp;
// Look for Monitor Data
@ -721,30 +701,26 @@ int AGWDoMonitorData()
RawLen = monbuff->LENGTH;
if (RawLen < MSGHDDRLEN || RawLen > 350)
if (RawLen < 7 || RawLen > 350)
{
ReleaseBuffer(monbuff);
FreeSemaphore(&Semaphore);
return 0;
}
Stamp = monbuff->Timestamp;
Stamp = (UINT)monbuff->Timestamp;
memcpy(Buffer, monbuff, RawLen);
ReleaseBuffer(monbuff);
FreeSemaphore(&Semaphore);
// Set monbuff to point to the copy
monbuff = (MESSAGE *)Buffer;
//' 4 byte chain
//' 1 byte port - top bit = transmit
//' 2 byte length (LO-HI)
Port = monbuff->PORT;
Port = Buffer[4];
if (Port > 127)
{
@ -756,12 +732,6 @@ int AGWDoMonitorData()
RXFlag = TRUE;
}
if (Port == 0)
{
Debugprintf("AGWMON Port number is zero");
return 0;
}
// Can now have different mon flags per connection, so need to run decode for each socket
for (n = 1; n<= CurrentSockets; n++)
@ -770,7 +740,7 @@ int AGWDoMonitorData()
if (sockptr->SocketActive && sockptr->MonFlag && (RXFlag || LoopMonFlag))
{
Length = InternalAGWDecodeFrame(monbuff, AGWBuffer, Stamp, &Frametype, sockptr->useLocalTime, sockptr->doNodes);
Length = InternalAGWDecodeFrame(Buffer, AGWBuffer, Stamp, &Frametype, sockptr->useLocalTime, sockptr->doNodes);
if (Length > 0)
{
@ -814,7 +784,7 @@ int AGWDoMonitorData()
}
}
RawLen = RawLen - (MSGHDDRLEN - 1); // One more for KISS control
RawLen = RawLen - 6;
if (RXFlag || Loopflag) // Send transmitted frames if requested
{
@ -822,12 +792,8 @@ int AGWDoMonitorData()
//
// Send raw data to any sockets that have requested Raw frames
//
// Format is ax.25 packet prceeded by a KISS command byte 00 for channel 1 0x10 for channel 2 etc
// As this is an application API I think all should go as Port 1
Buffer[MSGHDDRLEN - 1] = 0; // Just in case big-endian
Buffer[6]=0;
AGWTXHeader.Port = Port - 1; // AGW Ports start from 0
AGWTXHeader.DataKind = 'K';
@ -839,12 +805,14 @@ int AGWDoMonitorData()
sockptr=&Sockets[n];
if (sockptr->SocketActive && sockptr->RawFlag)
SendRawPacket(sockptr, &Buffer[MSGHDDRLEN - 1], RawLen);
SendRawPacket(sockptr, &Buffer[6], RawLen);
}
}
}
return 0;
return 0;
}
int DeleteConnection(struct BPQConnectionInfo * Con)
@ -1030,7 +998,6 @@ int AGWDataSocket_Read(struct AGWSocketConnectionInfo * sockptr, SOCKET sock)
{
int i;
int DataLength;
struct AGWHeader * AGW = &sockptr->AGWRXHeader;
ioctlsocket(sock,FIONREAD,&DataLength);
@ -1042,83 +1009,18 @@ int AGWDataSocket_Read(struct AGWSocketConnectionInfo * sockptr, SOCKET sock)
return 0;
}
if (DataLength < 36) // A header
{
// If we don't get a header within a few ms assume a rogue connection and close it
int n = 50;
while (n--)
{
Sleep(10);
ioctlsocket(sock,FIONREAD,&DataLength);
if (DataLength >= 36)
break;
}
if (n < 1)
{
Debugprintf("Corrupt AGW Packet Received");
AGWDataSocket_Disconnect(sockptr);
return 0;
}
}
// Have a header
i=recv(sock,(char *)&sockptr->AGWRXHeader, 36, 0);
if (i == SOCKET_ERROR)
{
i=WSAGetLastError();
AGWDataSocket_Disconnect(sockptr);
}
sockptr->MsgDataLength = sockptr->AGWRXHeader.DataLength;
// Validate packet to protect against accidental (or malicious!) connects from a non-agw application
if (AGW->Port > 64 || AGW->filler2 != 0 || AGW->filler3 != 0 || AGW->DataLength > 400)
{
Debugprintf("Corrupt AGW Packet Received");
AGWDataSocket_Disconnect(sockptr);
return 0;
}
if (sockptr->MsgDataLength == 0)
ProcessAGWCommand (sockptr);
else
sockptr->GotHeader = TRUE; // Wait for data
ioctlsocket(sock,FIONREAD,&DataLength); // See if more data
if (sockptr->GotHeader)
{
// Received a header, without sufficient data bytes
if (DataLength < sockptr->MsgDataLength)
{
// Fiddle - seem to be problems somtimes with un-Neagled hosts so wait a few ms
// if we don't get a full packet assume a rogue connection and close it
// Fiddle - seem to be problems somtimes with un-Neagled hosts
Sleep(500);
int n = 50;
while (n--)
{
Sleep(10);
ioctlsocket(sock,FIONREAD,&DataLength);
if (DataLength >= sockptr->MsgDataLength)
break;
}
if (n < 1)
{
Debugprintf("Corrupt AGW Packet Received");
AGWDataSocket_Disconnect(sockptr);
return 0;
}
ioctlsocket(sock,FIONREAD,&DataLength);
}
if (DataLength >= sockptr->MsgDataLength)
@ -1131,9 +1033,48 @@ int AGWDataSocket_Read(struct AGWSocketConnectionInfo * sockptr, SOCKET sock)
ProcessAGWCommand (sockptr);
free(sockptr->MsgData);
sockptr->GotHeader = FALSE;
}
// Not Enough Data - wait
}
else // Not got header
{
if (DataLength > 35)// A header
{
i=recv(sock,(char *)&sockptr->AGWRXHeader, 36, 0);
if (i == SOCKET_ERROR)
{
i=WSAGetLastError();
AGWDataSocket_Disconnect(sockptr);
}
sockptr->MsgDataLength = sockptr->AGWRXHeader.DataLength;
if (sockptr->MsgDataLength > 500)
OutputDebugString("Corrupt AGW message");
if (sockptr->MsgDataLength == 0)
{
ProcessAGWCommand (sockptr);
}
else
{
sockptr->GotHeader = TRUE; // Wait for data
}
}
// not got 36 bytes
}
return 0;
}
@ -1141,7 +1082,6 @@ int AGWDataSocket_Read(struct AGWSocketConnectionInfo * sockptr, SOCKET sock)
int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
{
int AGWVersion[2]={2003,999};
byte AGWPortCaps[12] = { 0, 255, 30, 10, 63, 10, 4, 0, 1, 0, 0, 0 };
char AGWRegReply[1];
struct BPQConnectionInfo * Connection;
int Stream;
@ -1156,7 +1096,6 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
int con,conport;
int AGWYReply = 0;
int state, change;
int n;
// if we have hidden some ports then the port in the AGW packet will be an index into the visible ports,
// not the real port number
@ -1209,9 +1148,9 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
// Need to convert port index (used by AGW) to port number
conport=GetPortNumber(VisiblePortToRealPort[key[0]-49] + 1);
conport=GetPortNumber(VisiblePortToRealPort[key[0]-48]);
n = sprintf(ConnectMsg,"C %d %s",conport,ToCall);
sprintf(ConnectMsg,"C %d %s",conport,ToCall);
// if 'v' command add digis
@ -1226,7 +1165,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
while(nDigis--)
{
n += sprintf(&ConnectMsg[n], " %s", Digis);
sprintf(ConnectMsg, "%s, %s", ConnectMsg, Digis);
Digis += 10;
}
}
@ -1307,7 +1246,9 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
// Version
memset(&AGWTXHeader,0,36);
AGWTXHeader.DataKind = 'R';
AGWTXHeader.DataLength = 8; // Length
SendtoSocket(sockptr->socket, (char *)&AGWVersion[0]);
@ -1321,27 +1262,15 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
memset(&AGWTXHeader,0,36);
AGWTXHeader.DataKind = 'G';
AGWTXHeader.DataLength =(int)strlen(AGWPorts)+1; // Length
SendtoSocket(sockptr->socket, AGWPorts);
return 0;
case 'g':
// Port capabilities. Currently hard-coded.
AGWTXHeader.Port = sockptr->AGWRXHeader.Port;
AGWTXHeader.DataKind = 'g';
AGWTXHeader.DataLength = 12;
SendtoSocket(sockptr->socket, (char *)&AGWPortCaps[0]);
return 0;
case 'k':
@ -1440,8 +1369,6 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
AGWTXHeader.DataKind = 'X';
memcpy(&AGWTXHeader.callfrom, RegCall, 10);
AGWTXHeader.DataLength = 1; // Length
AGWRegReply[0] = 1;

1646
AGWMon.asm Normal file

File diff suppressed because it is too large Load diff

View file

@ -33,7 +33,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#pragma data_seg("_BPQDATA")
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
// MSGFLAG contains CMD/RESPONSE BITS
@ -49,14 +49,9 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define DM 0x0F
#define UA 0x63
#define FRMR 0x87
#define XID 0xAF
#define TEST 0xE3
#define RR 1
#define RNR 5
#define REJ 9
#define SREJ 0x0D
#define SABME 0x6F
#define PFBIT 0x10 // POLL/FINAL BIT IN CONTROL BYTE
@ -66,6 +61,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define NODES_SIG 0xFF
char * strlop(char * buf, char delim);
UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, int msglen);
static UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen, int DoNodes);
@ -73,7 +69,7 @@ static UCHAR * DISPLAYIPDATAGRAM(IPMSG * IP, UCHAR * Output, int MsgLen);
static UCHAR * DISPLAYARPDATAGRAM(UCHAR * Datagram, UCHAR * Output);
int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * FrameType, int useLocalTime, int DoNodes)
int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameType, int useLocalTime, int DoNodes)
{
UCHAR * ptr;
int n;
@ -266,18 +262,6 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
strcpy(SUP, "FRMR");
FRMRFLAG = 1;
break;
case XID:
strcpy(SUP, "XID");
XIDFLAG = 1;
break;
case TEST:
strcpy(SUP, "TEST");
TESTFLAG = 1;
break;
}
Output += sprintf((char *)Output, "<%s%s%s>", SUP, CRCHAR, PFCHAR);
@ -287,7 +271,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
// Super
int NR = (CTL >> 5) & 7;
char SUP[5] = "??";
char SUP[4] = "??";
switch (CTL & 0x0F)
{
@ -305,13 +289,6 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
strcpy(SUP, "REJ");
break;
case SREJ:
strcpy(SUP, "SREJ");
break;
}
Output += sprintf((char *)Output, "<%s%s%s R%d>", SUP, CRCHAR, PFCHAR, NR);
@ -324,72 +301,6 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
if (FRMRFLAG)
Output += sprintf((char *)Output, "%02X %02X %02X", ADJBUFFER->PID, ADJBUFFER->L2DATA[0], ADJBUFFER->L2DATA[1]);
if (XIDFLAG)
{
// Decode and display XID
UCHAR * ptr = &ADJBUFFER->PID;
if (*ptr++ == 0x82 && *ptr++ == 0x80)
{
int Type;
int Len;
unsigned int value;
int xidlen = *(ptr++) << 8;
xidlen += *ptr++;
// XID is set of Type, Len, Value n-tuples
// G8BPQ-2>G8BPQ:(XID cmd, p=1) Half-Duplex SREJ modulo-128 I-Field-Length-Rx=256 Window-Size-Rx=32 Ack-Timer=3000 Retries=10
while (xidlen > 0)
{
Type = *ptr++;
Len = *ptr++;
value = 0;
xidlen -= (Len + 2);
while (Len--)
{
value <<=8;
value += *ptr++;
}
switch(Type)
{
case 2: //Bin fields
case 3:
Output += sprintf((char *)Output, " %d=%x", Type, value);
break;
case 6: //RX Size
Output += sprintf((char *)Output, " RX Paclen=%d", value / 8);
break;
case 8: //RX Window
Output += sprintf((char *)Output, " RX Window=%d", value);
break;
case 16:
Output += sprintf((char *)Output, " Can Compress");
break;
case 17:
Output += sprintf((char *)Output, " Compress ok");
break;
}
}
}
}
if (Info)
{
// We have an info frame
@ -454,7 +365,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
}
if (Output == NULL)
return 0;
return NULL;
if (Output[-1] != 13)
Output += sprintf((char *)Output, "\r");
@ -509,14 +420,6 @@ UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen, int DoNo
return Output;
}
if (ADJBUFFER->L2DATA[0] == 0xfe) // Paula's Nodes Poll
{
memcpy(Alias, ++ptr, 6);
Output += sprintf((char *)Output, " NODES POLL from %s\r", Alias);
return Output;
}
// Display normal NET/ROM transmissions
Output += sprintf((char *)Output, " NET/ROM\r ");

View file

@ -7,7 +7,7 @@
#include <stdlib.h>
#include <math.h>
#include "time.h"
#include "cheaders.h"
#include "CHeaders.h"
//#include "tncinfo.h"
//#include "adif.h"
//#include "telnetserver.h"
@ -760,7 +760,7 @@ void SaveVesselDataBase()
void LoadNavAidDataBase()
{
int i, n, count;
int i;
FILE *file;
char buf[256];
@ -793,12 +793,10 @@ void LoadNavAidDataBase()
NavRecords = (struct NAVAIDRECORD **)malloc(NavAidCount * sizeof(void *));
count = 0;
for (i = 0; i < NavAidCount; i++)
{
navptr = (struct NAVAIDRECORD *)malloc(sizeof(struct NAVAIDRECORD));
NavRecords[count] = navptr;
NavRecords[i] = navptr;
memset(navptr, 0, sizeof(struct NAVAIDRECORD));
fgets(buf, 255, file);
@ -809,19 +807,6 @@ void LoadNavAidDataBase()
token = strtok(NULL, "|\n" );
strcpy(&navptr->name[0],token);
for (n = 0; n < 20; n++)
{
char c = navptr->name[n];
if (!isalpha(c) && !isdigit(c) && c != ' ' && c != '_')
{
count--;
break;
}
}
count++;
token = strtok(NULL, "|\n" );
navptr->lat = atof(token);
@ -835,7 +820,6 @@ void LoadNavAidDataBase()
navptr->TimeLastUpdated = atoi(token);
}
NavAidCount = count;
fclose(file);
}
@ -848,7 +832,6 @@ void SaveNavAidDataBase()
char FN[256];
struct NAVAIDRECORD * navptr;
if (BPQDirectory[0] == 0)
{
strcpy(FN, "AIS_NavAids.txt");
@ -2389,8 +2372,6 @@ void ProcessAISNavAidMessage()
NavAidCount++;
ProcessAISNavAidMessage();
NavAidDBChanged = 1;
return;

View file

@ -22,10 +22,11 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// First Version, November 2011
#pragma data_seg("_BPQDATA")
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include "cheaders.h"
#include "CHeaders.h"
#include "bpq32.h"
#include <time.h>
#include "kernelresource.h"
@ -62,6 +63,7 @@ VOID __cdecl Debugprintf(const char * format, ...);
VOID __cdecl Consoleprintf(const char * format, ...);
BOOL APIENTRY Send_AX(PMESSAGE Block, DWORD Len, UCHAR Port);
VOID Send_AX_Datagram(PDIGIMESSAGE Block, DWORD Len, UCHAR Port);
char * strlop(char * buf, char delim);
int APRSDecodeFrame(char * msg, char * buffer, time_t Stamp, uint64_t Mask); // Unsemaphored DecodeFrame
APRSHEARDRECORD * UpdateHeard(UCHAR * Call, int Port);
BOOL CheckforDups(char * Call, char * Msg, int Len);
@ -86,7 +88,7 @@ double myDistance(double laa, double loa, BOOL KM);
struct STATIONRECORD * FindStation(char * Call, BOOL AddIfNotFound);
int DecodeAPRSPayload(char * Payload, struct STATIONRECORD * Station);
BOOL KillOldTNC(char * Path);
int FromLOC(char * Locator, double * pLat, double * pLon);
BOOL ToLOC(double Lat, double Lon , char * Locator);
BOOL InternalSendAPRSMessage(char * Text, char * Call);
void UndoTransparency(char * input);
@ -102,7 +104,6 @@ void ClearSavedMessages();
void GetSavedAPRSMessages();
static VOID GPSDConnect(void * unused);
int CanPortDigi(int Port);
int FromLOC(char * Locator, double * pLat, double * pLon);
extern int SemHeldByAPI;
extern int APRSMONDECODE();
@ -347,7 +348,7 @@ APRSHEARDRECORD MHTABLE[MAXHEARD] = {0};
APRSHEARDRECORD * MHDATA = &MHTABLE[0];
static SOCKET sock = 0;
static SOCKET sock = (SOCKET) NULL;
//Duplicate suppression Code
@ -553,8 +554,6 @@ int APRSWriteLog(char * msg)
UCHAR Value[MAX_PATH];
time_t T;
struct tm * tm;
int n;
if (LogAPRSIS == 0)
return 0;
@ -576,9 +575,8 @@ int APRSWriteLog(char * msg)
strcat(Value, "logs/APRS_");
}
n = strlen(Value);
sprintf(&Value[n], "%02d%02d%02d.log", tm->tm_year - 100, tm->tm_mon+1, tm->tm_mday);
sprintf(Value, "%s%02d%02d%02d.log", Value,
tm->tm_year - 100, tm->tm_mon+1, tm->tm_mday);
if ((file = fopen(Value, "ab")) == NULL)
return FALSE;
@ -3115,7 +3113,7 @@ VOID APRSISThread(void * Report)
BOOL bcopt=TRUE;
char Buffer[1000];
int InputLen = 1; // Non-zero
char errmsg[300];
char errmsg[100];
char * ptr;
size_t inptr = 0;
char APRSinMsg[1000];
@ -3676,7 +3674,7 @@ BOOL CheckforDups(char * Call, char * Msg, int Len)
if (ptr1)
*ptr1 = 0;
// Debugprintf("Duplicate Message suppressed %s", Msg);
// Debugprintf("Duplicate Message supressed %s", Msg);
return TRUE; // Duplicate
}
}
@ -7668,7 +7666,7 @@ VOID APRSProcessHTTPMessage(SOCKET sock, char * MsgPtr, BOOL LOCAL, BOOL COOKIE)
}
OutputLen += sprintf(&OutBuffer[OutputLen], "%s", WebTrailer);
OutputLen += sprintf(&OutBuffer[OutputLen], WebTrailer);
HeaderLen = sprintf(Header, "HTTP/1.0 200 OK\r\nContent-Length: %d\r\nContent-Type: text/html\r\n\r\n", OutputLen);
sendandcheck(sock, Header, HeaderLen);
@ -7713,7 +7711,7 @@ VOID APRSProcessHTTPMessage(SOCKET sock, char * MsgPtr, BOOL LOCAL, BOOL COOKIE)
}
OutputLen += sprintf(&OutBuffer[OutputLen], "%s", WebTrailer);
OutputLen += sprintf(&OutBuffer[OutputLen], WebTrailer);
HeaderLen = sprintf(Header, "HTTP/1.0 200 OK\r\nContent-Length: %d\r\nContent-Type: text/html\r\n\r\n", OutputLen);
sendandcheck(sock, Header, HeaderLen);
@ -8115,7 +8113,7 @@ extern char OrigCmdBuffer[81];
BOOL isSYSOP(TRANSPORTENTRY * Session, char * Bufferptr);
VOID APRSCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
VOID APRSCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
// APRS Subcommands. Default for compatibility is APRSMH
@ -9156,7 +9154,7 @@ void GetSavedAPRSMessages()
FILE *file;
struct APRSMESSAGE * Message;
struct APRSMESSAGE * ptr;
char Line[512];
char Line[256];
char * Stamp = 0;
char * From = 0;
char * To = 0;
@ -9180,7 +9178,7 @@ void GetSavedAPRSMessages()
if ((file = fopen(FN, "r")) == NULL)
return ;
while (fgets(Line, sizeof(Line), file))
while (fgets(Line, 512, file))
{
Stamp = Line;
From = strlop(Stamp, ' ');

View file

@ -3225,170 +3225,6 @@ char * get_plane(int * Len)
return ptr;
}
char * get_portstats()
{
char Msg[] =
"<!DOCTYPE html>\n"
"<html>\n"
"\n"
"<head>\n"
"<script src=\"https://code.jquery.com/jquery-3.6.0.min.js\"> </script>\n"
"</head>\n"
"\n"
"\n"
"<body>\n"
"<H2 id=\"h1\"> Last hour's stats for Port </h2>\n"
"<p>\n"
"<canvas id=\"myCanvas\" width=\"600\" height=\"250\" style=\"border:1px solid #d3d3d3;\">\n"
"Your browser does not support the HTML canvas tag.</canvas>\n"
"<br>\n"
"<canvas id=\"myCanvas2\" width=\"600\" height=\"250\" style=\"border:1px solid #d3d3d3;\">\n"
"Your browser does not support the HTML canvas tag.</canvas>\n"
"\n"
"<script>\n"
"var c = document.getElementById(\"myCanvas\");\n"
"var ctx = c.getContext(\"2d\");\n"
"\n"
"var port = window.location.search.slice(1);\n"
"\n"
"document.getElementById(\"h1\").innerHTML = \"Last hour's stats for Port \" + port;;\n"
"\n"
"var oReq = new XMLHttpRequest();\n"
"oReq.open(\"GET\", \"/portstats.txt?\" + port, true);\n"
"oReq.responseType = \"arraybuffer\";\n"
"\n"
"oReq.onload = function(oEvent)\n"
" {\n"
" var arrayBuffer = oReq.response;\n"
"\n"
" var byteArray = new Uint8Array(arrayBuffer);\n"
" \n"
" \n"
" // Draw it. Do last hour for testing. Plot each value for 10 pixels\n"
" \n"
"\tctx.strokeStyle = \"green\";\n"
"\tctx.beginPath();\n"
"\t\n"
"\tctx.moveTo(0,200);\n"
"\tvar y = 2880 - 60;\n"
"\tvar val;\n"
"\t\n"
"\tfor (i = 0; i < 600; i+=10)\n"
"\t{\n"
"\t\tval = byteArray[y] * 2;\n"
"\t\t\n"
"\t\tctx.lineTo(i, 200 - val);\n"
"\t\tctx.lineTo(i+10, 200 - val);\n"
"\t\ty++;\n"
"\t}\n"
"\t\n"
"\tctx.stroke();\n"
"\t\n"
"\tctx.strokeStyle = \"gray\";\n"
"\tctx.setLineDash([5, 3]);\n"
"\t\n"
"\tctx.beginPath();\n"
" \tctx.moveTo(0,100);\n"
"\tctx.lineTo(600,100);\n"
" \tctx.moveTo(0,50);\n"
"\tctx.lineTo(600,50);\n"
" \tctx.moveTo(0,150);\n"
"\tctx.lineTo(600,150);\n"
"\tctx.stroke();\n"
"\n"
"\n"
"\t\n"
"\tctx.fillText(\"100%\",0,10);\n"
"\tctx.fillText(\"50%\",0,100);\n"
"\tctx.fillText(\"0%\",0,200);\t\n"
"\tctx.fillText(\"-60 mins\",0,220);\t\n"
"\tctx.fillText(\"-30 mins\",300,220);\t\n"
"\tctx.fillText(\"Now\",580,220);\t\n"
"\n"
"\t\n"
"\t// Do TX\n"
"\t\n"
"\t\n"
"\tc = document.getElementById(\"myCanvas2\");\n"
"\tctx = c.getContext(\"2d\");\n"
"\n"
"\tctx.fillText(\"100%\",0,10);\n"
"\tctx.fillText(\"50%\",0,100);\n"
"\tctx.fillText(\"0%\",0,200);\t\n"
"\tctx.fillText(\"-60 mins\",0,220);\t\n"
"\tctx.fillText(\"-30 mins\",300,220);\t\n"
"\tctx.fillText(\"Now\",580,220);\t\n"
"\n"
"\n"
"\tctx.strokeStyle = \"red\";\n"
"\tctx.beginPath();\n"
"\t\n"
"\tctx.moveTo(0,200);\n"
"\tvar y = 1440 - 60;\n"
"\tvar val;\n"
"\t\n"
"\tfor (i = 0; i < 600; i+=10)\n"
"\t\n"
"\t{\n"
"\t\tval = byteArray[y] * 2;\n"
"\t\t\n"
"\t\tctx.lineTo(i, 200 - val);\n"
"\t\tctx.lineTo(i+10, 200 - val);\n"
"\t\ty++;\n"
"\t}\n"
"\t\n"
"\tctx.stroke();\n"
"\n"
"\tctx.strokeStyle = \"gray\";\n"
"\tctx.setLineDash([5, 3]);\n"
"\t\n"
"\tctx.beginPath();\n"
" \tctx.moveTo(0,100);\n"
"\tctx.lineTo(600,100);\n"
" \tctx.moveTo(0,50);\n"
"\tctx.lineTo(600,50);\n"
" \tctx.moveTo(0,150);\n"
"\tctx.lineTo(600,150);\n"
"\tctx.stroke();\n"
"\n"
"\n"
"};\n"
"\n"
"oReq.send();\n"
"\n"
"\n"
"function draw(Data)\n"
"{\n"
"\n"
"\t// Data has 4 bytes of index to current position the 1440 bytes of load info\n"
"\t\n"
"\n"
"\tview = new Int8Array(Data);\n"
"\t\n"
"alert(view[3]);\n"
"\n"
"ctx.moveTo(0,200);\n"
"var y = 0;\n"
"for (i = 0; i < 720; i+=30)\n"
"{\n"
"\tctx.lineTo(i, 200 - y);\n"
"\tctx.lineTo(i+30, 200 - y);\n"
"\ty += 10;\n"
"}\n"
"\n"
"\n"
"ctx.stroke();\n"
"}\n"
"\n"
"</script>\n"
"\n"
"</body>\n"
"</html>\n"
"\n"
"";
return _strdup(Msg);;
}
char * get_aprs()
{
@ -3802,10 +3638,6 @@ char * GetStandardPage(char * FN, int * Len)
if (_stricmp(FN, "leaflet.rotatedMarker.js") == 0)
return get_rotatedMarker();
if (_stricmp(FN, "PortStats.html") == 0)
return get_portstats();
if (_stricmp(FN, "info_call.html") == 0)
return get_info_call();

219
ARDOP.c
View file

@ -45,7 +45,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#endif
#endif
#include "cheaders.h"
#include "CHeaders.h"
int (WINAPI FAR *GetModuleFileNameExPtr)();
@ -62,12 +62,6 @@ int (WINAPI FAR *EnumProcessesPtr)();
#include "tncinfo.h"
void hookL4SessionAttempt(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionAccepted(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionDeleted(struct TNCINFO * TNC, void * STREAM);
#define WSA_ACCEPT WM_USER + 1
#define WSA_DATA WM_USER + 2
#define WSA_CONNECT WM_USER + 3
@ -142,10 +136,6 @@ BOOL ARDOPStopPort(struct PORTCONTROL * PORT)
if (TNC->Streams[0].Attached)
TNC->Streams[0].ReportDISC = TRUE;
TNC->Streams[0].Connecting = 0;
TNC->Streams[0].Connected = 0;
TNC->Streams[0].Attached = 0;
if (TNC->TCPSock)
{
shutdown(TNC->TCPSock, SD_BOTH);
@ -172,9 +162,6 @@ BOOL ARDOPStopPort(struct PORTCONTROL * PORT)
sprintf(PORT->TNC->WEB_COMMSSTATE, "%s", "Port Stopped");
MySetWindowText(PORT->TNC->xIDC_COMMSSTATE, PORT->TNC->WEB_COMMSSTATE);
strcpy(TNC->WEB_TNCSTATE, "Free");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
return TRUE;
}
@ -327,7 +314,7 @@ void SendARDOPorPacketData(struct TNCINFO * TNC, int Stream, UCHAR * Buff, int t
if (Stream == 0)
{
ARDOPSendData(TNC, Buff, txlen);
STREAM->bytesTXed += txlen;
STREAM->BytesTXed += txlen;
WritetoTrace(TNC, Buff, txlen);
}
else
@ -573,9 +560,9 @@ static int ProcessLine(char * buf, int Port)
}
void ARDOPThread(VOID * Param);
void ARDOPThread(struct TNCINFO * TNC);
VOID ARDOPProcessDataSocketData(int port);
int ConnecttoARDOP(struct TNCINFO * TNC);
int ConnecttoARDOP();
static VOID ARDOPProcessReceivedData(struct TNCINFO * TNC);
static VOID ARDOPProcessReceivedControl(struct TNCINFO * TNC);
int V4ProcessReceivedData(struct TNCINFO * TNC);
@ -656,12 +643,6 @@ VOID ARDOPSendCommand(struct TNCINFO * TNC, char * Buff, BOOL Queue)
if (Buff[0] == 0) // Terminal Keepalive?
return;
if (memcmp(Buff, "LISTEN ", 7) == 0)
{
strcpy(TNC->WEB_MODE, &Buff[7]);
MySetWindowText(TNC->xIDC_MODE, &Buff[7]);
}
EncLen = sprintf(Encoded, "%s\r", Buff);
// it is possible for binary data to be dumped into the command
@ -894,22 +875,8 @@ 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;
}
}
// Check ATTACH time limit
if (STREAM->Attached)
{
if (STREAM->AttachTime && TNC->AttachTimeLimit && time(NULL) > (TNC->AttachTimeLimit + STREAM->AttachTime))
{
Debugprintf("ARDOP closing session on AttachTimelimit");
STREAM->ReportDISC = 1;
STREAM->AttachTime = 0;
STREAM->Disconnecting = TRUE;
}
}
@ -980,7 +947,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
TNC->Streams[0].Connecting ||
TNC->Streams[0].Connected)
{
// discard if TNC not connected or session active
// discard if TNC not connected or sesison active
ReleaseBuffer(buffptr);
continue;
@ -1223,7 +1190,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
Debugprintf("ARDOP New Attach Stream %d DEDStream %d", Stream, STREAM->DEDStream);
STREAM->Attached = TRUE;
STREAM->AttachTime = time(NULL);
calllen = ConvFromAX25(TNC->PortRecord->ATTACHEDSESSIONS[Stream]->L4USER, TNC->Streams[Stream].MyCall);
TNC->Streams[Stream].MyCall[calllen] = 0;
@ -1296,7 +1262,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
UCHAR * data = &buffptr->Data[0];
STREAM->FramesQueued--;
txlen = (int)buffptr->Len;
STREAM->bytesTXed += txlen;
STREAM->BytesTXed += txlen;
if (Stream == 0)
{
@ -1403,7 +1369,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
{
bytes=ARDOPSendData(TNC, &buff->L2DATA[0], txlen);
TNC->Streams[Stream].BytesOutstanding += bytes; // So flow control works - will be updated by BUFFER response
STREAM->bytesTXed += bytes;
STREAM->BytesTXed += bytes;
WritetoTrace(TNC, &buff->L2DATA[0], txlen);
}
else
@ -1502,10 +1468,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
if (_memicmp(&buff->L2DATA[0], "RADIO ", 6) == 0)
{
char cmd[56];
strcpy(cmd, &buff->L2DATA[6]);
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, cmd);
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, &buff->L2DATA[6]);
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &buff->L2DATA[0]))
{
@ -1652,8 +1615,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
ARDOPChangeMYC(TNC, TNC->Streams[0].MyCall);
hookL4SessionAttempt(STREAM, &buff->L2DATA[2], TNC->Streams[0].MyCall);
// See if Busy
if (InterlockedCheckBusy(TNC))
@ -1744,7 +1705,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
return TNC->CONNECTED << 8 | 1;
return (TNC->CONNECTED << 8 | TNC->Streams[Stream].Disconnecting << 15); // OK
case 4: // reinit7
@ -1892,11 +1853,13 @@ VOID ARDOPReleaseTNC(struct TNCINFO * TNC)
ARDOPChangeMYC(TNC, TNC->NodeCall);
ARDOPSendCommand(TNC, "LISTEN TRUE", TRUE);
strcpy(TNC->WEB_TNCSTATE, "Free");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
ARDOPSendCommand(TNC, "LISTEN TRUE", TRUE);
// Start Scanner
// Start Scanner
if (TNC->DefaultRadioCmd)
@ -1914,19 +1877,12 @@ VOID ARDOPReleaseTNC(struct TNCINFO * TNC)
VOID ARDOPSuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC)
{
TNC->PortRecord->PORTCONTROL.PortSuspended = TRUE;
ARDOPSendCommand(TNC, "LISTEN FALSE", TRUE);
strcpy(TNC->WEB_TNCSTATE, "Interlocked");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
}
VOID ARDOPReleasePort(struct TNCINFO * TNC)
{
TNC->PortRecord->PORTCONTROL.PortSuspended = FALSE;
ARDOPSendCommand(TNC, "LISTEN TRUE", TRUE);
strcpy(TNC->WEB_TNCSTATE, "Free");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
}
extern char WebProcTemplate[];
@ -1943,7 +1899,7 @@ static int WebProc(struct TNCINFO * TNC, char * Buff, BOOL LOCAL)
Len += sprintf(&Buff[Len], "<tr><td width=110px>Comms State</td><td>%s</td></tr>", TNC->WEB_COMMSSTATE);
Len += sprintf(&Buff[Len], "<tr><td>TNC State</td><td>%s</td></tr>", TNC->WEB_TNCSTATE);
Len += sprintf(&Buff[Len], "<tr><td>Listen</td><td>%s</td></tr>", TNC->WEB_MODE);
Len += sprintf(&Buff[Len], "<tr><td>Mode</td><td>%s</td></tr>", TNC->WEB_MODE);
Len += sprintf(&Buff[Len], "<tr><td>Channel State</td><td>%s &nbsp; %s</td></tr>", TNC->WEB_CHANSTATE, TNC->WEB_LEVELS);
Len += sprintf(&Buff[Len], "<tr><td>Proto State</td><td>%s</td></tr>", TNC->WEB_PROTOSTATE);
Len += sprintf(&Buff[Len], "<tr><td>Traffic</td><td>%s</td></tr>", TNC->WEB_TRAFFIC);
@ -1992,7 +1948,6 @@ VOID * ARDOPExtInit(EXTPORTDATA * PortEntry)
}
TNC->Port = port;
TNC->PortRecord = PortEntry;
if (TNC->LogPath)
ARDOPOpenLogFiles(TNC);
@ -2005,7 +1960,7 @@ VOID * ARDOPExtInit(EXTPORTDATA * PortEntry)
if (TNC->ProgramPath)
TNC->WeStartedTNC = RestartTNC(TNC);
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_ARDOP;
TNC->Hardware = H_ARDOP;
if (TNC->BusyWait == 0)
TNC->BusyWait = 10;
@ -2013,6 +1968,7 @@ VOID * ARDOPExtInit(EXTPORTDATA * PortEntry)
if (TNC->BusyHold == 0)
TNC->BusyHold = 1;
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
memcpy(TNC->NodeCall, MYNODECALL, 10);
@ -2067,12 +2023,21 @@ VOID * ARDOPExtInit(EXTPORTDATA * PortEntry)
strcat(TempScript, "ARQTIMEOUT 90\r");
// strcat(TempScript, "ROBUST False\r");
// Make MYAUX and MYCALL overridable
strcat(TempScript, TNC->InitScript);
free(TNC->InitScript);
TNC->InitScript = TempScript;
// Set MYCALL
// strcat(TNC->InitScript,"FECRCV True\r");
// strcat(TNC->InitScript,"AUTOBREAK True\r");
sprintf(Msg, "MYCALL %s\r", TNC->NodeCall);
strcat(TempScript, Msg);
strcat(TNC->InitScript, Msg);
// strcat(TNC->InitScript,"PROCESSID\r");
// strcat(TNC->InitScript,"CODEC TRUE\r");
// strcat(TNC->InitScript,"LISTEN TRUE\r");
for (i = 0; i < 32; i++)
{
@ -2096,25 +2061,9 @@ VOID * ARDOPExtInit(EXTPORTDATA * PortEntry)
if (strlen(Aux) > 8)
{
Aux[strlen(Aux) - 1] = '\r';
strcat(TempScript, Aux);
strcat(TNC->InitScript, Aux);
}
strcat(TempScript, TNC->InitScript);
free(TNC->InitScript);
TNC->InitScript = TempScript;
// strcat(TNC->InitScript,"FECRCV True\r");
// strcat(TNC->InitScript,"AUTOBREAK True\r");
// strcat(TNC->InitScript,"PROCESSID\r");
// strcat(TNC->InitScript,"CODEC TRUE\r");
// strcat(TNC->InitScript,"LISTEN TRUE\r");
strcpy(TNC->CurrentMYC, TNC->NodeCall);
if (TNC->WL2K == NULL)
@ -2166,7 +2115,7 @@ VOID * ARDOPExtInit(EXTPORTDATA * PortEntry)
CreateWindowEx(0, "STATIC", "TNC State", WS_CHILD | WS_VISIBLE, 10,28,106,20, TNC->hDlg, NULL, hInstance, NULL);
TNC->xIDC_TNCSTATE = CreateWindowEx(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 120,28,520,20, TNC->hDlg, NULL, hInstance, NULL);
CreateWindowEx(0, "STATIC", "Listen", WS_CHILD | WS_VISIBLE, 10,50,80,20, TNC->hDlg, NULL, hInstance, NULL);
CreateWindowEx(0, "STATIC", "Mode", WS_CHILD | WS_VISIBLE, 10,50,80,20, TNC->hDlg, NULL, hInstance, NULL);
TNC->xIDC_MODE = CreateWindowEx(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 120,50,200,20, TNC->hDlg, NULL, hInstance, NULL);
CreateWindowEx(0, "STATIC", "Channel State", WS_CHILD | WS_VISIBLE, 10,72,110,20, TNC->hDlg, NULL, hInstance, NULL);
@ -2297,16 +2246,16 @@ VOID TNCLost(struct TNCINFO * TNC)
if (Stream == 0)
{
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - STREAM->BytesOutstanding, STREAM->bytesRXed, STREAM->BytesOutstanding);
STREAM->BytesTXed - STREAM->BytesOutstanding, STREAM->BytesRXed, STREAM->BytesOutstanding);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
}
if (STREAM->Attached)
{
STREAM->Connected = FALSE;
STREAM->Connecting = FALSE;
STREAM->ReportDISC = TRUE;
STREAM->Connected = FALSE;
STREAM->Connecting = FALSE;
}
}
}
@ -2318,13 +2267,12 @@ int ConnecttoARDOP(struct TNCINFO * TNC)
return 0;
}
VOID ARDOPThread(VOID * Param)
VOID ARDOPThread(struct TNCINFO * TNC)
{
// Opens sockets and looks for data on control and data sockets.
// Socket may be TCP/IP or Serial
struct TNCINFO * TNC = (struct TNCINFO *) Param;
char Msg[255];
int err, i, ret;
u_long param=1;
@ -2633,8 +2581,6 @@ VOID ARDOPThread(VOID * Param)
TNC->Alerted = TRUE;
ARDOPSendCommand(TNC, "LISTEN TRUE", TRUE);
sprintf(TNC->WEB_COMMSSTATE, "Connected to ARDOP TNC");
MySetWindowText(TNC->xIDC_COMMSSTATE, TNC->WEB_COMMSSTATE);
@ -2714,10 +2660,6 @@ VOID ARDOPThread(VOID * Param)
sprintf(TNC->WEB_COMMSSTATE, "Connection to TNC lost");
MySetWindowText(TNC->xIDC_COMMSSTATE, TNC->WEB_COMMSSTATE);
strcpy(TNC->WEB_TNCSTATE, "Free");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
TNC->CONNECTED = FALSE;
TNC->Alerted = FALSE;
@ -2999,15 +2941,6 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
if (TNC->PTTMode)
Rig_PTT(TNC, TRUE);
TNC->PTTonTime = GetTickCount();
// Cancel Busy timer (stats include ptt on time in port active
if (TNC->BusyonTime)
{
TNC->BusyActivemS += (GetTickCount() - TNC->BusyonTime);
TNC->BusyonTime = 0;
}
return;
}
if (_memicmp(Buffer, "PTT F", 5) == 0)
@ -3016,12 +2949,6 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
if (TNC->PTTMode)
Rig_PTT(TNC, FALSE);
if (TNC->PTTonTime)
{
TNC->PTTActivemS += (GetTickCount() - TNC->PTTonTime);
TNC->PTTonTime = 0;
}
return;
}
@ -3030,8 +2957,6 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
TNC->BusyFlags |= CDBusy;
TNC->Busy = TNC->BusyHold * 10; // BusyHold delay
TNC->BusyonTime = GetTickCount();
MySetWindowText(TNC->xIDC_CHANSTATE, "Busy");
strcpy(TNC->WEB_CHANSTATE, "Busy");
@ -3048,12 +2973,6 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
else
strcpy(TNC->WEB_CHANSTATE, "Clear");
if (TNC->BusyonTime)
{
TNC->BusyActivemS += (GetTickCount() - TNC->BusyonTime);
TNC->BusyonTime = 0;
}
MySetWindowText(TNC->xIDC_CHANSTATE, TNC->WEB_CHANSTATE);
TNC->WinmorRestartCodecTimer = time(NULL);
return;
@ -3104,7 +3023,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
}
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - STREAM->BytesOutstanding, STREAM->bytesRXed, STREAM->BytesOutstanding);
STREAM->BytesTXed - STREAM->BytesOutstanding, STREAM->BytesRXed, STREAM->BytesOutstanding);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
return;
}
@ -3124,7 +3043,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
WritetoTrace(TNC, Buffer, MsgLen - 1);
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->PacketsSent = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->PacketsSent = 0;
memcpy(Call, &Buffer[10], 10);
@ -3157,7 +3076,6 @@ 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
@ -3252,7 +3170,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
{
char AppName[13];
memcpy(AppName, &ApplPtr[App * sizeof(struct CMDX)], 12);
memcpy(AppName, &ApplPtr[App * sizeof(CMDX)], 12);
AppName[12] = 0;
if (TNC->SendTandRtoRelay && memcmp(AppName, "RMS ", 4) == 0
@ -3302,7 +3220,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
STREAM->NeedDisc = 100; // 10 secs
}
}
strcpy(STREAM->MyCall, TNC->TargetCall);
return;
}
else
@ -3340,9 +3258,9 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
}
}
if (_memicmp(Buffer, "DISCONNECTED", 12) == 0
|| _memicmp(Buffer, "STATUS CONNECT TO", 17) == 0
|| _memicmp(Buffer, "STATUS END ARQ CALL", 19) == 0
|| _memicmp(Buffer, "STATUS ARQ TIMEOUT FROM PROTOCOL STATE", 24) == 0
// || _memicmp(Buffer, "NEWSTATE DISC", 13) == 0
|| _memicmp(Buffer, "ABORT", 5) == 0)
@ -3384,21 +3302,34 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
RestartTNC(TNC);
}
sprintf(TNC->WEB_TNCSTATE, "In Use by %s", TNC->Streams[0].MyCall);
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
return;
}
WritetoTrace(TNC, Buffer, MsgLen - 1);
// Release Session
// Release Session3
if (TNC->Streams[0].Connected)
{
// Create a traffic record
hookL4SessionDeleted(TNC, STREAM);
char logmsg[120];
time_t Duration;
Duration = time(NULL) - STREAM->ConnectTime;
if (Duration == 0)
Duration = 1;
sprintf(logmsg,"Port %2d %9s Bytes Sent %d BPS %d Bytes Received %d BPS %d Time %d Seconds",
TNC->Port, STREAM->RemoteCall,
STREAM->BytesTXed, (int)(STREAM->BytesTXed/Duration),
STREAM->BytesRXed, (int)(STREAM->BytesRXed/Duration), (int)Duration);
Debugprintf(logmsg);
STREAM->ConnectTime = 0; // Prevent retrigger
}
@ -3879,12 +3810,13 @@ VOID ARDOPProcessDataPacket(struct TNCINFO * TNC, UCHAR * Type, UCHAR * Data, in
return;
}
STREAM->bytesRXed += Length;
STREAM->BytesRXed += Length;
Data[Length] = 0;
Debugprintf("ARDOP: RXD %d bytes", Length);
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - STREAM->BytesOutstanding, STREAM->bytesRXed, STREAM->BytesOutstanding);
STREAM->BytesTXed - STREAM->BytesOutstanding, STREAM->BytesRXed, STREAM->BytesOutstanding);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
@ -3908,7 +3840,6 @@ VOID ARDOPProcessDataPacket(struct TNCINFO * TNC, UCHAR * Type, UCHAR * Data, in
char * ptr2;
char c;
int Len = Length;
char Call[10] = "";
Debugprintf(Data);
@ -3981,14 +3912,7 @@ VOID ARDOPProcessDataPacket(struct TNCINFO * TNC, UCHAR * Type, UCHAR * Data, in
buffptr->LENGTH = 16 + MSGHDDRLEN + APLen;
time(&buffptr->Timestamp);
memcpy(Call,ptr1, 9);
strlop(Call, '>');
UpdateMH(TNC, Call, '!', 'I');
BPQTRACE((MESSAGE *)buffptr, TRUE);
ReleaseBuffer(buffptr);
}
else
{
@ -5033,7 +4957,7 @@ tcpHostFrame:
WritetoTrace(TNC, Buffer, len);
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->PacketsSent = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->PacketsSent = 0;
memcpy(Call, &Buffer[19], 10);
ptr = strchr(Call, ' ');
@ -5106,7 +5030,7 @@ tcpHostFrame:
{
char AppName[13];
memcpy(AppName, &ApplPtr[App * sizeof(struct CMDX)], 12);
memcpy(AppName, &ApplPtr[App * sizeof(CMDX)], 12);
AppName[12] = 0;
// Make sure app is available
@ -5765,7 +5689,8 @@ VOID ARDOPSCSPoll(struct TNCINFO * TNC)
// Probably only for Teensy with ESP01. Runs SCS Emulator over a TCP Link
VOID SerialConnecttoTCPThread(VOID * Param);
VOID SerialConnecttoTCPThread(struct TNCINFO * TNC);
int SerialConnecttoTCP(struct TNCINFO * TNC)
{
@ -5773,9 +5698,9 @@ int SerialConnecttoTCP(struct TNCINFO * TNC)
return 0;
}
VOID SerialConnecttoTCPThread(VOID * Param)
VOID SerialConnecttoTCPThread(struct TNCINFO * TNC)
{
struct TNCINFO * TNC = (struct TNCINFO *) Param;
char Msg[255];
int i;
u_long param = 1;
@ -5974,8 +5899,8 @@ VOID ARAXINIT(struct PORTCONTROL * PORT)
char Msg[80] = "";
memcpy(Msg, PORT->PORTDESCRIPTION, 30);
strcat(Msg, "\n);
sprintf(Msg, "%s\n", Msg);
WritetoConsoleLocal(Msg);
}

View file

@ -19,7 +19,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define _CRT_SECURE_NO_DEPRECATE
#include "cheaders.h"
#include "CHeaders.h"
#include "bpqmail.h"
#ifdef WIN32
@ -116,9 +116,7 @@ int SendWebMailHeader(char * Reply, char * Key, struct HTTPConnectionInfo * Sess
struct UserInfo * FindBBS(char * Name);
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);
int MailAPIProcessHTTPMessage(char * response, char * Method, char * URL, char * request, BOOL LOCAL, char * Param);
char UNC[] = "";
char CHKD[] = "checked=checked ";
@ -160,7 +158,6 @@ char MailPage[] = "<html><head><title>%s's BBS Web Server</title>"
"<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>"
"<td><a href=/Mail/HK?%s>Housekeeping</a></td>"
"<td><a href=/Mail/WP?%s>WP Update</a></td>"
"<td><a href=/Webmail>WebMail</a></td>"
"<td><a href=/>Node Menu</a></td>"
"</tr></table>";
@ -181,14 +178,13 @@ char RefreshMainPage[] = "<html><head>"
"<td><a href=/Mail/Wel?%s>Welcome Msgs & Prompts</a></td>"
"<td><a href=/Mail/HK?%s>Housekeeping</a></td>"
"<td><a href=/Mail/WP?%s>WP Update</a></td>"
"<td><a href=/Webmail>WebMail</a></td>"
"<td><a href=/>Node Menu</a></td>"
"</tr></table>";
char StatusPage [] =
"<form style=\"font-family: monospace; text-align: center\" method=post action=/Mail/DisSession?%s>"
"<br>User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Callsign&nbsp;&nbsp; Stream &nbsp;Queue &nbsp;Sent &nbsp;Rxed<br>"
"<br>User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Callsign&nbsp;&nbsp; Stream Queue<br>"
"<select style=\"font-family: monospace;\" tabindex=1 size=10 name=call>";
char StreamEnd[] =
@ -407,20 +403,41 @@ int SendHeader(char * Reply, char * Key)
void ConvertTitletoUTF8(WebMailInfo * WebMail, char * Title, char * UTF8Title, int Len)
{
Len = strlen(Title);
if (WebIsUTF8(Title, Len) == FALSE)
if (WebIsUTF8(Title, (int)strlen(Title)) == FALSE)
{
int code = TrytoGuessCode(Title, Len);
// With Windows it is simple - convert using current codepage
// I think the only reliable way is to convert to unicode and back
if (code == 437)
Len = Convert437toUTF8(Title, Len, UTF8Title);
else if (code == 1251)
Len = Convert1251toUTF8(Title, Len, UTF8Title);
else
Len = Convert1252toUTF8(Title, Len, UTF8Title);
int origlen = (int)strlen(Title) + 1;
#ifdef WIN32
WCHAR BufferW[128];
int wlen;
int len = origlen;
UTF8Title[Len] = 0;
wlen = MultiByteToWideChar(CP_ACP, 0, Title, len, BufferW, origlen * 2);
len = WideCharToMultiByte(CP_UTF8, 0, BufferW, wlen, UTF8Title, origlen * 2, NULL, NULL);
#else
size_t left = Len - 1;
size_t len = origlen;
iconv_t * icu = WebMail->iconv_toUTF8;
if (WebMail->iconv_toUTF8 == NULL)
icu = WebMail->iconv_toUTF8 = iconv_open("UTF-8//IGNORE", "CP1252");
if (icu == (iconv_t)-1)
{
strcpy(UTF8Title, Title);
WebMail->iconv_toUTF8 = NULL;
return;
}
char * orig = UTF8Title;
iconv(icu, NULL, NULL, NULL, NULL); // Reset State Machine
iconv(icu, &Title, &len, (char ** __restrict__)&UTF8Title, &left);
#endif
}
else
strcpy(UTF8Title, Title);
@ -428,7 +445,7 @@ void ConvertTitletoUTF8(WebMailInfo * WebMail, char * Title, char * UTF8Title, i
BOOL GotFirstMessage = 0;
void ProcessMailHTTPMessage(struct HTTPConnectionInfo * Session, char * Method, char * URL, char * input, char * Reply, int * RLen, int InputLen, char * Token)
void ProcessMailHTTPMessage(struct HTTPConnectionInfo * Session, char * Method, char * URL, char * input, char * Reply, int * RLen, int InputLen)
{
char * Context = 0, * NodeURL;
int ReplyLen;
@ -458,13 +475,6 @@ void ProcessMailHTTPMessage(struct HTTPConnectionInfo * Session, char * Method,
}
if (_memicmp(URL, "/Mail/API/v1/", 13) == 0)
{
*RLen = MailAPIProcessHTTPMessage(Session, Reply, Method, URL, input, LOCAL, Context, Token);
return;
}
// There is a problem if Mail is reloaded without reloading the node
if (GotFirstMessage == 0)
@ -482,6 +492,12 @@ void ProcessMailHTTPMessage(struct HTTPConnectionInfo * Session, char * Method,
return;
}
if (_memicmp(URL, "/Mail/API/", 10) == 0)
{
*RLen = MailAPIProcessHTTPMessage(Reply, Method, URL, input, LOCAL, Context);
return;
}
if (strcmp(Method, "POST") == 0)
{
@ -1703,8 +1719,6 @@ VOID ProcessConfUpdate(struct HTTPConnectionInfo * Session, char * MsgPtr, char
free(Filters);
Filters = NULL;
UndoTransparency(input);
while (input)
{
// extract and validate before saving
@ -1718,7 +1732,7 @@ VOID ProcessConfUpdate(struct HTTPConnectionInfo * Session, char * MsgPtr, char
input = strstr(input, "&Type=");
if (Filter.Action == 'H' || Filter.Action == 'R' || Filter.Action == 'A')
if (Filter.Action == 'H' || Filter.Action == 'R')
{
Filter.Type = toupper(input[6]);
input = strstr(input, "&From=");
@ -1873,7 +1887,6 @@ VOID SaveFwdCommon(struct HTTPConnectionInfo * Session, char * MsgPtr, char * Re
GetCheckBox(input, "WarnNoRoute=", &WarnNoRoute);
GetCheckBox(input, "LocalTime=", &Localtime);
GetCheckBox(input, "SendPtoMultiple=", &SendPtoMultiple);
GetCheckBox(input, "FourCharCont=", &FOURCHARCONT);
// Reinitialise Aliases
@ -2223,21 +2236,21 @@ VOID ProcessUserUpdate(struct HTTPConnectionInfo * Session, char * MsgPtr, char
ptr1 = GetNextParam(&ptr2); // Last Listed
USER->lastmsg = atoi(ptr1);
ptr1 = GetNextParam(&ptr2); // Name
memcpy(USER->Name, ptr1, 17);
strcpy(USER->Name, ptr1);
ptr1 = GetNextParam(&ptr2); // Pass
memcpy(USER->pass, ptr1, 12);
strcpy(USER->pass, ptr1);
ptr1 = GetNextParam(&ptr2); // CMS Pass
if (memcmp("****************", ptr1, strlen(ptr1) != 0))
{
memcpy(USER->CMSPass, ptr1, 15);
strcpy(USER->CMSPass, ptr1);
}
ptr1 = GetNextParam(&ptr2); // QTH
memcpy(USER->Address, ptr1, 60);
strcpy(USER->Address, ptr1);
ptr1 = GetNextParam(&ptr2); // ZIP
memcpy(USER->ZIP, ptr1, 8);
strcpy(USER->ZIP, ptr1);
ptr1 = GetNextParam(&ptr2); // HomeBBS
memcpy(USER->HomeBBS, ptr1, 40);
strcpy(USER->HomeBBS, ptr1);
_strupr(USER->HomeBBS);
SaveUserDatabase();
@ -2443,8 +2456,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 > GetMessageSlotFromMessageNumber(Msg->number))
FirstMessageIndextoForward = GetMessageSlotFromMessageNumber(Msg->number);
if (FirstMessageIndextoForward > Msg->number)
FirstMessageIndextoForward = Msg->number;
}
*RLen = SendMessageDetails(Msg, Reply, Session->Key);
@ -2703,7 +2716,6 @@ VOID SendFwdMainPage(char * Reply, int * RLen, char * Key)
(WarnNoRoute) ? CHKD : UNC,
(Localtime) ? CHKD : UNC,
(SendPtoMultiple) ? CHKD : UNC,
(FOURCHARCONT) ? CHKD : UNC,
ALIASES);
}
@ -2759,19 +2771,6 @@ VOID SendUIPage(char * Reply, int * ReplyLen, char * Key)
*ReplyLen = Len;
}
void ConvertSpaceTonbsp(char * msg)
{
// Replace any space with &nbsp;
char * ptr;
while (ptr = strchr(msg, ' '))
{
memmove(ptr + 5, ptr, strlen(ptr) + 1);
memcpy(ptr, "&nbsp;", 6);
}
}
VOID SendStatusPage(char * Reply, int * ReplyLen, char * Key)
{
int Len;
@ -2793,8 +2792,6 @@ VOID SendStatusPage(char * Reply, int * ReplyLen, char * Key)
if (!conn->Active)
{
strcpy(msg,"Idle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n");
}
@ -2808,16 +2805,16 @@ VOID SendStatusPage(char * Reply, int * ReplyLen, char * Key)
strcpy(Name, conn->UserPointer->Name);
Name[9] = 0;
i=sprintf_s(msg, sizeof(msg), "%-12s %-9s %3d %6d%6d%6d\r\n",
i=sprintf_s(msg, sizeof(msg), "%s%s%s%s%2d&nbsp;%5d\r\n",
Name,
&TenSpaces[strlen(Name) * 6],
conn->UserPointer->Call,
&TenSpaces[strlen(conn->UserPointer->Call) * 6],
conn->BPQStream,
conn->OutputQueueLength - conn->OutputGetPointer, conn->bytesSent, conn->bytesRxed);
conn->OutputQueueLength - conn->OutputGetPointer);
}
}
}
ConvertSpaceTonbsp(msg);
Len += sprintf(&Reply[Len], StatusLine, conn->BPQStream, msg);
}
@ -2995,8 +2992,6 @@ int ProcessWebmailWebSock(char * MsgPtr, char * OutBuffer);
static char PipeFileName[] = "\\\\.\\pipe\\BPQMailWebPipe";
// Constants
static DWORD WINAPI InstanceThread(LPVOID lpvParam)
// This routine is a thread processing function to read from and reply to a client
@ -3017,7 +3012,6 @@ static DWORD WINAPI InstanceThread(LPVOID lpvParam)
char URL[100001];
char * Context, * Method;
int n;
char token[16]= "";
char * ptr;
@ -3053,40 +3047,18 @@ static DWORD WINAPI InstanceThread(LPVOID lpvParam)
}
else
{
// look for auth header
const char * auth_header = "Authorization: Bearer ";
char * token_begin = strstr(MsgPtr, auth_header);
int Flags = 0;
strcpy(URL, MsgPtr);
// Node Flags isn't currently used
ptr = strstr(URL, " HTTP");
if (token_begin)
{
// Using Auth Header
if (ptr)
*ptr = 0;
// Extract the token from the request (assuming it's present in the request headers)
Method = strtok_s(URL, " ", &Context);
token_begin += strlen(auth_header); // Move to the beginning of the token
strncpy(token, token_begin, 13);
token[13] = '\0'; // Null-terminate the token
}
ProcessMailHTTPMessage(&Session, Method, Context, MsgPtr, OutBuffer, &OutputLen, InputLen);
}
strcpy(URL, MsgPtr);
ptr = strstr(URL, " HTTP");
if (ptr)
*ptr = 0;
Method = strtok_s(URL, " ", &Context);
ProcessMailHTTPMessage(&Session, Method, Context, MsgPtr, OutBuffer, &OutputLen, InputLen, token);
WriteFile(hPipe, &Session, sizeof (struct HTTPConnectionInfo), &n, NULL);
WriteFile(hPipe, OutBuffer, OutputLen, &cbWritten, NULL);

File diff suppressed because it is too large Load diff

BIN
BPQChat.aps Normal file

Binary file not shown.

View file

@ -162,7 +162,7 @@ BEGIN
WS_VSCROLL
DEFPUSHBUTTON "Save Welcome Message",SAVEWELCOME,140,296,91,14,
BS_CENTER | BS_VCENTER
LTEXT " If the node is not directly connectable (ie is not in your NODES table) you can add a connect script. This consists of a series of commands separared by |, eg NOTCHT:G8BPQ-4|C 3 GM8BPQ-9|CHAT",
LTEXT " If the node is not directly connectable (ie is not in your NODES table) you can add a connect script. This consists of a series of commands seperared by |, eg NOTCHT:G8BPQ-4|C 3 GM8BPQ-9|CHAT",
IDC_STATIC,9,52,355,24
END

374
BPQChat.vcproj Normal file
View file

@ -0,0 +1,374 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="BPQChat"
ProjectGUID="{2BDD2C8A-2B4A-496C-A2EA-6B49AA0670B1}"
RootNamespace="BPQChat"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
CommandLine=""
Outputs=""
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\CInclude;..\CommonSource;..\BPQChat"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USE_32BIT_TIME_T"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\lib\bpq32.lib wsock32.lib comctl32.lib winmm.lib ..\lib\libconfig.lib DbgHelp.lib"
OutputFile="c:\DevProgs\bpq32\BPQChat.exe"
LinkIncremental="2"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(IntDir)$(TargetName).pdb"
GenerateMapFile="true"
MapFileName="$(IntDir)\BBSListings\BPQChat.map"
MapExports="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
CommandLine=""
/>
<Tool
Name="VCCustomBuildTool"
CommandLine=""
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
WholeProgramOptimization="false"
AdditionalIncludeDirectories="..\CInclude;..\CommonSource;..\BPQChat"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USE_32BIT_TIME_T"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
AssemblerOutput="2"
AssemblerListingLocation="$(IntDir)\BBSListings\"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="0"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\lib\bpq32.lib wsock32.lib comctl32.lib winmm.lib ..\lib\libconfig.lib DbgHelp.lib"
OutputFile="c:\DevProgs\bpq32\BPQChat.exe"
LinkIncremental="1"
GenerateDebugInformation="false"
ProgramDatabaseFile="$(IntDir)$(TargetName).pdb"
GenerateMapFile="true"
MapFileName="$(IntDir)\BBSListings\BPQChat.map"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
LinkTimeCodeGeneration="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\bpqchat.c"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\ChatDebug.c"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\ChatHTMLConfig.c"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\ChatMonitor.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\ChatMultiConsole.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\ChatUtilities.c"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\ChatUtils.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\HanksRT.c"
>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\HTMLCommonCode.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\"
/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\BPQChat.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

766
BPQINP3.c

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -1133,29 +1133,6 @@
// Fix possible failure to update last listed count when user disconnects without using B command
// Add short random delay (<30 secs) when forward new Messages immediately is enabled (35)
// Fix Connect Script IDLETIME (38)
// Add "Mail Mgmt" to Webmail menu bar and "WebMail" to Mail Mgmt Menu (39)
// Improve "New User" frequency determination (39)
// Allow selection of 2 or 4 character country codes for forward processing (39)
// Fix Send P to multiple BBS's when routing on HR (40)
// Rewrite PG server code on Lunux (41)
// Fix SendPToMultiple not stopping at Implied AT match (45)
// Log Our HA when checking for flood bulls (45)
// Semaphore calls to SaveConfig
// Include SERVIC as valid from call (for Winlink Service messages) (49)
// Attempt to detect line draw characters in Webmail (50)
// Fix sending ampr.org mail when RMS is not enabled (51)
// Send forwarding info to packetnodes.spots.radio database (51)
// Fix bug in WP Message processing (56)
// Fix treating addresses ending in WW as Internet (57)
// Run sending to packetnodes.spots.radio in a separate thread (61)
// Fix loading ISP Account Name from config file (67)
// 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)
// 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"
@ -1173,10 +1150,6 @@ FARPROCX pDllBPQTRACE;
FARPROCZ pGetLOC;
FARPROCX pRefreshWebMailIndex;
FARPROCX pRunEventProgram;
FARPROCX pGetPortFrequency;
FARPROCX pSendWebRequest;
FARPROCX pGetLatLon;
FARPROCX pGetPortHardwareType;
BOOL WINE = FALSE;
@ -1401,7 +1374,6 @@ char * CheckToAddress(CIRCUIT * conn, char * Addr);
BOOL CheckifPacket(char * Via);
int GetHTMLForms();
VOID GetPGConfig();
void SendBBSDataToPktMap();
struct _EXCEPTION_POINTERS exinfox;
@ -1412,7 +1384,7 @@ DWORD Stack[16];
BOOL Restarting = FALSE;
void Dump_Process_State(struct _EXCEPTION_POINTERS * exinfo, char * Msg)
Dump_Process_State(struct _EXCEPTION_POINTERS * exinfo, char * Msg)
{
unsigned int SPPtr;
unsigned int SPVal;
@ -1548,11 +1520,7 @@ VOID WriteMiniDump()
}
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line)
void GetSemaphore(struct SEM * Semaphore, int ID)
{
//
// Wait for it to be free
@ -1733,7 +1701,6 @@ int APIENTRY WinMain(HINSTANCE hInstance,
// SaveUserDatabase();
SaveMessageDatabase();
SaveBIDDatabase();
SaveRestartData();
configSaved = 1;
SaveConfig(ConfigName);
@ -1957,12 +1924,6 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
pGetLOC = GetProcAddress(ExtDriver,"_GetLOC@0");
pRefreshWebMailIndex = GetProcAddress(ExtDriver,"_RefreshWebMailIndex@0");
pRunEventProgram = GetProcAddress(ExtDriver,"_RunEventProgram@8");
pGetPortFrequency = GetProcAddress(ExtDriver,"_GetPortFrequency@8");
pSendWebRequest = GetProcAddress(ExtDriver,"_SendWebRequest@16");
pGetLatLon = GetProcAddress(ExtDriver,"_GetLatLon@8");
pGetPortHardwareType = GetProcAddress(ExtDriver,"_GetPortHardwareType@4");
if (pGetLOC)
{
@ -2209,13 +2170,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Debugprintf("|Enter HouseKeeping");
DoHouseKeeping(FALSE);
}
if (APIClock < NOW)
{
SendBBSDataToPktMap();
APIClock = NOW + 7200; // Every 2 hours
}
tm = gmtime(&NOW);
if (tm->tm_wday == 0) // Sunday
@ -2849,12 +2803,6 @@ gotAddr:
EndDialog(hDlg, LOWORD(wParam));
#ifndef NOMQTT
if (MQTT)
MQTTMessageEvent(Msg);
#endif
return TRUE;
}
@ -3032,9 +2980,9 @@ int RefreshMainWindow()
strcpy(msg,"Logging in");
else
{
i=sprintf_s(msg, sizeof(msg), "%-10s %-10s %2d %-10s%5d %5d %5d",
i=sprintf_s(msg, sizeof(msg), "%-10s %-10s %2d %-10s%5d",
conn->UserPointer->Name, conn->UserPointer->Call, conn->BPQStream,
"BBS", conn->OutputQueueLength - conn->OutputGetPointer, conn->bytesSent, conn->bytesRxed);
"BBS", conn->OutputQueueLength - conn->OutputGetPointer);
}
}
}
@ -3095,7 +3043,7 @@ static PSOCKADDR_IN psin;
SOCKET sock;
void GetRestartData();
BOOL Initialise()
{
@ -3111,8 +3059,6 @@ BOOL Initialise()
GetTimeZoneInformation(&TimeZoneInformation);
Debugprintf("%d", sizeof(struct MsgInfo));
_tzset();
_MYTIMEZONE = timezone;
_MYTIMEZONE = TimeZoneInformation.Bias * 60;
@ -3283,8 +3229,6 @@ BOOL Initialise()
GetBadWordFile();
GetHTMLForms();
GetRestartData();
UsingingRegConfig = FALSE;
// Make sure SYSOPCALL is set
@ -3426,8 +3370,6 @@ BOOL Initialise()
CreatePipeThread();
GetPGConfig();
APIClock = 0;
return TRUE;
}

1091
BPQMail.rc

File diff suppressed because it is too large Load diff

493
BPQMail.vcproj Normal file
View file

@ -0,0 +1,493 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="BPQMail"
ProjectGUID="{3766AA10-C777-4ED8-A83D-F1452DE9B665}"
RootNamespace="TelnetServer"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="0"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
CommandLine=""
Outputs=""
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\CKernel;..\CInclude;..\CommonSource;..\BPQMail"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USE_32BIT_TIME_T"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="..\Include"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\lib\bpq32.lib wsock32.lib comctl32.lib winmm.lib ..\lib\libconfig.lib DbgHelp.lib"
OutputFile="c:\DevProgs\bpq32\BPQMail.exe"
LinkIncremental="2"
IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames="LIBCMT"
GenerateDebugInformation="true"
ProgramDatabaseFile="$(IntDir)$(TargetName).pdb"
GenerateMapFile="true"
MapFileName="$(IntDir)\BBSListings\bpqmail.map"
MapExports="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
CommandLine=""
/>
<Tool
Name="VCCustomBuildTool"
CommandLine=""
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
WholeProgramOptimization="false"
AdditionalIncludeDirectories="..\CKernel;..\CInclude;..\CommonSource;..\BPQMail"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USE_32BIT_TIME_T"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="..\Include"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\lib\bpq32.lib wsock32.lib comctl32.lib winmm.lib ..\lib\libconfig.lib DbgHelp.lib"
OutputFile="c:\DevProgs\bpq32\BPQMail.exe"
LinkIncremental="1"
GenerateDebugInformation="true"
ProgramDatabaseFile="c:\DevProgs\bpq32\BPQMail.pdb"
GenerateMapFile="true"
MapFileName="c:\DevProgs\bpq32\BPQMail.map"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
LinkTimeCodeGeneration="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\CommonSource\Alloc.c"
>
</File>
<File
RelativePath="..\CommonSource\BBSHTMLConfig.c"
>
</File>
<File
RelativePath="..\CommonSource\BBSUtilities.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="2"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\BPQMail.c"
>
</File>
<File
RelativePath=".\BPQMailConfig.c"
>
</File>
<File
RelativePath="..\CommonSource\CMSAuth.c"
>
</File>
<File
RelativePath="..\CommonSource\FBBRoutines.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\Housekeeping.c"
>
</File>
<File
RelativePath="..\CommonSource\HTMLCommonCode.c"
>
</File>
<File
RelativePath="..\CommonSource\LzFind.c"
>
</File>
<File
RelativePath="..\CommonSource\lzhuf32.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="2"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\LzmaDec.c"
>
</File>
<File
RelativePath="..\CommonSource\LzmaEnc.c"
>
</File>
<File
RelativePath="..\CommonSource\LzmaLib.c"
>
</File>
<File
RelativePath=".\mailapi.c"
>
</File>
<File
RelativePath="..\CommonSource\MailCommands.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\MailDataDefs.c"
>
</File>
<File
RelativePath="..\CommonSource\MailRouting.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\MailTCP.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\MBLRoutines.c"
>
</File>
<File
RelativePath=".\Monitor.c"
>
</File>
<File
RelativePath="..\CommonSource\Multicast.c"
>
</File>
<File
RelativePath=".\MultiConsole.c"
>
</File>
<File
RelativePath="..\CommonSource\NNTPRoutines.c"
>
</File>
<File
RelativePath="..\CommonSource\UIRoutines.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\utf8Routines.c"
>
</File>
<File
RelativePath="..\CommonSource\WebMail.c"
>
</File>
<File
RelativePath="..\CommonSource\WPRoutines.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
ObjectFile="$(IntDir)\$(InputName)1.obj"
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\bpqmailrc.h"
>
</File>
<File
RelativePath="..\CommonSource\Versions.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath=".\BPQMail.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

207
BPQMail.vcxproj Normal file
View file

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{3766AA10-C777-4ED8-A83D-F1452DE9B665}</ProjectGuid>
<RootNamespace>TelnetServer</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>15.0.28307.799</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<CustomBuildStep>
<Command />
</CustomBuildStep>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\CKernel;..\CInclude;..\CommonSource;..\BPQMail;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>..\lib\bpq32.lib;wsock32.lib;comctl32.lib;winmm.lib;..\lib\libconfig.lib;DbgHelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\DevProgs\bpq32\BPQMail.exe</OutputFile>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>$(IntDir)BBSListings\bpqmail.map</MapFileName>
<MapExports>true</MapExports>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<PreBuildEvent>
<Command />
</PreBuildEvent>
<CustomBuildStep>
<Command />
</CustomBuildStep>
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\CKernel;..\CInclude;..\CommonSource;..\BPQMail;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>CompileAsC</CompileAs>
</ClCompile>
<ResourceCompile>
<AdditionalIncludeDirectories>..\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>..\lib\bpq32.lib;wsock32.lib;comctl32.lib;winmm.lib;..\lib\libconfig.lib;DbgHelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\DevProgs\bpq32\BPQMail.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>c:\DevProgs\bpq32\BPQMail.pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>c:\DevProgs\bpq32\BPQMail.map</MapFileName>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration />
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Alloc.c" />
<ClCompile Include="BBSHTMLConfig.c" />
<ClCompile Include="BBSUtilities.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">All</AssemblerOutput>
<AssemblerListingLocation Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)</AssemblerListingLocation>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
<ClCompile Include="BPQMail.c" />
<ClCompile Include="BPQMailConfig.c" />
<ClCompile Include="CMSAuth.c" />
<ClCompile Include="FBBRoutines.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
<ClCompile Include="Housekeeping.c" />
<ClCompile Include="HTMLCommonCode.c" />
<ClCompile Include="LzFind.c" />
<ClCompile Include="lzhuf32.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">All</AssemblerOutput>
<AssemblerListingLocation Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)</AssemblerListingLocation>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
<ClCompile Include="LzmaDec.c" />
<ClCompile Include="LzmaEnc.c" />
<ClCompile Include="LzmaLib.c" />
<ClCompile Include="MailCommands.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
<ClCompile Include="MailDataDefs.c" />
<ClCompile Include="MailRouting.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
<ClCompile Include="MailTCP.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
<ClCompile Include="MBLRoutines.c" />
<ClCompile Include="Monitor.c" />
<ClCompile Include="Multicast.c" />
<ClCompile Include="MultiConsole.c" />
<ClCompile Include="NNTPRoutines.c" />
<ClCompile Include="UIRoutines.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
<ClCompile Include="utf8Routines.c" />
<ClCompile Include="WebMail.c" />
<ClCompile Include="WPRoutines.c">
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>
<XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="bpqmailrc.h" />
<ClInclude Include="Versions.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="BPQMail.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

113
BPQMail.vcxproj.filters Normal file
View file

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Alloc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BBSHTMLConfig.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BBSUtilities.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQMail.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQMailConfig.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CMSAuth.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FBBRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Housekeeping.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HTMLCommonCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzFind.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="lzhuf32.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzmaDec.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzmaEnc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzmaLib.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailCommands.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailDataDefs.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailRouting.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailTCP.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MBLRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Monitor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Multicast.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MultiConsole.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NNTPRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UIRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utf8Routines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WebMail.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WPRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="bpqmailrc.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Versions.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="BPQMail.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

4
BPQMail.vcxproj.user Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

View file

@ -1867,7 +1867,6 @@ VOID SaveFWDConfig(HWND hDlg)
MaxRXSize = GetDlgItemInt(hDlg, IDC_MAXRECV, &OK, FALSE);
MaxAge = GetDlgItemInt(hDlg, IDC_MAXAGE, &OK, FALSE);
SendPtoMultiple = IsDlgButtonChecked(hDlg, IDC_MULTIP);
FOURCHARCONT = IsDlgButtonChecked(hDlg, IDC_FOURCHARCONTINENT);
// Reinitialise Aliases
@ -3250,7 +3249,6 @@ INT_PTR CALLBACK FwdEditDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARA
CheckDlgButton(hDlg, IDC_WARNNOROUTE, WarnNoRoute);
CheckDlgButton(hDlg, IDC_USELOCALTIME, Localtime);
CheckDlgButton(hDlg, IDC_MULTIP, SendPtoMultiple);
CheckDlgButton(hDlg, IDC_FOURCHARCONTINENT, FOURCHARCONT);
CurrentBBS = NULL;

View file

@ -319,7 +319,6 @@
#define ID_MULTICAST 40024
#define IDC_DEFAULTNOWINLINK 41001
#define IDC_MULTIP 41002
#define IDC_FOURCHARCONTINENT 41003
// Next default values for new objects
//

View file

@ -36,7 +36,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
//#include "vmm.h"
#include "cheaders.h"
#include "CHeaders.h"
extern int SENDNETFRAME();
@ -45,8 +45,6 @@ extern VOID Q_ADD();
VOID __cdecl Debugprintf(const char * format, ...);
TRANSPORTENTRY * NRRSession;
int NRRID = 1; // Id to correlate requests and responses
/*
datagrams (and other things) to be transported in Netrom L3 frames.
@ -77,9 +75,7 @@ VOID NRRecordRoute(UCHAR * Buff, int Len)
{
UCHAR * BUFFER = GetBuff();
UCHAR * ptr1;
struct _MESSAGE * Msg1;
time_t Now = time(NULL);
int ID = (Msg->L4TXNO << 8) | Msg->L4RXNO;
struct _MESSAGE * Msg;
if (BUFFER == NULL)
return;
@ -88,18 +84,7 @@ VOID NRRecordRoute(UCHAR * Buff, int Len)
*ptr1++ = 0xf0; // PID
if (BUFFER == NULL)
return;
ptr1 = &BUFFER[MSGHDDRLEN];
*ptr1++ = 0xf0; // PID
if (ID == NRRSession->NRRID)
ptr1 += sprintf(ptr1, "NRR Response in %d Secs:", (int)(Now - NRRSession->NRRTime));
else
ptr1 += sprintf(ptr1, "NRR Response:", (int)(Now - NRRSession->NRRTime));
ptr1 += sprintf(ptr1, "NRR Response:");
Buff += 21 + MSGHDDRLEN;
Len -= (21 + MSGHDDRLEN);
@ -112,7 +97,7 @@ VOID NRRecordRoute(UCHAR * Buff, int Len)
if ((Buff[7] & 0x80) == 0x80) // Check turnround bit
*ptr1++ = '*';
Buff += 8;
Buff+=8;
Len -= 8;
}
@ -126,11 +111,11 @@ VOID NRRecordRoute(UCHAR * Buff, int Len)
Len = (int)(ptr1 - BUFFER);
Msg1 = (struct _MESSAGE *)BUFFER;
Msg = (struct _MESSAGE *)BUFFER;
Msg1->LENGTH = Len;
Msg->LENGTH = Len;
Msg1->CHAIN = NULL;
Msg->CHAIN = NULL;
C_Q_ADD(&NRRSession->L4TX_Q, (UINT *)BUFFER);
@ -198,16 +183,11 @@ VOID SendNRRecordRoute(struct DEST_LIST * DEST, TRANSPORTENTRY * Session)
Msg->L4ID = 1;
Msg->L4INDEX = 0;
Msg->L4FLAGS = 0;
Msg->L4TXNO = NRRID << 8;
Msg->L4RXNO = NRRID & 0xff;
memcpy(Msg->L4DATA, MYCALL, 7);
Msg->L4DATA[7] = Stream + 28;
Msg->LENGTH = 8 + 21 + MSGHDDRLEN;
Session->NRRTime = time(NULL);
Session->NRRID = NRRID++;
C_Q_ADD(&DEST->DEST_Q, Msg);
}

12
BPQRemotePTT.cfg Normal file
View file

@ -0,0 +1,12 @@
main :
{
BPQHostIP = "192.168.1.64";
COM1 = "COM43";
COM2 = "";
COM3 = "";
COM4 = "";
HamLibPort1 = 4534;
HamLibPort2 = 0;
HamLibPort3 = 0;
HamLibPort4 = 0;
};

228
BPQRemotePTT.vcproj Normal file
View file

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="BPQRemotePTT"
ProjectGUID="{E9A342AF-65CF-4E38-9079-216264179675}"
RootNamespace="BPQRemotePTT"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\xxx"
IntermediateDirectory="c:\dev\msdev2005\intermed\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/BPQRemotePTT.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/BPQRemotePTT.pch"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
ProgramDataBaseFileName="$(IntDir)\"
WarningLevel="3"
SuppressStartupBanner="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="2057"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="WS2_32.Lib Psapi.lib ..\lib\libconfigd.lib"
OutputFile="c:\DevProgs\bpq32\BPQRemotePTT.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/bpq32.pdb"
GenerateMapFile="true"
MapFileName="c:\devprogs\bpq32\bpqpp.map"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Debug/BPQRemotePTT.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory=".\xxx"
IntermediateDirectory="c:\msdev2005\intermed\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Release/BPQRemotePTT.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\cinclude"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile="C:\msdev2005\Intermed\Release/BPQRemotePTT.pch"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
ProgramDataBaseFileName="$(IntDir)\"
WarningLevel="3"
SuppressStartupBanner="true"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="2057"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="WS2_32.Lib Psapi.lib ..\lib\libconfig.lib"
OutputFile="c:\DevProgs\bpq32\BPQRemotePTT.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
ProgramDatabaseFile=".\Release/BPQRemotePTT.pdb"
GenerateMapFile="true"
MapFileName="c:\devprogs\bpq32\BPQRemotePTT.map"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Release/BPQRemotePTT.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
>
<File
RelativePath=".\BPQRemotePTT.c"
>
</File>
<File
RelativePath=".\BPQRemotePTT.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -214,7 +214,7 @@ LRESULT APIENTRY InputProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ;
LRESULT APIENTRY MonProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ;
extern struct CMDX COMMANDS[];
extern CMDX COMMANDS[];
extern int APPL1;
static HMENU trayMenu;
@ -2973,30 +2973,6 @@ 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;
}
}

230
BPQWinAPP.vcproj Normal file
View file

@ -0,0 +1,230 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="BPQWinAPP"
ProjectGUID="{005A91EA-3A00-4FB4-ADD9-EB78DBFA2B81}"
RootNamespace="BPQWinAPP"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="C:\Dev\Msdev200\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/BPQWinAPP.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="C:\Users\johnw\OneDrive\Dev\Source\bpq32\Commonsource;C:\Users\johnw\OneDrive\Dev\Source\bpq32\CInclude"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
RuntimeLibrary="1"
PrecompiledHeaderFile=".\Debug/BPQWinAPP.pch"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
ProgramDataBaseFileName="$(IntDir)\"
WarningLevel="3"
SuppressStartupBanner="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="2057"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\lib\bpq32.lib DbgHelp.lib"
OutputFile="c:\DevProgs\bpq32\bpq32.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/bpq32.pdb"
GenerateMapFile="true"
SubSystem="2"
StackReserveSize="0"
StackCommitSize="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Debug/BPQWinAPP.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Release/BPQWinAPP.tlb"
HeaderFileName=""
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="C:\Users\johnw\OneDrive\Dev\Source\bpq32\Commonsource"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
PrecompiledHeaderFile="C:\msdev2005\Intermed\Release/BPQWinAPP.pch"
AssemblerListingLocation="$(IntDir)\"
ObjectFile="$(IntDir)\"
ProgramDataBaseFileName="$(IntDir)\"
WarningLevel="3"
SuppressStartupBanner="true"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="2057"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="..\lib\bpq32.lib DbgHelp.lib"
OutputFile="c:\DevProgs\bpq32\bpq32.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
ProgramDatabaseFile=".\Release/bpq32.pdb"
GenerateMapFile="true"
MapFileName="c:\DevProgs\bpq32\bpq32app.map"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
SuppressStartupBanner="true"
OutputFile=".\Release/BPQWinAPP.bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
>
<File
RelativePath=".\BPQWinAPP.c"
>
</File>
<File
RelativePath=".\BPQWinAPP.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -56,7 +56,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define _CRT_SECURE_NO_DEPRECATE
#include "cheaders.h"
#include "CHeaders.h"
#ifndef WIN32
#include <sys/socket.h>
#include <netinet/in.h>
@ -87,7 +87,7 @@ void CreateMHWindow();
int Update_MH_List(struct in_addr ipad, char * call, char proto);
static BOOL ReadConfigFile(int Port);
int ConnecttoAGW(int port);
int ConnecttoAGW();
int ProcessReceivedData(int bpqport);
static int ProcessLine(char * buf, int Port, BOOL CheckPort);

212
Bpq32.c
View file

@ -3,7 +3,7 @@ Copyright 2001-2022 John Wiseman G8BPQ
This file is part of LinBPQ/BPQ32.
LinBPQ/BPQ32 is free software: you can redistribute it and/or modifyextern int HTTP
LinBPQ/BPQ32 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.
@ -1086,7 +1086,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Add ? and * wildcards to NODES command (74)
// Add Port RADIO config parameter (74)
// Version 6.0.24.1 August 2023
// Version 6.0.24.1 August 2024
// Apply NODES command wildcard to alias as well a call (2)
// Add STOPPORT/STARTPORT to VARA Driver (2)
@ -1180,7 +1180,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Fix processing of the Winlink API /account/exists response (82)
// Fix sending CTEXT to L4 connects to Node when FULL_CTEXT is not set
// Version 6.0.25.1 Sept 2025
// Version 6.0.25.?
// Fix 64 bit compatibility problems in SCSTracker and UZ7HO drivers
// Add Chat PACLEN config (5)
@ -1212,92 +1212,11 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Add NodeAPI call sendLinks and remove get from other calls (32)
// Improve validation of Web Beacon Config (33)
// Support SNMP via host ip stack as well as IPGateway (34)
// Switch APRS Map to OSM tile servers (36)
// Fix potential buffer overflow in Telnet login (36)
// Allow longer serial device names (37)
// Fix ICF8101 Mode setting (37)
// Kill link if we are getting repeated RR(F) after timeout
// (Indicating other station is seeing our RR(P) but not the resent I frame) (40)
// Change default of SECURETELNET to 1 (41)
// Add optional ATTACH time limit for ARDOP (42)
// Fix buffer overflow risk in HTTP Terminal(42)
// Fix KISSHF Interlock (43)
// Support other than channel A on HFKISS (43)
// Support additional port info reporting for M0LTE Map (44)
// Allow interlocking of KISS and Session mode ports (eg ARDOP and VARA) (45)
// Add ARDOP UI Packets to MH (45)
// Add support for Qtsm Mgmt Interface (45)
// NodeAPI improvements (46)
// Add MQTT Interface (46)
// Fix buffer leak in ARDOP code(46)
// Fix possible crash if MQTT not in use (47)
// Add optional ATTACH time limit for VARA (48)
// API format fixes (48)
// AGWAPI Add protection against accidental connects from a non-agw application (50)
// Save MH and NODES every hour (51)
// Fix handling long unix device names (now max 250 bytes) (52)
// Fix error reporting in api update (53)
// Coding changes to remove some compiler warnings (53, 54)
// Add MQTT reporting of Mail Events (54)
// Fix beaconong on KISSHF ports (55)
// Fix MailAPI msgs endpoint
// Attempt to fix NC going to wrong application. (57)
// Improve ARDOP end of session code (58)
// Run M0LTE Map reporting in a separate thread (59/60)
// Add RHP support for WhatsPac (59)
// Add timestamps to LIS monitor (60)
// Fix problem with L4 frames being delivered out of sequence (60)
// Add Compression of Netrom connections (62)
// Improve handling of Locked Routes (62)
// Add L4 RESET (Paula G8PZT's extension to NETROM)
// Fix problem using SENDRAW from BPQMail (63)
// Fix compatibility with latest ardopcf (64)
// Fix bug in RHP socket timeout code (65)
// Fix L4 RTT (66)
// 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)
// Support IPv6 for Telnet outward connects (72)
// Fix decaying NETROM routes (72)
// Add OnlyVer2point0 config command (72)
// Add option to allow AX/UDP on a network using NAT (72)
// Include AGWAPI fixes from Martin KD6YAM to enable use with Paracon terminal (72)
// Fix 64 bit compatiblility issues with AGWAPI (73)
// Fix KAM Pactor Interlock (73)
// Fix Node map reporting, broken in .73 (74)
// Fixes to build on FreeBSD and NetBSD from jg1uaa (77)
// 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)
// Version 6.0.26.?
// Fix for compiling with gcc15 (2)
// Fix possble stuck L2 session caused by window being set to zero (3)
// Improvments to INP3 (4, 5)
// Add Node API /api/tcpqueues (5)
// Add sending link events to OARC API (disabled by default) (6)
// Fix possible program error in Telnet_Connected (7)
// Close links when program is closed down (7)
// Fix possible problem with deleting routes when using both NODES and INP3 routing on same link (7)
// Add Paula's Netromx (allows connects to different applications using Node call) (8)
// Add Netrom over TCP (8)
// Fix FRMR caused by sending SREJ when no frames outstanding (8)
#define CKernel
@ -1391,9 +1310,6 @@ void * KISSHFExtInit(EXTPORTDATA * PortEntry);
void * WinRPRExtInit(EXTPORTDATA * PortEntry);
void * HSMODEMExtInit(EXTPORTDATA * PortEntry);
void * FreeDataExtInit(EXTPORTDATA * PortEntry);
void * SIXPACKExtInit(EXTPORTDATA * PortEntry);
VOID RealCloseAllPrograms();
extern char * ConfigBuffer; // Config Area
VOID REMOVENODE(dest_list * DEST);
@ -1404,8 +1320,6 @@ VOID ADIFWriteFreqList();
void SaveAIS();
void initAIS();
void initADSB();
int CloseAllSessions();
int CloseAllLinks();
extern BOOL ADIFLogEnabled;
@ -1443,9 +1357,6 @@ extern struct _LINKTABLE * LINKS;
extern int LINK_TABLE_LEN;
extern int MAXLINKS;
extern double LatFromLOC;
extern double LonFromLOC;
extern int BPQHOSTAPI();
extern int INITIALISEPORTS();
@ -1464,8 +1375,7 @@ extern char MYCALL[]; // 7 chars, ax.25 format
extern HWND hIPResWnd;
extern BOOL IPMinimized;
extern int NODESINPROGRESS;
extern int NODESToOnePort;
extern int NODESINPROGRESS;
extern VOID * CURRENTNODE;
@ -1535,7 +1445,7 @@ extern char ReportDest[7];
extern UCHAR ConfigDirectory[260];
extern uint64_t INP3timeLoadedMS;
extern uint64_t timeLoadedMS;
VOID __cdecl Debugprintf(const char * format, ...);
VOID __cdecl Consoleprintf(const char * format, ...);
@ -1565,7 +1475,6 @@ VOID APRSClose();
VOID CloseTNCEmulator();
VOID Poll_AGW();
void RHPPoll();
BOOL AGWAPIInit();
int AGWAPITerminate();
@ -1584,9 +1493,7 @@ UINT Sem_edx = 0;
UINT Sem_esi = 0;
UINT Sem_edi = 0;
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line);
void GetSemaphore(struct SEM * Semaphore, int ID);
void FreeSemaphore(struct SEM * Semaphore);
DllExport void * BPQHOSTAPIPTR = &BPQHOSTAPI;
@ -1653,8 +1560,6 @@ BOOL IGateEnabled = TRUE;
extern int ISDelayTimer; // Time before trying to reopen APRS-IS link
extern int ISPort;
int CLOSING = 0;
UINT * WINMORTraceQ = NULL;
UINT * SetWindowTextQ = NULL;
@ -1710,8 +1615,6 @@ BOOL ReconfigFlag = FALSE;
BOOL RigReconfigFlag = FALSE;
BOOL APRSReconfigFlag = FALSE;
BOOL CloseAllNeeded = FALSE;
int CloseAllTimer = 0;
BOOL NeedWebMailRefresh = FALSE;
int AttachedPIDList[100] = {0};
@ -1938,8 +1841,8 @@ VOID MonitorThread(int x)
{
// It is stuck - try to release
Debugprintf ("Semaphore locked - Process ID = %d, Held By %d from %s Line %d",
Semaphore.SemProcessID, SemHeldByAPI, Semaphore.File, Semaphore.Line);
Debugprintf ("Semaphore locked - Process ID = %d, Held By %d",
Semaphore.SemProcessID, SemHeldByAPI);
// Write a minidump
@ -2360,7 +2263,6 @@ VOID TimerProcX()
Poll_AGW();
DRATSPoll();
RHPPoll();
CheckGuardZone();
@ -2393,52 +2295,6 @@ VOID TimerProcX()
CheckGuardZone();
if (CloseAllTimer == 50) // First entry
{
if (CloseAllSessions() == 0)
{
if (CloseAllLinks() == 0) // No sessions closed so close links now
CloseAllTimer = 0; // No Links so close now
else
CloseAllTimer = 39; // ~4 secs for links to close
}
}
if (CloseAllTimer == 40) // First entry
CloseAllLinks(); // No sessions closed so close links now
if (CloseAllTimer)
{
// See if any links left
struct _LINKTABLE * LINK = LINKS;
int i = MAXLINKS;
if (CloseAllTimer == 0)
RealCloseAllPrograms();
while (i--)
{
if (LINK->LINKCALL[0])
{
break;
}
if (i == 0)
{
CloseAllTimer = 0;
RealCloseAllPrograms();
return;
}
LINK++;
continue;
}
CloseAllTimer--;
if(CloseAllTimer == 0)
RealCloseAllPrograms();
}
return;
}
@ -2474,9 +2330,7 @@ FirstInit()
EnumProcessesPtr = (FARPROCX)GetProcAddress(ExtDriver,"EnumProcesses");
}
INP3timeLoadedMS = GetTickCount();
srand(time(NULL));
timeLoadedMS = GetTickCount();
INITIALISEPORTS();
@ -3197,7 +3051,7 @@ SkipInit:
if (AttachedProcesses < 2)
{
if (AUTOSAVE)
if (AUTOSAVE == 1)
SaveNodes();
if (AUTOSAVEMH)
SaveMH();
@ -4093,9 +3947,6 @@ VOID * InitializeExtDriver(PEXTPORTDATA PORTVEC)
if (strstr(Value, "FREEDATA"))
return FreeDataExtInit;
if (strstr(Value, "6PACK"))
return SIXPACKExtInit;
ExtDriver = LoadLibrary(Value);
if (ExtDriver == NULL)
@ -5965,24 +5816,13 @@ DllExport VOID APIENTRY CreateNewTrayIcon()
trayMenu = NULL;
}
void hookNodeClosing(char * Reason);
DllExport VOID APIENTRY CloseAllPrograms()
{
CLOSING = TRUE;
// HANDLE hProc;
// Tell BG to shut when all links are gone or after 5 secs
// Close all attached BPQ32 programs
CloseAllTimer = 50;
}
VOID RealCloseAllPrograms()
{
hookNodeClosing("Shutdown");
Sleep(500);
Closing = 1;
Closing = TRUE;
ShowWindow(FrameWnd, SW_RESTORE);
@ -6230,14 +6070,13 @@ DllExport BOOL APIENTRY SaveReg(char * KeyIn, HANDLE hFile)
{
if (len > 76)
{
len += sprintf(&RegLine[len], "\\\r\n", RegLine);
strcat(RegLine, "\\\r\n");
len = sprintf(RegLine, "%s\\\r\n", RegLine);
WriteFile(hFile, RegLine, len, &written, NULL);
strcpy(RegLine, " ");
len = 2;
}
len += sprintf(&RegLine[len], "%02x,", Value[k]);
len = sprintf(RegLine, "%s%02x,", RegLine, Value[k]);
}
RegLine[--len] = 0x0d;
RegLine[++len] = 0x0a;
@ -6263,20 +6102,19 @@ DllExport BOOL APIENTRY SaveReg(char * KeyIn, HANDLE hFile)
{
if (len > 76)
{
len += sprintf(&RegLine[len], "\\\r\n");
len = sprintf(RegLine, "%s\\\r\n", RegLine);
WriteFile(hFile, RegLine, len, &written, NULL);
strcpy(RegLine, " ");
len = 2;
}
len += sprintf(&RegLine[len], "%02x,", Value[k]);
len = sprintf(RegLine, "%s%02x,", RegLine, Value[k]);
if (len > 76)
{
len += sprintf(&RegLine[len], "\\\r\n");
len = sprintf(RegLine, "%s\\\r\n", RegLine);
WriteFile(hFile, RegLine, len, &written, NULL);
strcpy(RegLine, " ");
}
len += sprintf(&RegLine[len], "00,");
len = sprintf(RegLine, "%s00,", RegLine);
}
RegLine[--len] = 0x0d;
@ -6763,19 +6601,11 @@ int GetListeningPortsPID(int Port)
return 0; // Not found
}
DllExport char * APIENTRY GetLOC()
DllExport char * APIENTRY GetLOC()
{
return LOC;
}
DllExport void APIENTRY GetLatLon(double * lat, double * lon)
{
*lat = LatFromLOC;
*lon = LonFromLOC;
return;
}
// UZ7HO Dll PTT interface
// 1 ext_PTT_info

BIN
CBPQ32.suo Normal file

Binary file not shown.

621
CBPQ32.vcproj Normal file
View file

@ -0,0 +1,621 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="CBPQ32"
ProjectGUID="{8EFA1E59-8654-4A23-8102-AA77A074D57C}"
RootNamespace="CBPQ32"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
<DefaultToolFile
FileName="masm.rules"
/>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="d:\devprogs\bpq32"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="MASM"
PreserveIdentifierCase="3"
IncludePaths="..\CInclude"
EnableMASM51Compatibility="true"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\CInclude;..\CommonSource;..\CKernel"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;BPQ32_EXPORTS;MDIKERNEL;_USE_32BIT_TIME_T;BPQ32"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
AssemblerOutput="2"
AssemblerListingLocation="c:\devprogs\bpq32\listings\debug\"
BrowseInformation="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions=" /section:_BPQDATA,srw"
AdditionalDependencies="WS2_32.Lib winmm.lib DbgHelp.lib comctl32.lib Iphlpapi.lib setupapi.lib ..\lib\libconfigd.lib miniupnpc.lib zlibstat.lib"
OutputFile="c:\DevProgs\BPQ32\bpq32.dll"
LinkIncremental="2"
IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames="LIBCMTD.lib"
ModuleDefinitionFile="..\CommonSource\bpq32.def"
GenerateDebugInformation="true"
GenerateMapFile="true"
MapFileName="c:\DevProgs\BPQ32\bpqdev.map"
MapExports="true"
SubSystem="2"
HeapCommitSize="8000000"
StackCommitSize="4000000"
EnableCOMDATFolding="1"
EntryPointSymbol=""
BaseAddress="0x42000000"
ImportLibrary="..\lib\bpq32.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
OutputFile="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ConfigurationName)\$(ProjectName).bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="&quot;C:\Program Files\7-Zip\7z.exe&quot; a C:\DevProgs\BPQ32\bpq32.zip C:\DevProgs\BPQ32\bpq32.dll &amp;&amp; myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll &amp;&amp; del C:\DevProgs\BPQ32\bpq32.dll"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="0"
WholeProgramOptimization="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="MASM"
PreserveIdentifierCase="3"
AssembledCodeListingFile="$(IntDir)\$(InputName)"
IncludePaths="..\CInclude"
ListAllAvailableInformation="true"
EnableAssemblyGeneratedCodeListing="true"
EnableFalseConditionalsInListing="true"
EnableMASM51Compatibility="true"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalOptions="/D &quot;MDIKERNEL&quot;"
Optimization="0"
WholeProgramOptimization="false"
AdditionalIncludeDirectories="..\CInclude;..\CommonSource;..\CKernel"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;BPQ32_EXPORTS;MDIKERNEL;_USE_32BIT_TIME_T"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
AssemblerOutput="2"
AssemblerListingLocation="c:\devprogs\bpq32\listings\"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions=" /section:_BPQDATA,srw"
AdditionalDependencies="WS2_32.Lib winmm.lib comctl32.lib setupapi.lib ..\lib\libconfig.lib miniupnpc.lib zlibstat.lib DbgHelp.lib"
OutputFile="C:\DevProgs\BPQ32\bpq32.dll"
LinkIncremental="1"
IgnoreDefaultLibraryNames=""
ModuleDefinitionFile="..\CommonSource\bpq32.def"
GenerateDebugInformation="true"
ProgramDatabaseFile="c:\DevProgs\BPQ32\bpq32.pdb"
GenerateMapFile="true"
MapFileName="c:\DevProgs\BPQ32\bpqpdn.map"
MapExports="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
LinkTimeCodeGeneration="0"
BaseAddress="0x42000000"
ImportLibrary="C:\Dev\Msdev2005\Projects\BPQ32\lib\bpq32.lib"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
OutputFile="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ConfigurationName)\$(ProjectName).bsc"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
CommandLine="&quot;C:\Program Files\7-Zip\7z.exe&quot; a C:\DevProgs\BPQ32\bpq32.zip C:\DevProgs\BPQ32\bpq32.dll &amp;&amp; myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll &amp;&amp; del C:\DevProgs\BPQ32\bpq32.dll"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\CommonSource\adif.c"
>
</File>
<File
RelativePath="..\CommonSource\AEAPactor.c"
>
</File>
<File
RelativePath="..\CommonSource\AGWAPI.c"
>
</File>
<File
RelativePath="..\CommonSource\AGWMoncode.c"
>
</File>
<File
RelativePath=".\AISCommon.c"
>
</File>
<File
RelativePath="..\CommonSource\APRSCode.c"
>
</File>
<File
RelativePath=".\APRSIconData.c"
>
</File>
<File
RelativePath=".\APRSStdPages.c"
>
</File>
<File
RelativePath="..\CommonSource\ARDOP.c"
>
</File>
<File
RelativePath="..\CommonSource\asmDOSAPI.asm"
>
</File>
<File
RelativePath=".\base64.c"
>
</File>
<File
RelativePath="..\CommonSource\Bpq32.c"
>
</File>
<File
RelativePath="..\CommonSource\bpqaxip.c"
>
</File>
<File
RelativePath="..\CommonSource\bpqether.c"
>
</File>
<File
RelativePath="..\CommonSource\bpqhdlc.c"
>
</File>
<File
RelativePath="..\CommonSource\BPQINP3.c"
>
</File>
<File
RelativePath="..\CommonSource\BPQNRR.c"
>
</File>
<File
RelativePath=".\BPQTermMDI.c"
>
</File>
<File
RelativePath="..\CommonSource\BPQtoAGW.c"
>
</File>
<File
RelativePath="..\CommonSource\bpqvkiss.c"
>
</File>
<File
RelativePath="..\CommonSource\cMain.c"
>
</File>
<File
RelativePath="..\CommonSource\Cmd.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\CMSAuth.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="0"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\CommonCode.c"
>
</File>
<File
RelativePath="..\CommonSource\compatbits.c"
>
</File>
<File
RelativePath="..\CommonSource\config.c"
>
</File>
<File
RelativePath="..\CommonSource\datadefs.c"
>
</File>
<File
RelativePath="..\CommonSource\DOSAPI.c"
>
</File>
<File
RelativePath=".\DRATS.c"
>
</File>
<File
RelativePath=".\Events.c"
>
</File>
<File
RelativePath="..\CommonSource\FLDigi.c"
>
</File>
<File
RelativePath=".\FreeDATA.c"
>
</File>
<File
RelativePath="..\CommonSource\HALDriver.c"
>
</File>
<File
RelativePath="..\CommonSource\HFCommon.c"
>
</File>
<File
RelativePath="..\CommonSource\hid.c"
>
</File>
<File
RelativePath=".\HSMODEM.c"
>
</File>
<File
RelativePath="..\CommonSource\HTTPcode.c"
>
</File>
<File
RelativePath="..\CommonSource\IPCode.c"
>
</File>
<File
RelativePath="..\CommonSource\KAMPactor.c"
>
</File>
<File
RelativePath="..\CommonSource\kiss.c"
>
</File>
<File
RelativePath="..\CommonSource\KISSHF.c"
>
</File>
<File
RelativePath="..\CommonSource\L2Code.c"
>
</File>
<File
RelativePath="..\CommonSource\L3Code.c"
>
</File>
<File
RelativePath="..\CommonSource\L4Code.c"
>
</File>
<File
RelativePath="..\CommonSource\md5.c"
>
</File>
<File
RelativePath="..\CommonSource\Moncode.c"
>
</File>
<File
RelativePath="..\CommonSource\MULTIPSK.c"
>
</File>
<File
RelativePath=".\nodeapi.c"
>
</File>
<File
RelativePath=".\png.c"
>
</File>
<File
RelativePath=".\pngerror.c"
>
</File>
<File
RelativePath=".\pngget.c"
>
</File>
<File
RelativePath=".\pngmem.c"
>
</File>
<File
RelativePath=".\pngread.c"
>
</File>
<File
RelativePath=".\pngrio.c"
>
</File>
<File
RelativePath=".\pngrtran.c"
>
</File>
<File
RelativePath=".\pngrutil.c"
>
</File>
<File
RelativePath=".\pngset.c"
>
</File>
<File
RelativePath=".\pngtrans.c"
>
</File>
<File
RelativePath=".\pngvcrd.c"
>
</File>
<File
RelativePath=".\pngwio.c"
>
</File>
<File
RelativePath=".\pngwrite.c"
>
</File>
<File
RelativePath=".\pngwtran.c"
>
</File>
<File
RelativePath=".\pngwutil.c"
>
</File>
<File
RelativePath="..\CommonSource\PortMapper.c"
>
</File>
<File
RelativePath="..\CommonSource\RigControl.c"
>
</File>
<File
RelativePath="..\CommonSource\SCSPactor.c"
>
</File>
<File
RelativePath="..\CommonSource\SCSTrackeMulti.c"
>
</File>
<File
RelativePath="..\CommonSource\SCSTracker.c"
>
</File>
<File
RelativePath="..\CommonSource\SerialPort.c"
>
</File>
<File
RelativePath="..\CommonSource\TelnetV6.c"
>
</File>
<File
RelativePath="..\CommonSource\TNCCode.c"
>
</File>
<File
RelativePath="..\CommonSource\TNCEmulators.c"
>
</File>
<File
RelativePath="..\CommonSource\UIARQ.c"
>
</File>
<File
RelativePath=".\upnp.c"
>
</File>
<File
RelativePath="..\CommonSource\utf8Routines.c"
>
</File>
<File
RelativePath="..\CommonSource\UZ7HODrv.c"
>
</File>
<File
RelativePath="..\CommonSource\V4.c"
>
</File>
<File
RelativePath="..\CommonSource\VARA.c"
>
</File>
<File
RelativePath="..\CommonSource\WINMOR.c"
>
</File>
<File
RelativePath="..\CommonSource\WinRPR.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\CommonSource\asmstrucs.h"
>
</File>
<File
RelativePath="..\CommonSource\bpq32.def"
>
</File>
<File
RelativePath="..\CommonSource\CHeaders.h"
>
</File>
<File
RelativePath="..\CommonSource\compatbits.h"
>
</File>
<File
RelativePath="..\CKernel\kernelresource.h"
>
</File>
<File
RelativePath="..\CInclude\Strucs.inc"
>
</File>
<File
RelativePath="..\CommonSource\Versions.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath="..\CommonSource\KernelScript1.rc"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="LAPTOP-Q6S4RP5Q"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

232
CBPQ32.vcxproj Normal file
View file

@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{8EFA1E59-8654-4A23-8102-AA77A074D57C}</ProjectGuid>
<RootNamespace>CBPQ32</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
<WholeProgramOptimization>false</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>15.0.28127.55</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
<IntDir>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
<IntDir>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<MASM>
<PreserveIdentifierCase>3</PreserveIdentifierCase>
<IncludePaths>..\CInclude</IncludePaths>
<EnableMASM51Compatibility>true</EnableMASM51Compatibility>
</MASM>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\CInclude;..\CommonSource;..\CKernel;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BPQ32_EXPORTS;MDIKERNEL;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader />
<AssemblerOutput>All</AssemblerOutput>
<AssemblerListingLocation>c:\devprogs\bpq32\listings\debug\</AssemblerListingLocation>
<BrowseInformation>true</BrowseInformation>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> /section:_BPQDATA,srw %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>WS2_32.Lib;winmm.lib;DbgHelp.lib;comctl32.lib;Iphlpapi.lib;setupapi.lib;..\lib\libconfig.lib;miniupnpc.lib;zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\DevProgs\BPQ32\bpq32.dll</OutputFile>
<IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
<IgnoreSpecificDefaultLibraries>LIBCMTD.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<ModuleDefinitionFile>..\CommonSource\bpq32.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>c:\DevProgs\BPQ32\bpqdev.map</MapFileName>
<MapExports>true</MapExports>
<SubSystem>Windows</SubSystem>
<HeapCommitSize>8000000</HeapCommitSize>
<StackCommitSize>4000000</StackCommitSize>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
<EntryPointSymbol />
<BaseAddress>0x42000000</BaseAddress>
<ImportLibrary>..\lib\bpq32.lib</ImportLibrary>
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
<Bscmake>
<OutputFile>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(Configuration)\$(ProjectName).bsc</OutputFile>
</Bscmake>
<PostBuildEvent>
<Command>"C:\Program Files\7-Zip\7z.exe" a C:\DevProgs\BPQ32\bpq32.zip C:\DevProgs\BPQ32\bpq32.dll &amp;&amp; myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll &amp;&amp; del C:\DevProgs\BPQ32\bpq32.dll</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<MASM>
<PreserveIdentifierCase>3</PreserveIdentifierCase>
<AssembledCodeListingFile>$(IntDir)$(ProjectName)</AssembledCodeListingFile>
<IncludePaths>..\CInclude</IncludePaths>
<ListAllAvailableInformation>true</ListAllAvailableInformation>
<EnableAssemblyGeneratedCodeListing>true</EnableAssemblyGeneratedCodeListing>
<EnableFalseConditionalsInListing>true</EnableFalseConditionalsInListing>
<EnableMASM51Compatibility>true</EnableMASM51Compatibility>
</MASM>
<ClCompile>
<AdditionalOptions>/D "MDIKERNEL" %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<WholeProgramOptimization>false</WholeProgramOptimization>
<AdditionalIncludeDirectories>..\CInclude;..\CommonSource;..\CKernel;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BPQ32_EXPORTS;MDIKERNEL;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader />
<AssemblerOutput>All</AssemblerOutput>
<AssemblerListingLocation>c:\devprogs\bpq32\listings\</AssemblerListingLocation>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalOptions> /section:_BPQDATA,srw %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>WS2_32.Lib;winmm.lib;DbgHelp.lib;comctl32.lib;setupapi.lib;..\lib\libconfig.lib;miniupnpc.lib;zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>C:\DevProgs\BPQ32\bpq32.dll</OutputFile>
<ModuleDefinitionFile>..\CommonSource\bpq32.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>c:\DevProgs\BPQ32\bpq32.pdb</ProgramDatabaseFile>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>c:\DevProgs\BPQ32\bpqpdn.map</MapFileName>
<MapExports>true</MapExports>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<LinkTimeCodeGeneration />
<BaseAddress>0x42000000</BaseAddress>
<ImportLibrary>C:\Dev\Msdev2005\Projects\BPQ32\lib\bpq32.lib</ImportLibrary>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<Bscmake>
<OutputFile>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(Configuration)\$(ProjectName).bsc</OutputFile>
</Bscmake>
<PostBuildEvent>
<Command>"C:\Program Files\7-Zip\7z.exe" a C:\DevProgs\BPQ32\bpq32.zip C:\DevProgs\BPQ32\bpq32.dll &amp;&amp; myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll &amp;&amp; del C:\DevProgs\BPQ32\bpq32.dll</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="adif.c" />
<ClCompile Include="AEAPactor.c" />
<ClCompile Include="AGWAPI.c" />
<ClCompile Include="AGWMoncode.c" />
<ClCompile Include="AISCommon.c" />
<ClCompile Include="APRSCode.c" />
<ClCompile Include="APRSStdPages.c" />
<ClCompile Include="ARDOP.c" />
<ClCompile Include="Bpq32.c" />
<ClCompile Include="bpqaxip.c" />
<ClCompile Include="bpqether.c" />
<ClCompile Include="bpqhdlc.c" />
<ClCompile Include="BPQINP3.c" />
<ClCompile Include="BPQNRR.c" />
<ClCompile Include="BPQTermMDI.c" />
<ClCompile Include="BPQtoAGW.c" />
<ClCompile Include="bpqvkiss.c" />
<ClCompile Include="cMain.c" />
<ClCompile Include="Cmd.c" />
<ClCompile Include="CMSAuth.c" />
<ClCompile Include="CommonCode.c" />
<ClCompile Include="compatbits.c" />
<ClCompile Include="config.c" />
<ClCompile Include="datadefs.c" />
<ClCompile Include="DOSAPI.c" />
<ClCompile Include="FLDigi.c" />
<ClCompile Include="HALDriver.c" />
<ClCompile Include="HFCommon.c" />
<ClCompile Include="hid.c" />
<ClCompile Include="HSMODEM.c" />
<ClCompile Include="HTTPcode.c" />
<ClCompile Include="IPCode.c" />
<ClCompile Include="KAMPactor.c" />
<ClCompile Include="kiss.c" />
<ClCompile Include="KISSHF.c" />
<ClCompile Include="L2Code.c" />
<ClCompile Include="L3Code.c" />
<ClCompile Include="L4Code.c" />
<ClCompile Include="md5.c" />
<ClCompile Include="Moncode.c" />
<ClCompile Include="MULTIPSK.c" />
<ClCompile Include="PortMapper.c" />
<ClCompile Include="RigControl.c" />
<ClCompile Include="SCSPactor.c" />
<ClCompile Include="SCSTrackeMulti.c" />
<ClCompile Include="SCSTracker.c" />
<ClCompile Include="SerialPort.c" />
<ClCompile Include="TelnetV6.c" />
<ClCompile Include="TNCCode.c" />
<ClCompile Include="TNCEmulators.c" />
<ClCompile Include="UIARQ.c" />
<ClCompile Include="upnp.c" />
<ClCompile Include="utf8Routines.c" />
<ClCompile Include="UZ7HODrv.c" />
<ClCompile Include="V4.c" />
<ClCompile Include="VARA.c" />
<ClCompile Include="WINMOR.c" />
<ClCompile Include="WinRPR.c" />
</ItemGroup>
<ItemGroup>
<MASM Include="asmDOSAPI.asm" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\CKernel\kernelresource.h" />
<ClInclude Include="asmstrucs.h" />
<ClInclude Include="CHeaders.h" />
<ClInclude Include="compatbits.h" />
<ClInclude Include="Versions.h" />
</ItemGroup>
<ItemGroup>
<None Include="..\CInclude\Strucs.inc" />
<None Include="bpq32.def" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="KernelScript1.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup>
</Project>

228
CBPQ32.vcxproj.filters Normal file
View file

@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="adif.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AEAPactor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AGWAPI.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AGWMoncode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AISCommon.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="APRSCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="APRSStdPages.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ARDOP.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Bpq32.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqaxip.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqether.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqhdlc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQINP3.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQNRR.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQTermMDI.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQtoAGW.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqvkiss.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="cMain.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Cmd.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CMSAuth.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CommonCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="compatbits.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="config.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="datadefs.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DOSAPI.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FLDigi.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HALDriver.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HFCommon.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="hid.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HSMODEM.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HTTPcode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="IPCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="KAMPactor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kiss.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="KISSHF.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="L2Code.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="L3Code.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="L4Code.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="md5.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Moncode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MULTIPSK.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PortMapper.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RigControl.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SCSPactor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SCSTrackeMulti.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SCSTracker.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SerialPort.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TelnetV6.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TNCCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TNCEmulators.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UIARQ.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="upnp.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utf8Routines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UZ7HODrv.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="V4.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VARA.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WINMOR.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WinRPR.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<MASM Include="asmDOSAPI.asm">
<Filter>Source Files</Filter>
</MASM>
</ItemGroup>
<ItemGroup>
<ClInclude Include="asmstrucs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CHeaders.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="compatbits.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\CKernel\kernelresource.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Versions.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="bpq32.def">
<Filter>Header Files</Filter>
</None>
<None Include="..\CInclude\Strucs.inc">
<Filter>Header Files</Filter>
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="KernelScript1.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View file

@ -30,9 +30,6 @@ int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BO
int IntSetTraceOptionsEx(uint64_t mask, int mtxparam, int mcomparam, int monUIOnly);
int CountBits64(uint64_t in);
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
#define GetBuff() _GetBuff(__FILE__, __LINE__)
#define ReleaseBuffer(s) _ReleaseBuffer(s, __FILE__, __LINE__)
#define CheckGuardZone() _CheckGuardZone(__FILE__, __LINE__)
@ -67,13 +64,13 @@ DllExport int APIENTRY GetConnectionInfo(int stream, char * callsign,
int * port, int * sesstype, int * paclen,
int * maxframe, int * l4window);
#define LIBCONFIG_STATIC
#include "libconfig.h"
int GetIntValue(config_setting_t * group, char * name);
BOOL GetStringValue(config_setting_t * group, char * name, char * value, int maxlen);
VOID SaveIntValue(config_setting_t * group, char * name, int value);
VOID SaveStringValue(config_setting_t * group, char * name, char * value);
struct config_setting_t;
int GetIntValue(struct config_setting_t * group, char * name);
BOOL GetStringValue(struct config_setting_t * group, char * name, char * value);
VOID SaveIntValue(struct config_setting_t * group, char * name, int value);
VOID SaveStringValue(struct config_setting_t * group, char * name, char * value);
int EncryptPass(char * Pass, char * Encrypt);
VOID DecryptPass(char * Encrypt, unsigned char * Pass, unsigned int len);
@ -95,6 +92,7 @@ VOID InnerCommandHandler(TRANSPORTENTRY * Session, struct DATAMESSAGE * Buffer);
VOID DoTheCommand(TRANSPORTENTRY * Session);
char * MOVEANDCHECK(TRANSPORTENTRY * Session, char * Bufferptr, char * Source, int Len);
VOID DISPLAYCIRCUIT(TRANSPORTENTRY * L4, char * Buffer);
char * FormatUptime(int Uptime);
char * strlop(char * buf, char delim);
BOOL CompareCalls(UCHAR * c1, UCHAR * c2);
@ -105,13 +103,13 @@ VOID CLOSECURRENTSESSION(TRANSPORTENTRY * Session);
VOID SendCommandReply(TRANSPORTENTRY * Session, struct DATAMESSAGE * Buffer, int Len);
DllExport struct PORTCONTROL * APIENTRY GetPortTableEntryFromPortNum(int portnum);
struct PORTCONTROL * APIENTRY GetPortTableEntryFromPortNum(int portnum);
int cCOUNT_AT_L2(struct _LINKTABLE * LINK);
VOID SENDL4CONNECT(TRANSPORTENTRY * Session, int Service);
VOID SENDL4CONNECT(TRANSPORTENTRY * Session);
VOID CloseSessionPartner(TRANSPORTENTRY * Session);
int COUNTNODES(struct ROUTE * ROUTE);
int COUNTNODES();
int DecodeNodeName(char * NodeName, char * ptr);;
VOID DISPLAYCIRCUIT(TRANSPORTENTRY * L4, char * Buffer);
int cCOUNT_AT_L2(struct _LINKTABLE * LINK);
@ -155,10 +153,9 @@ int APIENTRY Reboot();
int APIENTRY Reconfig();
Dll int APIENTRY SaveNodes ();
struct SEM;
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line);
void GetSemaphore(struct SEM * Semaphore, int ID);
void FreeSemaphore(struct SEM * Semaphore);
void MySetWindowText(HWND hWnd, char * Msg);
@ -202,6 +199,8 @@ int TrytoGuessCode(unsigned char * Char, int Len);
#define XID 0xAF
#define TEST 0xE3
#define SUPPORT2point2 1
// XID Optional Functions
#define OPMustHave 0x02A080 // Sync TEST 16 bit FCS Extended Address
@ -252,7 +251,6 @@ extern UCHAR MYCALLWITHALIAS[13];
extern APPLCALLS APPLCALLTABLE[NumberofAppls];
extern UCHAR MYNODECALL[]; // NODE CALLSIGN (ASCII)
extern char NODECALLLOPPED[]; // NODE CALLSIGN (ASCII). Null terminated
extern UCHAR MYNETROMCALL[]; // NETROM CALLSIGN (ASCII)
extern UCHAR NETROMCALL[]; // NETORM CALL (AX25)
@ -359,7 +357,7 @@ extern char * ConfigBuffer;
extern char * WL2KReportLine[];
extern struct CMDX COMMANDS[];
extern CMDX COMMANDS[];
extern int QCOUNT, MAXBUFFS, MAXCIRCUITS, L4DEFAULTWINDOW, L4T1, CMDXLEN;
extern char CMDALIAS[ALIASLEN][NumberofAppls];
@ -398,7 +396,6 @@ extern int REALTIMETICKS;
extern time_t CurrentSecs;
extern time_t lastSlowSecs;
extern time_t lastSaveSecs;
// SNMP Variables
@ -430,18 +427,4 @@ extern char Message[MaxBPQPortNo + 1][1000]; // Beacon Text
extern int MinCounter[MaxBPQPortNo + 1]; // Interval Countdown
extern BOOL SendFromFile[MaxBPQPortNo + 1];
extern BOOL MQTT;
extern char MQTT_HOST[80];
extern int MQTT_PORT;
extern char MQTT_USER[80];
extern char MQTT_PASS[80];
extern int SUPPORT2point2;
DllExport uint64_t APIENTRY GetPortFrequency(int PortNo, char * FreqStringMhz);
void hookL2SessionAccepted(int Port, char * remotecall, char * ourcall, struct _LINKTABLE * LINK);
void hookL2SessionDeleted(struct _LINKTABLE * LINK);
void hookL2SessionAttempt(int Port, char * ourcall, char * remotecall, struct _LINKTABLE * LINK);
DllExport uint64_t APIENTRY GetPortFrequency(int PortNo, char * FreqStringMhz);

View file

@ -33,7 +33,6 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
char * strlop(char * buf, char delim);
VOID APIENTRY md5 (char *arg, unsigned char * checksum);
// Implementation of the WinLink password challenge/response protocol

View file

@ -590,7 +590,7 @@ VOID SendChatStatusPage(char * Reply, int * ReplyLen, char * Key)
{
if (conn->Flags & CHATLINK)
{
if (conn->BPQStream > 64 || conn->u.link == 0 || conn->u.link->alias == 0)
if (conn->BPQStream > 64 || conn->u.link == 0)
Len += sprintf(&Streams[Len], "<tr><td onclick= SelectRow(%d) id=cell_%d>** Corrupt ChatLink **</td>"
"<td>&nbsp;&nbsp;</td><td>&nbsp;&nbsp;</td><td>&nbsp;&nbsp;</td><td>&nbsp;&nbsp;</td></tr>", i, i);
else
@ -600,7 +600,7 @@ VOID SendChatStatusPage(char * Reply, int * ReplyLen, char * Key)
"", conn->OutputQueueLength - conn->OutputGetPointer);
}
else
if ((conn->Flags & CHATMODE) && conn->topic && conn->u.user && conn->u.user->call)
if ((conn->Flags & CHATMODE) && conn->topic)
{
Len += sprintf(&Streams[Len], "<tr><td onclick='SelectRow(%d)' id='cell_%d'>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%d</td></tr>",
i, i, conn->u.user->name, conn->u.user->call, conn->BPQStream,

View file

@ -983,30 +983,7 @@ 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);

View file

@ -39,8 +39,7 @@ VOID __cdecl Logprintf(int LogMode, ChatCIRCUIT * conn, int InOut, const char *
return;
}
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line)
void GetSemaphore(struct SEM * Semaphore, int ID)
{
//
// Wait for it to be free
@ -75,9 +74,6 @@ loop1:
;
}
Semaphore->Line = Line;
strcpy(Semaphore->File, File);
return;
}
void FreeSemaphore(struct SEM * Semaphore)

1076
Cmd.c

File diff suppressed because it is too large Load diff

View file

@ -18,6 +18,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
*/
// General C Routines common to bpq32 and linbpq. Mainly moved from BPQ32.c
#pragma data_seg("_BPQDATA")
@ -27,11 +28,10 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "mqtt.h"
#pragma data_seg("_BPQDATA")
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
#include "configstructs.h"
@ -49,12 +49,6 @@ extern struct CONFIGTABLE xxcfg;
#endif
void hookL4SessionAttempt(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionAccepted(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionDeleted(struct TNCINFO * TNC, void * STREAM);
struct TNCINFO * TNCInfo[71]; // Records are Malloc'd
extern int ReportTimer;
@ -74,18 +68,14 @@ VOID WriteMiniDump();
void printStack(void);
char * FormatMH(PMHSTRUC MH, char Format);
void WriteConnectLog(char * fromCall, char * toCall, UCHAR * Mode);
void SendDataToPktMap();
void SendDataToPktMap(char *Msg);
extern BOOL LogAllConnects;
extern BOOL M0LTEMap;
char * stristr (char *ch1, char *ch2);
extern VOID * ENDBUFFERPOOL;
extern int PoolBuilt;
extern int EnableOARCAPI;
// Read/Write length field in a buffer header
@ -372,7 +362,7 @@ BOK1:
if (n > 1000)
{
Debugprintf("Releasebuffer Loop searching free chain - pointer = %p %p from %s Line %d", debug, pointer, File, Line);
Debugprintf("Loop searching free chain - pointer = %p %p", debug, pointer);
return 0;
}
}
@ -385,11 +375,6 @@ BOK1:
QCOUNT++;
if (PoolBuilt && QCOUNT > MAXBUFFS)
{
Debugprintf("Releasebuffer QCOUNT > MAXBUFFS - pointer = %p from %s Line %d", pointer, File, Line);
return 0;
}
return 0;
}
@ -487,7 +472,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
@ -562,7 +547,6 @@ VOID * _GetBuff(char * File, int Line)
Msg->Process = (short)GetCurrentProcessId();
Msg->Linkptr = NULL;
Msg->Padding[0] = 0; // Used for modem status info
}
else
Debugprintf("Warning - Getbuff returned NULL");
@ -705,7 +689,7 @@ VOID DISPLAYCIRCUIT(TRANSPORTENTRY * L4, char * Buffer)
}
VOID CheckForDetach(struct TNCINFO * TNC, int Stream, struct STREAMINFO * STREAM,
VOID TidyCloseProc(struct TNCINFO * TNC, int Stream), VOID ForcedCloseProc(struct TNCINFO * TNC, int Stream), VOID CloseComplete(struct TNCINFO * TNC, int Stream))
VOID TidyCloseProc(), VOID ForcedCloseProc(), VOID CloseComplete())
{
void ** buffptr;
@ -735,6 +719,8 @@ VOID CheckForDetach(struct TNCINFO * TNC, int Stream, struct STREAMINFO * STREAM
if (STREAM->Connected || STREAM->Connecting)
{
char logmsg[120];
time_t Duration;
// Need to do a tidy close
@ -747,7 +733,22 @@ VOID CheckForDetach(struct TNCINFO * TNC, int Stream, struct STREAMINFO * STREAM
// Create a traffic record
hookL4SessionDeleted(TNC, STREAM);
if (STREAM->Connected && STREAM->ConnectTime)
{
Duration = time(NULL) - STREAM->ConnectTime;
if (Duration == 0)
Duration = 1; // Or will get divide by zero error
sprintf(logmsg,"Port %2d %9s Bytes Sent %d BPS %d Bytes Received %d BPS %d Time %d Seconds",
TNC->Port, STREAM->RemoteCall,
STREAM->BytesTXed, (int)(STREAM->BytesTXed/Duration),
STREAM->BytesRXed, (int)(STREAM->BytesRXed/Duration), (int)Duration);
Debugprintf(logmsg);
STREAM->ConnectTime = 0;
}
if (STREAM->BPQtoPACTOR_Q) // Still data to send?
return; // Will close when all acked
@ -917,7 +918,6 @@ BOOL ProcessIncommingConnectEx(struct TNCINFO * TNC, char * Call, int Stream, BO
int Totallen = 0;
UCHAR * ptr;
struct PORTCONTROL * PORT = (struct PORTCONTROL *)TNC->PortRecord;
struct STREAMINFO * STREAM = &TNC->Streams[Stream];
// Stop Scanner
@ -927,7 +927,7 @@ BOOL ProcessIncommingConnectEx(struct TNCINFO * TNC, char * Call, int Stream, BO
sprintf(Msg, "%d SCANSTOP", TNC->Port);
Rig_Command((TRANSPORTENTRY *) -1, Msg);
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
UpdateMH(TNC, Call, '+', 'I');
}
@ -950,11 +950,7 @@ BOOL ProcessIncommingConnectEx(struct TNCINFO * TNC, char * Call, int Stream, BO
memset(Session, 0, sizeof(TRANSPORTENTRY));
memcpy(STREAM->RemoteCall, Call, 9); // Save Text Callsign
// May be subsequently rejected but a good place to capture calls
hookL4SessionAccepted(STREAM, Call, TNC->TargetCall);
memcpy(TNC->Streams[Stream].RemoteCall, Call, 9); // Save Text Callsign
if (AllowTR)
ConvToAX25Ex(Call, Session->L4USER); // Allow -T and -R SSID's for MPS
@ -967,7 +963,7 @@ BOOL ProcessIncommingConnectEx(struct TNCINFO * TNC, char * Call, int Stream, BO
if (NEXTID == 0) NEXTID++; // Keep non-zero
TNC->PortRecord->ATTACHEDSESSIONS[Stream] = Session;
STREAM->Attached = TRUE;
TNC->Streams[Stream].Attached = TRUE;
Session->L4TARGET.EXTPORT = TNC->PortRecord;
@ -978,7 +974,7 @@ BOOL ProcessIncommingConnectEx(struct TNCINFO * TNC, char * Call, int Stream, BO
Session->SESSPACLEN = TNC->PortRecord->PORTCONTROL.PORTPACLEN;
Session->KAMSESSION = Stream;
STREAM->Connected = TRUE; // Subsequent data to data channel
TNC->Streams[Stream].Connected = TRUE; // Subsequent data to data channel
if (LogAllConnects)
{
@ -1031,7 +1027,7 @@ BOOL ProcessIncommingConnectEx(struct TNCINFO * TNC, char * Call, int Stream, BO
char * Config;
static char * ptr1, * ptr2;
BOOL ReadConfigFile(int Port, int ProcLine(char * buf, int Port))
BOOL ReadConfigFile(int Port, int ProcLine())
{
char buf[256],errbuf[256];
@ -1075,7 +1071,6 @@ BOOL ReadConfigFile(int Port, int ProcLine(char * buf, int Port))
WritetoConsoleLocal("\n");
WritetoConsoleLocal("Bad config record ");
WritetoConsoleLocal(errbuf);
WritetoConsoleLocal("\n");
}
}
}
@ -1139,11 +1134,6 @@ int CompareNode(struct DEST_LIST ** a, struct DEST_LIST ** b)
return memcmp(a[0]->DEST_CALL, b[0]->DEST_CALL, 7);
}
int CompareRoutes(struct ROUTE ** a, struct ROUTE ** b)
{
return memcmp(a[0]->NEIGHBOUR_CALL, b[0]->NEIGHBOUR_CALL, 7);
}
DllExport int APIENTRY CountFramesQueuedOnStream(int Stream)
{
BPQVECSTRUC * PORTVEC = &BPQHOSTVECTOR[Stream-1]; // API counts from 1
@ -1475,21 +1465,7 @@ DllExport int APIENTRY SessionStateNoAck(int stream, int * state)
return 0;
}
int SendMsgEx(int stream, char * msg, int len, int GetSem);
int SendMsgNoSem(int stream, char * msg, int len)
{
return SendMsgEx(stream, msg, len, 0);
}
DllExport int APIENTRY SendMsg(int stream, char * msg, int len)
{
return SendMsgEx(stream, msg, len, 1);
}
int SendMsgEx(int stream, char * msg, int len, int GetSem)
{
// Send message to stream (BPQHOST Function 2)
@ -1512,13 +1488,11 @@ int SendMsgEx(int stream, char * msg, int len, int GetSem)
if (QCOUNT < 50)
return 0; // Dont want to run out
if (GetSem)
GetSemaphore(&Semaphore, 10);
GetSemaphore(&Semaphore, 10);
if ((MSG = GetBuff()) == 0)
{
if (GetSem)
FreeSemaphore(&Semaphore);
FreeSemaphore(&Semaphore);
return 0;
}
@ -1529,8 +1503,7 @@ int SendMsgEx(int stream, char * msg, int len, int GetSem)
SENDUIMESSAGE(MSG);
ReleaseBuffer(MSG);
if (GetSem)
FreeSemaphore(&Semaphore);
FreeSemaphore(&Semaphore);
return 0;
}
@ -1545,15 +1518,13 @@ int SendMsgEx(int stream, char * msg, int len, int GetSem)
if (L4 == 0)
return 0;
if (GetSem)
GetSemaphore(&Semaphore, 22);
GetSemaphore(&Semaphore, 22);
SESS->HOSTFLAGS |= 0x80; // SET ALLOCATED BIT
if (QCOUNT < 40) // PLENTY FREE?
{
if (GetSem)
FreeSemaphore(&Semaphore);
FreeSemaphore(&Semaphore);
return 1;
}
@ -1566,16 +1537,14 @@ int SendMsgEx(int stream, char * msg, int len, int GetSem)
if (n > 100)
{
Debugprintf("Stream %d QCOUNT %d Q Len %d - discarding", stream, QCOUNT, n);
if (GetSem)
FreeSemaphore(&Semaphore);
FreeSemaphore(&Semaphore);
return 1;
}
}
if ((MSG = GetBuff()) == 0)
{
if (GetSem)
FreeSemaphore(&Semaphore);
FreeSemaphore(&Semaphore);
return 1;
}
@ -1602,8 +1571,7 @@ int SendMsgEx(int stream, char * msg, int len, int GetSem)
else
C_Q_ADD(&L4->L4RX_Q, MSG);
if (GetSem)
FreeSemaphore(&Semaphore);
FreeSemaphore(&Semaphore);
return 0;
}
DllExport int APIENTRY SendRaw(int port, char * msg, int len)
@ -1642,9 +1610,9 @@ DllExport int APIENTRY SendRaw(int port, char * msg, int len)
MSG->LENGTH = len + MSGHDDRLEN;
if (PORT->PROTOCOL == 10 && PORT->HWType != H_KISSHF) // PACTOR/WINMOR Style
if (PORT->PROTOCOL == 10) // PACTOR/WINMOR Style
{
// Pactor Style. Probably will only be used for Tracker unless we do APRS over V4 or WINMOR
// Pactor Style. Probably will only be used for Tracker uneless we do APRS over V4 or WINMOR
EXTPORTDATA * EXTPORT = (EXTPORTDATA *) PORT;
@ -1701,7 +1669,7 @@ DllExport time_t APIENTRY GetRaw(int stream, char * msg, int * len, int * count)
Stamp = MSG->Timestamp;
memcpy(msg, MSG, BUFFLEN - sizeof(void *)); // To c
memcpy(msg, MSG, Msglen);
*len = Msglen;
@ -2149,16 +2117,7 @@ int CanPortDigi(int Port)
return TRUE;
}
DllExport int APIENTRY GetPortHardwareType(struct PORTCONTROL *PORT)
{
if (PORT)
return PORT->Hardware;
return 0;
}
DllExport struct PORTCONTROL * APIENTRY GetPortTableEntryFromPortNum(int portnum)
struct PORTCONTROL * APIENTRY GetPortTableEntryFromPortNum(int portnum)
{
struct PORTCONTROL * PORTVEC = PORTTABLE;
@ -2485,7 +2444,7 @@ static struct speed_struct
HANDLE OpenCOMPort(VOID * pPort, int speed, BOOL SetDTR, BOOL SetRTS, BOOL Quiet, int Stopbits)
{
char Port[256];
char buf[512];
char buf[100];
// Linux Version.
@ -2495,8 +2454,8 @@ HANDLE OpenCOMPort(VOID * pPort, int speed, BOOL SetDTR, BOOL SetRTS, BOOL Quiet
struct termios term;
struct speed_struct *s;
if ((uintptr_t)pPort < 256)
sprintf(Port, "%s/com%d", BPQDirectory, (int)(uintptr_t)pPort);
if ((UINT)pPort < 256)
sprintf(Port, "%s/com%d", BPQDirectory, (int)pPort);
else
strcpy(Port, pPort);
@ -2715,14 +2674,6 @@ int DoRoutes()
{
if (Routes->NEIGHBOUR_CALL[0] != 0)
{
// Dont save routes from config file here or they are difficult to get rid of
if (Routes->NEIGHBOUR_FLAG & LOCKEDBYCONFIG)
{
Routes++;
continue;
}
len=ConvFromAX25(Routes->NEIGHBOUR_CALL,Normcall);
Normcall[len]=0;
@ -2746,7 +2697,7 @@ int DoRoutes()
digis[0] = 0;
len=sprintf(line,
"ROUTE ADD %s %d %d %s %d %d %d %d %d %c\n",
"ROUTE ADD %s %d %d %s %d %d %d %d %d\n",
Normcall,
Routes->NEIGHBOUR_PORT,
Routes->NEIGHBOUR_QUAL, digis,
@ -2754,8 +2705,7 @@ int DoRoutes()
Routes->NBOUR_FRACK,
Routes->NBOUR_PACLEN,
Routes->INP3Node | (Routes->NoKeepAlive << 2),
Routes->OtherendsRouteQual,
(Routes->NEIGHBOUR_FLAG & LOCKEDBYSYSOP)?'!':' ');
Routes->OtherendsRouteQual);
fputs(line, file);
}
@ -3066,7 +3016,19 @@ DllExport int APIENTRY ClearNodes ()
return (0);
}
char * FormatUptime(int Uptime)
{
struct tm * TM;
static char UPTime[50];
time_t szClock = Uptime * 60;
TM = gmtime(&szClock);
sprintf(UPTime, "Uptime (Days Hours Mins) %.2d:%.2d:%.2d\r",
TM->tm_yday, TM->tm_hour, TM->tm_min);
return UPTime;
}
static char *month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
@ -3320,12 +3282,8 @@ SOCKADDR_IN reportdest = {0};
SOCKET ReportSocket = 0;
SOCKET NodeAPISocket = 0 ;
SOCKADDR_IN Chatreportdest = {0};
SOCKADDR_IN UDPreportdest = {0};
extern char LOCATOR[]; // Locator for Reporting - may be Maidenhead or LAT:LON
extern char MAPCOMMENT[]; // Locator for Reporting - may be Maidenhead or LAT:LON
extern char LOC[7]; // Maidenhead Locator for Reporting
@ -3381,7 +3339,7 @@ VOID SendLocation()
SendReportMsg((char *)&AXMSG.DEST, Len + 16);
if (M0LTEMap)
SendDataToPktMap();
SendDataToPktMap("");
return;
@ -3389,6 +3347,7 @@ VOID SendLocation()
VOID SendMH(struct TNCINFO * TNC, char * call, char * freq, char * LOC, char * Mode)
{
MESSAGE AXMSG;
@ -3404,8 +3363,7 @@ VOID SendMH(struct TNCINFO * TNC, char * call, char * freq, char * LOC, char * M
// Block includes the Msg Header (7 bytes), Len Does not!
memcpy(AXPTR->DEST, ReportDest, 7);
if (TNC && TNC->PortRecord->PORTCONTROL.PORTCALL[0])
if (TNC->PortRecord->PORTCONTROL.PORTCALL[0])
memcpy(AXPTR->ORIGIN, TNC->PortRecord->PORTCONTROL.PORTCALL, 7);
else
memcpy(AXPTR->ORIGIN, MYCALL, 7);
@ -3565,10 +3523,8 @@ int __sync_lock_test_and_set(int * ptr, int val)
#endif // MACBPQ
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line)
void GetSemaphore(struct SEM * Semaphore, int ID)
{
//
// Wait for it to be free
@ -3612,8 +3568,6 @@ loop1:
Semaphore->SemProcessID = GetCurrentProcessId();
Semaphore->SemThreadID = GetCurrentThreadId();
SemHeldByAPI = ID;
Semaphore->Line = Line;
strcpy(Semaphore->File, File);
return;
}
@ -3681,22 +3635,11 @@ pthread_t ResolveUpdateThreadId = 0;
char NodeMapServer[80] = "update.g8bpq.net";
char ChatMapServer[80] = "chatupdate.g8bpq.net";
char NodeAPIServer[80] = "node-api.packet.oarc.uk";
int NodeAPIPort = 13579;
int nodeStartedSent = 0;
extern time_t LastNodeStatus;
void hookNodeStarted();
VOID ResolveUpdateThread(void * Unused)
{
struct hostent * HostEnt1;
struct hostent * HostEnt2;
struct hostent * HostEnt3;
ResolveUpdateThreadId = GetCurrentThreadId();
@ -3724,28 +3667,12 @@ VOID ResolveUpdateThread(void * Unused)
if (HostEnt2)
memcpy(&Chatreportdest.sin_addr.s_addr,HostEnt2->h_addr,4);
Debugprintf("Resolving %s", NodeAPIServer);
HostEnt3 = gethostbyname(NodeAPIServer);
if (HostEnt3)
{
memcpy(&UDPreportdest.sin_addr.s_addr,HostEnt3->h_addr,4);
if (nodeStartedSent == 0)
{
hookNodeStarted();
nodeStartedSent = 1;
LastNodeStatus = time(NULL);
}
}
if (HostEnt1 && HostEnt2)
{
Sleep(1000 * 60 * 30);
{
Sleep(1000 * 60 * 30);
continue;
}
Debugprintf("Resolve Failed for update.g8bpq.net or chatmap.g8bpq.net");
Sleep(1000 * 60 * 5);
}
@ -3761,7 +3688,7 @@ VOID OpenReportingSockets()
{
// Enable Node Map Reports
ReportTimer = 1200; // 2 mins - Give Rigcontrol time to start
ReportTimer = 60;
ReportSocket = socket(AF_INET,SOCK_DGRAM,0);
@ -3779,7 +3706,7 @@ VOID OpenReportingSockets()
reportdest.sin_port = htons(81);
ConvToAX25("DUMMY-1", ReportDest);
}
// Set up Chat Report even if no LOCATOR reportdest.sin_family = AF_INET;
// Socket must be opened in MailChat Process
@ -3787,11 +3714,6 @@ VOID OpenReportingSockets()
Chatreportdest.sin_port = htons(81);
_beginthread(ResolveUpdateThread, 0, NULL);
printf("MQTT Enabled %d\n", MQTT);
if (MQTT)
MQTTConnect(MQTT_HOST, MQTT_PORT, MQTT_USER, MQTT_PASS);
}
VOID WriteMiniDumpThread();
@ -4265,10 +4187,10 @@ VOID GetUIConfig()
if (group)
{
GetStringValue(group, "UIDEST", &UIUIDEST[Port][0], 11);
GetStringValue(group, "FileName", &FN[Port][0], 256);
GetStringValue(group, "Message", &Message[Port][0], 1000);
GetStringValue(group, "Digis", Digis, 100);
GetStringValue(group, "UIDEST", &UIUIDEST[Port][0]);
GetStringValue(group, "FileName", &FN[Port][0]);
GetStringValue(group, "Message", &Message[Port][0]);
GetStringValue(group, "Digis", Digis);
UIUIDigi[Port] = _strdup(Digis);
Interval[Port] = GetIntValue(group, "Interval");
@ -4299,21 +4221,15 @@ int GetIntValue(config_setting_t * group, char * name)
return 0;
}
BOOL GetStringValue(config_setting_t * group, char * name, char * value, int maxlen)
BOOL GetStringValue(config_setting_t * group, char * name, char * value)
{
char * str;
const char * str;
config_setting_t *setting;
setting = config_setting_get_member (group, name);
if (setting)
{
str = (char *)config_setting_get_string(setting);
if (strlen(str) > maxlen)
{
Debugprintf("Suspect config record %s", str);
str[maxlen] = 0;
}
str = config_setting_get_string (setting);
strcpy(value, str);
return TRUE;
}
@ -4845,14 +4761,13 @@ LRESULT CALLBACK UIWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam
extern struct DATAMESSAGE * REPLYBUFFER;
char * __cdecl Cmdprintf(TRANSPORTENTRY * Session, char * Bufferptr, const char * format, ...);
void GetPortCTEXT(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
void GetPortCTEXT(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
char FN[250];
FILE *hFile;
struct stat STAT;
struct PORTCONTROL * PORT = PORTTABLE;
char PortList[256] = "";
int len = 0;
while (PORT)
{
@ -4894,7 +4809,7 @@ void GetPortCTEXT(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, st
*ptr = '\r';
len += sprintf(&PortList[len], ",%d", PORT->PORTNUMBER);
sprintf(PortList, "%s,%d", PortList, PORT->PORTNUMBER);
}
PORT = PORT->PORTPOINTER;
@ -4944,6 +4859,7 @@ DllExport uint64_t APIENTRY GetPortFrequency(int PortNo, char * FreqString)
struct TNCINFO * TNC;
struct RIGINFO * RIG = 0;
int RigPort;
if (PORT->RIGPort)
TNC = TNCInfo[PORT->RIGPort];
@ -4999,7 +4915,7 @@ SOCKET OpenHTTPSock(char * Host)
{
err = WSAGetLastError();
Debugprintf("Resolve Failed for %s %d %x", Host, err, err);
Debugprintf("Resolve Failed for %s %d %x", "api.winlink.org", err, err);
return 0 ; // Resolve failed
}
@ -5032,7 +4948,7 @@ SOCKET OpenHTTPSock(char * Host)
}
static char HeaderTemplate[] = "POST %s HTTP/1.1\r\n"
"Accept: app N B lication/json\r\n"
"Accept: application/json\r\n"
// "Accept-Encoding: gzip,deflate,gzip, deflate\r\n"
"Content-Type: application/json\r\n"
"Host: %s:%d\r\n"
@ -5042,24 +4958,14 @@ static char HeaderTemplate[] = "POST %s HTTP/1.1\r\n"
"\r\n";
DllExport VOID WINAPI SendWebRequest(char * Host, char * Request, char * Params, char * Return)
VOID SendWebRequest(SOCKET sock, char * Host, char * Request, char * Params, int Len, char * Return)
{
SOCKET sock;
int InputLen = 0;
int inptr = 0;
char Buffer[4096];
char Header[256];
char * ptr, * ptr1;
int Sent;
int Len = strlen(Params);
if (M0LTEMap == 0)
return;
sock = OpenHTTPSock(Host);
if (sock == 0)
return;
#ifdef LINBPQ
sprintf(Header, HeaderTemplate, Request, Host, 80, Len, "linbpq/", VersionString, Params);
@ -5073,22 +4979,23 @@ DllExport VOID WINAPI SendWebRequest(char * Host, char * Request, char * Params,
{
int Err = WSAGetLastError();
Debugprintf("Error %d from Web Update send()", Err);
closesocket(sock);
return;
}
while (InputLen != -1)
{
InputLen = recv(sock, &Buffer[inptr], 4095 - inptr, 0);
InputLen = recv(sock, &Buffer[inptr], 4096 - inptr, 0);
if (InputLen == -1 || InputLen == 0)
{
int Err = WSAGetLastError();
Debugprintf("Error %d from Web Update recv()", Err);
closesocket(sock);
return;
}
// As we are using a persistant connection, can't look for close. Check
// for complete message
inptr += InputLen;
Buffer[inptr] = 0;
@ -5127,9 +5034,10 @@ DllExport VOID WINAPI SendWebRequest(char * Host, char * Request, char * Params,
else
{
strlop(Buffer, 13);
Debugprintf("Map Update Params - %s", Params);
Debugprintf("Map Update failed - %s", Buffer);
}
closesocket(sock);
return;
}
}
@ -5140,8 +5048,7 @@ DllExport VOID WINAPI SendWebRequest(char * Host, char * Request, char * Params,
if (ptr1)
{
// Just accept anything until I've sorted things with Lee
closesocket(sock);
Debugprintf("%s", ptr1);
Debugprintf("Web Database update ok");
return;
}
@ -5182,8 +5089,6 @@ void BuildPortMH(char * MHJSON, struct PORTCONTROL * PORT)
int len;
char * ptr;
char mhstr[400];
int i;
char c;
if (MH == NULL)
return;
@ -5205,16 +5110,7 @@ void BuildPortMH(char * MHJSON, struct PORTCONTROL * PORT)
continue;
}
// validate call to prevent corruption of json
for (i=0; i < len; i++)
{
c = Normcall[i];
if (!isalnum(c) && !(c == '#') && !(c == ' ') && !(c == '-'))
goto skipit;
}
Normcall[len++] = 0;
//format TIME
@ -5227,21 +5123,16 @@ void BuildPortMH(char * MHJSON, struct PORTCONTROL * PORT)
Normcall, PORT->PORTNUMBER, MH->MHCOUNT, MHTIME);
strcat( MHJSON, mhstr );
skipit:
MH++;
}
}
void SendDataToPktMapThread(void * Param);
void SendDataToPktMap()
void SendDataToPktMap(char *Msg)
{
_beginthread(SendDataToPktMapThread,2048000,0);
}
void SendDataToPktMapThread(void * Param)
{
char Return[256] = "";
SOCKET sock;
char Return[256];
char Request[64];
char Params[50000];
@ -5259,7 +5150,6 @@ void SendDataToPktMapThread(void * Param)
char * Use;
char * Type;
char * Modulation;
char * Usage;
char locked[] = " ! ";
int Percent = 0;
@ -5364,10 +5254,6 @@ void SendDataToPktMapThread(void * Param)
Type = "RF";
Bitrate = 0;
Modulation = "FSK";
Usage = "Access";
if (PORT->PortFreq)
Freq = PORT->PortFreq;
if (PORT->PORTTYPE == 0)
{
@ -5425,7 +5311,7 @@ void SendDataToPktMapThread(void * Param)
continue;
}
if (Freq == 0 && TNC->RIG)
if (TNC->RIG)
Freq = TNC->RIG->RigFreq * 1000000;
switch (TNC->Hardware) // Hardware Type
@ -5491,15 +5377,6 @@ void SendDataToPktMapThread(void * Param)
break;
case H_KISSHF:
// Try to get mode from ID then drop through
if (stristr(PORT->PORTDESCRIPTION, "BPSK"))
{
Modulation = "BPSK";
}
case H_WINMOR:
case H_V4:
@ -5508,7 +5385,7 @@ void SendDataToPktMapThread(void * Param)
case H_UIARQ:
case H_ARDOP:
case H_VARA:
case H_KISSHF:
case H_FREEDATA:
// TCP
@ -5544,58 +5421,12 @@ void SendDataToPktMapThread(void * Param)
while (*(ptr2) == ' ' && ptr2 != ID)
*(ptr2--) = 0;
if (PORT->M0LTEMapInfo)
{
// Override with user configured values - RF,7.045,BPSK,300,300,Access
char param[256];
char *p1, *p2, *p3, *p4, *p5;
strcpy(param, PORT->M0LTEMapInfo);
p1 = strlop(param, ',');
p2 = strlop(p1, ',');
p3 = strlop(p2, ',');
p4 = strlop(p3, ',');
p5 = strlop(p4, ',');
// int n = sscanf(PORT->M0LTEMapInfo, "%s,%s,%s,%s,%s,%s", &p1, &p2, &p3, &p4, &p5, &p6);
if (p5)
{
if (param[0]) Type = param;
if (p1[0])
{
// if set to DIAL+=n and frequency set from config or rigcontrol modify it
uint64_t offset = 0;
if (_memicmp(p1, "DIAL+", 5) == 0)
offset = atoi(&p1[5]);
else if (_memicmp(p1, "DIAL-", 5) == 0)
offset = -atoi(&p1[5]);
else
Freq = atof(p1) * 1000000;
if (Freq != 0)
Freq += offset;
}
if (p2[0]) Modulation = p2;
if (p3[0]) Baud = atoi(p3);
if (p4[0]) Bitrate = atoi(p4);
if (p5[0]) Usage = p5;
}
}
ptr += sprintf(ptr, "{\"id\": \"%d\",\"linkType\": \"%s\","
"\"freq\": \"%lld\",\"mode\": \"%s\",\"modulation\": \"%s\","
"\"baud\": \"%d\",\"bitrate\": \"%d\",\"usage\": \"%s\",\"comment\": \"%s\"},\r\n",
PortNo, Type,
Freq, Mode, Modulation,
Baud, Bitrate, Usage, ID);
Baud, Bitrate, "Access", ID);
// G7TAJ //
// make MH list to be added later
@ -5685,11 +5516,19 @@ void SendDataToPktMapThread(void * Param)
}
],
*/
// "contact": "string",
// "neighbours": [{"node": "G7TAJ","port": "30"}]
SendWebRequest("packetnodes.spots.radio", Request, Params, 0);
sock = OpenHTTPSock("packetnodes.spots.radio");
if (sock == 0)
return;
SendWebRequest(sock, "packetnodes.spots.radio", Request, Params, strlen(Params), Return);
closesocket(sock);
}
// ="{\"neighbours\": [{\"node\": \"G7TAJ\",\"port\": \"30\"}]}";

164
ConfigDirewolf.vcxproj Normal file
View file

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{271FDA0A-4F41-4F35-8227-9F2F29AA5A25}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ConsoleApplication2</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<ProjectName>ConfigDirewolf</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>c:\devprogs\bpq32\ConfigDirewolf.exe</OutputFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="ConfigDirewolf.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

164
ConfigWinRPR.vcxproj Normal file
View file

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{2AD91A25-DF1B-462E-8CCB-CD1ABC627AA5}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ConsoleApplication2</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<ProjectName>ConfigWinRPR</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<OutputFile>c:\devprogs\bpq32\ConfigWinRPR.exe</OutputFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="ConfigWinRPR.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

View file

@ -32,7 +32,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "compatbits.h"
#include "cheaders.h"
#include "CHeaders.h"
extern QCOUNT;
extern BPQVECSTRUC BPQHOSTVECTOR[];

View file

@ -21,7 +21,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define _CRT_SECURE_NO_DEPRECATE
#include "cheaders.h"
#include "CHeaders.h"
#include "bpq32.h"
#include "telnetserver.h"
@ -168,7 +168,7 @@ int AllocateDRATSStream(struct DRATSSession * Sess)
if (Stream == 255) return 0;
if (memcmp(Sess->CallTo, "NODE", 4) == 0)
if (memcmp(Sess->CallTo, "NODE", 6) == 0)
{
// Just connect to command level on switch
}
@ -563,7 +563,7 @@ void DRATSConnectionLost(struct ConnectionInfo * sockptr)
#define ZEXPORT __stdcall
#endif
#include <zlib.h>
#include "zlib.h"
int doinflate(unsigned char * source, unsigned char * dest, int Len, int destlen, int * outLen)

1059
Events.c

File diff suppressed because it is too large Load diff

View file

@ -23,14 +23,8 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "bpqmail.h"
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line);
void DeleteRestartData(CIRCUIT * conn);
int32_t Encode(char * in, char * out, int32_t inlen, BOOL B1Protocol, int Compress);
void MQTTMessageEvent(void* message);
int MaxRXSize = 99999;
int MaxTXSize = 99999;
@ -43,130 +37,6 @@ int B2RestartCount = 0;
extern char ProperBaseDir[];
char RestartDir[MAX_PATH] = "";
void GetRestartData()
{
int i;
struct FBBRestartData Restart;
struct FBBRestartData * RestartRec;
char MsgFile[MAX_PATH];
FILE * hFile;
int FileSize;
struct stat STAT;
size_t ReadLen = 0;
time_t Age;
strcpy(RestartDir, MailDir);
strcat(RestartDir, "/Restart");
// Make sure RestartDir exists
#ifdef WIN32
CreateDirectory(RestartDir, NULL); // Just in case
#else
mkdir(RestartDir, S_IRWXU | S_IRWXG | S_IRWXO);
chmod(RestartDir, S_IRWXU | S_IRWXG | S_IRWXO);
#endif
// look for restart files. These will be numbered from 1 up
for (i = 1; 1; i++)
{
sprintf_s(MsgFile, sizeof(MsgFile), "%s/%d", RestartDir, i);
if (stat(MsgFile, &STAT) == -1)
break;
FileSize = STAT.st_size;
Age = time(NULL) - STAT.st_ctime;
if (Age > 86400 * 2) // Max 2 days
continue;
hFile = fopen(MsgFile, "rb");
if (hFile == NULL)
break;
// Read Restart Record
fread(&Restart, 1, sizeof(struct FBBRestartData), hFile);
if ((Restart.MailBufferSize + sizeof(struct FBBRestartData)) != FileSize) // Duff file
{
fclose(hFile);
break;
}
RestartRec = zalloc(sizeof (struct FBBRestartData));
GetSemaphore(&AllocSemaphore, 0);
RestartData = realloc(RestartData,(++RestartCount+1) * sizeof(void *));
RestartData[RestartCount] = RestartRec;
FreeSemaphore(&AllocSemaphore);
memcpy(RestartRec, &Restart, sizeof(struct FBBRestartData));
RestartRec->MailBuffer = malloc(RestartRec->MailBufferSize);
ReadLen = fread(RestartRec->MailBuffer, 1, RestartRec->MailBufferSize, hFile);
Logprintf(LOG_BBS, 0, '?', "Restart Data for %s %s Len %d Loaded", RestartRec->Call, RestartRec->bid, RestartRec->length);
fclose(hFile);
}
}
void SaveRestartData()
{
// Save restart data to file so we can reload on restart
// Restart data has pointers to buffers so we must save copy of data and reconstitue on restart
// Delete and resave all restart data to keep restart directory clean
int i, n = 1;
char MsgFile[MAX_PATH];
FILE * hFile;
size_t WriteLen=0;
struct FBBRestartData * RestartRec = NULL;
struct stat STAT;
time_t NOW = time(NULL);
for (i = 1; 1; i++)
{
sprintf_s(MsgFile, sizeof(MsgFile), "%s/%d", RestartDir, i);
if (stat(MsgFile, &STAT) == -1)
break;
DeleteFile(MsgFile);
}
for (i = 1; i <= RestartCount; i++)
{
RestartRec = RestartData[i];
if (RestartRec == 0)
return; // Shouldn't happen!
if ((NOW - RestartRec->TimeCreated) > 86400 * 2) // Max 2 days
continue;
sprintf_s(MsgFile, sizeof(MsgFile), "%s/%d", RestartDir, n++);
hFile = fopen(MsgFile, "wb");
if (hFile)
{
WriteLen = fwrite(RestartRec, 1, sizeof(struct FBBRestartData), hFile); // Save Header
WriteLen = fwrite(RestartRec->MailBuffer, 1, RestartRec->MailBufferSize, hFile); // Save Data
fclose(hFile);
}
}
}
VOID FBBputs(CIRCUIT * conn, char * buf)
{
// Sends to user and logs
@ -937,11 +807,6 @@ VOID FlagSentMessages(CIRCUIT * conn, struct UserInfo * user)
FBBHeader->FwdMsg->datechanged=time(NULL);
}
#ifndef NOMQTT
if (MQTT)
MQTTMessageEvent(FBBHeader->FwdMsg);
#endif
FBBHeader->FwdMsg->Locked = 0; // Unlock
conn->UserPointer->ForwardingInfo->MsgCount--;
}
@ -1111,12 +976,12 @@ loop:
{
RestartRec = RestartData[i];
if ((strcmp(RestartRec->Call, conn->UserPointer->Call) == 0)
&& (strcmp(RestartRec->bid, conn->TempMsg->bid) == 0))
if ((RestartRec->UserPointer == conn->UserPointer)
&& (strcmp(RestartRec->TempMsg->bid, conn->TempMsg->bid) == 0))
{
if (RestartRec->length <= offset)
if (RestartRec->TempMsg->length <= offset)
{
conn->TempMsg->length = RestartRec->length;
conn->TempMsg->length = RestartRec->TempMsg->length;
conn->MailBuffer = RestartRec->MailBuffer;
conn->MailBufferSize = RestartRec->MailBufferSize;
@ -1145,7 +1010,6 @@ loop:
RestartData[n] = RestartData[n+1]; // move down all following entries
}
RestartCount--;
SaveRestartData();
}
}
@ -1273,7 +1137,6 @@ loop:
{
#endif
conn->InputMode = 0; // So we won't save Restart data if decode fails
DeleteRestartData(conn);
Decode(conn, 0); // Setup Next Message will reset InputMode if needed
#ifndef LINBPQ
}
@ -1973,14 +1836,14 @@ VOID SaveFBBBinary(CIRCUIT * conn)
{
RestartRec = RestartData[i];
if ((strcmp(RestartRec->Call, conn->UserPointer->Call) == 0)
&& (strcmp(RestartRec->bid, conn->TempMsg->bid) == 0))
if ((RestartRec->UserPointer == conn->UserPointer)
&& (strcmp(RestartRec->TempMsg->bid, conn->TempMsg->bid) == 0))
{
// Found it, so reuse
// Fund it, so reuse
// If we have more data, reset retry count
if (RestartRec->length < conn->TempMsg->length)
if (RestartRec->TempMsg->length < conn->TempMsg->length)
RestartRec->Count = 0;;
break;
@ -1997,53 +1860,19 @@ VOID SaveFBBBinary(CIRCUIT * conn)
RestartData[RestartCount] = RestartRec;
FreeSemaphore(&AllocSemaphore);
RestartRec->TimeCreated = time(NULL);
}
strcpy(RestartRec->Call, conn->UserPointer->Call);
RestartRec->length = conn->TempMsg->length;
strcpy(RestartRec->bid, conn->TempMsg->bid);
RestartRec->UserPointer = conn->UserPointer;
RestartRec->TempMsg = conn->TempMsg;
RestartRec->MailBuffer = conn->MailBuffer;
RestartRec->MailBufferSize = conn->MailBufferSize;
len = sprintf_s(Msg, sizeof(Msg), "Disconnect received from %s during Binary Transfer - %d Bytes Saved for restart",
conn->Callsign, conn->TempMsg->length);
SaveRestartData();
WriteLogLine(conn, '|',Msg, len, LOG_BBS);
}
void DeleteRestartData(CIRCUIT * conn)
{
struct FBBRestartData * RestartRec = NULL;
int i, n;
if (conn->TempMsg == NULL)
return;
for (i = 1; i <= RestartCount; i++)
{
RestartRec = RestartData[i];
if ((strcmp(RestartRec->Call, conn->UserPointer->Call) == 0)
&& (strcmp(RestartRec->bid, conn->TempMsg->bid) == 0))
{
// Remove restrt data
for (n = i; n < RestartCount; n++)
{
RestartData[n] = RestartData[n+1]; // move down all following entries
}
RestartCount--;
SaveRestartData();
return;
}
}
}
BOOL LookupRestart(CIRCUIT * conn, struct FBBHeaderLine * FBBHeader)
{
int i, n;
@ -2057,15 +1886,15 @@ BOOL LookupRestart(CIRCUIT * conn, struct FBBHeaderLine * FBBHeader)
{
RestartRec = RestartData[i];
if ((strcmp(RestartRec->Call, conn->UserPointer->Call) == 0)
&& (strcmp(RestartRec->bid, FBBHeader->BID) == 0))
if ((RestartRec->UserPointer == conn->UserPointer)
&& (strcmp(RestartRec->TempMsg->bid, FBBHeader->BID) == 0))
{
char Msg[120];
int len;
RestartRec->Count++;
if (RestartRec->Count > 10)
if (RestartRec->Count > 3)
{
len = sprintf_s(Msg, sizeof(Msg), "Too many restarts for %s - Requesting restart from beginning",
FBBHeader->BID);
@ -2080,16 +1909,15 @@ BOOL LookupRestart(CIRCUIT * conn, struct FBBHeaderLine * FBBHeader)
}
RestartCount--;
SaveRestartData();
return FALSE;
}
len = sprintf_s(Msg, sizeof(Msg), "Restart Data found for %s - Requesting restart from %d",
FBBHeader->BID, RestartRec->length);
FBBHeader->BID, RestartRec->TempMsg->length);
WriteLogLine(conn, '|',Msg, len, LOG_BBS);
return (RestartRec->length);
return (RestartRec->TempMsg->length);
}
}

View file

@ -23,7 +23,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define _CRT_SECURE_NO_DEPRECATE
#include "cheaders.h"
#include "CHeaders.h"
extern int (WINAPI FAR *GetModuleFileNameExPtr)();
extern int (WINAPI FAR *EnumProcessesPtr)();
@ -36,12 +36,6 @@ extern int (WINAPI FAR *EnumProcessesPtr)();
#include "bpq32.h"
void hookL4SessionAttempt(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionAccepted(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionDeleted(struct TNCINFO * TNC, void * STREAM);
#define VERSION_MAJOR 2
#define VERSION_MINOR 0
@ -71,12 +65,12 @@ extern int (WINAPI FAR *GetModuleFileNameExPtr)();
;
int SemHeldByAPI;
void ConnecttoFLDigiThread(void * portptr);
static void ConnecttoFLDigiThread(void * portptr);
void CreateMHWindow();
int Update_MH_List(struct in_addr ipad, char * call, char proto);
int ConnecttoFLDigi(int port);
static int ConnecttoFLDigi();
static int ProcessReceivedData(int bpqport);
static int ProcessLine(char * buf, int Port);
int KillTNC(struct TNCINFO * TNC);
@ -99,7 +93,6 @@ VOID CheckFLDigiData(struct TNCINFO * TNC);
VOID SendPacket(struct TNCINFO * TNC, UCHAR * Msg, int MsgLen);
int KissEncode(UCHAR * inbuff, UCHAR * outbuff, int len);
VOID SendXMLCommand(struct TNCINFO * TNC, char * Command, char * Value, char ParamType);
VOID SendXMLCommandInt(struct TNCINFO * TNC, char * Command, int Value, char ParamType);
VOID FLSlowTimer(struct TNCINFO * TNC);
VOID SendKISSCommand(struct TNCINFO * TNC, char * Msg);
@ -108,6 +101,8 @@ VOID SuspendOtherPorts(struct TNCINFO * ThisTNC);
VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
char * strlop(char * buf, char delim);
extern UCHAR BPQDirectory[];
#define MAXMPSKPORTS 16
@ -544,12 +539,8 @@ pollloop:
if (_memicmp(&buff->L2DATA[0], "RADIO ", 6) == 0)
{
char cmd[56];
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, &buff->L2DATA[6]);
strcpy(cmd, &buff->L2DATA[6]);
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, cmd);
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &buff->L2DATA[0]))
{
}
@ -601,7 +592,7 @@ pollloop:
}
else
{
SendXMLCommandInt(TNC, "modem.set_carrier", atoi(&buff->L2DATA[5]), 'I');
SendXMLCommand(TNC, "modem.set_carrier", (char *)atoi(&buff->L2DATA[5]), 'I');
}
TNC->InternalCmd = TRUE;
@ -825,7 +816,7 @@ pollloop:
char outbuff[1000];
int newlen;
buff->PID = 6; // KISS Control (PID is just before Data)
buff->L2DATA[-1] = 6; // KISS Control
newlen = KissEncode(&buff->L2DATA[-1], outbuff, txlen);
sendto(TNC->TCPDataSock, outbuff, newlen, 0, (struct sockaddr *)&TNC->Datadestaddr, sizeof(struct sockaddr));
@ -1190,6 +1181,7 @@ VOID * FLDigiExtInit(EXTPORTDATA * PortEntry)
}
TNC->Port = port;
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
@ -1220,7 +1212,7 @@ VOID * FLDigiExtInit(EXTPORTDATA * PortEntry)
ptr=strchr(TNC->NodeCall, ' ');
if (ptr) *(ptr) = 0; // Null Terminate
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_FLDIGI;
TNC->Hardware = H_FLDIGI;
if (TNC->BusyWait == 0)
TNC->BusyWait = 10;
@ -1490,14 +1482,14 @@ static int ProcessLine(char * buf, int Port)
return (TRUE);
}
int ConnecttoFLDigi(int port)
static int ConnecttoFLDigi(int port)
{
_beginthread(ConnecttoFLDigiThread, 0, (void *)(size_t)port);
return 0;
}
VOID ConnecttoFLDigiThread(void * portptr)
static VOID ConnecttoFLDigiThread(void * portptr)
{
int port = (int)(size_t)portptr;
char Msg[255];
@ -1645,7 +1637,7 @@ VOID ConnecttoFLDigiThread(void * portptr)
VOID UpdateStatsLine(struct TNCINFO * TNC, struct STREAMINFO * STREAM)
{
sprintf(TNC->WEB_TRAFFIC, "RX %d TX %d ACKED %d Resent %d Queued %d",
STREAM->bytesRXed, STREAM->bytesTXed, STREAM->BytesAcked, STREAM->BytesResent, STREAM->BytesOutstanding);
STREAM->BytesRXed, STREAM->BytesTXed, STREAM->BytesAcked, STREAM->BytesResent, STREAM->BytesOutstanding);
SetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
}
@ -2539,7 +2531,7 @@ VOID ProcessFLDigiData(struct TNCINFO * TNC, UCHAR * Input, int Len, char Channe
strcpy(STREAM->MyCall, call2);
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->BytesAcked = STREAM->BytesResent = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->BytesAcked = STREAM->BytesResent = 0;
if (TNC->RIG && TNC->RIG != &TNC->DummyRig && strcmp(TNC->RIG->RigName, "PTT"))
{
@ -2588,7 +2580,7 @@ VOID ProcessFLDigiData(struct TNCINFO * TNC, UCHAR * Input, int Len, char Channe
{
char AppName[13];
memcpy(AppName, &ApplPtr[App * sizeof(struct CMDX)], 12);
memcpy(AppName, &ApplPtr[App * sizeof(CMDX)], 12);
AppName[12] = 0;
// Make sure app is available
@ -2698,7 +2690,7 @@ AckConnectRequest:
goto SendKReply; // Repeated ACK
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->BytesAcked = STREAM->BytesResent = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->BytesAcked = STREAM->BytesResent = 0;
STREAM->Connected = TRUE;
ARQ->ARQTimerState = 0;
@ -2959,7 +2951,22 @@ SendKReply:
if (STREAM->Connected)
{
hookL4SessionDeleted(TNC, STREAM);
// Create a traffic record
char logmsg[120];
time_t Duration;
Duration = time(NULL) - STREAM->ConnectTime;
if (Duration == 0)
Duration = 1;
sprintf(logmsg,"Port %2d %9s Bytes Sent %d BPS %d Bytes Received %d BPS %d Time %d Seconds",
TNC->Port, STREAM->RemoteCall,
STREAM->BytesTXed, (int)(STREAM->BytesTXed/Duration),
STREAM->BytesRXed, (int)(STREAM->BytesRXed/Duration), (int)Duration);
Debugprintf(logmsg);
}
STREAM->Connecting = FALSE;
@ -3022,7 +3029,7 @@ SendKReply:
buffptr->Len = Len;
memcpy(buffptr->Data, &Input[1], Len);
STREAM->bytesRXed += Len;
STREAM->BytesRXed += Len;
UpdateStatsLine(TNC, STREAM);
@ -3139,7 +3146,7 @@ VOID SendARQData(struct TNCINFO * TNC, PMSGWITHLEN Buffer)
ARQ->TXHOLDQ[ARQ->TXSeq] = Buffer;
STREAM->bytesTXed += Origlen;
STREAM->BytesTXed += Origlen;
UpdateStatsLine(TNC, STREAM);
@ -3205,7 +3212,7 @@ VOID FLReleaseTNC(struct TNCINFO * TNC)
else
{
SendXMLCommand(TNC, "modem.set_by_name", TNC->FLInfo->DefaultMode, 'S');
SendXMLCommandInt(TNC, "modem.set_carrier", TNC->FLInfo->DefaultFreq, 'I');
SendXMLCommand(TNC, "modem.set_carrier", (char *)TNC->FLInfo->DefaultFreq, 'I');
}
}
// Start Scanner
@ -3903,27 +3910,6 @@ VOID SendXMLCommand(struct TNCINFO * TNC, char * Command, char * Value, char Par
return;
}
VOID SendXMLCommandInt(struct TNCINFO * TNC, char * Command, int Value, char ParamType)
{
int Len;
char ReqBuf[512];
char SendBuff[512];
struct FLINFO * FL = TNC->FLInfo;
struct ARQINFO * ARQ = TNC->ARQInfo;
char ValueString[256] ="";
if (!TNC->CONNECTED || TNC->FLInfo->KISSMODE)
return;
sprintf(ValueString, "<params><param><value><i4>%d</i4></value></param></params\r\n>", Value);
strcpy(FL->LastXML, Command);
Len = sprintf(ReqBuf, Req, FL->LastXML, ValueString);
Len = sprintf(SendBuff, MsgHddr, Len, ReqBuf);
send(TNC->TCPSock, SendBuff, Len, 0);
return;
}
VOID SendXMLPoll(struct TNCINFO * TNC)
{
int Len;

219
FormatHTML.vcproj Normal file
View file

@ -0,0 +1,219 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="FormatHTML"
ProjectGUID="{2B892B53-6549-4872-AF51-45280ADC8AB5}"
RootNamespace="FormatHTML"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib $(NoInherit)"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib $(NoInherit)"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\FormatHTML.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
CompileAs="1"
/>
</FileConfiguration>
</File>
<File
RelativePath=".\stdafx.cpp"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\stdafx.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -32,7 +32,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#endif
#endif
#include "cheaders.h"
#include "CHeaders.h"
#include "bpq32.h"
#include "tncinfo.h"
@ -43,11 +43,6 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
int KillTNC(struct TNCINFO * TNC);
static int RestartTNC(struct TNCINFO * TNC);
void hookL4SessionAttempt(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionAccepted(struct STREAMINFO * , char * remotecall, char * ourcall);
void hookL4SessionDeleted(struct TNCINFO * TNC, void * STREAM);
extern int (WINAPI FAR *GetModuleFileNameExPtr)();
extern int (WINAPI FAR *EnumProcessesPtr)();
static int Socket_Data(int sock, int error, int eventcode);
@ -352,6 +347,41 @@ loop:
return 1;
}
BOOL FreeDataReadConfigFile(int Port, int ProcLine())
{
char buf[256],errbuf[256];
Config = PortConfig[Port];
if (Config)
{
// Using config from bpq32.cfg
if (strlen(Config) == 0)
{
return TRUE;
}
ptr1 = Config;
ptr2 = strchr(ptr1, 13);
if (!ProcLine(buf, Port))
{
WritetoConsoleLocal("\n");
WritetoConsoleLocal("Bad config record ");
WritetoConsoleLocal(errbuf);
}
}
else
{
sprintf(buf," ** Error - No Configuration info in bpq32.cfg");
WritetoConsoleLocal(buf);
}
return (TRUE);
}
VOID SuspendOtherPorts(struct TNCINFO * ThisTNC);
VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
@ -457,11 +487,6 @@ 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);
}
}
@ -661,7 +686,8 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
if (buffptr == 0) return (0); // No buffers, so ignore
buffptr->Len = sprintf(&buffptr->Data[0], "No Connection to TNC\r");
buffptr->Len = 36;
memcpy(&buffptr->Data[0], "No Connection to TNC\r", 36);
C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr);
@ -750,10 +776,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
if (_memicmp(&buff->L2DATA[0], "RADIO ", 6) == 0)
{
char cmd[56];
strcpy(cmd, &buff->L2DATA[6]);
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, cmd);
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, &buff->L2DATA[6]);
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &buff->L2DATA[0]))
{
@ -845,7 +868,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
char Message[256];
int Len, ret;
Len = sprintf(Message, "%s", TXF);
Len = sprintf(Message, TXF);
ret = send(TNC->TCPDataSock, (char *)&Message, Len, 0);
if (buffptr)
@ -949,7 +972,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
memset(STREAM->RemoteCall, 0, 10);
strcpy(STREAM->RemoteCall, &buff->L2DATA[2]);
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->PacketsSent = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->PacketsSent = 0;
sprintf(TNC->WEB_TNCSTATE, "%s Connecting to %s", STREAM->MyCall, STREAM->RemoteCall);
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
@ -1406,14 +1429,14 @@ VOID * FreeDataExtInit(EXTPORTDATA * PortEntry)
Consoleprintf("FreeData Host %s %d", TNC->HostName, TNC->TCPPort);
TNC->Port = port;
TNC->PortRecord = PortEntry;
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_FREEDATA;
TNC->Hardware = H_FREEDATA;
TNC->WeStartedTNC = 1;
TNC->ARDOPDataBuffer = malloc(MAXRXSIZE);
TNC->ARDOPBuffer = malloc(FREEDATABUFLEN);
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
memcpy(TNC->NodeCall, MYNODECALL, 10);
@ -1859,7 +1882,7 @@ VOID FreeDataProcessTNCMessage(struct TNCINFO * TNC, char * Call, unsigned char
if (App < 32)
{
memcpy(AppName, &ApplPtr[App * sizeof(struct CMDX)], 12);
memcpy(AppName, &ApplPtr[App * sizeof(CMDX)], 12);
AppName[12] = 0;
// if SendTandRtoRelay set and Appl is RMS change to RELAY
@ -1928,7 +1951,7 @@ VOID FreeDataProcessTNCMessage(struct TNCINFO * TNC, char * Call, unsigned char
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->PacketsSent = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->PacketsSent = 0;
STREAM->Connected = TRUE;
// Send Connect ACK
@ -1997,7 +2020,20 @@ VOID FreeDataProcessTNCMessage(struct TNCINFO * TNC, char * Call, unsigned char
{
// Create a traffic record
hookL4SessionDeleted(TNC, STREAM);
char logmsg[120];
time_t Duration;
Duration = time(NULL) - STREAM->ConnectTime;
if (Duration == 0)
Duration = 1;
sprintf(logmsg,"Port %2d %9s Bytes Sent %d BPS %d Bytes Received %d BPS %d Time %d Seconds",
TNC->Port, STREAM->RemoteCall,
STREAM->BytesTXed, (int)(STREAM->BytesTXed/Duration),
STREAM->BytesRXed, (int)(STREAM->BytesRXed/Duration), (int)Duration);
Debugprintf(logmsg);
}
STREAM->Connected = FALSE; // Back to Command Mode
@ -2027,7 +2063,7 @@ VOID FreeDataProcessTNCMessage(struct TNCINFO * TNC, char * Call, unsigned char
WritetoTrace(TNC, Msg, 256);
Len -= 256;
Msg += 256;
STREAM->bytesRXed += 256;
STREAM->BytesRXed += 256;
}
@ -2036,9 +2072,9 @@ VOID FreeDataProcessTNCMessage(struct TNCINFO * TNC, char * Call, unsigned char
memcpy(buffptr->Data, Msg, Len);
C_Q_ADD(&STREAM->PACTORtoBPQ_Q, buffptr);
WritetoTrace(TNC, Msg, Len);
STREAM->bytesRXed += Len;
STREAM->BytesRXed += Len;
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->bytesRXed, TNC->FreeDataInfo->toSendCount);
STREAM->BytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->BytesRXed, TNC->FreeDataInfo->toSendCount);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
return;
@ -2220,7 +2256,7 @@ VOID FreeDataProcessNewConnect(struct TNCINFO * TNC, char * fromCall, char * toC
if (App < 32)
{
memcpy(AppName, &ApplPtr[App * sizeof(struct CMDX)], 12);
memcpy(AppName, &ApplPtr[App * sizeof(CMDX)], 12);
AppName[12] = 0;
// if SendTandRtoRelay set and Appl is RMS change to RELAY
@ -2291,7 +2327,7 @@ VOID FreeDataProcessNewConnect(struct TNCINFO * TNC, char * fromCall, char * toC
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->PacketsSent = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->PacketsSent = 0;
STREAM->Connected = TRUE;
return;
@ -2391,7 +2427,7 @@ void FlushData(struct TNCINFO * TNC)
Info->toSendTimeout = 0;
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->bytesRXed, TNC->FreeDataInfo->toSendCount);
STREAM->BytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->BytesRXed, TNC->FreeDataInfo->toSendCount);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
}
@ -2414,10 +2450,10 @@ static int SendAsFile(struct TNCINFO * TNC, char * Call, char * Msg, int Len)
Info->toSendCount += Len;
Info->toSendTimeout = 10; // About a second
STREAM->bytesTXed += Len;
STREAM->BytesTXed += Len;
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->bytesRXed, TNC->FreeDataInfo->toSendCount);
STREAM->BytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->BytesRXed, TNC->FreeDataInfo->toSendCount);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
return Len;
@ -2454,7 +2490,7 @@ static void SendCQ(struct TNCINFO * TNC)
char Message[256];
int Len, ret;
Len = sprintf(Message, "%s", CQ);
Len = sprintf(Message, CQ);
ret = send(TNC->TCPDataSock, (char *)&Message, Len, 0);
}
@ -2469,7 +2505,7 @@ static void SendBeacon(struct TNCINFO * TNC, int Interval)
if (Interval > 0)
Len = sprintf(Message, Template1, Interval);
else
Len = sprintf(Message, "%s", Template2);
Len = sprintf(Message, Template2);
ret = send(TNC->TCPDataSock, (char *)&Message, Len, 0);
}
@ -2684,7 +2720,7 @@ void ProcessMessageObject(struct TNCINFO * TNC, char * This)
WritetoTrace(TNC, Line, 256);
Len -= 256;
Line += 256;
STREAM->bytesRXed += 256;
STREAM->BytesRXed += 256;
}
buffptr = GetBuff();
@ -2692,12 +2728,12 @@ void ProcessMessageObject(struct TNCINFO * TNC, char * This)
memcpy(buffptr->Data, Line, Len);
C_Q_ADD(&STREAM->PACTORtoBPQ_Q, buffptr);
WritetoTrace(TNC, Line, Len);
STREAM->bytesRXed += Len;
STREAM->BytesRXed += Len;
}
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->bytesRXed, TNC->FreeDataInfo->toSendCount);
STREAM->BytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->BytesRXed, TNC->FreeDataInfo->toSendCount);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
}
return;
@ -2776,7 +2812,7 @@ void ProcessMessageObject(struct TNCINFO * TNC, char * This)
WritetoTrace(TNC, Line, 256);
Len -= 256;
TEXT += 256;
STREAM->bytesRXed += 256;
STREAM->BytesRXed += 256;
}
buffptr = GetBuff();
@ -2784,14 +2820,14 @@ void ProcessMessageObject(struct TNCINFO * TNC, char * This)
memcpy(buffptr->Data, Line, Len);
C_Q_ADD(&STREAM->PACTORtoBPQ_Q, buffptr);
WritetoTrace(TNC, Line, Len);
STREAM->bytesRXed += Len;
STREAM->BytesRXed += Len;
TEXT = rest;
rest = strlop(TEXT, 10); // FreeData chat ues LF
}
sprintf(TNC->WEB_TRAFFIC, "Sent %d RXed %d Queued %d",
STREAM->bytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->bytesRXed, TNC->FreeDataInfo->toSendCount);
STREAM->BytesTXed - TNC->FreeDataInfo->toSendCount, STREAM->BytesRXed, TNC->FreeDataInfo->toSendCount);
MySetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
}
}
@ -3123,8 +3159,22 @@ void ProcessTNCJSON(struct TNCINFO * TNC, char * Msg, int Len)
if (STREAM->Connected)
{
hookL4SessionDeleted(TNC, STREAM);
// Create a traffic record
char logmsg[120];
time_t Duration;
Duration = time(NULL) - STREAM->ConnectTime;
if (Duration == 0)
Duration = 1;
sprintf(logmsg,"Port %2d %9s Bytes Sent %d BPS %d Bytes Received %d BPS %d Time %d Seconds",
TNC->Port, STREAM->RemoteCall,
STREAM->BytesTXed, (int)(STREAM->BytesTXed/Duration),
STREAM->BytesRXed, (int)(STREAM->BytesRXed/Duration), (int)Duration);
Debugprintf(logmsg);
STREAM->Connected = FALSE; // Back to Command Mode
STREAM->ReportDISC = TRUE; // Tell Node
@ -3165,7 +3215,7 @@ void ProcessTNCJSON(struct TNCINFO * TNC, char * Msg, int Len)
}
}
else if (memcmp(ptr, "close", 5) == 0)
else if (memcmp(ptr, "close", 12) == 0)
{
if (TNC->FreeDataInfo->arqstate != 4)
{
@ -3302,7 +3352,20 @@ void ProcessTNCJSON(struct TNCINFO * TNC, char * Msg, int Len)
{
// Create a traffic record
hookL4SessionDeleted(TNC, STREAM);
char logmsg[120];
time_t Duration;
Duration = time(NULL) - STREAM->ConnectTime;
if (Duration == 0)
Duration = 1;
sprintf(logmsg,"Port %2d %9s Bytes Sent %d BPS %d Bytes Received %d BPS %d Time %d Seconds",
TNC->Port, STREAM->RemoteCall,
STREAM->BytesTXed, (int)(STREAM->BytesTXed/Duration),
STREAM->BytesRXed, (int)(STREAM->BytesRXed/Duration), (int)Duration);
Debugprintf(logmsg);
STREAM->Connected = FALSE; // Back to Command Mode
STREAM->ReportDISC = TRUE; // Tell Node
@ -3660,7 +3723,7 @@ int FreeDataDisconnect(struct TNCINFO * TNC)
// return FreeDataSendCommand(TNC, "D");
Len = sprintf(Msg, "%s", Disconnect);
Len = sprintf(Msg, Disconnect);
return send(TNC->TCPDataSock, Msg, Len, 0);
}
@ -3672,7 +3735,7 @@ int FreeGetData(struct TNCINFO * TNC)
char Msg[128];
int Len;
Len = sprintf(Msg, "%s", GetData);
Len = sprintf(Msg, GetData);
return send(TNC->TCPDataSock, Msg, Len, 0);
}
@ -4152,7 +4215,7 @@ void buildParamString(struct TNCINFO * TNC, char * line)
FDI->TuningRange * -1.0, FDI->TuningRange * 1.0, FDI->TXLevel);
if (FDI->hamlibHost)
sprintf(&line[strlen(line)], " --rigctld_ip %s --rigctld_port %d", FDI->hamlibHost, FDI->hamlibPort);
sprintf(line, "%s --rigctld_ip %s --rigctld_port %d", line, FDI->hamlibHost, FDI->hamlibPort);
if (FDI->LimitBandWidth)
strcat(line, " --500hz");

View file

@ -28,7 +28,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "time.h"
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
#include "bpq32.h"
@ -471,7 +471,7 @@ VOID * HALExtInit(EXTPORTDATA * PortEntry)
int port;
char * ptr;
int len;
char Msg[512];
char Msg[80];
#ifndef LINBPQ
HWND x;
#endif
@ -499,15 +499,15 @@ VOID * HALExtInit(EXTPORTDATA * PortEntry)
}
TNC->Port = port;
TNC->PortRecord = PortEntry;
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_HAL;
TNC->Hardware = H_HAL;
if (PortEntry->PORTCONTROL.PORTINTERLOCK && TNC->RXRadio == 0 && TNC->TXRadio == 0)
TNC->RXRadio = TNC->TXRadio = PortEntry->PORTCONTROL.PORTINTERLOCK;
PortEntry->MAXHOSTMODESESSIONS = 1; // Default
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
{
@ -548,7 +548,7 @@ VOID * HALExtInit(EXTPORTDATA * PortEntry)
TNC->WebWinX = 510;
TNC->WebWinY = 280;
TNC->WEB_COMMSSTATE = zalloc(512);
TNC->WEB_COMMSSTATE = zalloc(100);
TNC->WEB_TNCSTATE = zalloc(100);
strcpy(TNC->WEB_TNCSTATE, "Free");
TNC->WEB_MODE = zalloc(100);
@ -749,7 +749,7 @@ VOID HALPoll(int Port)
STREAM->Attached = TRUE;
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->BytesAcked = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->BytesAcked = 0;
calllen = ConvFromAX25(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4USER, STREAM->MyCall);
STREAM->MyCall[calllen] = 0;
@ -829,7 +829,7 @@ VOID HALPoll(int Port)
//for (Stream = 0; Stream <= MaxStreams; Stream++)
{
if (TNC->TNCOK && STREAM->BPQtoPACTOR_Q && (STREAM->bytesTXed - STREAM->BytesAcked < 600))
if (TNC->TNCOK && STREAM->BPQtoPACTOR_Q && (STREAM->BytesTXed - STREAM->BytesAcked < 600))
{
int datalen;
PMSGWITHLEN buffptr;
@ -872,7 +872,7 @@ VOID HALPoll(int Port)
ReleaseBuffer(buffptr);
WriteLogLine(2, MsgPtr, datalen);
STREAM->bytesTXed += datalen;
STREAM->BytesTXed += datalen;
STREAM->FramesQueued--;
ShowTraffic(TNC);
@ -1090,10 +1090,10 @@ VOID ProcessHALData(struct TNCINFO * TNC)
STREAM->BytesAcked += Len;
// Debugprintf("Acked %d", Len);
if (STREAM->BytesAcked > STREAM->bytesTXed)
if (STREAM->BytesAcked > STREAM->BytesTXed)
Debugprintf("Too Much Acked");
if ((STREAM->BPQtoPACTOR_Q == 0) && STREAM->BytesAcked >= STREAM->bytesTXed)
if ((STREAM->BPQtoPACTOR_Q == 0) && STREAM->BytesAcked >= STREAM->BytesTXed)
{
// All sent
@ -1121,7 +1121,7 @@ VOID ProcessHALData(struct TNCINFO * TNC)
WriteLogLine(1, TNC->DataBuffer, Len);
STREAM->bytesRXed += Len;
STREAM->BytesRXed += Len;
memcpy(buffptr->Data, TNC->DataBuffer, Len);
@ -1756,7 +1756,7 @@ BOOL HALConnected(struct TNCINFO * TNC, char * Call)
strcpy(CallCopy, Call);
strcat(CallCopy, " "); // Some routines expect 10 char calls
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->BytesAcked = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->BytesAcked = 0;
STREAM->ConnectTime = time(NULL);
// Stop Scanner
@ -1804,7 +1804,7 @@ BOOL HALConnected(struct TNCINFO * TNC, char * Call)
EncodeAndSend(TNC, CTEXTMSG, CTEXTLEN);
WriteLogLine(2, CTEXTMSG, CTEXTLEN);
STREAM->bytesTXed += CTEXTLEN;
STREAM->BytesTXed += CTEXTLEN;
}
return TRUE;
}

View file

@ -30,7 +30,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "kernelresource.h"
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
#ifndef LINBPQ
#include <commctrl.h>
@ -336,8 +336,7 @@ LRESULT CALLBACK PacWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
}
#endif
BOOL CreatePactorWindow(struct TNCINFO * TNC, char * ClassName, char * WindowTitle, int RigControlRow, WNDPROC WndProc, int Width, int Height,
VOID ForcedCloseProc(struct TNCINFO * TNC, int Stream))
BOOL CreatePactorWindow(struct TNCINFO * TNC, char * ClassName, char * WindowTitle, int RigControlRow, WNDPROC WndProc, int Width, int Height, VOID ForcedCloseProc())
{
#ifdef LINBPQ
return FALSE;
@ -1603,7 +1602,7 @@ VOID ShowTraffic(struct TNCINFO * TNC)
char Status[80];
sprintf(Status, "RX %d TX %d ACKED %d ",
TNC->Streams[0].bytesRXed, TNC->Streams[0].bytesTXed, TNC->Streams[0].BytesAcked);
TNC->Streams[0].BytesRXed, TNC->Streams[0].BytesTXed, TNC->Streams[0].BytesAcked);
#ifndef LINBPQ
SetDlgItemText(TNC->hDlg, IDC_TRAFFIC, Status);
#endif
@ -1866,6 +1865,9 @@ static char ** SeparateMultiString(char * MultiString)
return Value;
}
extern int nextDummyInterlock;
int standardParams(struct TNCINFO * TNC, char * buf)
@ -1874,8 +1876,6 @@ int standardParams(struct TNCINFO * TNC, char * buf)
TNC->WL2K = DecodeWL2KReportLine(buf);
else if (_memicmp(buf, "SESSIONTIMELIMIT", 16) == 0)
TNC->SessionTimeLimit = TNC->DefaultSessionTimeLimit = atoi(&buf[17]) * 60;
else if (_memicmp(buf, "ATTACHTIMELIMIT", 15) == 0)
TNC->AttachTimeLimit = atoi(&buf[16]) * 60;
else if (_memicmp(buf, "BUSYHOLD", 8) == 0) // Hold Time for Busy Detect
TNC->BusyHold = atoi(&buf[8]);
else if (_memicmp(buf, "BUSYWAIT", 8) == 0) // Wait time before failing connect if busy
@ -1914,7 +1914,7 @@ int standardParams(struct TNCINFO * TNC, char * buf)
TNC->ActiveTXFreq = atof(&buf[13]);
else if (_memicmp(buf, "ActiveRXFreq", 12) == 0) // Set at start of session
TNC->ActiveRXFreq = atof(&buf[13]);
else if (_memicmp(buf, "DisconnectScript", 16) == 0) // Set at end of session
else if (_memicmp(buf, "DisconnectScript", 16) == 0) // Set at start of session
TNC->DisconnectScript = SeparateMultiString(&buf[17]);
else if (_memicmp(buf, "PTTONHEX", 8) == 0)
{

View file

@ -33,7 +33,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#endif
#include "cheaders.h"
#include "CHeaders.h"
#pragma pack(1)
@ -309,10 +309,47 @@ loop:
return 1;
}
BOOL HSMODEMReadConfigFile(int Port, int ProcLine())
{
char buf[256],errbuf[256];
Config = PortConfig[Port];
if (Config)
{
// Using config from bpq32.cfg
if (strlen(Config) == 0)
{
return TRUE;
}
ptr1 = Config;
ptr2 = strchr(ptr1, 13);
if (!ProcLine(buf, Port))
{
WritetoConsoleLocal("\n");
WritetoConsoleLocal("Bad config record ");
WritetoConsoleLocal(errbuf);
}
}
else
{
sprintf(buf," ** Error - No Configuration info in bpq32.cfg");
WritetoConsoleLocal(buf);
}
return (TRUE);
}
VOID SuspendOtherPorts(struct TNCINFO * ThisTNC);
VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
static time_t ltime;
@ -552,7 +589,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
UCHAR * data = &buffptr->Data[0];
STREAM->FramesQueued--;
txlen = (int)buffptr->Len;
STREAM->bytesTXed += txlen;
STREAM->BytesTXed += txlen;
bytes=HSMODEMSendData(TNC, data, txlen);
WritetoTrace(TNC, data, txlen);
@ -631,7 +668,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
bytes=HSMODEMSendData(TNC, TXMsg, txlen);
TNC->Streams[Stream].BytesOutstanding += bytes; // So flow control works - will be updated by BUFFER response
STREAM->bytesTXed += bytes;
STREAM->BytesTXed += bytes;
// WritetoTrace(TNC, &buff->L2DATA[0], txlen);
return 1;
@ -648,12 +685,8 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
if (_memicmp(&buff->L2DATA[0], "RADIO ", 6) == 0)
{
char cmd[56];
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, &buff->L2DATA[6]);
strcpy(cmd, &buff->L2DATA[6]);
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, cmd);
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &buff->L2DATA[0]))
{
}
@ -1181,9 +1214,9 @@ VOID * HSMODEMExtInit(EXTPORTDATA * PortEntry)
Consoleprintf("HSMODEM Host %s %d", TNC->HostName, TNC->TCPPort);
TNC->Port = port;
TNC->PortRecord = PortEntry;
TNC->Hardware = H_HSMODEM;
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_HSMODEM;
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
memcpy(TNC->NodeCall, MYNODECALL, 10);

View file

@ -27,7 +27,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#pragma data_seg("_BPQDATA")
#include "cheaders.h"
#include "CHeaders.h"
#include "templatedefs.c" // Inline definitions from HTLMPages

View file

@ -24,7 +24,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define DllImport
#include "cheaders.h"
#include "CHeaders.h"
#include <stdlib.h>
#include "tncinfo.h"
@ -38,7 +38,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define ZEXPORT __stdcall
#endif
#include <zlib.h>
#include "zlib.h"
#define CKernel
#include "httpconnectioninfo.h"
@ -70,9 +70,6 @@ char * GetStandardPage(char * FN, int * Len);
BOOL SHA1PasswordHash(char * String, char * Hash);
char * byte_base64_encode(char *str, int len);
int APIProcessHTTPMessage(char * response, char * Method, char * URL, char * request, BOOL LOCAL, BOOL COOKIE);
int RHPProcessHTTPMessage(struct ConnectionInfo * conn, char * response, char * Method, char * URL, char * request, BOOL LOCAL, BOOL COOKIE);
unsigned char * Compressit(unsigned char * In, int Len, int * OutLen);
int doinflate(unsigned char * source, unsigned char * dest, int Len, int destlen, int * outLen);
extern struct ROUTE * NEIGHBOURS;
extern int ROUTE_LEN;
@ -105,20 +102,16 @@ extern int NumberofPorts;
extern UCHAR ConfigDirectory[260];
extern struct AXIPPORTINFO * Portlist[];
char * strlop(char * buf, char delim);
VOID sendandcheck(SOCKET sock, const char * Buffer, int Len);
int CompareNode(const void *a, const void *b);
int CompareAlias(const void *a, const void *b);
int CompareRoutes(const void * a, const void * b);
void ProcessMailHTTPMessage(struct HTTPConnectionInfo * Session, char * Method, char * URL, char * input, char * Reply, int * RLen, int InputLen, char * Token);
void ProcessMailHTTPMessage(struct HTTPConnectionInfo * Session, char * Method, char * URL, char * input, char * Reply, int * RLen, int InputLen);
void ProcessChatHTTPMessage(struct HTTPConnectionInfo * Session, char * Method, char * URL, char * input, char * Reply, int * RLen);
struct PORTCONTROL * APIENTRY GetPortTableEntryFromSlot(int portslot);
int SetupNodeMenu(char * Buff, int SYSOP);
int StatusProc(char * Buff);
int ProcessMailSignon(struct TCPINFO * TCP, char * MsgPtr, char * Appl, char * Reply, struct HTTPConnectionInfo ** Session, BOOL WebMail, int LOCAL);
int ProcessMailAPISignon(struct TCPINFO * TCP, char * MsgPtr, char * Appl, char * Reply, struct HTTPConnectionInfo ** Session, BOOL WebMail, int LOCAL);
int ProcessChatSignon(struct TCPINFO * TCP, char * MsgPtr, char * Appl, char * Reply, struct HTTPConnectionInfo ** Session, int LOCAL);
VOID APRSProcessHTTPMessage(SOCKET sock, char * MsgPtr, BOOL LOCAL, BOOL COOKIE);
@ -149,7 +142,7 @@ char Tail[] = "</body></html>";
char RouteHddr[] = "<h2 align=center>Routes</h2><table align=center border=2 style=font-family:monospace bgcolor=white>"
"<tr><th>Port</th><th>Call</th><th>Quality</th><th>Node Count</th><th>Frame Count</th><th>Retries</th><th>Percent</th><th>Maxframe</th><th>Frack</th><th>Last Heard</th><th>Queued</th><th>Rem Qual</th></tr>";
char RouteLine[] = "<tr><td>%s%d</td><td>%s%s</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d%</td><td>%d</td><td>%d</td><td>%02d:%02d</td><td>%d</td><td>%d</td></tr>";
char RouteLine[] = "<tr><td>%s%d</td><td>%s%c</td><td>%d</td><td>%d</td><td>%d</td><td>%d</td><td>%d%</td><td>%d</td><td>%d</td><td>%02d:%02d</td><td>%d</td><td>%d</td></tr>";
char xNodeHddr[] = "<align=center><form align=center method=get action=/Node/Nodes.html>"
"<table align=center bgcolor=white>"
"<tr><td><input type=submit class='btn' name=a value=\"Nodes Sorted by Alias\"></td><td>"
@ -607,8 +600,7 @@ VOID HTTPTimer()
for (n = Last;;)
{
if ((strlen(Session->ScreenLines[n]) + strlen(_REPLYBUFFER)) < 99999)
strcat(_REPLYBUFFER, Session->ScreenLines[n]);
strcat(_REPLYBUFFER, Session->ScreenLines[n]);
if (n == 99)
n = -1;
@ -688,15 +680,13 @@ struct HTTPConnectionInfo * FindSession(char * Key)
void ProcessTermInput(SOCKET sock, char * MsgPtr, int MsgLen, char * Key)
{
char _REPLYBUFFER[2048];
char _REPLYBUFFER[1024];
int ReplyLen;
char Header[256];
int HeaderLen;
int State;
struct HTTPConnectionInfo * Session = FindSession(Key);
int Stream;
int maxlen = 1000;
if (Session == NULL)
{
@ -711,24 +701,12 @@ void ProcessTermInput(SOCKET sock, char * MsgPtr, int MsgLen, char * Key)
char c;
UCHAR hex;
int msglen = end - input;
struct TNCINFO * TNC = Session->TNC;
struct TCPINFO * TCP = 0;
if (TNC)
TCP = TNC->TCPInfo;
if (TCP && TCP->WebTermCSS)
maxlen -= strlen(TCP->WebTermCSS);
if (MsgLen > maxlen)
{
Session->KillTimer = 99999; // close session
return;
}
if (TCP && TCP->WebTermCSS)
ReplyLen = sprintf(_REPLYBUFFER, InputLine, Key, TCP->WebTermCSS);
else
@ -1173,9 +1151,6 @@ int SendMessageFile(SOCKET sock, char * FN, BOOL OnlyifExists, int allowDeflate)
if (_stricmp(ptr, "js") == 0)
strcpy(Type, "Content-Type: text/javascript\r\n");
if (_stricmp(ptr, "css") == 0)
strcpy(Type, "Content-Type: text/css\r\n");
if (_stricmp(ptr, "pdf") == 0)
strcpy(Type, "Content-Type: application/pdf\r\n");
@ -1190,8 +1165,7 @@ int SendMessageFile(SOCKET sock, char * FN, BOOL OnlyifExists, int allowDeflate)
Compressed = MsgBytes;
}
if (_stricmp(ptr, "jpg") == 0 || _stricmp(ptr, "jpeg") == 0 || _stricmp(ptr, "png") == 0 ||
_stricmp(ptr, "gif") == 0 || _stricmp(ptr, "bmp") == 0 || _stricmp(ptr, "ico") == 0)
if (_stricmp(ptr, "jpg") == 0 || _stricmp(ptr, "jpeg") == 0 || _stricmp(ptr, "png") == 0 || _stricmp(ptr, "gif") == 0 || _stricmp(ptr, "ico") == 0)
strcpy(Type, "Content-Type: image\r\n");
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\n"
@ -1634,23 +1608,23 @@ int InnerProcessHTTPMessage(struct ConnectionInfo * conn)
char * WebSock = 0;
char PortsHddr[] = "<h2 align=center>Ports</h2><table align=center border=2 bgcolor=white>"
"<tr><th>Port</th><th>Driver</th><th>ID</th><th>Beacons</th><th>Driver Window</th><th>Stats Graph</th></tr>";
"<tr><th>Port</th><th>Driver</th><th>ID</th><th>Beacons</th><th>Driver Window</th></tr>";
// char PortLine[] = "<tr><td>%d</td><td><a href=PortStats?%d&%s>&nbsp;%s</a></td><td>%s</td></tr>";
char PortLine[] = "<tr><td>%d</td><td><a href=PortStats?%d&%s>&nbsp;%s</a></td><td>%s</td></tr>";
char PortLineWithBeacon[] = "<tr><td>%d</td><td><a href=PortStats?%d&%s>&nbsp;%s</a></td><td>%s</td>"
"<td><a href=PortBeacons?%d>&nbsp;Beacons</a><td> </td></td><td>%s</td></tr>\r\n";
"<td><a href=PortBeacons?%d>&nbsp;Beacons</a><td> </td></td></tr>\r\n";
char SessionPortLine[] = "<tr><td>%d</td><td>%s</td><td>%s</td><td> </td>"
"<td> </td><td>%s</td></tr>\r\n";
"<td> </td></tr>\r\n";
char PortLineWithDriver[] = "<tr><td>%d</td><td>%s</td><td>%s</td><td> </td>"
"<td><a href=\"javascript:dev_win('/Node/Port?%d',%d,%d,%d,%d);\">Driver Window</a></td><td>%s</td></tr>\r\n";
"<td><a href=\"javascript:dev_win('/Node/Port?%d',%d,%d,%d,%d);\">Driver Window</a></td></tr>\r\n";
char PortLineWithBeaconAndDriver[] = "<tr><td>%d</td><td>%s</td><td>%s</td>"
"<td><a href=PortBeacons?%d>&nbsp;Beacons</a></td>"
"<td><a href=\"javascript:dev_win('/Node/Port?%d',%d,%d,%d,%d);\">Driver Window</a></td><td>%s</td></tr>\r\n";
"<td><a href=\"javascript:dev_win('/Node/Port?%d',%d,%d,%d,%d);\">Driver Window</a></td></tr>\r\n";
char RigControlLine[] = "<tr><td>%d</td><td>%s</td><td>%s</td><td> </td>"
"<td><a href=\"javascript:dev_win('/Node/RigControl.html',%d,%d,%d,%d);\">Rig Control</a></td></tr>\r\n";
@ -1804,95 +1778,35 @@ int InnerProcessHTTPMessage(struct ConnectionInfo * conn)
if (_memicmp(Context, "/api/", 5) == 0 || _stricmp(Context, "/api") == 0)
{
char * Compressed;
// if for mail api process signon here and rearrange url from
// api/v1/mail to mail/api/v1 so it goes to mail handler later
if (_memicmp(Context, "/api/v1/mail/", 13) == 0)
ReplyLen = APIProcessHTTPMessage(_REPLYBUFFER, Method, Context, MsgPtr, LOCAL, COOKIE);
if (memcmp(_REPLYBUFFER, "HTTP", 4) == 0)
{
memcpy(MsgPtr, "GET /mail/api/v1/", 17);
if (memcmp(&Context[13], "login", 5) == 0)
{
ReplyLen = ProcessMailAPISignon(TCP, MsgPtr, "M", Reply, &Session, FALSE, LOCAL);
memcpy(MsgPtr, "GET /mail/api/v1/", 17);
// Full Message - just send it
if (ReplyLen) // Error message
goto Returnit;
}
sendandcheck(sock, _REPLYBUFFER, ReplyLen);
memcpy(Context, "/mail/api/v1/", 13);
goto doHeader;
return 0;
}
if (allowDeflate)
Compressed = Compressit(_REPLYBUFFER, ReplyLen, &ReplyLen);
else
{
ReplyLen = APIProcessHTTPMessage(_REPLYBUFFER, Method, Context, MsgPtr, LOCAL, COOKIE);
if (memcmp(_REPLYBUFFER, "HTTP", 4) == 0)
{
// Full Message - just send it
Compressed = _REPLYBUFFER;
sendandcheck(sock, _REPLYBUFFER, ReplyLen);
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\n"
"Content-Length: %d\r\n"
"Content-Type: application/json\r\n"
"Connection: close\r\n"
"%s\r\n", ReplyLen, Encoding);
return 0;
}
sendandcheck(sock, Header, HeaderLen);
sendandcheck(sock, Compressed, ReplyLen);
if (allowDeflate)
Compressed = Compressit(_REPLYBUFFER, ReplyLen, &ReplyLen);
else
Compressed = _REPLYBUFFER;
if (allowDeflate)
free (Compressed);
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\n"
"Content-Length: %d\r\n"
"Content-Type: application/json\r\n"
"Connection: close\r\n"
"Access-Control-Allow-Origin: *\r\n"
"%s\r\n", ReplyLen, Encoding);
sendandcheck(sock, Header, HeaderLen);
sendandcheck(sock, Compressed, ReplyLen);
if (allowDeflate)
free (Compressed);
return 0;
}
}
if (_memicmp(Context, "/rhp/", 5) == 0 || _stricmp(Context, "/rhp") == 0)
{
{
ReplyLen = RHPProcessHTTPMessage(conn, _REPLYBUFFER, Method, Context, MsgPtr, LOCAL, COOKIE);
if (memcmp(_REPLYBUFFER, "HTTP", 4) == 0)
{
// Full Message - just send it
sendandcheck(sock, _REPLYBUFFER, ReplyLen);
return 0;
}
if (allowDeflate)
Compressed = Compressit(_REPLYBUFFER, ReplyLen, &ReplyLen);
else
Compressed = _REPLYBUFFER;
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\n"
"Content-Length: %d\r\n"
"Content-Type: application/json\r\n"
"Connection: close\r\n"
"Access-Control-Allow-Origin: *\r\n"
"%s\r\n", ReplyLen, Encoding);
sendandcheck(sock, Header, HeaderLen);
sendandcheck(sock, Compressed, ReplyLen);
if (allowDeflate)
free (Compressed);
return 0;
}
return 0;
}
@ -2166,7 +2080,11 @@ Returnit:
Compressed = Reply;
if (NodeURL && _memicmp(NodeURL, "/mail/api/", 10) == 0)
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\nContent-Type: application/json\r\nConnection: close\r\n%s\r\n", ReplyLen, Encoding);
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\n"
"Content-Length: %d\r\n"
"Content-Type: application/json\r\n"
"Connection: close\r\n"
"%s\r\n", ReplyLen, Encoding);
else
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\nContent-Type: text/html\r\n%s\r\n", ReplyLen, Encoding);
@ -2189,82 +2107,15 @@ doHeader:
char _REPLYBUFFER[250000];
struct HTTPConnectionInfo Dummy = {0};
int Sent, Loops = 0;
char token[16] = "";
// look for auth header
const char * auth_header = "Authorization: Bearer ";
char * token_begin = strstr(MsgPtr, auth_header);
int Flags = 0, n;
char * Tok;
char * param;
if (token_begin)
{
// Using Auth Header
// Extract the token from the request (assuming it's present in the request headers)
token_begin += strlen(auth_header); // Move to the beginning of the token
strncpy(token, token_begin, 13);
token[13] = '\0'; // Null-terminate the token
}
ReplyLen = 0;
if (Session == 0)
Session = &Dummy;
if (LOCAL)
Session->TNC = (void *)1; // TNC only used for Web Terminal Sessions
else
Session->TNC = (void *)0;
Session->TNC = (void *)LOCAL; // TNC only used for Web Terminal Sessions
ProcessMailHTTPMessage(Session, Method, Context, MsgPtr, _REPLYBUFFER, &ReplyLen, MsgLen, token);
if (Context && _memicmp(Context, "/mail/api/", 10) == 0)
{
if (memcmp(_REPLYBUFFER, "HTTP", 4) == 0)
{
// Full Header provided by appl - just send it
// Send may block
Sent = send(sock, _REPLYBUFFER, ReplyLen, 0);
while (Sent != ReplyLen && Loops++ < 3000) // 100 secs max
{
// Debugprintf("%d out of %d sent %d Loops", Sent, InputLen, Loops);
if (Sent > 0) // something sent
{
InputLen -= Sent;
memmove(_REPLYBUFFER, &_REPLYBUFFER[Sent], ReplyLen);
}
Sleep(30);
Sent = send(sock, _REPLYBUFFER, ReplyLen, 0);
}
return 0;
}
// compress if allowed
if (allowDeflate)
Compressed = Compressit(_REPLYBUFFER, ReplyLen, &ReplyLen);
else
Compressed = _REPLYBUFFER;
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\nContent-Length: %d\r\nContent-Type: application/json\r\nConnection: close\r\n%s\r\n", ReplyLen, Encoding);
sendandcheck(sock, Header, HeaderLen);
sendandcheck(sock, Compressed, ReplyLen);
if (allowDeflate)
free (Compressed);
return 0;
}
ProcessMailHTTPMessage(Session, Method, Context, MsgPtr, _REPLYBUFFER, &ReplyLen, MsgLen);
if (memcmp(_REPLYBUFFER, "HTTP", 4) == 0)
{
@ -2290,16 +2141,11 @@ doHeader:
return 0;
}
if (Context && _memicmp(Context, "/mail/api/", 10) != 0)
{
// Add tail
strcpy(&_REPLYBUFFER[ReplyLen], Tail);
ReplyLen += strlen(Tail);
}
// compress if allowed
if (allowDeflate)
@ -2389,8 +2235,6 @@ doHeader:
// Pass to MailChat if active
NodeURL = Context;
if ((_memicmp(Context, "/MAIL/", 6) == 0) || (_memicmp(Context, "/WebMail", 8) == 0))
{
// If for Mail, Pass to Mail Server via Named Pipe
@ -2418,10 +2262,7 @@ doHeader:
if (Session == 0)
Session = &Dummy;
if (LOCAL)
Session->TNC = (struct TNCINFO *)(uintptr_t)1; // TNC is only used on Web Terminal Sessions so can reuse as LOCAL flag
else
Session->TNC = 0;
Session->TNC = LOCAL; // TNC is only used on Web Terminal Sessions so can reuse as LOCAL flag
WriteFile(hPipe, Session, sizeof (struct HTTPConnectionInfo), &InputLen, NULL);
WriteFile(hPipe, MsgPtr, MsgLen, &InputLen, NULL);
@ -2851,53 +2692,6 @@ doHeader:
return 0;
}
else if (_memicmp(NodeURL, "/portstats.txt", 15) == 0)
{
char * Compressed;
char * ptr;
int port;
struct PORTCONTROL * PORT;
ptr = &NodeURL[15];
port = atoi(ptr);
PORT = GetPortTableEntryFromPortNum(port);
ReplyLen = 0;
if (PORT && PORT->TX)
{
// We send the last 24 hours worth of data. Buffer is cyclic so oldest byte is at StatsPointer
int first = PORT->StatsPointer;
int firstlen = 1440 - first;
memcpy(&_REPLYBUFFER[0], &PORT->TX[first], firstlen);
memcpy(&_REPLYBUFFER[firstlen], PORT->TX, first);
memcpy(&_REPLYBUFFER[1440], &PORT->BUSY[first], firstlen);
memcpy(&_REPLYBUFFER[1440 + firstlen], PORT->BUSY, first);
ReplyLen = 2880;
}
if (allowDeflate)
Compressed = Compressit(_REPLYBUFFER, ReplyLen, &ReplyLen);
else
Compressed = _REPLYBUFFER;
HeaderLen = sprintf(Header, "HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-Length: %d\r\nContent-Type: Text\r\n%s\r\n", ReplyLen, Encoding);
sendandcheck(sock, Header, HeaderLen);
sendandcheck(sock, Compressed, ReplyLen);
if (allowDeflate)
free (Compressed);
return 0;
}
else if (_memicmp(NodeURL, "/Icon", 5) == 0 && _memicmp(&NodeURL[10], ".png", 4) == 0)
{
// APRS internal Icon
@ -3071,7 +2865,7 @@ doHeader:
" {"
" // The browser doesn't support WebSocket\r\n"
" const div = document.getElementById('div');\r\n"
" div.innerHTML = 'WebSocket not supported by your Browser - RigControl Page not availible'\r\n"
" div.innerHTML = 'WebSocket not supported by your Browser - RigControl Page not availble'\r\n"
" }"
"}"
"function PTT(p)"
@ -3426,7 +3220,6 @@ doHeader:
int count;
char DLL[20];
char StatsURL[64];
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], "%s", PortsHddr);
@ -3435,13 +3228,6 @@ doHeader:
Port = GetPortTableEntryFromSlot(count);
ExtPort = (struct _EXTPORTDATA *)Port;
// see if has a stats page
if (Port->AVACTIVE)
sprintf(StatsURL, "<a href=/PortStats.html?%d>&nbsp;Stats Graph</a>", Port->PORTNUMBER);
else
StatsURL[0] = 0;
if (Port->PORTTYPE == 0x10)
{
strcpy(DLL, ExtPort->PORT_DLL_NAME);
@ -3464,20 +3250,20 @@ doHeader:
{
if (Port->UICAPABLE)
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], PortLineWithBeaconAndDriver, Port->PORTNUMBER, DLL,
Port->PORTDESCRIPTION, Port->PORTNUMBER, Port->PORTNUMBER, Port->TNC->WebWinX, Port->TNC->WebWinY, 200, 200, StatsURL);
Port->PORTDESCRIPTION, Port->PORTNUMBER, Port->PORTNUMBER, Port->TNC->WebWinX, Port->TNC->WebWinY, 200, 200);
else
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], PortLineWithDriver, Port->PORTNUMBER, DLL,
Port->PORTDESCRIPTION, Port->PORTNUMBER, Port->TNC->WebWinX, Port->TNC->WebWinY, 200, 200, StatsURL);
Port->PORTDESCRIPTION, Port->PORTNUMBER, Port->TNC->WebWinX, Port->TNC->WebWinY, 200, 200);
continue;
}
if (Port->PORTTYPE == 16 && Port->PROTOCOL == 10 && Port->UICAPABLE == 0) // EXTERNAL, Pactor/WINMO
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], SessionPortLine, Port->PORTNUMBER, DLL,
Port->PORTDESCRIPTION, Port->PORTNUMBER, StatsURL);
Port->PORTDESCRIPTION, Port->PORTNUMBER);
else
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], PortLineWithBeacon, Port->PORTNUMBER, Port->PORTNUMBER,
DLL, DLL, Port->PORTDESCRIPTION, Port->PORTNUMBER, StatsURL);
DLL, DLL, Port->PORTDESCRIPTION, Port->PORTNUMBER);
}
if (RigActive)
@ -3798,129 +3584,33 @@ doHeader:
*/
// AXIP Partners
if (_stricmp(NodeURL, "/Node/AXIP.html") == 0)
{
int i;
char Normcall[10];
int Width = 5;
int x = 0, n = 0, nd = 0;
struct arp_table_entry * List[1000];
struct arp_table_entry * ListD[1000];
char AXIPList[10000] = "";
int ListLen = 0;
struct AXIPPORTINFO * AXPORT = Portlist[0];
struct PORTCONTROL * PORT = PORTTABLE;
struct arp_table_entry * arp;
time_t NOW = time(NULL);
char AXIPHeader[] =
"<table align='center' bgcolor='ffffff' border=2 cellpadding=10 cellspacing=2 style=font-family:monospace>"
"<tr><td align='center'>AXIP Up</td><td align='center'>AXIP Down</td></tr><tr><td valign='top'>%s";
while (PORT)
{
AXPORT = Portlist[PORT->PORTNUMBER];
if (AXPORT)
{
// Get ARP entries
for (i = 0; i < AXPORT->arp_table_len; i++)
{
arp = &AXPORT->arp_table[i];
if (arp->LastHeard == 0 || (NOW - arp->LastHeard) > 3600) // Considered down
ListD[nd++] = arp;
else
List[n++] = arp;
}
}
PORT = PORT->PORTPOINTER;
}
if (n > 1)
qsort(List, n, sizeof(void *), CompareNode);
if (nd > 1)
qsort(ListD, nd, sizeof(void *), CompareNode);
for (i = 0; i < n; i++)
{
int len = ConvFromAX25(List[i]->callsign, Normcall);
Normcall[len]=0;
ListLen += sprintf(&AXIPList[ListLen], "%02d - %s %d<br>", i + 1, Normcall, (List[i]->LastHeard)?(NOW - List[i]->LastHeard):0);
}
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], AXIPHeader, AXIPList);
ListLen = 0;
for (i = 0; i < nd; i++)
{
int len = ConvFromAX25(ListD[i]->callsign, Normcall);
Normcall[len]=0;
ListLen += sprintf(&AXIPList[ListLen], "%02d - %s %d<br>", i + 1, Normcall, (ListD[i]->LastHeard)?(NOW - ListD[i]->LastHeard):0);
}
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], "</td><td valign='top'>%s", AXIPList);
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], "</td></tr></table></body></html>");
}
if (_stricmp(NodeURL, "/Node/Routes.html") == 0)
{
struct ROUTE * Routes = NEIGHBOURS;
int MaxRoutes = MAXNEIGHBOURS;
int count, i;
int count;
char Normcall[10];
char locked[4] = " ";
char locked;
int NodeCount;
int Percent = 0;
int Iframes, Retries;
char Active[10];
int Queued;
int x = 0, n = 0;
struct ROUTE * List[1000];
ReplyLen += sprintf(&_REPLYBUFFER[ReplyLen], "%s", RouteHddr);
// Build and sort list of routes
for (count = 0; count < MaxRoutes; count++)
for (count=0; count<MaxRoutes; count++)
{
if (Routes->NEIGHBOUR_CALL[0] != 0)
{
List[n++] = Routes;
if (n > 999)
break;
}
Routes++;
}
if (n > 1)
qsort(List, n, sizeof(void *), CompareRoutes);
for (i = 0; i < n; i++)
{
Routes = List[i];
{
int len = ConvFromAX25(Routes->NEIGHBOUR_CALL, Normcall);
Normcall[len]=0;
if (Routes->NEIGHBOUR_FLAG == LOCKEDBYCONFIG)
strcpy(locked, "!");
else if (Routes->NEIGHBOUR_FLAG == LOCKEDBYSYSOP)
strcpy(locked, "!!");
else if (Routes->NEIGHBOUR_FLAG == LOCKEDBYSYSOP + LOCKEDBYCONFIG)
strcpy(locked, "!!!");
if ((Routes->NEIGHBOUR_FLAG & 1) == 1)
locked = '!';
else
strcpy(locked, " ");
locked = ' ';
NodeCount = COUNTNODES(Routes);
@ -4423,78 +4113,6 @@ int ProcessNodeSignon(SOCKET sock, struct TCPINFO * TCP, char * MsgPtr, char * A
return ReplyLen;
}
int ProcessMailAPISignon(struct TCPINFO * TCP, char * MsgPtr, char * Appl, char * Reply, struct HTTPConnectionInfo ** Session, BOOL WebMail, int LOCAL)
{
int ReplyLen = 0;
char * input = strstr(MsgPtr, "\r\n\r\n"); // End of headers
char * user, * password;
struct HTTPConnectionInfo * NewSession;
int i;
struct UserRec * USER;
if (strchr(MsgPtr, '?'))
{
// Check Password
user = strlop(MsgPtr, '?');
password = strlop(user, '&');
strlop(password, ' ');
for (i = 0; i < TCP->NumberofUsers; i++)
{
USER = TCP->UserRecPtr[i];
if (user && _stricmp(user, USER->UserName) == 0)
{
if ((strcmp(password, USER->Password) == 0) && (USER->Secure || WebMail))
{
// ok
NewSession = AllocateSession(Appl[0], 'M');
*Session = NewSession;
if (NewSession)
{
ReplyLen = 0;
strcpy(NewSession->Callsign, USER->Callsign);
}
else
{
ReplyLen = SetupNodeMenu(Reply, LOCAL);
ReplyLen += sprintf(&Reply[ReplyLen], "%s", BusyError);
}
return ReplyLen;
}
}
}
// Pass failed attempt to BBS code so it can try a bbs user login
// Need to put url back together
if (user && user[0] && password && password[0])
{
sprintf(&MsgPtr[strlen(MsgPtr)], "?%s&%s", user, password);
}
}
NewSession = AllocateSession(Appl[0], 'M');
*Session = NewSession;
if (NewSession)
ReplyLen = 0;
else
{
ReplyLen = SetupNodeMenu(Reply, LOCAL);
ReplyLen += sprintf(&Reply[ReplyLen], "%s", BusyError);
}
return ReplyLen;
}
@ -4839,14 +4457,7 @@ void ProcessWebmailWebSockThread(void * conn)
Sent = send(sockptr->socket, _REPLYBUFFER, ReplyLen, 0);
if (Sent == -1) // Connecton lost
{
closesocket(sockptr->socket);
free(conn);
return;
}
while (Sent != ReplyLen && Loops++ < 3000) // 90 secs max
while (Sent != ReplyLen && Loops++ < 3000) // 100 secs max
{
if (Sent > 0) // something sent
{
@ -4892,16 +4503,11 @@ void ProcessWebmailWebSockThread(void * conn)
CloseHandle(hPipe);
// ?? do we need a thread to handle write which may block
Sent = send(sockptr->socket, Reply, ReplyLen, 0);
if (Sent == -1) // Connecton lost
{
free(conn);
closesocket(sockptr->socket);
return;
}
while (Sent != ReplyLen && Loops++ < 3000) // 90 secs max
while (Sent != ReplyLen && Loops++ < 3000) // 100 secs max
{
// Debugprintf("%d out of %d sent %d Loops", Sent, InputLen, Loops);
@ -5290,3 +4896,6 @@ void SHA1PadMessage(SHA1Context *context)
}

View file

@ -27,7 +27,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#ifdef LINBPQ
#include "cheaders.h"
#include "CHeaders.h"
#endif
#include "bpqchat.h"
@ -426,7 +426,7 @@ VOID ChatExpandAndSendMessage(ChatCIRCUIT * conn, char * Msg, int LOG)
len = RemoveLF(NewMessage, (int)strlen(NewMessage));
ChatWriteLogLine(conn, '>', NewMessage, len, LOG_CHAT);
ChatWriteLogLine(conn, '>', NewMessage, len, LOG);
ChatQueueMsg(conn, NewMessage, len);
}
@ -1186,7 +1186,7 @@ static BOOL CheckforDups(ChatCIRCUIT * circuit, char * Call, char * Msg)
// Duplicate, so discard, but save time
DupInfo[i].DupTime = Now;
Logprintf(LOG_CHAT, circuit, '?', "Duplicate Message From %s %s suppressed", Call, Msg);
Logprintf(LOG_CHAT, circuit, '?', "Duplicate Message From %s %s supressed", Call, Msg);
return TRUE; // Duplicate
}
@ -1229,7 +1229,7 @@ void chkctl(ChatCIRCUIT *ckt_from, char * Buffer, int Len)
for (i = 1; i < (Len - 1); i++)
{
if (Buffer[i] < 32 && Buffer[i] != 7) // Accept BELL
if (Buffer[i] < 32)
{
if (Buffer[i] == 9)
{
@ -1860,7 +1860,7 @@ static void cn_dec(ChatCIRCUIT *circuit, CHATNODE *node)
__try
{
#endif
len += sprintf(&line[len], " %p %s", cn->node, cn->node->alias);
len = sprintf(line, "%s %p %s", line, cn->node, cn->node->alias);
if (len > 80)
{
Debugprintf("%s", line);
@ -2821,7 +2821,7 @@ static void show_circuits(ChatCIRCUIT *conn, char Flag)
CHATNODE *node;
LINK *link;
char line[1000];
int len = 0;
int len;
CN *cn;
int i = 0;
@ -2836,16 +2836,16 @@ static void show_circuits(ChatCIRCUIT *conn, char Flag)
nprintf(conn, "%d Node(s)\r", i);
if (Flag == 'c')
len = sprintf(line, "Here %-6.6s <-", OurNode);
sprintf(line, "Here %-6.6s <-", OurNode);
else
len = sprintf(line, "Here %-6.6s <-", OurAlias);
sprintf(line, "Here %-6.6s <-", OurAlias);
for (node = node_hd; node; node = node->next) if (node->refcnt)
{
if (Flag == 'c')
len += sprintf(&line[len], " %s", node->call);
len = sprintf(line, "%s %s", line, node->call);
else
len += sprintf(&line[len], " %s", node->alias);
len = sprintf(line, "%s %s", line, node->alias);
if (len > 80)
{
nprintf(conn, "%s\r", line);
@ -2873,9 +2873,9 @@ static void show_circuits(ChatCIRCUIT *conn, char Flag)
__try
{
if (Flag == 'c')
len += sprintf(&line[len], " %s", cn->node->call);
len = sprintf(line, "%s %s", line, cn->node->call);
else
len += sprintf(&line[len], " %s", cn->node->alias);
len = sprintf(line, "%s %s", line, cn->node->alias);
if (len > 80)
{
nprintf(conn, "%s\r", line);
@ -2883,23 +2883,23 @@ static void show_circuits(ChatCIRCUIT *conn, char Flag)
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{len += sprintf(&line[len], " *PE* Corrupt Rec %x %x", cn, cn->node);}
{len = sprintf(line, "%s *PE* Corrupt Rec %x %x", line, cn, cn->node);}
}
else
len = sprintf(&line[len], " Corrupt Rec %x %x ", cn, cn->node);
len = sprintf(line, "%s Corrupt Rec %x %x ", line, cn, cn->node);
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{len += sprintf(&line[len], " *PE* Corrupt Rec %x %x ", cn, cn->node);}
{len = sprintf(line, "%s *PE* Corrupt Rec %x %x ", line, cn, cn->node);}
#else
for (cn = circuit->hnode; cn; cn = cn->next)
{
if (cn->node && cn->node->alias)
{
if (Flag == 'c')
len += sprintf(&line[len], " %s", cn->node->call);
len = sprintf(line, "%s %s", line, cn->node->call);
else
len += sprintf(&line[len], " %s", cn->node->alias);
len = sprintf(line, "%s %s", line, cn->node->alias);
if (len > 80)
{
nprintf(conn, "%s\r", line);
@ -2907,7 +2907,7 @@ static void show_circuits(ChatCIRCUIT *conn, char Flag)
}
}
else
len += sprintf(&line[len], " Corrupt Rec %p %p ", cn, cn->node);
len = sprintf(line, "%s Corrupt Rec %p %p ", line, cn, cn->node);
}
#endif
nprintf(conn, "%s\r", line);
@ -3682,7 +3682,7 @@ VOID SendChatLinkStatus()
}
}
len += sprintf(&Msg[len], "%s %c ", link->call, '0' + link->flags);
len = sprintf(Msg, "%s%s %c ", Msg, link->call, '0' + link->flags);
if (len > 240)
break;
@ -4178,10 +4178,10 @@ BOOL GetChatConfig(char * ConfigName)
MaxChatStreams = GetIntValue(group, "MaxStreams");
reportChatEvents = GetIntValue(group, "reportChatEvents");
chatPaclen = GetIntValue(group, "chatPaclen");
GetStringValue(group, "OtherChatNodes", OtherNodesList, 1000);
GetStringValue(group, "ChatWelcomeMsg", ChatWelcomeMsg, 1000);
GetStringValue(group, "MapPosition", Position, 81);
GetStringValue(group, "MapPopup", PopupText, 260);
GetStringValue(group, "OtherChatNodes", OtherNodesList);
GetStringValue(group, "ChatWelcomeMsg", ChatWelcomeMsg);
GetStringValue(group, "MapPosition", Position);
GetStringValue(group, "MapPopup", PopupText);
PopupMode = GetIntValue(group, "PopupMode");
if (chatPaclen == 0)

View file

@ -21,11 +21,6 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
//
// Housekeeping Module
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
#include "bpqmail.h"
char * APIENTRY GetBPQDirectory();
@ -348,12 +343,12 @@ VOID ExpireMessages()
Killed = 0;
PRLimit = now - (time_t)PR*86400;
PURLimit = now -(time_t)PUR*86400;
PFLimit = now - (time_t)PF*86400;
PNFLimit = now - (time_t)PNF*86400;
BFLimit = now - (time_t)BF*86400;
BNFLimit = now -(time_t) BNF*86400;
PRLimit = now - PR*86400;
PURLimit = now - PUR*86400;
PFLimit = now - PF*86400;
PNFLimit = now - PNF*86400;
BFLimit = now - BF*86400;
BNFLimit = now - BNF*86400;
if (NTSU == 0)
{
@ -396,7 +391,7 @@ VOID ExpireMessages()
if (Msg->datecreated < PURLimit)
{
if (SendNonDeliveryMsgs)
SendNonDeliveryMessage(Msg, TRUE, (int)PUR);
SendNonDeliveryMessage(Msg, TRUE, PUR);
KillMsg(Msg);
}
@ -406,7 +401,7 @@ VOID ExpireMessages()
if (Msg->datecreated < PNFLimit)
{
if (SendNonDeliveryMsgs)
SendNonDeliveryMessage(Msg, FALSE, (int)PNF);
SendNonDeliveryMessage(Msg, FALSE, PNF);
KillMsg(Msg);
}

View file

@ -81,7 +81,7 @@ TODo ?Multiple Adapters
#include <stdio.h>
#include <time.h>
#include "cheaders.h"
#include "CHeaders.h"
#include "ipcode.h"
@ -95,16 +95,9 @@ TODo ?Multiple Adapters
#pragma comment(lib, "IPHLPAPI.lib")
#endif
#include <pcap.h>
#include "pcap.h"
#ifdef WIN32
int pcap_sendpacket(pcap_t *p, u_char *buf, int size);
#else
#ifndef PCAP_API
#define PCAP_API extern
#endif
PCAP_API int pcap_sendpacket(pcap_t *, const u_char *, int);
#endif
#ifndef LINBPQ
#include "kernelresource.h"
@ -390,7 +383,7 @@ char * FormatIP(uint32_t Addr)
return FormatIPWork;
}
int CompareIPRoutes (const VOID * a, const VOID * b)
int CompareRoutes (const VOID * a, const VOID * b)
{
PROUTEENTRY x;
PROUTEENTRY y;
@ -4738,7 +4731,7 @@ void OpenTAP()
extern struct DATAMESSAGE * REPLYBUFFER;
char * __cdecl Cmdprintf(TRANSPORTENTRY * Session, char * Bufferptr, const char * format, ...);
VOID PING(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
VOID PING(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
// Send ICMP Echo Request
@ -4796,7 +4789,7 @@ VOID PING(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMD
return;
}
VOID SHOWARP(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
VOID SHOWARP(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
// DISPLAY IP Gateway ARP status or Clear
@ -4891,7 +4884,7 @@ VOID SHOWARP(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
}
VOID SHOWNAT(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
VOID SHOWNAT(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
// DISPLAY IP Gateway ARP status or Clear
@ -4950,7 +4943,7 @@ int CountBits(uint32_t in)
return n;
}
VOID SHOWIPROUTE(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct CMDX * CMD)
VOID SHOWIPROUTE(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
{
// DISPLAY IP Gateway ARP status or Clear
@ -4975,7 +4968,7 @@ VOID SHOWIPROUTE(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, str
Bufferptr = Cmdprintf(Session, Bufferptr, "%d Entries\r", NumberofRoutes);
if (NumberofRoutes)
qsort(RouteRecords, NumberofRoutes, sizeof(void *), CompareIPRoutes);
qsort(RouteRecords, NumberofRoutes, sizeof(void *), CompareRoutes);
for (i=0; i < NumberofRoutes; i++)
{
@ -5341,7 +5334,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
// Should be nothing left
}
if (RequestType == 160)
if (RequestType = 160)
{
int Offset = 255;
int PDULen = 0;
@ -5416,8 +5409,11 @@ VOID ProcessSNMPMessage(PIPMSG IPptr)
int Len;
PUDPMSG UDPptr = (PUDPMSG)&IPptr->Data;
UCHAR * Msg;
int Type;
int Length, ComLen;
int IntVal;
UCHAR Reply[256];
int SendLen;
int PDULen, SendLen;
int Offset = 0;
Len = ntohs(IPptr->IPLENGTH);

View file

@ -53,7 +53,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include <stdlib.h>
#include "time.h"
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
#include "bpq32.h"
@ -70,8 +70,6 @@ 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};
@ -519,28 +517,6 @@ 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>"
@ -591,15 +567,15 @@ void * KAMExtInit(EXTPORTDATA * PortEntry)
return ExtProc;
}
TNC->Port = port;
TNC->PortRecord = PortEntry;
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_KAM;
TNC->Hardware = H_KAM;
if (TNC->BusyWait == 0)
TNC->BusyWait = 10;
PortEntry->MAXHOSTMODESESSIONS = 11; // Default
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
memcpy(TNC->NodeCall, MYNODECALL, 10);
@ -619,11 +595,6 @@ 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
@ -915,39 +886,24 @@ VOID KAMPoll(int Port)
calllen = ConvFromAX25(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4USER, TNC->Streams[0].MyCall);
TNC->Streams[0].MyCall[calllen] = 0;
EncodeAndSend(TNC, "X", 1); // ??Return to packet mode??
if (TNC->VeryOldMode)
{
datalen = sprintf(TXMsg, "C20MYCALL %s", TNC->Streams[0].MyCall);
EncodeAndSend(TNC, "X", 1); // ??Return to packet mode??
if (TNC->VeryOldMode)
datalen = sprintf(TXMsg, "C20MYCALL %s", TNC->Streams[0].MyCall);
else
datalen = sprintf(TXMsg, "C20MYPTCALL %s", TNC->Streams[0].MyCall);
EncodeAndSend(TNC, TXMsg, datalen);
}
else
{
datalen = sprintf(TXMsg, "C20MYPTCALL %s", TNC->Streams[0].MyCall);
EncodeAndSend(TNC, TXMsg, datalen);
if (TNC->OldMode == 0)
{
EncodeAndSend(TNC, TXMsg, datalen);
datalen = sprintf(TXMsg, "C20MYGTCALL %s", TNC->Streams[0].MyCall);
}
}
TNC->InternalCmd = 'M';
TNC->InternalCmd = 'M';
TNC->NeedPACTOR = 0; // Cancel enter Pactor
TNC->NeedPACTOR = 0; // Cancel enter Pactor
SuspendOtherPorts(TNC);
sprintf(TNC->WEB_TNCSTATE, "In Use by %s", TNC->Streams[0].MyCall);
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
sprintf(TNC->WEB_TNCSTATE, "In Use by %s", TNC->Streams[0].MyCall);
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
// Stop Scanning
// Stop Scanning
sprintf(Msg, "%d SCANSTOP", TNC->Port);
sprintf(Msg, "%d SCANSTOP", TNC->Port);
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
}
}
@ -1080,22 +1036,9 @@ VOID KAMPoll(int Port)
UCHAR TXMsg[80] = "D20";
if (TNC->VeryOldMode)
{
datalen = sprintf(TXMsg, "C20MYCALL %s", TNC->NodeCall);
EncodeAndSend(TNC, TXMsg, datalen);
}
else
{
datalen = sprintf(TXMsg, "C20MYPTCALL %s", TNC->NodeCall);
EncodeAndSend(TNC, TXMsg, datalen);
if (TNC->OldMode == 0)
{
datalen = sprintf(TXMsg, "C20MYGTCALL %s", TNC->NodeCall);
EncodeAndSend(TNC, TXMsg, datalen);
}
}
EncodeAndSend(TNC, TXMsg, datalen);
if (TNC->OldMode)
@ -1103,7 +1046,6 @@ VOID KAMPoll(int Port)
else
EncodeAndSend(TNC, "C20TOR", 6); // Back to Listen
TNC->InternalCmd = 'T';
TNC->Timeout = 50;
TNC->IntCmdDelay--;
@ -1157,7 +1099,7 @@ VOID KAMPoll(int Port)
// Limit amount in TX, so we keep some on the TX Q and don't send turnround too early
if (TNC->Streams[0].bytesTXed - TNC->Streams[0].BytesAcked > 200)
if (TNC->Streams[0].BytesTXed - TNC->Streams[0].BytesAcked > 200)
continue;
// Dont send if IRS State
@ -1190,7 +1132,7 @@ VOID KAMPoll(int Port)
}
Next = 0;
STREAM->bytesTXed += datalen;
STREAM->BytesTXed += datalen;
if (Stream == 0)
{
@ -1215,7 +1157,7 @@ VOID KAMPoll(int Port)
if (Stream == 0)
{
sprintf(Status, "RX %d TX %d ACKED %d ",
TNC->Streams[0].bytesRXed, TNC->Streams[0].bytesTXed, TNC->Streams[0].BytesAcked);
TNC->Streams[0].BytesRXed, TNC->Streams[0].BytesTXed, TNC->Streams[0].BytesAcked);
SetWindowText(TNC->xIDC_TRAFFIC, Status);
if ((TNC->HFPacket == 0) && (TNC->Streams[0].BPQtoPACTOR_Q == 0)) // Nothing following
@ -1324,51 +1266,6 @@ 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)
@ -1635,14 +1532,14 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
{
if (Msg[1] == '2') // HF Port
{
if (TNC->Streams[0].bytesTXed)
if (TNC->Streams[0].BytesTXed)
TNC->Streams[0].BytesAcked += Len - 3; // We get an ack before the first send
sprintf(Status, "RX %d TX %d ACKED %d ",
TNC->Streams[0].bytesRXed, TNC->Streams[0].bytesTXed, TNC->Streams[0].BytesAcked);
TNC->Streams[0].BytesRXed, TNC->Streams[0].BytesTXed, TNC->Streams[0].BytesAcked);
SetWindowText(TNC->xIDC_TRAFFIC, Status);
if (TNC->Streams[0].bytesTXed - TNC->Streams[0].BytesAcked < 500)
if (TNC->Streams[0].BytesTXed - TNC->Streams[0].BytesAcked < 500)
TNC->Streams[0].FramesOutstanding = 0;
}
return;
@ -1658,7 +1555,7 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
Len-=3; // Remove Header
buffptr->Len = Len; // Length
STREAM->bytesRXed += Len;
STREAM->BytesRXed += Len;
memcpy(buffptr->Data, Buffer, Len);
C_Q_ADD(&STREAM->PACTORtoBPQ_Q, buffptr);
@ -1666,7 +1563,7 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
if (Stream == 0)
{
sprintf(TNC->WEB_TRAFFIC, "RX %d TX %d ACKED %d ",
TNC->Streams[0].bytesRXed, TNC->Streams[0].bytesTXed, TNC->Streams[0].BytesAcked);
TNC->Streams[0].BytesRXed, TNC->Streams[0].BytesTXed, TNC->Streams[0].BytesAcked);
SetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
}
@ -1747,10 +1644,6 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
return;
}
WritetoTrace(TNC, Buffer, Len);
// Pass to Appl
Stream = TNC->CmdStream;
@ -1787,76 +1680,6 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
if (Msg[0] == '?') // Status
{
TNC->Timeout = 0;
/*
The response frame from the TNC will be:
<FEND>?0MSXY<FEND> - where MSXY are coded as follows:
M One byte indicating the current mode of operation.
A=Packet
B=RTTY
C=ASCII
D=AMTOR
E=FEC
F=SELFEC
G=LAMTOR
H=PACTOR
I=PTLISTEN
J=GTOR
K=NAVTEX
L=CW
M=TOR Standby
N=GMON
O=PSK31
S One byte indicating a sub-mode of operation. The byte
contains an ASCII character as follows:
0=Standby
1=Phasing
2=Connected
3=Disconnecting
4=FEC
5=SELFEC
6=PTFEC
X One byte (called status byte X). This byte is bit-
encoded to indicate specific conditions as follows:
Bit 0 = (IDLE) set to 1 when receiving IDLE
characters in a frame.
Bit 1 = (ERR) set to 1 to indicate the received frame
failed CRC check, or was not a valid CS
response frame.
Bit 2 = (Combined receive) set to 1 to indicate that
the data was constructed through the use of
error correction (i.e. Golay error correction
for G-TOR or Memory ARQ for Pactor).
Bit 3 = (RQ) set to 1 to indicate an RQ frame. If you
are the ISS, it indicates that the receiving
station has asked for a repeat of the last
data due to received errors. When you are the
IRS, it indicates that the transmitting
station has sent the same data that you have
already received. This means that the sending
station did not properly copy your
acknowledgement (CS code).
Bit 4 = (Huffman) set to 1 to indicate that this
frame contains data which uses Huffman
compression.
Bit 5 = (ISS) set to 1 to indicate that your station
is currently the ISS.
Bit 6&7 = (Speed) these two bits indicate the current
speed of an ARQ link or the PSK31 mode. The
coding of the bits is:
00 = 100 baud or BPSK31
01 = 200 baud or QPSK31
10 = 300 baud
Y One byte (called status byte Y). This byte is bit-
encoded to indicate specific conditions as follows:
Bit 0 = reserved (set to 0).
Bit 1 = (PTT) PTT is active.
Bit 2 = (Changeover) changeover in progress
Bits 3-7 = reserved (set to 0).
*/
return;
}
@ -1939,7 +1762,7 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
Buffer[Len-4] = 0;
}
STREAM->bytesRXed = STREAM->bytesTXed = STREAM->BytesAcked = 0;
STREAM->BytesRXed = STREAM->BytesTXed = STREAM->BytesAcked = 0;
STREAM->ConnectTime = time(NULL);
if (Stream == 0)
@ -1953,7 +1776,7 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
sprintf(TNC->WEB_TRAFFIC, "RX %d TX %d ACKED %d ",
TNC->Streams[0].bytesRXed, TNC->Streams[0].bytesTXed, TNC->Streams[0].BytesAcked);
TNC->Streams[0].BytesRXed, TNC->Streams[0].BytesTXed, TNC->Streams[0].BytesAcked);
SetWindowText(TNC->xIDC_TRAFFIC, TNC->WEB_TRAFFIC);
}
@ -1967,10 +1790,6 @@ 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];
@ -2055,7 +1874,7 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
memcpy(&CTBuff[3], &CTEXTMSG[Next], Len);
EncodeAndSend(TNC, CTBuff, Len + 3);
EncodeAndSend(TNC, "E", 1); // Changeover when all sent
TNC->Streams[0].bytesTXed += CTEXTLEN;
TNC->Streams[0].BytesTXed += CTEXTLEN;
}
return;
@ -2228,11 +2047,7 @@ VOID ForcedClose(struct TNCINFO * TNC, int Stream)
VOID CloseComplete(struct TNCINFO * TNC, int Stream)
{
sprintf(TNC->WEB_TNCSTATE, "Free");
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
ReleaseOtherPorts(TNC);
TNC->NeedPACTOR = 50;
TNC->NeedPACTOR = 50;
}

132
KISSHF.c
View file

@ -27,7 +27,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include <stdio.h>
#include <time.h>
#include "cheaders.h"
#include "CHeaders.h"
extern int (WINAPI FAR *GetModuleFileNameExPtr)();
@ -50,8 +50,8 @@ int DoScanLine(struct TNCINFO * TNC, char * Buff, int Len);
VOID SendInitScript(struct TNCINFO * TNC);
int KISSHFGetLine(char * buf);
int ProcessEscape(UCHAR * TXMsg);
VOID KISSHFProcessReceivedPacket(struct TNCINFO * TNC, int Channel);
static int KissEncode(struct TNCINFO * TNC, UCHAR * inbuff, UCHAR * outbuff, int len, int Channel);
VOID KISSHFProcessReceivedPacket(struct TNCINFO * TNC);
static int KissEncode(UCHAR * inbuff, UCHAR * outbuff, int len);
int ConnecttoKISS(int port);
TRANSPORTENTRY * SetupNewSession(TRANSPORTENTRY * Session, char * Bufferptr);
BOOL DecodeCallString(char * Calls, BOOL * Stay, BOOL * Spy, UCHAR * AXCalls);
@ -265,7 +265,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
struct TNCINFO * TNC = TNCInfo[port];
struct STREAMINFO * STREAM = &TNC->Streams[0];
struct ScanEntry * Scan;
int Channel = ((TNC->PortRecord->PORTCONTROL.CHANNELNUM - 1) & 15) << 4;
if (TNC == NULL)
return 0; // Port not defined
@ -350,7 +349,6 @@ ok:
// See if any frames for this port
STREAM = &TNC->Streams[0];
if (STREAM->BPQtoPACTOR_Q)
@ -359,7 +357,7 @@ ok:
UCHAR * data = &buffptr->Data[0];
STREAM->FramesQueued--;
txlen = (int)buffptr->Len;
STREAM->bytesTXed += txlen;
STREAM->BytesTXed += txlen;
bytes=SerialSendData(TNC, data, txlen);
WritetoTrace(TNC, data, txlen);
@ -419,10 +417,7 @@ ok:
if (buff->PID != 240) // ax.25 address
{
txlen = KissEncode(TNC, &buff->PID, txbuff, txlen, Channel);
// We need to che check for ackmode
txlen = KissEncode(&buff->PID, txbuff, txlen);
txlen = send(TNC->TCPSock, txbuff, txlen, 0);
return 1;
}
@ -458,12 +453,8 @@ ok:
if (_memicmp(txbuff, "RADIO ", 6) == 0)
{
char cmd[56];
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, &txbuff[6]);
strcpy(cmd, &buff->L2DATA[6]);
sprintf(&buff->L2DATA[0], "%d %s", TNC->Port, cmd);
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &buff->L2DATA[0]))
{
}
@ -513,8 +504,7 @@ ok:
}
}
if ((toupper(buff->L2DATA[0]) == 'C' && buff->L2DATA[1] == ' ' && txlen > 2) // Connect
|| (toupper(buff->L2DATA[0]) == 'N' && buff->L2DATA[1] == ' ' && txlen > 2)) // Connect
if (toupper(buff->L2DATA[0]) == 'C' && buff->L2DATA[1] == ' ' && txlen > 2) // Connect
{
// Connect Command. Pass to L2 code to start session
@ -626,9 +616,9 @@ noFlip3:
RESET2(LINK); // RESET ALL FLAGS
if (toupper(buff->L2DATA[0]) == 'N' && SUPPORT2point2)
LINK->L2STATE = 1; // New (2.2) send XID
else
// if (CMD->String[0] == 'N' && SUPPORT2point2)
// LINK->L2STATE = 1; // New (2.2) send XID
// else
LINK->L2STATE = 2; // Send SABM
LINK->CIRCUITPOINTER = NewSess;
@ -730,18 +720,12 @@ VOID KISSHFReleaseTNC(struct TNCINFO * TNC)
ReleaseOtherPorts(TNC);
}
VOID KISSHFSuspendPort(struct TNCINFO * TNC, struct TNCINFO * THISTNC)
VOID KISSHFSuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC)
{
TNC->PortRecord->PORTCONTROL.PortSuspended = 1;
strcpy(TNC->WEB_TNCSTATE, "Interlocked");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
}
VOID KISSHFReleasePort(struct TNCINFO * TNC)
{
TNC->PortRecord->PORTCONTROL.PortSuspended = 0;
strcpy(TNC->WEB_TNCSTATE, "Free");
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
}
static int WebProc(struct TNCINFO * TNC, char * Buff, BOOL LOCAL)
@ -751,9 +735,9 @@ static int WebProc(struct TNCINFO * TNC, char * Buff, BOOL LOCAL)
"function ScrollOutput()\r\n"
"{var textarea = document.getElementById('textarea');"
"textarea.scrollTop = textarea.scrollHeight;}</script>"
"</head><title>KISSHF Status</title></head><body id=Text onload=\"ScrollOutput()\">"
"</head><title>VARA Status</title></head><body id=Text onload=\"ScrollOutput()\">"
"<h2><form method=post target=\"POPUPW\" onsubmit=\"POPUPW = window.open('about:blank','POPUPW',"
"'width=440,height=50');\" action=ARDOPAbort?%d>KISSHF Status"
"'width=440,height=150');\" action=ARDOPAbort?%d>KISSHF Status"
"<input name=Save value=\"Abort Session\" type=submit style=\"position: absolute; right: 20;\"></form></h2>",
TNC->Port);
@ -762,14 +746,14 @@ static int WebProc(struct TNCINFO * TNC, char * Buff, BOOL LOCAL)
Len += sprintf(&Buff[Len], "<tr><td width=110px>Comms State</td><td>%s</td></tr>", TNC->WEB_COMMSSTATE);
Len += sprintf(&Buff[Len], "<tr><td>TNC State</td><td>%s</td></tr>", TNC->WEB_TNCSTATE);
// Len += sprintf(&Buff[Len], "<tr><td>Mode</td><td>%s</td></tr>", TNC->WEB_MODE);
// Len += sprintf(&Buff[Len], "<tr><td>Channel State</td><td>%s</td></tr>", TNC->WEB_CHANSTATE);
// Len += sprintf(&Buff[Len], "<tr><td>Proto State</td><td>%s</td></tr>", TNC->WEB_PROTOSTATE);
// Len += sprintf(&Buff[Len], "<tr><td>Traffic</td><td>%s</td></tr>", TNC->WEB_TRAFFIC);
Len += sprintf(&Buff[Len], "<tr><td>Mode</td><td>%s</td></tr>", TNC->WEB_MODE);
Len += sprintf(&Buff[Len], "<tr><td>Channel State</td><td>%s</td></tr>", TNC->WEB_CHANSTATE);
Len += sprintf(&Buff[Len], "<tr><td>Proto State</td><td>%s</td></tr>", TNC->WEB_PROTOSTATE);
Len += sprintf(&Buff[Len], "<tr><td>Traffic</td><td>%s</td></tr>", TNC->WEB_TRAFFIC);
// Len += sprintf(&Buff[Len], "<tr><td>TNC Restarts</td><td></td></tr>", TNC->WEB_RESTARTS);
Len += sprintf(&Buff[Len], "</table>");
Len += sprintf(&Buff[Len], "<textarea rows=2 style=\"width:500px; height:50px;\" id=textarea >%s</textarea>", TNC->WebBuffer);
Len += sprintf(&Buff[Len], "<textarea rows=10 style=\"width:500px; height:250px;\" id=textarea >%s</textarea>", TNC->WebBuffer);
Len = DoScanLine(TNC, Buff, Len);
return Len;
@ -813,10 +797,10 @@ VOID * KISSHFExtInit(EXTPORTDATA * PortEntry)
}
TNC->Port = port;
TNC->PortRecord = PortEntry;
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_KISSHF;
TNC->Hardware = H_KISSHF;
TNC->ARDOPBuffer = malloc(8192);
TNC->PortRecord = PortEntry;
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
memcpy(TNC->NodeCall, MYNODECALL, 10);
@ -992,7 +976,6 @@ VOID KISSThread(void * portptr)
char * ptr1;
char * ptr2;
UINT * buffptr;
int Channel = ((TNC->PortRecord->PORTCONTROL.CHANNELNUM - 1) & 15) << 4;
if (TNC->HostName == NULL)
return;
@ -1201,7 +1184,7 @@ VOID KISSThread(void * portptr)
if (FD_ISSET(TNC->TCPSock, &readfs))
{
GetSemaphore(&Semaphore, 52);
KISSHFProcessReceivedPacket(TNC, Channel);
KISSHFProcessReceivedPacket(TNC);
FreeSemaphore(&Semaphore);
}
@ -1260,43 +1243,16 @@ static int KissDecode(UCHAR * inbuff, UCHAR * outbuff, int len)
}
#define ACKMODE 4 // CAN USE ACK REQURED FRAMES
#define MSGHDDRLEN (USHORT)(sizeof(VOID *) + sizeof(UCHAR) + sizeof(USHORT))
#define ONEMINUTE 60*3
static int KissEncode(struct TNCINFO * TNC, UCHAR * inbuff, UCHAR * outbuff, int len, int Channel)
static int KissEncode(UCHAR * inbuff, UCHAR * outbuff, int len)
{
int i,txptr=0;
UCHAR c;
outbuff[0] = FEND;
outbuff[1] = Channel;
outbuff[0]=FEND;
outbuff[1]=0;
txptr=2;
// See if we need ackmode
if (TNC->PortRecord->PORTCONTROL.KISSFLAGS & ACKMODE)
{
UCHAR * ptr = inbuff - MSGHDDRLEN;
PMESSAGE Buffer = (PMESSAGE)ptr;
if (Buffer->Linkptr) // Frame Needs ACK
{
UINT ACKWORD = (UINT)(Buffer->Linkptr - LINKS);
outbuff[1] |= 0x0c; // ACK OPCODE
outbuff[2] = ACKWORD & 0xff;
outbuff[3] = (ACKWORD >> 8) &0xff;
Buffer->Linkptr->L2TIMER = ONEMINUTE; // Extend timeout
txptr = 4;
// have to reset flag so trace doesnt clear it
Buffer->Linkptr = 0;
}
}
for (i=0;i<len;i++)
{
c=inbuff[i];
@ -1327,7 +1283,7 @@ static int KissEncode(struct TNCINFO * TNC, UCHAR * inbuff, UCHAR * outbuff, int
}
VOID KISSHFProcessReceivedPacket(struct TNCINFO * TNC, int Channel)
VOID KISSHFProcessReceivedPacket(struct TNCINFO * TNC)
{
int InputLen, MsgLen;
unsigned char * ptr;
@ -1379,42 +1335,10 @@ VOID KISSHFProcessReceivedPacket(struct TNCINFO * TNC, int Channel)
if (MsgLen > 1)
{
PMESSAGE Buff;
if ((TNC->ARDOPBuffer[1] & 0xf0) != Channel)
goto ignoreit;
Buff = GetBuff();
PMESSAGE Buff = GetBuff();
MsgLen = KissDecode(TNC->ARDOPBuffer, Buffer, MsgLen);
// See if ACKMODE ACK
if ((Buffer[1] & 0xf) == 12)
{
//Ackmode
struct _LINKTABLE * LINK;
int ACKWORD = Buffer[2] | Buffer[3] << 8;
if (ACKWORD < MAXLINKS)
{
LINK = LINKS + ACKWORD;
if (LINK->L2TIMER)
LINK->L2TIMER = LINK->L2TIME;
}
ReleaseBuffer(Buff);
goto ignoreit;
}
if ((Buffer[1] & 0xf) != 0)
{
ReleaseBuffer(Buff);
goto ignoreit; // Not data
}
// we dont need the FENDS or control byte
MsgLen -= 3;
@ -1430,8 +1354,6 @@ VOID KISSHFProcessReceivedPacket(struct TNCINFO * TNC, int Channel)
}
}
ignoreit:
if (TNC->InputLen == 0)
return;
@ -1541,7 +1463,7 @@ void DetachKISSHF(struct PORTCONTROL * PORT)
struct STREAMINFO * STREAM = &TNC->Streams[0];
if (STREAM->Attached)
STREAM->ReportDISC = 10; // Tell Node but give time for error message to display
STREAM->ReportDISC = TRUE; // Tell Node
STREAM->Connecting = FALSE;
STREAM->Connected = FALSE;

1284
L2Code.c

File diff suppressed because it is too large Load diff

166
L3Code.c
View file

@ -49,7 +49,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "stdio.h"
#include <fcntl.h>
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
VOID UPDATEDESTLIST();
@ -60,12 +60,6 @@ VOID L3TRYNEXTDEST(struct ROUTE * ROUTE);
VOID SendNETROMRoute(struct PORTCONTROL * PORT, unsigned char * axcall);
void SendVARANetromNodes(struct TNCINFO * TNC, MESSAGE *Buffer);
void SendVARANetromMsg(struct TNCINFO * TNC,L3MESSAGEBUFFER * Buffer);
VOID SENDNODESMSG(int Portnum);
VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame);
extern int NODESINPROGRESS;
extern int NODESToOnePort;
extern int CLOSING;
extern BOOL NODESINPROGRESS ;;
PPORTCONTROL L3CURRENTPORT;
@ -73,8 +67,6 @@ extern dest_list * CURRENTNODE;
int L3_10SECS = 10;
extern int PREFERINP3ROUTES;
VOID L3BG()
{
@ -100,15 +92,7 @@ VOID L3BG()
{
ROUTE = DEST->NRROUTE[ActiveRoute - 1].ROUT_NEIGHBOUR;
// if NetROM over VARA or NetROM over TCP pass direct to the driver
if (ROUTE && ROUTE->TCPPort)
{
PL3MESSAGEBUFFER Frame = (PL3MESSAGEBUFFER)Q_REM(&DEST->DEST_Q);
TCPNETROMSend(ROUTE, Frame);
ReleaseBuffer(Frame);
continue;
}
// if NetROM over VARA pass direct to the driver
if (ROUTE)
{
@ -151,14 +135,12 @@ 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 risk of looking at old entries
return; // Avoid riskof looking at lod entries
}
}
}
@ -172,32 +154,22 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
{
int n = MAXDESTS;
struct PORTCONTROL * PORT = PORTTABLE;
struct ROUTE * ROUTE = NULL;
struct ROUTE * ROUTE;
struct _LINKTABLE * LINK;
struct TNCINFO * TNC;
int ActiveRoute;
if (DEST->DEST_ROUTE == 0) // Don't ALREADY HAVE A SELECTED ROUTE?
{
DEST->DEST_ROUTE = 1;
if (DEST->DEST_ROUTE == 0) // ALREADY HAVE A SELECTED ROUTE?
DEST->DEST_ROUTE = 1; // TRY TO ACTIVATE FIRST
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)
{
// Current Route not present
// Currnet Route not present
// If current route is 1, then we must have INP3 routes (or entry is corrupt)
if (DEST->DEST_ROUTE != 1)
@ -205,17 +177,13 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
// Current Route is 1
if (DEST->INP3ROUTE[0].ROUT_NEIGHBOUR == 0)
if (DEST->ROUTE[0].ROUT_NEIGHBOUR == 0)
return FALSE; // No INP3 so No Routes
DEST->DEST_ROUTE = 4; // First INP3
ROUTE = DEST->INP3ROUTE[0].ROUT_NEIGHBOUR;
ROUTE = DEST->ROUTE[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];
@ -236,7 +204,7 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
return L2SETUPCROSSLINK(ROUTE);
}
// We umst be waiting for link to come up
// We mst be waiting for link to come up
return TRUE;
@ -255,13 +223,6 @@ char Call1[10];
char Call2[10];
char Call3[10];
VOID PROCESSNODESPOLL(struct PORTCONTROL * PORT)
{
// Pauls G8BPT's request NODES Broadcast
SENDNODESMSG(PORT->PORTNUMBER);
return;
}
VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
{
// PROCESS A NET/ROM 'NODES' MESSAGE
@ -298,7 +259,7 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
{
APPL=&APPLCALLTABLE[App];
if (CompareCalls(Msg->ORIGIN, APPL->APPLCALL))
if (APPL->APPLHASALIAS == 0 && CompareCalls(Msg->ORIGIN, APPL->APPLCALL))
return;
}
@ -358,13 +319,13 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
// if locked route with quality zero ignore
if ((ROUTE->NEIGHBOUR_FLAG)) // LOCKED ROUTE
if ((ROUTE->NEIGHBOUR_FLAG & 1)) // LOCKED ROUTE
if (ROUTE->NEIGHBOUR_QUAL == 0)
return;
// If Ignoreunlocked set, ignore it not locked
if ((ROUTE->NEIGHBOUR_FLAG) == 0) // LOCKED ROUTE
if ((ROUTE->NEIGHBOUR_FLAG & 1) == 0) // LOCKED ROUTE
if (PORT->IgnoreUnlocked)
return;
@ -372,7 +333,7 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
// if not locked, update route quality from port quality (may have changed config and not cleared SAVENODES
if (ROUTE->NEIGHBOUR_FLAG == 0) // Not LOCKED ROUTE
if ((ROUTE->NEIGHBOUR_FLAG & 1) == 0) // Not LOCKED ROUTE
ROUTE->NEIGHBOUR_QUAL = PORT->PORTQUALITY;
// GET TIME FROM BIOS DATA AREA OR RTC
@ -407,7 +368,7 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
NUMBEROFNODES++;
}
// ALWAYS UPDATE ALIAS IN CASE NOT PRESENT IN ORIGINAL TABLE
// ALWAYS UPDATE ALIAS IN CASE NOT PRESENT IN ORIGINAL TABLE
ptr1 = &Msg->L2DATA[1];
ptr2 = &DEST->DEST_ALIAS[0];
@ -475,10 +436,10 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
if (CheckExcludeList(ptr1) == 0) // Excluded
continue;
for (n = 0; n < NumberofAppls; n++)
for (n = 0; n < 32; n++)
{
if (CompareCalls(ptr1, APPLCALLTABLE[n].APPLCALL))
goto IgnoreNode; // Don't update our applications
continue;
}
// MAKE SURE ITS NOT CORRUPTED
@ -587,7 +548,7 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
ptr1 += 7;
// UPDATE ALIAS#
// UPDATE ALIAS
memcpy(DEST->DEST_ALIAS, ptr1, 6);
@ -746,11 +707,11 @@ int COUNTNODES(struct ROUTE * ROUTE)
count++;
else if (DEST->NRROUTE[2].ROUT_NEIGHBOUR == ROUTE)
count++;
else if (DEST->INP3ROUTE[0].ROUT_NEIGHBOUR == ROUTE)
else if (DEST->ROUTE[0].ROUT_NEIGHBOUR == ROUTE)
count++;
else if (DEST->INP3ROUTE[1].ROUT_NEIGHBOUR == ROUTE)
else if (DEST->ROUTE[1].ROUT_NEIGHBOUR == ROUTE)
count++;
else if (DEST->INP3ROUTE[2].ROUT_NEIGHBOUR == ROUTE)
else if (DEST->ROUTE[2].ROUT_NEIGHBOUR == ROUTE)
count++;
DEST++;
@ -765,26 +726,12 @@ VOID L3BG();
VOID SENDNEXTNODESFRAGMENT();
VOID SENDNODESMSG(int Portnum)
VOID SENDNODESMSG()
{
if (NODESINPROGRESS)
return;
NODESToOnePort = Portnum;
if (Portnum) // Nodes to one port only
{
L3CURRENTPORT = GetPortTableEntryFromPortNum(Portnum);
if (L3CURRENTPORT == 0)
{
NODESToOnePort = 0;
return;
}
}
else
L3CURRENTPORT = PORTTABLE;
L3CURRENTPORT = PORTTABLE;
SENDNEXTNODESFRAGMENT();
}
@ -820,19 +767,16 @@ VOID SENDNEXTNODESFRAGMENT()
// No NODES to this port, so go to next
PORT = PORT->PORTPOINTER;
if (PORT == NULL || NODESToOnePort)
if (PORT == NULL)
{
// Finished
NODESToOnePort = 0;
NODESINPROGRESS = 0;
return;
}
}
if (NODESToOnePort == 0) // CurrentPort already set if NODESToOnePort
L3CURRENTPORT = PORT;
L3CURRENTPORT = PORT;
DEST = CURRENTNODE = DESTS; // START OF LIST
NODESINPROGRESS = 1;
@ -889,30 +833,19 @@ VOID SENDNEXTNODESFRAGMENT()
if (DEST >= ENDDESTLIST)
{
CURRENTNODE = 0; // Finished on this port
// if sending to only one port then stop
if (NODESToOnePort)
L3CURRENTPORT = PORT->PORTPOINTER;
if (L3CURRENTPORT == NULL)
{
NODESToOnePort = 0;
// Finished
NODESINPROGRESS = 0;
}
else
{
L3CURRENTPORT = PORT->PORTPOINTER;
if (L3CURRENTPORT == NULL)
{
// Finished
NODESINPROGRESS = 0;
}
}
goto Sendit;
}
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 NODE = 0;
(NODE == 1 || DEST->DEST_STATE & 0x80)) // Only send appl nodes if DEST = 0;
{
// Send it
@ -945,9 +878,6 @@ VOID SENDNEXTNODESFRAGMENT()
*(ptr1++) = (UCHAR)Qual;
if (Qual == 0)
continue;
Count--;
}
DEST++;
@ -994,15 +924,13 @@ VOID L3LINKCLOSED(struct _LINKTABLE * LINK, int Reason)
VOID CLEARACTIVEROUTE(struct ROUTE * ROUTE, int Reason)
{
// FIND ANY DESINATIONS WITH ROUTE AS ACTIVE NEIGHBOUR, AND
// FIND ANY DESINATIONS WITH [ESI] AS ACTIVE NEIGHBOUR, AND
// SET INACTIVE
dest_list * DEST;
int n;
// If a link restarts and is no longer inp3 we must still clear any inp3 routes
// if (Reason != NORMALCLOSE || ROUTE->INP3Node)
if (Reason != NORMALCLOSE || ROUTE->INP3Node)
TellINP3LinkGone(ROUTE);
DEST = DESTS;
@ -1017,7 +945,7 @@ VOID CLEARACTIVEROUTE(struct ROUTE * ROUTE, int Reason)
if (DEST->DEST_ROUTE == 0)
continue;
if (DEST->INP3ROUTE[DEST->DEST_ROUTE].ROUT_NEIGHBOUR == ROUTE) // Is this the active route
if (DEST->ROUTE[DEST->DEST_ROUTE].ROUT_NEIGHBOUR == ROUTE) // Is this the active route
{
// Yes, so clear
@ -1095,7 +1023,7 @@ VOID L3TimerProc()
L3TIMER = L3INTERVAL;
UPDATEDESTLIST();
SENDNODESMSG(0);
SENDNODESMSG();
}
}
@ -1110,7 +1038,7 @@ VOID L3TimerProc()
{
ROUTE++;
if (ROUTE->NEIGHBOUR_FLAG) // Locked?
if (ROUTE->NEIGHBOUR_FLAG & 1) // Locked?
continue;
if (ROUTE->NEIGHBOUR_LINK) // Has an active Session
@ -1133,11 +1061,6 @@ VOID L3FastTimer()
MESSAGE * Msg;
struct PORTCONTROL * PORT = PORTTABLE;
// Not if Node is closing
if (CLOSING)
return;
INP3TIMER();
// Send Node faster if VARA
@ -1197,7 +1120,7 @@ UPDEST000:
{
// Any INP3 Routes?
if (DEST->INP3ROUTE[0].ROUT_NEIGHBOUR == 0)
if (DEST->ROUTE[0].ROUT_NEIGHBOUR == 0)
{
// NO ROUTES LEFT TO DEST - REMOVE IT
@ -1369,25 +1292,19 @@ VOID REMOVENODE(dest_list * DEST)
NUMBEROFNODES--;
}
VOID L3LINKSETUPFAILED(struct _LINKTABLE * LINK)
VOID L3CONNECTFAILED(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);
}
TellINP3LinkSetupFailed(ROUTE);
ROUTE->NEIGHBOUR_LINK = 0; // CLEAR IT
@ -1396,10 +1313,9 @@ VOID L3LINKSETUPFAILED(struct _LINKTABLE * LINK)
}
VOID L3TRYNEXTDEST(struct ROUTE * ROUTE)
{
// FIND ANY DESINATIONS WITH ROUTE AS ACTIVE NEIGHBOUR, AND
// FIND ANY DESINATIONS WITH [ESI] AS ACTIVE NEIGHBOUR, AND
// SET NEXT BEST NEIGHBOUR (IF ANY) ACTIVE
int n = MAXDESTS;
@ -1412,7 +1328,7 @@ VOID L3TRYNEXTDEST(struct ROUTE * ROUTE)
if (ActiveRoute)
{
ActiveRoute --; // Routes numbered 1 - 6, index from 0
ActiveRoute --; // Routes numbered 1 - 6, idex from 0
if (DEST->NRROUTE[ActiveRoute].ROUT_NEIGHBOUR == ROUTE)
{

1042
L4Code.c

File diff suppressed because it is too large Load diff

481
LinBPQ.c
View file

@ -21,7 +21,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define _CRT_SECURE_NO_DEPRECATE
#include "cheaders.h"
#include "CHeaders.h"
#include "bpqmail.h"
#ifdef WIN32
#include <Iphlpapi.h>
@ -45,11 +45,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
BOOL APIENTRY Rig_Init();
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line);
void GetSemaphore(struct SEM * Semaphore, int ID);
void FreeSemaphore(struct SEM * Semaphore);
VOID CopyConfigFile(char * ConfigName);
VOID SendMailForThread(VOID * Param);
@ -79,14 +75,9 @@ int upnpClose();
void SaveAIS();
void initAIS();
void DRATSPoll();
void RHPPoll();
VOID GetPGConfig();
void SendBBSDataToPktMap();
void CloseAllLinks();
void hookNodeClosing(char * Reason);
extern uint64_t INP3timeLoadedMS;
extern uint64_t timeLoadedMS;
BOOL IncludesMail = FALSE;
BOOL IncludesChat = FALSE;
@ -264,9 +255,9 @@ extern char MailDir[MAX_PATH];
extern time_t MaintClock; // Time to run housekeeping
#ifdef WIN32
int KEEPGOING = 30; // 5 secs to shut down
BOOL KEEPGOING = 30; // 5 secs to shut down
#else
int KEEPGOING = 50; // 5 secs to shut down
BOOL KEEPGOING = 50; // 5 secs to shut down
#endif
BOOL Restarting = FALSE;
BOOL CLOSING = FALSE;
@ -339,7 +330,6 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
// Handle the CTRL-C signal.
case CTRL_C_EVENT:
printf( "Ctrl-C event\n\n" );
CloseAllLinks();
CLOSING = TRUE;
Beep( 750, 300 );
return( TRUE );
@ -347,8 +337,7 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
// CTRL-CLOSE: confirm that the user wants to exit.
case CTRL_CLOSE_EVENT:
CloseAllLinks();
CLOSING = TRUE;
CLOSING = TRUE;
printf( "Ctrl-Close event\n\n" );
Sleep(20000);
Beep( 750, 300 );
@ -358,8 +347,7 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
case CTRL_BREAK_EVENT:
Beep( 900, 200 );
printf( "Ctrl-Break event\n\n" );
CloseAllLinks();
CLOSING = TRUE;
CLOSING = TRUE;
Beep( 750, 300 );
return FALSE;
@ -371,8 +359,7 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
case CTRL_SHUTDOWN_EVENT:
Beep( 750, 500 );
printf( "Ctrl-Shutdown event\n\n" );
CloseAllLinks();
CLOSING = TRUE;
CLOSING = TRUE;
Beep( 750, 300 );
return FALSE;
@ -383,70 +370,18 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
#else
#include <execinfo.h>
#include <signal.h>
// Linux Signal Handlers
static void segvhandler(int sig)
{
void *array[10];
size_t size;
char msg[] = "\nSIGSEGV Received\n";
write(STDERR_FILENO, msg, strlen(msg));
// get void*'s for all entries on the stack
size = backtrace(array, 10);
// print out all the frames to stderr
backtrace_symbols_fd(array, size, STDERR_FILENO);
write(STDOUT_FILENO, msg, strlen(msg));
backtrace_symbols_fd(array, size, STDOUT_FILENO);
hookNodeClosing("sigsegv");
Sleep(500);
exit(1);
}
static void abrthandler(int sig)
{
void *array[10];
size_t size;
char msg[] = "\nSIGABRT Received\n";
write(STDERR_FILENO, msg, strlen(msg));
write(STDOUT_FILENO, msg, strlen(msg));
// get void*'s for all entries on the stack
size = backtrace(array, 10);
backtrace_symbols_fd(array, size, STDERR_FILENO);
write(STDOUT_FILENO, msg, strlen(msg));
backtrace_symbols_fd(array, size, STDOUT_FILENO);
hookNodeClosing("sigabrt");
Sleep(500);
exit(1);
}
static void sigterm_handler(int sig)
{
syslog(LOG_INFO, "terminating on SIGTERM\n");
CLOSING = TRUE;
CloseAllLinks();
}
static void sigint_handler(int sig)
{
printf("terminating on SIGINT\n");
CLOSING = TRUE;
CloseAllLinks();
}
@ -525,10 +460,9 @@ VOID MonitorThread(void * x)
{
// It is stuck - try to release
Debugprintf ("Semaphore locked - Process ID = %d, Held By %d from %s Line %d",
Semaphore.SemProcessID, SemHeldByAPI, Semaphore.File, Semaphore.Line);
Debugprintf ("Semaphore locked - Process ID = %d, Held By %d",
Semaphore.SemProcessID, SemHeldByAPI);
Semaphore.Flag = 0;
}
@ -619,8 +553,6 @@ extern int POP3Timer;
#ifndef WIN32
#define _getch getchar
/**
@ -734,7 +666,7 @@ void ConTermPoll()
// Replace CR with CRLF
printf("%s", ptr);
printf(ptr);
if (ptr2)
printf("\r\n");
@ -784,7 +716,7 @@ void ConTermPoll()
}
#include <getopt.h>
#include "getopt.h"
static struct option long_options[] =
{
@ -805,12 +737,6 @@ char HelpScreen[] =
int Redirected = 0;
static void segvhandler(int sig);
static void abrthandler(int sig);
void GetRestartData();
int main(int argc, char * argv[])
{
int i;
@ -840,10 +766,6 @@ int main(int argc, char * argv[])
}
#else
signal(SIGSEGV, segvhandler);
signal(SIGABRT, abrthandler);
setlinebuf(stdout);
struct sigaction act;
openlog("LINBPQ", LOG_PID, LOG_DAEMON);
@ -853,22 +775,21 @@ int main(int argc, char * argv[])
#endif
#endif
// Disable Console Terminal if stdout redirected
// Disable Console Terminal if stdout redirected
// printf("STDOUT %d\n",isatty(STDOUT_FILENO));
// printf("STDIN %d\n",isatty(STDIN_FILENO));
if (!isatty(STDOUT_FILENO) || !isatty(STDIN_FILENO))
Redirected = 1;
INP3timeLoadedMS = GetTickCount();
timeLoadedMS = GetTickCount();
#endif
printf("G8BPQ AX25 Packet Switch System Version %s %s\n", TextVerstring, Datestring);
printf("%s\n", VerCopyright);
srand(time(NULL));
// look for optarg format parameters
@ -894,7 +815,7 @@ int main(int argc, char * argv[])
{
case 'h':
printf("%s", HelpScreen);
printf(HelpScreen);
exit (0);
case 'l':
@ -926,10 +847,7 @@ int main(int argc, char * argv[])
Debugprintf("G8BPQ AX25 Packet Switch System Version %s %s", TextVerstring, Datestring);
#if defined(MACBPQ) || defined(FREEBSD)
time_t dummy;
_MYTIMEZONE = -localtime(&dummy)->tm_gmtoff;
#else
#ifndef MACBPQ
_MYTIMEZONE = _timezone;
#endif
@ -1159,229 +1077,222 @@ int main(int argc, char * argv[])
BBSApplMask = 1<<(BBSApplNum-1);
// See if we need to warn of possible problem with BaseDir moved by installer
// See if we need to warn of possible problem with BaseDir moved by installer
sprintf(BaseDir, "%s", BPQDirectory);
sprintf(BaseDir, "%s", BPQDirectory);
// Set up file and directory names
// Set up file and directory names
strcpy(UserDatabasePath, BaseDir);
strcat(UserDatabasePath, "/");
strcat(UserDatabasePath, UserDatabaseName);
strcpy(UserDatabasePath, BaseDir);
strcat(UserDatabasePath, "/");
strcat(UserDatabasePath, UserDatabaseName);
strcpy(MsgDatabasePath, BaseDir);
strcat(MsgDatabasePath, "/");
strcat(MsgDatabasePath, MsgDatabaseName);
strcpy(MsgDatabasePath, BaseDir);
strcat(MsgDatabasePath, "/");
strcat(MsgDatabasePath, MsgDatabaseName);
strcpy(BIDDatabasePath, BaseDir);
strcat(BIDDatabasePath, "/");
strcat(BIDDatabasePath, BIDDatabaseName);
strcpy(BIDDatabasePath, BaseDir);
strcat(BIDDatabasePath, "/");
strcat(BIDDatabasePath, BIDDatabaseName);
strcpy(WPDatabasePath, BaseDir);
strcat(WPDatabasePath, "/");
strcat(WPDatabasePath, WPDatabaseName);
strcpy(WPDatabasePath, BaseDir);
strcat(WPDatabasePath, "/");
strcat(WPDatabasePath, WPDatabaseName);
strcpy(BadWordsPath, BaseDir);
strcat(BadWordsPath, "/");
strcat(BadWordsPath, BadWordsName);
strcpy(BadWordsPath, BaseDir);
strcat(BadWordsPath, "/");
strcat(BadWordsPath, BadWordsName);
strcpy(NTSAliasesPath, BaseDir);
strcat(NTSAliasesPath, "/");
strcat(NTSAliasesPath, NTSAliasesName);
strcpy(NTSAliasesPath, BaseDir);
strcat(NTSAliasesPath, "/");
strcat(NTSAliasesPath, NTSAliasesName);
strcpy(MailDir, BaseDir);
strcat(MailDir, "/");
strcat(MailDir, "Mail");
strcpy(MailDir, BaseDir);
strcat(MailDir, "/");
strcat(MailDir, "Mail");
#ifdef WIN32
CreateDirectory(MailDir, NULL); // Just in case
CreateDirectory(MailDir, NULL); // Just in case
#else
mkdir(MailDir, S_IRWXU | S_IRWXG | S_IRWXO);
chmod(MailDir, S_IRWXU | S_IRWXG | S_IRWXO);
mkdir(MailDir, S_IRWXU | S_IRWXG | S_IRWXO);
chmod(MailDir, S_IRWXU | S_IRWXG | S_IRWXO);
#endif
// Make backup copies of Databases
// CopyConfigFile(ConfigName);
// Make backup copies of Databases
CopyBIDDatabase();
CopyMessageDatabase();
CopyUserDatabase();
CopyWPDatabase();
// CopyConfigFile(ConfigName);
SetupMyHA();
SetupFwdAliases();
SetupNTSAliases(NTSAliasesPath);
CopyBIDDatabase();
CopyMessageDatabase();
CopyUserDatabase();
CopyWPDatabase();
GetWPDatabase();
SetupMyHA();
SetupFwdAliases();
SetupNTSAliases(NTSAliasesPath);
GetMessageDatabase();
GetUserDatabase();
GetBIDDatabase();
GetBadWordFile();
GetHTMLForms();
GetPGConfig();
GetWPDatabase();
// Make sure there is a user record for the BBS, with BBS bit set.
GetMessageDatabase();
GetUserDatabase();
GetBIDDatabase();
GetBadWordFile();
GetHTMLForms();
GetPGConfig();
GetRestartData();
user = LookupCall(BBSName);
// Make sure there is a user record for the BBS, with BBS bit set.
if (user == NULL)
{
user = AllocateUserRecord(BBSName);
user->Temp = zalloc(sizeof (struct TempUserInfo));
}
user = LookupCall(BBSName);
if ((user->flags & F_BBS) == 0)
{
// Not Defined as a BBS
if(SetupNewBBS(user))
user->flags |= F_BBS;
}
// if forwarding AMPR mail make sure User/BBS AMPR exists
if (SendAMPRDirect)
{
BOOL NeedSave = FALSE;
user = LookupCall("AMPR");
if (user == NULL)
{
user = AllocateUserRecord(BBSName);
user = AllocateUserRecord("AMPR");
user->Temp = zalloc(sizeof (struct TempUserInfo));
NeedSave = TRUE;
}
if ((user->flags & F_BBS) == 0)
{
// Not Defined as a BBS
if(SetupNewBBS(user))
if (SetupNewBBS(user))
user->flags |= F_BBS;
NeedSave = TRUE;
}
// if forwarding AMPR mail make sure User/BBS AMPR exists
if (SendAMPRDirect)
{
BOOL NeedSave = FALSE;
user = LookupCall("AMPR");
if (user == NULL)
{
user = AllocateUserRecord("AMPR");
user->Temp = zalloc(sizeof (struct TempUserInfo));
NeedSave = TRUE;
}
if ((user->flags & F_BBS) == 0)
{
// Not Defined as a BBS
if (SetupNewBBS(user))
user->flags |= F_BBS;
NeedSave = TRUE;
}
if (NeedSave)
SaveUserDatabase();
}
// Make sure SYSOPCALL is set
if (SYSOPCall[0] == 0)
strcpy(SYSOPCall, BBSName);
// See if just want to add user (mainly for setup scripts)
if (argc == 5 && _stricmp(argv[1], "--adduser") == 0)
{
BOOL isBBS = FALSE;
char * response;
if (_stricmp(argv[4], "TRUE") == 0)
isBBS = TRUE;
printf("Adding User %s\r\n", argv[2]);
response = AddUser(argv[2], argv[3], isBBS);
printf("%s", response);
exit(0);
}
// Allocate Streams
strcpy(pgm, "BBS");
for (i=0; i < MaxStreams; i++)
{
conn = &Connections[i];
conn->BPQStream = FindFreeStream();
if (conn->BPQStream == 255) break;
NumberofStreams++;
// BPQSetHandle(conn->BPQStream, hWnd);
SetAppl(conn->BPQStream, (i == 0 && EnableUI) ? 0x82 : 2, BBSApplMask);
Disconnect(conn->BPQStream);
}
strcpy(pgm, "LINBPQ");
InitialiseTCP();
InitialiseNNTP();
SetupListenSet(); // Master set of listening sockets
if (EnableUI || MailForInterval)
SetupUIInterface();
if (MailForInterval)
_beginthread(SendMailForThread, 0, 0);
// Calulate time to run Housekeeping
{
struct tm *tm;
time_t now;
now = time(NULL);
tm = gmtime(&now);
tm->tm_hour = MaintTime / 100;
tm->tm_min = MaintTime % 100;
tm->tm_sec = 0;
MaintClock = mktime(tm) - (time_t)_MYTIMEZONE;
while (MaintClock < now)
MaintClock += MaintInterval * 3600;
Debugprintf("Maint Clock %lld NOW %lld Time to HouseKeeping %lld", (long long)MaintClock, (long long)now, (long long)(MaintClock - now));
if (LastHouseKeepingTime)
{
if ((now - LastHouseKeepingTime) > MaintInterval * 3600)
{
DoHouseKeeping(FALSE);
}
}
for (i = optind; i < argc; i++)
{
if (_stricmp(argv[i], "tidymail") == 0)
DeleteRedundantMessages();
if (_stricmp(argv[i], "nohomebbs") == 0)
DontNeedHomeBBS = TRUE;
}
printf("Mail Started\n");
Logprintf(LOG_BBS, NULL, '!', "Mail Starting");
APIClock = 0;
SendBBSDataToPktMap();
}
if (NeedSave)
SaveUserDatabase();
}
// Make sure SYSOPCALL is set
if (SYSOPCall[0] == 0)
strcpy(SYSOPCall, BBSName);
// See if just want to add user (mainly for setup scripts)
if (argc == 5 && _stricmp(argv[1], "--adduser") == 0)
{
BOOL isBBS = FALSE;
char * response;
if (_stricmp(argv[4], "TRUE") == 0)
isBBS = TRUE;
printf("Adding User %s\r\n", argv[2]);
response = AddUser(argv[2], argv[3], isBBS);
printf("%s", response);
exit(0);
}
// Allocate Streams
strcpy(pgm, "BBS");
for (i=0; i < MaxStreams; i++)
{
conn = &Connections[i];
conn->BPQStream = FindFreeStream();
if (conn->BPQStream == 255) break;
NumberofStreams++;
// BPQSetHandle(conn->BPQStream, hWnd);
SetAppl(conn->BPQStream, (i == 0 && EnableUI) ? 0x82 : 2, BBSApplMask);
Disconnect(conn->BPQStream);
}
strcpy(pgm, "LINBPQ");
Debugprintf("POP3 Debug Before Init TCP Timer = %d", POP3Timer);
InitialiseTCP();
Debugprintf("POP3 Debug Before Init NNTP Timer = %d", POP3Timer);
InitialiseNNTP();
SetupListenSet(); // Master set of listening sockets
if (EnableUI || MailForInterval)
SetupUIInterface();
if (MailForInterval)
_beginthread(SendMailForThread, 0, 0);
// Calulate time to run Housekeeping
{
struct tm *tm;
time_t now;
now = time(NULL);
tm = gmtime(&now);
tm->tm_hour = MaintTime / 100;
tm->tm_min = MaintTime % 100;
tm->tm_sec = 0;
MaintClock = mktime(tm) - (time_t)_MYTIMEZONE;
while (MaintClock < now)
MaintClock += MaintInterval * 3600;
Debugprintf("Maint Clock %lld NOW %lld Time to HouseKeeping %lld", (long long)MaintClock, (long long)now, (long long)(MaintClock - now));
if (LastHouseKeepingTime)
{
if ((now - LastHouseKeepingTime) > MaintInterval * 3600)
{
DoHouseKeeping(FALSE);
}
}
for (i = optind; i < argc; i++)
{
if (_stricmp(argv[i], "tidymail") == 0)
DeleteRedundantMessages();
if (_stricmp(argv[i], "nohomebbs") == 0)
DontNeedHomeBBS = TRUE;
}
printf("Mail Started\n");
Logprintf(LOG_BBS, NULL, '!', "Mail Starting");
}
}
Debugprintf("POP3 Debug After Mail Init Timer = %d", POP3Timer);
if (NUMBEROFTNCPORTS)
InitializeTNCEmulator();
AGWActive = AGWAPIInit();
if (Redirected == 0)
ConTerm.BPQStream = FindFreeStream();
#ifndef WIN32
for (i = 1; i < argc; i++)
@ -1472,7 +1383,6 @@ int main(int argc, char * argv[])
SaveMessageDatabase();
SaveBIDDatabase();
SaveConfig(ConfigName);
SaveRestartData();
}
KEEPGOING--; // Give time for links to close
@ -1618,7 +1528,6 @@ int main(int argc, char * argv[])
Poll_AGW();
DRATSPoll();
RHPPoll();
HTTPTimer();
@ -1670,13 +1579,6 @@ int main(int argc, char * argv[])
DoHouseKeeping(FALSE);
}
if (APIClock < NOW)
{
SendBBSDataToPktMap();
APIClock = NOW + 7200; // Every 2 hours
}
tm = gmtime(&NOW);
if (tm->tm_wday == 0) // Sunday
@ -1696,9 +1598,6 @@ int main(int argc, char * argv[])
Slowtimer = 0;
}
hookNodeClosing("Shutdown");
Sleep(500);
printf("Closing Ports\n");
CloseTNCEmulator();

View file

@ -23,8 +23,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "bpqmail.h"
void SendMessageReadEvent(char * call, struct MsgInfo * Msg);
void MQTTMessageEvent(void* message);
void SendMessageReadEvent(struct UserInfo * user, struct MsgInfo * Msg);
VOID ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int len)
@ -200,12 +199,6 @@ VOID ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int l
}
conn->FwdMsg->Locked = 0; // Unlock
#ifndef NOMQTT
if (MQTT)
MQTTMessageEvent(conn->FwdMsg);
#endif
}
return;
@ -289,7 +282,7 @@ VOID ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int l
{
// Reverse forward request
// If we have just sent a message, Flag it as sent
// If we have just sent a nessage, Flag it as sent
if (conn->FBBMsgsSent)
{
@ -307,11 +300,6 @@ VOID ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int l
conn->FwdMsg->Locked = 0; // Unlock
#ifndef NOMQTT
if (MQTT)
MQTTMessageEvent(conn->FwdMsg);
#endif
conn->UserPointer->ForwardingInfo->MsgCount--;
}
@ -366,11 +354,6 @@ VOID ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int l
conn->FwdMsg->datechanged=time(NULL);
}
#ifndef NOMQTT
if (MQTT)
MQTTMessageEvent(conn->FwdMsg);
#endif
conn->UserPointer->ForwardingInfo->MsgCount--;
}

203
MCP2221.vcproj Normal file
View file

@ -0,0 +1,203 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="MCP2221"
ProjectGUID="{FCBB40CD-F7C2-4A97-989A-FC5CEADF7FC1}"
RootNamespace="MCP2221"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib setupapi.lib $(NOINHERIT)"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib $(NoInherit)"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\hid.c"
>
</File>
<File
RelativePath=".\MCP2221.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -28,7 +28,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define _CRT_SECURE_NO_DEPRECATE
#include "cheaders.h"
#include "CHeaders.h"
#include <stdio.h>
#include <time.h>
@ -60,7 +60,7 @@ static void ConnecttoMPSKThread(void * portptr);
void CreateMHWindow();
int Update_MH_List(struct in_addr ipad, char * call, char proto);
static int ConnecttoMPSK(int port);
static int ConnecttoMPSK();
static int ProcessReceivedData(int bpqport);
static int ProcessLine(char * buf, int Port);
int KillTNC(struct TNCINFO * TNC);
@ -71,6 +71,8 @@ static VOID SendData(struct TNCINFO * TNC, char * Msg, int MsgLen);
static VOID DoMonitorHddr(struct TNCINFO * TNC, struct AGWHEADER * RXHeader, UCHAR * Msg);
VOID SendRPBeacon(struct TNCINFO * TNC);
char * strlop(char * buf, char delim);
extern UCHAR BPQDirectory[];
#define MAXMPSKPORTS 16
@ -407,10 +409,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
if (_memicmp(buff->L2DATA, "RADIO ", 6) == 0)
{
char cmd[56];
strcpy(cmd, &buff->L2DATA[6]);
sprintf(buff->L2DATA, "%d %s", TNC->Port, cmd);
sprintf(buff->L2DATA, "%d %s", TNC->Port, &buff->L2DATA[6]);
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, buff->L2DATA))
{
@ -713,7 +712,7 @@ void * MPSKExtInit(EXTPORTDATA * PortEntry)
ptr=strchr(TNC->NodeCall, ' ');
if (ptr) *(ptr) = 0; // Null Terminate
TNC->PortRecord->PORTCONTROL.HWType = TNC->Hardware = H_MPSK;
TNC->Hardware = H_MPSK;
MPSKChannel[port] = PortEntry->PORTCONTROL.CHANNELNUM-65;
@ -1318,7 +1317,7 @@ VOID ProcessMSPKData(struct TNCINFO * TNC)
C_Q_ADD(&STREAM->PACTORtoBPQ_Q, buffptr);
STREAM->bytesRXed += TNC->DataLen;
STREAM->BytesRXed += TNC->DataLen;
}
TNC->DataLen = 0;
@ -1388,7 +1387,7 @@ DataLoop:
STREAM->Connected = TRUE;
STREAM->Connecting = FALSE;
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = 0;
STREAM->BytesRXed = STREAM->BytesTXed = 0;
buffptr = GetBuff();
if (buffptr)
@ -1403,7 +1402,7 @@ DataLoop:
STREAM->Connected = TRUE;
STREAM->ConnectTime = time(NULL);
STREAM->bytesRXed = STREAM->bytesTXed = 0;
STREAM->BytesRXed = STREAM->BytesTXed = 0;
UpdateMH(TNC, CallFrom, '+', 'I');
@ -1484,7 +1483,7 @@ VOID SendData(struct TNCINFO * TNC, char * Msg, int MsgLen)
char * inptr = Msg;
SOCKET sock = TNCInfo[MasterPort[TNC->Port]]->TCPSock;
TNC->Streams[0].bytesTXed += MsgLen;
TNC->Streams[0].BytesTXed += MsgLen;
for (n = 0; n < MsgLen; n++)
{
@ -1542,7 +1541,7 @@ VOID CloseComplete(struct TNCINFO * TNC, int Stream)
sprintf(Cmd, "%cDIGITAL MODE %s\x1b", '\x1a', TNC->MPSKInfo->DefaultMode);
if (TNC->MPSKInfo->Beacon)
sprintf(&Cmd[strlen(Cmd)], "%cBEACON_ARQ_FAE\x1b", '\x1a');
sprintf(Cmd, "%s%cBEACON_ARQ_FAE\x1b", Cmd, '\x1a');
Len = strlen(Cmd);

View file

@ -43,7 +43,6 @@ struct SEM AllocSemaphore = {0, 0};
struct SEM ConSemaphore = {0, 0};
struct SEM Semaphore = {0, 0};
struct SEM OutputSEM = {0, 0};
struct SEM ConfigSEM = {0, 0};
struct UserInfo ** UserRecPtr=NULL;
int NumberofUsers=0;
@ -133,7 +132,7 @@ char HRoute[100];
char AMPRDomain[100];
BOOL SendAMPRDirect = 0;
char SignoffMsg[120];
char SignoffMsg[100];
char AbortedMsg[100]="\rOutput aborted\r";
@ -205,7 +204,6 @@ int MailForInterval = 0;
char zeros[NBMASK]; // For forward bitmask tests
time_t MaintClock; // Time to run housekeeping
time_t APIClock; // Time to sent to MOLTE's Database
struct MsgInfo * MsgnotoMsg[100000]; // Message Number to Message Slot List.

639
MailNode.vcproj Normal file
View file

@ -0,0 +1,639 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="LinBPQ"
ProjectGUID="{3766AA10-C777-4ED8-A83D-F1452DE9B666}"
RootNamespace="MailNode"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\CKernel;..\CommonSource;..\CInclude"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;LINBPQ;_USE_32BIT_TIME_T"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib WS2_32.Lib ..\lib\libconfigd.lib DbgHelp.lib setupapi.lib miniupnpc.lib zlibstat.lib"
OutputFile="c:\LINBPQ\$(ProjectName).exe"
LinkIncremental="2"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="true"
GenerateMapFile="true"
MapFileName="c:\linbpq\linmail.map"
SubSystem="1"
StackReserveSize="4000000"
StackCommitSize="0"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
IntermediateDirectory="C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="0"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\CKernel;..\CommonSource;..\CInclude"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;LINBPQ;_USE_32BIT_TIME_T"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib WS2_32.Lib ..\lib\libconfig.lib DbgHelp.lib Setupapi.lib miniupnpc.lib zlibstat.lib"
OutputFile="c:\devprogs\bpq32\LinBPQ.exe"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
HeapReserveSize="5000000"
StackReserveSize="10000000"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\CommonSource\adif.c"
>
</File>
<File
RelativePath="..\CommonSource\AEAPactor.c"
>
</File>
<File
RelativePath="..\CommonSource\AGWAPI.c"
>
</File>
<File
RelativePath="..\CommonSource\AGWMoncode.c"
>
</File>
<File
RelativePath=".\AISCommon.c"
>
</File>
<File
RelativePath="..\CommonSource\Alloc.c"
>
</File>
<File
RelativePath="..\CommonSource\APRSCode.c"
>
</File>
<File
RelativePath=".\APRSIconData.c"
>
</File>
<File
RelativePath=".\APRSStdPages.c"
>
</File>
<File
RelativePath="..\CommonSource\ARDOP.c"
>
</File>
<File
RelativePath=".\base64.c"
>
</File>
<File
RelativePath="..\CommonSource\BBSHTMLConfig.c"
>
</File>
<File
RelativePath="..\CommonSource\BBSUtilities.c"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="0"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
AssemblerOutput="2"
ObjectFile="$(IntDir)\"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\CommonSource\bpqaxip.c"
>
</File>
<File
RelativePath="..\CommonSource\bpqether.c"
>
</File>
<File
RelativePath="..\CommonSource\bpqhdlc.c"
>
</File>
<File
RelativePath="..\CommonSource\BPQINP3.c"
>
</File>
<File
RelativePath="..\CommonSource\BPQNRR.c"
>
</File>
<File
RelativePath="..\CommonSource\BPQtoAGW.c"
>
</File>
<File
RelativePath="..\CommonSource\bpqvkiss.c"
>
</File>
<File
RelativePath="..\CommonSource\ChatHTMLConfig.c"
>
</File>
<File
RelativePath="..\CommonSource\cMain.c"
>
</File>
<File
RelativePath="..\CommonSource\Cmd.c"
>
</File>
<File
RelativePath="..\CommonSource\CMSAuth.c"
>
</File>
<File
RelativePath="..\CommonSource\CommonCode.c"
>
</File>
<File
RelativePath="..\CommonSource\compatbits.c"
>
</File>
<File
RelativePath="..\CommonSource\config.c"
>
</File>
<File
RelativePath="..\CommonSource\datadefs.c"
>
</File>
<File
RelativePath=".\DRATS.c"
>
</File>
<File
RelativePath=".\Events.c"
>
</File>
<File
RelativePath="..\CommonSource\FBBRoutines.c"
>
</File>
<File
RelativePath="..\CommonSource\FLDigi.c"
>
</File>
<File
RelativePath=".\FreeDATA.c"
>
</File>
<File
RelativePath=".\getopt.c"
>
</File>
<File
RelativePath="..\CommonSource\HALDriver.c"
>
</File>
<File
RelativePath="..\CommonSource\HanksRT.c"
>
</File>
<File
RelativePath="..\CommonSource\HFCommon.c"
>
</File>
<File
RelativePath="..\CommonSource\hid.c"
>
</File>
<File
RelativePath="..\CommonSource\Housekeeping.c"
>
</File>
<File
RelativePath=".\HSMODEM.c"
>
</File>
<File
RelativePath="..\CommonSource\HTMLCommonCode.c"
>
</File>
<File
RelativePath="..\CommonSource\HTTPcode.c"
>
</File>
<File
RelativePath="..\CommonSource\IPCode.c"
>
</File>
<File
RelativePath="..\CommonSource\KAMPactor.c"
>
</File>
<File
RelativePath="..\CommonSource\kiss.c"
>
</File>
<File
RelativePath="..\CommonSource\KISSHF.c"
>
</File>
<File
RelativePath="..\CommonSource\L2Code.c"
>
</File>
<File
RelativePath="..\CommonSource\L3Code.c"
>
</File>
<File
RelativePath="..\CommonSource\L4Code.c"
>
</File>
<File
RelativePath="..\CommonSource\LinBPQ.c"
>
</File>
<File
RelativePath="..\CommonSource\LzFind.c"
>
</File>
<File
RelativePath="..\CommonSource\lzhuf32.c"
>
</File>
<File
RelativePath="..\CommonSource\LzmaDec.c"
>
</File>
<File
RelativePath="..\CommonSource\LzmaEnc.c"
>
</File>
<File
RelativePath="..\CommonSource\LzmaLib.c"
>
</File>
<File
RelativePath=".\mailapi.c"
>
</File>
<File
RelativePath="..\CommonSource\MailCommands.c"
>
</File>
<File
RelativePath="..\CommonSource\MailDataDefs.c"
>
</File>
<File
RelativePath="..\CommonSource\MailRouting.c"
>
</File>
<File
RelativePath="..\CommonSource\MailTCP.c"
>
</File>
<File
RelativePath="..\CommonSource\MBLRoutines.c"
>
</File>
<File
RelativePath="..\CommonSource\md5.c"
>
</File>
<File
RelativePath="..\CommonSource\Moncode.c"
>
</File>
<File
RelativePath="..\CommonSource\Multicast.c"
>
</File>
<File
RelativePath="..\CommonSource\MULTIPSK.c"
>
</File>
<File
RelativePath="..\CommonSource\NNTPRoutines.c"
>
</File>
<File
RelativePath=".\nodeapi.c"
>
</File>
<File
RelativePath="..\CommonSource\pibits.c"
>
</File>
<File
RelativePath=".\png.c"
>
</File>
<File
RelativePath=".\png.h"
>
</File>
<File
RelativePath=".\pngerror.c"
>
</File>
<File
RelativePath=".\pnggccrd.c"
>
</File>
<File
RelativePath=".\pngget.c"
>
</File>
<File
RelativePath=".\pngmem.c"
>
</File>
<File
RelativePath=".\pngpread.c"
>
</File>
<File
RelativePath=".\pngread.c"
>
</File>
<File
RelativePath=".\pngrio.c"
>
</File>
<File
RelativePath=".\pngrtran.c"
>
</File>
<File
RelativePath=".\pngrutil.c"
>
</File>
<File
RelativePath=".\pngset.c"
>
</File>
<File
RelativePath=".\pngtrans.c"
>
</File>
<File
RelativePath=".\pngvcrd.c"
>
</File>
<File
RelativePath=".\pngwio.c"
>
</File>
<File
RelativePath=".\pngwrite.c"
>
</File>
<File
RelativePath=".\pngwtran.c"
>
</File>
<File
RelativePath=".\pngwutil.c"
>
</File>
<File
RelativePath="..\CommonSource\RigControl.c"
>
</File>
<File
RelativePath="..\CommonSource\SCSPactor.c"
>
</File>
<File
RelativePath="..\CommonSource\SCSTrackeMulti.c"
>
</File>
<File
RelativePath="..\CommonSource\SCSTracker.c"
>
</File>
<File
RelativePath="..\CommonSource\SerialPort.c"
>
</File>
<File
RelativePath="..\CommonSource\TelnetV6.c"
>
</File>
<File
RelativePath="..\CommonSource\TNCCode.c"
>
</File>
<File
RelativePath="..\CommonSource\TNCEmulators.c"
>
</File>
<File
RelativePath="..\CommonSource\UIRoutines.c"
>
</File>
<File
RelativePath=".\upnp.c"
>
</File>
<File
RelativePath="..\CommonSource\utf8Routines.c"
>
</File>
<File
RelativePath="..\CommonSource\UZ7HODrv.c"
>
</File>
<File
RelativePath="..\CommonSource\V4.c"
>
</File>
<File
RelativePath="..\CommonSource\VARA.c"
>
</File>
<File
RelativePath="..\CommonSource\WebMail.c"
>
</File>
<File
RelativePath="..\CommonSource\WINMOR.c"
>
</File>
<File
RelativePath=".\WinRPR.c"
>
</File>
<File
RelativePath="..\CommonSource\WPRoutines.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory="c:\linbpq"
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="NOTTSDESKTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

294
MailNode.vcxproj Normal file
View file

@ -0,0 +1,294 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>LinBPQ</ProjectName>
<ProjectGuid>{3766AA10-C777-4ED8-A83D-F1452DE9B666}</ProjectGuid>
<RootNamespace>MailNode</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>15.0.28307.799</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<OutDir>D:\linbpq</OutDir>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(Configuration)\</OutDir>
<IntDir>C:\Dev\Msdev2005\Intermed\$(SolutionName)\$(ProjectName)\$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\CKernel;..\CommonSource;..\CInclude;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;LINBPQ;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>kernel32.lib;WS2_32.Lib;..\lib\libconfigd.lib;DbgHelp.lib;setupapi.lib;miniupnpc.lib;zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\LINBPQ\$(ProjectName).exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>c:\linbpq\linmail.map</MapFileName>
<SubSystem>Console</SubSystem>
<StackReserveSize>4000000</StackReserveSize>
<StackCommitSize>0</StackCommitSize>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\CKernel;..\CommonSource;..\CInclude;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;LINBPQ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>kernel32.lib;WS2_32.Lib;C:\OneDrive\Dev\Source\bpq32\libconfig\x64\Release\libconfig.lib;DbgHelp.lib;setupapi.lib;C:\Dev\Msdev2005\projects\bpq32\CKernel\x64\Debug\miniupnpc.lib;C:\OneDrive\Dev\Source\zlib-1.2.11\contrib\vstudio\vc14\x64\ZlibStatDebug\zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\LINBPQ\$(ProjectName).exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<GenerateMapFile>true</GenerateMapFile>
<MapFileName>c:\linbpq\linmail.map</MapFileName>
<SubSystem>Console</SubSystem>
<StackReserveSize>4000000</StackReserveSize>
<StackCommitSize>0</StackCommitSize>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>..\CKernel;..\CommonSource;..\CInclude;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LINBPQ;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>kernel32.lib;WS2_32.Lib;..\lib\libconfig.lib;DbgHelp.lib;Setupapi.lib;miniupnpc.lib;zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\devprogs\bpq32\LinBPQ.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<HeapReserveSize>5000000</HeapReserveSize>
<StackReserveSize>10000000</StackReserveSize>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>..\CKernel;..\CommonSource;..\CInclude;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;LINBPQ;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>kernel32.lib;WS2_32.Lib;..\lib\libconfig.lib;DbgHelp.lib;Setupapi.lib;miniupnpc.lib;zlibstat.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>c:\devprogs\bpq32\LinBPQ.exe</OutputFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<HeapReserveSize>5000000</HeapReserveSize>
<StackReserveSize>10000000</StackReserveSize>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="adif.c" />
<ClCompile Include="AEAPactor.c" />
<ClCompile Include="AGWAPI.c" />
<ClCompile Include="AGWMoncode.c" />
<ClCompile Include="AISCommon.c" />
<ClCompile Include="Alloc.c" />
<ClCompile Include="APRSCode.c" />
<ClCompile Include="APRSIconData.c" />
<ClCompile Include="APRSStdPages.c" />
<ClCompile Include="ARDOP.c" />
<ClCompile Include="base64.c" />
<ClCompile Include="BBSHTMLConfig.c" />
<ClCompile Include="BBSUtilities.c">
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
</AssemblerOutput>
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
</AssemblerOutput>
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">All</AssemblerOutput>
<AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">All</AssemblerOutput>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)</ObjectFileName>
<ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)</ObjectFileName>
</ClCompile>
<ClCompile Include="bpqaxip.c" />
<ClCompile Include="bpqether.c" />
<ClCompile Include="bpqhdlc.c" />
<ClCompile Include="BPQINP3.c" />
<ClCompile Include="BPQNRR.c" />
<ClCompile Include="BPQtoAGW.c" />
<ClCompile Include="bpqvkiss.c" />
<ClCompile Include="ChatHTMLConfig.c" />
<ClCompile Include="cMain.c" />
<ClCompile Include="Cmd.c" />
<ClCompile Include="CMSAuth.c" />
<ClCompile Include="CommonCode.c" />
<ClCompile Include="compatbits.c" />
<ClCompile Include="config.c" />
<ClCompile Include="datadefs.c" />
<ClCompile Include="DRATS.c" />
<ClCompile Include="Events.c" />
<ClCompile Include="FBBRoutines.c" />
<ClCompile Include="FLDigi.c" />
<ClCompile Include="FreeDATA.c" />
<ClCompile Include="getopt.c" />
<ClCompile Include="HALDriver.c" />
<ClCompile Include="HanksRT.c" />
<ClCompile Include="HFCommon.c" />
<ClCompile Include="hid.c" />
<ClCompile Include="Housekeeping.c" />
<ClCompile Include="HSMODEM.c" />
<ClCompile Include="HTMLCommonCode.c" />
<ClCompile Include="HTTPcode.c" />
<ClCompile Include="IPCode.c" />
<ClCompile Include="KAMPactor.c" />
<ClCompile Include="kiss.c" />
<ClCompile Include="KISSHF.c" />
<ClCompile Include="L2Code.c" />
<ClCompile Include="L3Code.c" />
<ClCompile Include="L4Code.c" />
<ClCompile Include="LinBPQ.c" />
<ClCompile Include="LzFind.c" />
<ClCompile Include="lzhuf32.c" />
<ClCompile Include="LzmaDec.c" />
<ClCompile Include="LzmaEnc.c" />
<ClCompile Include="LzmaLib.c" />
<ClCompile Include="MailCommands.c" />
<ClCompile Include="MailDataDefs.c" />
<ClCompile Include="MailRouting.c" />
<ClCompile Include="MailTCP.c" />
<ClCompile Include="MBLRoutines.c" />
<ClCompile Include="md5.c" />
<ClCompile Include="Moncode.c" />
<ClCompile Include="Multicast.c" />
<ClCompile Include="MULTIPSK.c" />
<ClCompile Include="NNTPRoutines.c" />
<ClCompile Include="pibits.c" />
<ClCompile Include="png.c" />
<ClCompile Include="pngerror.c" />
<ClCompile Include="pnggccrd.c" />
<ClCompile Include="pngget.c" />
<ClCompile Include="pngmem.c" />
<ClCompile Include="pngpread.c" />
<ClCompile Include="pngread.c" />
<ClCompile Include="pngrio.c" />
<ClCompile Include="pngrtran.c" />
<ClCompile Include="pngrutil.c" />
<ClCompile Include="pngset.c" />
<ClCompile Include="pngtrans.c" />
<ClCompile Include="pngvcrd.c" />
<ClCompile Include="pngwio.c" />
<ClCompile Include="pngwrite.c" />
<ClCompile Include="pngwtran.c" />
<ClCompile Include="pngwutil.c" />
<ClCompile Include="RigControl.c" />
<ClCompile Include="SCSPactor.c" />
<ClCompile Include="SCSTrackeMulti.c" />
<ClCompile Include="SCSTracker.c" />
<ClCompile Include="SerialPort.c" />
<ClCompile Include="TelnetV6.c" />
<ClCompile Include="TNCCode.c" />
<ClCompile Include="TNCEmulators.c" />
<ClCompile Include="UIRoutines.c" />
<ClCompile Include="upnp.c" />
<ClCompile Include="utf8Routines.c" />
<ClCompile Include="UZ7HODrv.c" />
<ClCompile Include="V4.c" />
<ClCompile Include="VARA.c" />
<ClCompile Include="WebMail.c" />
<ClCompile Include="WINMOR.c" />
<ClCompile Include="WinRPR.c" />
<ClCompile Include="WPRoutines.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="png.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

327
MailNode.vcxproj.filters Normal file
View file

@ -0,0 +1,327 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="adif.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AEAPactor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AGWAPI.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AGWMoncode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AISCommon.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Alloc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="APRSCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="APRSIconData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="APRSStdPages.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ARDOP.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="base64.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BBSHTMLConfig.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BBSUtilities.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqaxip.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqether.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqhdlc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQINP3.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQNRR.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BPQtoAGW.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="bpqvkiss.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ChatHTMLConfig.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="cMain.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Cmd.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CMSAuth.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CommonCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="compatbits.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="config.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="datadefs.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DRATS.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Events.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FBBRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FLDigi.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="FreeDATA.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HALDriver.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HanksRT.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HFCommon.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="hid.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Housekeeping.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HSMODEM.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HTMLCommonCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="HTTPcode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="IPCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="KAMPactor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="kiss.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="KISSHF.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="L2Code.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="L3Code.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="L4Code.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LinBPQ.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzFind.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="lzhuf32.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzmaDec.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzmaEnc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="LzmaLib.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailCommands.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailDataDefs.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailRouting.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MailTCP.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MBLRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="md5.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Moncode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Multicast.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MULTIPSK.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="NNTPRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pibits.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="png.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngerror.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pnggccrd.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngget.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngmem.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngpread.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngread.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngrio.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngrtran.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngrutil.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngset.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngtrans.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngvcrd.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngwio.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngwrite.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngwtran.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="pngwutil.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RigControl.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SCSPactor.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SCSTrackeMulti.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SCSTracker.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SerialPort.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TelnetV6.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TNCCode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TNCEmulators.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UIRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="upnp.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="utf8Routines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UZ7HODrv.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="V4.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VARA.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WebMail.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WINMOR.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WinRPR.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WPRoutines.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="getopt.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="png.h">
<Filter>Source Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

8
MailNode.vcxproj.user Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommand>c:\linbpq\linbpq.exe</LocalDebuggerCommand>
<LocalDebuggerWorkingDirectory>c:\linbpq</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

File diff suppressed because it is too large Load diff

View file

@ -1570,12 +1570,12 @@ VOID ProcessSMTPServerMessage(SocketConn * sockptr, char * Buffer, int Len)
if (CheckifLocalRMSUser(Addr)) // if local RMS - Leave Here
continue;
ToLen = sprintf(&ToString[strlen(ToString)], "To: %s\r\n", &Addr[4]);
ToLen = sprintf(ToString, "%sTo: %s\r\n", ToString, &Addr[4]);
*sockptr->RecpTo[i] = 0; // So we dont create individual one later
continue;
}
ToLen = sprintf(&ToString[strlen(ToString)], "To: %s@%s\r\n", &Addr[4], Via);
ToLen = sprintf(ToString, "%sTo: %s@%s\r\n", ToString, &Addr[4], Via);
*sockptr->RecpTo[i] = 0; // So we dont create individual one later
continue;
}
@ -1591,7 +1591,7 @@ VOID ProcessSMTPServerMessage(SocketConn * sockptr, char * Buffer, int Len)
if (CheckifLocalRMSUser(Addr)) // if local RMS - Leave Here
continue;
ToLen = sprintf(&ToString[strlen(ToString)], "To: %s\r\n", Addr);
ToLen = sprintf(ToString, "%sTo: %s\r\n", ToString, Addr);
*sockptr->RecpTo[i] = 0; // So we dont create individual one later
continue;
@ -2656,7 +2656,6 @@ VOID ProcessPOP3ServerMessage(SocketConn * sockptr, char * Buffer, int Len)
// Must be some other coding
int code = TrytoGuessCode(msgbytes, Len);
UCHAR * UTF = malloc(Len * 3);
if (code == 437)
@ -2897,8 +2896,6 @@ SocketConn * SMTPConnect(char * Host, int Port, BOOL AMPR, struct MsgInfo * Msg,
sinx.sin_addr.s_addr = INADDR_ANY;
sinx.sin_port = 0;
sockptr->Timeout = 0;
if (bind(sockptr->socket, (LPSOCKADDR) &sinx, addrlen) != 0 )
{
//
@ -3592,6 +3589,7 @@ VOID ProcessPOP3ClientMessage(SocketConn * sockptr, char * Buffer, int Len)
if (sockptr->POP3MsgCount > sockptr->POP3MsgNum++)
{
sockprintf(sockptr, "RETR %d", sockptr->POP3MsgNum);
sockptr->State = WaitingForRETRResponse;
}
else

157
Moncode.c
View file

@ -31,7 +31,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#pragma data_seg("_BPQDATA")
#include "cheaders.h"
#include "CHeaders.h"
#include "tncinfo.h"
// MSGFLAG contains CMD/RESPONSE BITS
@ -59,7 +59,8 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#define NODES_SIG 0xFF
UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, int msglen);
char * strlop(char * buf, char delim);
UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, unsigned int msglen);
char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen);
UCHAR * DISPLAYIPDATAGRAM(IPMSG * IP, UCHAR * Output, int MsgLen);
@ -194,9 +195,6 @@ KC6OAR*>ID:
// Check Port
Port = msg->PORT;
if (Port == 40)
Port = Port;
if (Port & 0x80)
{
@ -209,12 +207,7 @@ KC6OAR*>ID:
Port &= 0x7F;
if ((((uint64_t)1 << (Port - 1)) & Mask) == 0) // Check MMASK
{
if (msg->Padding[0] == '[')
msg->Padding[0] = 0;
return 0;
}
// We now pass Text format monitoring from non-ax25 drivers through this code
@ -257,8 +250,10 @@ KC6OAR*>ID:
ptr += 7;
n--;
if (n < 0)
if (n == 0)
{
return 0; // Corrupt - no end of address bit
}
}
// Reached End of digis
@ -535,41 +530,16 @@ KC6OAR*>ID:
Output += sprintf((char *)Output, " RX Window=%d", value);
break;
case 16:
Output += sprintf((char *)Output, " Can Compress");
break;
case 17:
Output += sprintf((char *)Output, " Compress ok");
break;
}
}
}
}
if (msg->Padding[0] == '[')
Output += sprintf((char *)Output, " %s", msg->Padding);
msg->Padding[0] = 0;
if (Info)
{
// We have an info frame
switch (ADJBUFFER->PID)
{
case 0xF1:
case 0xF2:
// Compressed L2 Data
Output += sprintf((char *)Output, " <%d Bytes of Compressed L2 Data>", MsgLen - (19 + sizeof(void *)));
break;
case 0xF0: // Normal Data
{
char Infofield[257];
@ -655,13 +625,12 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
char Node[10];
UCHAR TTL, Index, ID, TXNO, RXNO, OpCode, Flags, Window;
UCHAR * ptr = &ADJBUFFER->L2DATA[0];
int service = 0;
int netromx = 0; // Set if Paula's connect to service
if (ADJBUFFER->L2DATA[0] == NODES_SIG)
{
// Display NODES
// If an INP3 RIF (type <> UI) decode as such
if (ADJBUFFER->CTL != 3) // UI
@ -692,14 +661,6 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
return Output;
}
if (ADJBUFFER->L2DATA[0] == 0xfe) // Paula's Nodes Poll
{
memcpy(Alias, ++ptr, 6);
Output += sprintf((char *)Output, " NODES POLL from %s\r", Alias);
return Output;
}
// Display normal NET/ROM transmissions
Output += sprintf((char *)Output, " NET/ROM\r ");
@ -723,12 +684,6 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
switch (OpCode)
{
case L4CREQX: // Paula's connect to service
netromx = 1;
service = (RXNO << 8) | TXNO;
case L4CREQ:
Window = *(ptr++);
@ -737,10 +692,7 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
Node[ConvFromAX25(ptr, Node)] = 0;
ptr +=7;
if (netromx)
Output += sprintf((char *)Output, "<CON REQX> w=%d %d@%s at %s", Window, service, Dest, Node);
else
Output += sprintf((char *)Output, "<CON REQ> w=%d %s at %s", Window, Dest, Node);
Output += sprintf((char *)Output, "<CON REQ> w=%d %s at %s", Window, Dest, Node);
if (MsgLen > 38) // BPQ Extended Params
{
@ -755,7 +707,7 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
if (Flags & L4BUSY) // BUSY RETURNED
return Output + sprintf((char *)Output, " <CON NAK> - BUSY");
return Output + sprintf((char *)Output, " <CON ACK> w=%d my cct=%02X%02X", ptr[0], TXNO, RXNO);
return Output + sprintf((char *)Output, " <CON ACK> w=%d my cct=%02X%02X", ptr[1], TXNO, RXNO);
case L4DREQ:
@ -765,10 +717,6 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
return Output + sprintf((char *)Output, " <DISC ACK>");
case L4RESET:
return Output + sprintf((char *)Output, " <RESET>");
case L4INFO:
{
char Infofield[257];
@ -787,9 +735,6 @@ char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
if (Flags & L4MORE)
*(Output++) = 'M';
if (Flags & L4COMP)
*(Output++) = 'C';
MsgLen = MsgLen - (19 + sizeof(void *));
if (MsgLen < 0 || MsgLen > 257)
@ -1003,87 +948,3 @@ char * DISPLAYARPDATAGRAM(UCHAR * Datagram, UCHAR * Output)
ptr[15], ptr[16], ptr[17], ptr[18], Dest, ptr[26], ptr[27], ptr[28], ptr[29]);
}
char Lastpacketlog[256];
int PacketLogDelay = 30000;
extern BPQVECSTRUC * FILEMONVECTOR;
extern UCHAR LogDirectory[260];
void WritePacketLogThread(void * param)
{
char FN[256];
time_t T;
struct tm * tm;
FILE * Handle;
int MsgLen;
MESSAGE * MSG;
MESSAGE * Q;
char buffer[512];
while(1)
{
BOOL SaveMTX = MTX;
BOOL SaveMCOM = MCOM;
BOOL SaveMUI = MUIONLY;
Sleep(PacketLogDelay);
// Get chain of queued packets under semaphore
GetSemaphore(&Semaphore, 101);
Q = FILEMONVECTOR->HOSTTRACEQ;
FILEMONVECTOR->HOSTTRACEQ = 0;
FreeSemaphore(&Semaphore);
if (Q == 0)
continue;
// Open log file and write decoded packets
T = time(NULL);
tm = gmtime(&T);
if (LogDirectory[0] == 0)
{
strcpy(FN, "logs/PacketLog");
}
else
{
strcpy(FN, LogDirectory);
strcat(FN, "/");
strcat(FN, "logs/PacketLog");
}
sprintf(&FN[strlen(FN)], "_%04d%02d%02d.log", tm->tm_year +1900, tm->tm_mon+1, tm->tm_mday);
Handle = fopen(FN, "ab");
if (Handle == NULL)
return;
while (Q)
{
MSG = Q;
Q = MSG->CHAIN; // get first
IntSetTraceOptionsEx(MMASK, 1, 1, 0);
MsgLen = IntDecodeFrame(MSG, buffer, MSG->Timestamp, 0xffffffffffffffff, FALSE, FALSE);
IntSetTraceOptionsEx(MMASK, SaveMTX, SaveMCOM, SaveMUI);
fwrite(buffer , 1, MsgLen, Handle);
GetSemaphore(&Semaphore, 101);
ReleaseBuffer(MSG);
FreeSemaphore(&Semaphore);
}
fclose(Handle);
}
return;
}

View file

@ -919,9 +919,6 @@ LRESULT APIENTRY InputProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
DoRefresh(Cinfo);
Cinfo->Console->bytesRxed += Cinfo->kbptr+1;
if (Cinfo->Console->SysopChatStream)
SendUnbuffered(Cinfo->Console->SysopChatStream->BPQStream, &Cinfo->kbbuf[0], Cinfo->kbptr+1);
else
@ -944,30 +941,6 @@ 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;
}
}

View file

@ -612,16 +612,16 @@ struct MSESSION * FindMSession(unsigned int Key)
#define LZMA_STR "\1LZMA"
UCHAR * LZUncompress(UCHAR * Decoded, size_t Len, size_t * NewLen)
UCHAR * LZUncompress(UCHAR * Decoded, int Len, int * NewLen)
{
unsigned char * buf;
unsigned char inprops[LZMA_PROPS_SIZE];
size_t inlen;
int r;
size_t rlen = 0;
size_t outlen;
UINT rlen;
UINT outlen;
memcpy(&rlen, &Decoded[5], 4);
outlen = ntohl(rlen);
@ -668,8 +668,8 @@ void SaveMulticastMessage(struct MSESSION * MSession)
{
UCHAR * Decoded = NULL; // Output from Basexxx decode
UCHAR * Uncompressed = NULL;
size_t DecodedLen; // Length of decoded message
size_t UncompressedLen; // Length of decompressed message
int DecodedLen; // Length of decoded message
int UncompressedLen; // Length of decompressed message
int ExpectedLen; // From front of Base128 or Base256 message
int HddrLen; // Length of Expected Len Header
@ -1612,7 +1612,7 @@ int MulticastStatusHTML(char * Reply)
if (Sess ==NULL)
return 0;
Len = sprintf(Reply, "%s", StatusPage);
Len = sprintf(Reply, StatusPage);
while (Sess)
{
@ -1670,7 +1670,7 @@ int MulticastStatusHTML(char * Reply)
Sess = Sess->Next;
}
Len += sprintf(&Reply[Len], "%s", StatusTail);
Len += sprintf(&Reply[Len], StatusTail);
return Len;
}

View file

@ -1,551 +0,0 @@
/*
Copyright 2001-2022 John Wiseman G8BPQ
This file is part of LinBPQ/BPQ32.
LinBPQ/BPQ32 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.
LinBPQ/BPQ32 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 LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
*/
/*
Netrom over TCP Support
This is intended for operation over radio links with an IP interface, eg New Packet Radio or possibly microwave links
To simplify interface to the rest of the oode dummy LINK and PORT records are created
Packet Format is Length (2 byte little endian) Call (10 bytes ASCII) NETROM L3/4 Packet, starting 0xcf (to detect framing errors).
A TCP message can contain multiple packets and/or partial packets
It uses the Telnet Server, with port defined in NETROMPORT
ROUTE definitions have an extra field, the TCP Port Number
*/
//#pragma data_seg("_BPQDATA")
#define _CRT_SECURE_NO_DEPRECATE
#include "time.h"
#include "stdio.h"
#include <fcntl.h>
//#include "vmm.h"
#include "cheaders.h"
#include "asmstrucs.h"
#include "telnetserver.h"
#define NETROM_PID 0xCF
void NETROMConnectionLost(struct ConnectionInfo * sockptr);
int DataSocket_ReadNETROM(struct ConnectionInfo * sockptr, SOCKET sock, struct NRTCPSTRUCT * Info, int portNo);
int NETROMTCPConnect(struct ROUTE * Route, struct ConnectionInfo * sockptr);
void NETROMConnected(struct ConnectionInfo * sockptr, SOCKET sock, struct NRTCPSTRUCT * Info);
VOID SendRTTMsg(struct ROUTE * Route);
BOOL FindNeighbour(UCHAR * Call, int Port, struct ROUTE ** REQROUTE);
VOID NETROMMSG(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * L3MSG);
int BPQTRACE(MESSAGE * Msg, BOOL TOAPRS);
VOID L3LINKCLOSED(struct _LINKTABLE * LINK, int Reason);
struct NRTCPMsg
{
short Length;
char Call[10];
unsigned char PID;
char Packet[1024];
};
struct NRTCPSTRUCT
{
struct ConnectionInfo * sockptr;
struct _LINKTABLE * LINK; // Dummy Link Record for this ROUTE
struct ROUTE * Route; // May need backlink
char Call[10];
};
struct NRTCPSTRUCT * NRTCPInfo[256] = {0};
// Do we want to use normal TCP server connections, which are limited, or our own. Let's try our own for now
struct ConnectionInfo * AllocateNRTCPRec()
{
struct ConnectionInfo * sockptr = 0;
struct NRTCPSTRUCT * Info;
int i;
for (i = 0; i < 255; i++)
{
if (NRTCPInfo[i] == 0)
{
// only allocate as many as needed
Info = NRTCPInfo[i] = (struct NRTCPSTRUCT *)zalloc(sizeof(struct NRTCPSTRUCT));
Info->sockptr = (struct ConnectionInfo *)zalloc(sizeof(struct ConnectionInfo));
Info->LINK = (struct _LINKTABLE *)zalloc(sizeof(struct _LINKTABLE));
Info->sockptr->Number = i;
}
else
Info = NRTCPInfo[i];
sockptr = Info->sockptr;
if (sockptr->SocketActive == FALSE)
{
sockptr->SocketActive = TRUE;
sockptr->ConnectTime = sockptr->LastSendTime = time(NULL);
Debugprintf("NRTCP Allocated %d", i);
return sockptr;
}
}
return 0;
}
void checkNRTCPSockets(int portNo)
{
SOCKET sock;
int Active = 0;
SOCKET maxsock;
int retval;
int i;
struct timeval timeout;
fd_set readfd, writefd, exceptfd;
struct ConnectionInfo * sockptr;
timeout.tv_sec = 0;
timeout.tv_usec = 0; // poll
maxsock = 0;
FD_ZERO(&readfd);
FD_ZERO(&writefd);
FD_ZERO(&exceptfd);
for (i = 0; i < 255; i++)
{
if (NRTCPInfo[i] == 0)
break; // only as many as have been used
sockptr = NRTCPInfo[i]->sockptr;
if (sockptr->SocketActive == 0)
continue;
if (sockptr->Connecting)
{
// look for complete or failed
FD_SET(sockptr->socket, &writefd);
FD_SET(sockptr->socket, &exceptfd);
}
else
{
FD_SET(sockptr->socket, &readfd);
FD_SET(sockptr->socket, &exceptfd);
}
Active++;
if (sockptr->socket > maxsock)
maxsock = sockptr->socket;
}
if (Active)
{
retval = select((int)maxsock + 1, &readfd, &writefd, &exceptfd, &timeout);
if (retval == -1)
{
perror("data select");
Debugprintf("NRTCP Select Error %d Active %d", WSAGetLastError(), Active);
}
else
{
if (retval)
{
// see who has data
for (i = 0; i < 255; i++)
{
if (NRTCPInfo[i] == 0)
break;
sockptr = NRTCPInfo[i]->sockptr;
if (sockptr->SocketActive == 0)
continue;
sock = sockptr->socket;
if (FD_ISSET(sock, &writefd))
NETROMConnected(sockptr, sock, NRTCPInfo[i]);
if (FD_ISSET(sock, &readfd))
DataSocket_ReadNETROM(sockptr, sock, NRTCPInfo[i], portNo);
if (FD_ISSET(sock, &exceptfd))
NETROMConnectionLost(sockptr);
}
}
}
}
}
int NETROMOpenConnection(struct ROUTE * Route)
{
struct NRTCPSTRUCT * Info;
struct ConnectionInfo * sockptr;
Debugprintf("Opening NRTCP Connection");
if (Route->TCPSession)
{
// SESSION ALREADY EXISTS
sockptr = Route->TCPSession->sockptr;
if (sockptr->Connected || sockptr->Connecting)
return TRUE;
// previous connect failed
}
else
{
sockptr = AllocateNRTCPRec();
if (sockptr == NULL)
return 0;
Info = Route->TCPSession = NRTCPInfo[sockptr->Number];
memcpy(Info->Call, MYNETROMCALL, 10);
Route->NEIGHBOUR_LINK = Info->LINK;
Info->Route = Route;
Info->LINK->NEIGHBOUR = Route;
Info->LINK->LINKPORT = GetPortTableEntryFromPortNum(Route->NEIGHBOUR_PORT);
}
return NETROMTCPConnect(Route, sockptr);
}
int NETROMTCPConnect(struct ROUTE * Route, struct ConnectionInfo * sockptr)
{
int err;
u_long param=1;
BOOL bcopt=TRUE;
SOCKET sock;
struct sockaddr_in sinx;
int addrlen=sizeof(sinx);
char PortString[20];
struct addrinfo hints, *res = 0, *saveres;
int Port = Route->TCPPort;
sprintf(PortString, "%d", Port);
// get host info, make socket, and connect it
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; // use IPv4 or IPv6, whichever
hints.ai_socktype = SOCK_STREAM;
getaddrinfo(Route->TCPHost, PortString, &hints, &res);
if (!res)
{
err = WSAGetLastError();
Debugprintf("Resolve HostName %s Failed - Error %d", Route->TCPHost, err);
return FALSE; // Resolve failed
}
// Step thorough the list of hosts
saveres = res; // Save for free
sock = sockptr->socket = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (sock == INVALID_SOCKET)
{
Debugprintf, ("Netrom over TCP Create Socket Failed");
return FALSE;
}
ioctl(sock, FIONBIO, &param);
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char FAR *)&bcopt,4);
if (connect(sock, res->ai_addr, (int)res->ai_addrlen) == 0)
{
//
// Connected successful
//
sockptr->Connected = TRUE;
freeaddrinfo(saveres);
return TRUE;
}
else
{
freeaddrinfo(saveres);
err=WSAGetLastError();
if (err == 10035 || err == 115 || err == 36) //EWOULDBLOCK
{
// Connect in Progress
sockptr->Connecting = TRUE;
return TRUE;
}
else
{
// Connect failed
closesocket(sockptr->socket);
return FALSE;
}
}
return FALSE;
}
void NETROMConnectionAccepted(struct ConnectionInfo * sockptr)
{
// Not sure we can do much here until first message arrives with callsign
sockptr->Connected = TRUE;
Debugprintf("NRTCP Connection Accepted");
}
void NETROMConnected(struct ConnectionInfo * sockptr, SOCKET sock, struct NRTCPSTRUCT * Info)
{
// Connection Complete
Debugprintf("NRTCP Connected");
sockptr->Connecting = FALSE;
sockptr->Connected = TRUE;
Info->LINK->L2STATE = 5;
if (Info->Route->INP3Node)
SendRTTMsg(Info->Route);
}
int DataSocket_ReadNETROM(struct ConnectionInfo * sockptr, SOCKET sock, struct NRTCPSTRUCT * Info, int portNo)
{
int len=0, maxlen;
struct NRTCPMsg * Msg;
struct _L3MESSAGEBUFFER * L3Msg;
struct ROUTE * Route;
UCHAR axCall[7];
PMESSAGE Buffer;
ioctl(sock,FIONREAD,&len);
maxlen = InputBufferLen - sockptr->InputLen;
if (len > maxlen) len = maxlen;
len = recv(sock, &sockptr->InputBuffer[sockptr->InputLen], len, 0);
if (len == SOCKET_ERROR || len == 0)
{
// Failed or closed - clear connection
NETROMConnectionLost(sockptr);
return 0;
}
sockptr->InputLen += len;
// Process data
checkLen:
// See if we have a whole packet
Msg = (struct NRTCPMsg *)&sockptr->InputBuffer[0];
if (Msg->Length > sockptr->InputLen) // if not got whole frame wait
return 0;
if (Info->Call[0] == 0)
{
// first packet - do we need to do anything?
// This must be an incoming connection as Call is set before calling so need to find route record and set things up.
memcpy(Info->Call, Msg->Call, 10);
ConvToAX25(Msg->Call, axCall);
if (FindNeighbour(axCall, portNo, &Route))
{
Info->Route = Route;
Route->NEIGHBOUR_LINK = Info->LINK;
Info->LINK->NEIGHBOUR = Route;
Info->LINK->LINKPORT = GetPortTableEntryFromPortNum(Route->NEIGHBOUR_PORT);
Route->TCPSession = Info;
Info->LINK->L2STATE = 5;
if (Info->Route->INP3Node)
SendRTTMsg(Info->Route);
}
else
goto seeifMore; // Should we kill connection?
}
if (memcmp(Info->Call, Msg->Call, 10) != 0)
{
// something wrong - maybe connection reused
}
// Format as if come from an ax.25 link
L3Msg = GetBuff();
if (L3Msg == 0)
goto seeifMore;
L3Msg->LENGTH = (Msg->Length - 12) + MSGHDDRLEN;
L3Msg->Next = 0;
L3Msg->Port = 0;
L3Msg->L3PID = NETROM_PID;
memcpy(&L3Msg->L3SRCE, Msg->Packet, Msg->Length - 13);
// Create a dummy L2 message so we can trace it
Buffer = GetBuff();
if (Buffer)
{
Buffer->CHAIN = 0;
Buffer->CTL = 0;
Buffer->PORT = portNo;
ConvToAX25(Info->Call, Buffer->ORIGIN);
ConvToAX25(MYNETROMCALL, Buffer->DEST);
memcpy(Buffer->L2DATA, &L3Msg->L3SRCE[0], Msg->Length - 13);
Buffer->ORIGIN[6] |= 1; // Set end of calls
Buffer->PID = NETROM_PID;
Buffer->LENGTH = Msg->Length + 10;
time(&Buffer->Timestamp);
BPQTRACE(Buffer, FALSE);
ReleaseBuffer(Buffer);
}
NETROMMSG(Info->LINK, L3Msg);
seeifMore:
sockptr->InputLen -= Msg->Length;
if (sockptr->InputLen > 0)
{
memmove(sockptr->InputBuffer, &sockptr->InputBuffer[Msg->Length], sockptr->InputLen);
goto checkLen;
}
return 0;
}
VOID TCPNETROMSend(struct ROUTE * Route, struct _L3MESSAGEBUFFER * Frame)
{
struct NRTCPMsg Msg;
unsigned char * Data = (unsigned char *)&Frame->L3SRCE[0];
int DataLen = Frame->LENGTH - (MSGHDDRLEN + 1); // Not including PID
int Ret;
PMESSAGE Buffer;
Msg.Length = DataLen + 13; // include PID
memcpy(Msg.Call, MYNETROMCALL, 10);
Msg.PID = NETROM_PID;
memcpy(Msg.Packet, Data, DataLen);
if (Route->TCPSession == 0)
return;
Ret = send(Route->TCPSession->sockptr->socket, (char *)&Msg, DataLen + 13, 0);
// Create a dummy L2 message so we can trace it
Buffer = GetBuff();
if (Buffer)
{
Buffer->CHAIN = 0;
Buffer->CTL = 0;
Buffer->PORT = Route->NEIGHBOUR_PORT | 128; // TX Flag
ConvToAX25(Route->TCPSession->Call, Buffer->DEST);
ConvToAX25(MYNETROMCALL, Buffer->ORIGIN);
memcpy(Buffer->L2DATA, &Frame->L3SRCE[0], DataLen);
Buffer->ORIGIN[6] |= 1; // Set end of calls
Buffer->PID = NETROM_PID;
Buffer->LENGTH = DataLen + 15 + MSGHDDRLEN;
time(&Buffer->Timestamp);
BPQTRACE(Buffer, FALSE);
ReleaseBuffer(Buffer);
}
}
void NETROMConnectionLost(struct ConnectionInfo * sockptr)
{
struct NRTCPSTRUCT * Info = NRTCPInfo[sockptr->Number];
struct ROUTE * Route;
closesocket(sockptr->socket);
// If there is an attached route (there should be) clear all connections
if (Info)
{
Route = Info->Route;
if (sockptr->Connected)
L3LINKCLOSED(Info->LINK, LINKLOST);
if (sockptr->Connecting)
L3LINKCLOSED(Info->LINK, SETUPFAILED);
Route->TCPSession = 0;
Info->Call[0] = 0;
}
sockptr->SocketActive = FALSE;
memset(sockptr, 0, sizeof(struct ConnectionInfo));
}

View file

@ -25,10 +25,6 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
VOID __cdecl Debugprintf(const char * format, ...);
VOID ReleaseSock(SOCKET sock);
void MQTTMessageEvent(void* message);
#define GetSemaphore(Semaphore,ID) _GetSemaphore(Semaphore, ID, __FILE__, __LINE__)
void _GetSemaphore(struct SEM * Semaphore, int ID, char * File, int Line);
struct NNTPRec * FirstNNTPRec = NULL;
@ -356,12 +352,6 @@ int CreateNNTPMessage(char * From, char * To, char * MsgTitle, time_t Date, char
BuildNNTPList(Msg); // Build NNTP Groups list
#ifndef NOMQTT
if (MQTT)
MQTTMessageEvent(Msg);
#endif
return CreateSMTPMessageFile(MsgBody, Msg);
}

209
NodeMapTest.vcproj Normal file
View file

@ -0,0 +1,209 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="NodeMapTest"
ProjectGUID="{FAF0D3D4-CB63-4E07-9AE2-11A90760023D}"
RootNamespace="NodeMapTest"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="false"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="WS2_32.Lib kernel32.lib $(NoInherit)"
OutputFile="c:\devprogs\bpq32\$(ProjectName).exe"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="kernel32.lib $(NoInherit)"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\NodeMapTest.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath=".\stdafx.h"
>
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<File
RelativePath=".\ReadMe.txt"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

BIN
PCBeep.wav Normal file

Binary file not shown.

BIN
PG/Loop.exe Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more