Compare commits
No commits in common. "hibbian/latest" and "23.51" have entirely different histories.
hibbian/la
...
23.51
BIN
.vs/ConfigWinRPR/v15/Browse.VC.db
Normal file
BIN
.vs/ConfigWinRPR/v15/Browse.VC.db
Normal file
Binary file not shown.
Binary file not shown.
35
AEAPactor.c
35
AEAPactor.c
|
|
@ -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"
|
||||
|
|
@ -68,9 +68,14 @@ char OverMsg[3] = " \x1a";
|
|||
|
||||
static RECT Rect;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
|
||||
|
||||
static char status[8][8] = {"STANDBY", "PHASING", "CHGOVER", "IDLE", "TRAFFIC", "ERROR", "RQ", "XXXX"};
|
||||
|
||||
struct TNCINFO * CreateTTYInfo(int port, int speed);
|
||||
BOOL OpenConnection(int);
|
||||
BOOL SetupConnection(int);
|
||||
BOOL CloseConnection(struct TNCINFO * conn);
|
||||
static BOOL WriteCommBlock(struct TNCINFO * TNC);
|
||||
|
|
@ -292,7 +297,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 +388,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 +396,8 @@ VOID * AEAExtInit(EXTPORTDATA * PortEntry)
|
|||
|
||||
TNC->InitScript = _strupr(TNC->InitScript);
|
||||
|
||||
TNC->PortRecord = PortEntry;
|
||||
|
||||
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
|
||||
{
|
||||
memcpy(TNC->NodeCall, MYNODECALL, 10);
|
||||
|
|
@ -724,7 +731,7 @@ VOID AEAPoll(int Port)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
|
||||
// Shouldn't we also take out of standby mode?? PN is Pactor Listen, for monitoring
|
||||
|
||||
|
|
@ -788,7 +795,7 @@ VOID AEAPoll(int Port)
|
|||
|
||||
sprintf(Status, "%d SCANSTART 15", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Status);
|
||||
Rig_Command(-1, Status);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -810,7 +817,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 +882,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;
|
||||
|
||||
|
|
@ -903,7 +910,7 @@ VOID AEAPoll(int Port)
|
|||
if ((Stream == 0) && memcmp(MsgPtr, "RADIO ", 6) == 0)
|
||||
{
|
||||
sprintf(&MsgPtr[40], "%d %s", TNC->Port, &MsgPtr[6]);
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &MsgPtr[40]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &MsgPtr[40]))
|
||||
{
|
||||
ReleaseBuffer(buffptr);
|
||||
}
|
||||
|
|
@ -1210,7 +1217,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 +1252,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 +1423,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)
|
||||
|
|
@ -1427,7 +1434,7 @@ static VOID ProcessAEAPacket(struct TNCINFO * TNC, UCHAR * Msg, size_t Len)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
|
||||
ShowTraffic(TNC);
|
||||
|
||||
|
|
|
|||
265
AGWAPI.c
265
AGWAPI.c
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
@ -56,14 +55,11 @@ struct AGWSocketConnectionInfo
|
|||
BOOL SocketActive;
|
||||
BOOL RawFlag;
|
||||
BOOL MonFlag;
|
||||
BOOL useLocalTime;
|
||||
BOOL doNodes;
|
||||
unsigned char CallSign1[10];
|
||||
unsigned char CallSign2[10];
|
||||
BOOL GotHeader;
|
||||
int MsgDataLength;
|
||||
struct AGWHeader AGWRXHeader;
|
||||
unsigned char * MsgData;
|
||||
};
|
||||
|
||||
struct BPQConnectionInfo
|
||||
|
|
@ -79,6 +75,8 @@ struct BPQConnectionInfo
|
|||
|
||||
char AGWPorts[1000];
|
||||
|
||||
byte AGWMessage[1000];
|
||||
|
||||
struct AGWHeader AGWTXHeader;
|
||||
|
||||
char SessionList[100];
|
||||
|
|
@ -110,7 +108,7 @@ extern int SemHeldByAPI;
|
|||
|
||||
char szBuff[80];
|
||||
|
||||
static int VisiblePortToRealPort[MaxBPQPortNo + 1];
|
||||
static int VisiblePortToRealPort[32];
|
||||
|
||||
int SetUpHostSessions();
|
||||
int DisplaySessions();
|
||||
|
|
@ -129,7 +127,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 AGWDataSocket_Disconnect( struct AGWSocketConnectionInfo * sockptr);
|
||||
int SendRawPacket(struct AGWSocketConnectionInfo * sockptr, char *txmsg, int Length);
|
||||
int ShowApps();
|
||||
|
|
@ -278,9 +276,9 @@ VOID Poll_AGW()
|
|||
}
|
||||
|
||||
|
||||
static SOCKADDR_IN local_sin; /* Local socket - internet style */
|
||||
SOCKADDR_IN local_sin; /* Local socket - internet style */
|
||||
|
||||
static PSOCKADDR_IN psin;
|
||||
PSOCKADDR_IN psin;
|
||||
|
||||
|
||||
BOOL AGWAPIInit()
|
||||
|
|
@ -369,6 +367,7 @@ BOOL AGWAPIInit()
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int SetUpHostSessions()
|
||||
{
|
||||
int Stream, i;
|
||||
|
|
@ -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
|
||||
|
||||
|
|
@ -565,27 +564,9 @@ int AGWConnected(struct BPQConnectionInfo * Con, int Stream)
|
|||
{
|
||||
// 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;
|
||||
BOOL RXFlag;
|
||||
time_t Stamp;
|
||||
int Stamp, Frametype;
|
||||
BOOL RXFlag, NeedAGW;
|
||||
|
||||
// Look for Monitor Data
|
||||
|
||||
|
|
@ -721,14 +701,14 @@ 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);
|
||||
|
||||
|
|
@ -736,15 +716,11 @@ int AGWDoMonitorData()
|
|||
|
||||
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,22 +732,24 @@ 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
|
||||
NeedAGW = FALSE;
|
||||
|
||||
for (n = 1; n<= CurrentSockets; n++)
|
||||
{
|
||||
sockptr=&Sockets[n];
|
||||
|
||||
if (sockptr->SocketActive && sockptr->MonFlag && (RXFlag || LoopMonFlag))
|
||||
{
|
||||
Length = InternalAGWDecodeFrame(monbuff, AGWBuffer, Stamp, &Frametype, sockptr->useLocalTime, sockptr->doNodes);
|
||||
if (sockptr->SocketActive && sockptr->MonFlag) NeedAGW = TRUE;
|
||||
}
|
||||
|
||||
if (NeedAGW)
|
||||
{
|
||||
if (RXFlag || LoopMonFlag) // only send txed frames if requested
|
||||
{
|
||||
Length = InternalAGWDecodeFrame(Buffer, AGWBuffer,Stamp, &Frametype);
|
||||
|
||||
//
|
||||
// Decode frame and send to applications which have requested monitoring
|
||||
//
|
||||
if (Length > 0)
|
||||
{
|
||||
AGWTXHeader.Port = Port - 1; // AGW Ports start from 0
|
||||
|
|
@ -809,12 +787,18 @@ int AGWDoMonitorData()
|
|||
memset(AGWTXHeader.callfrom, 0,10);
|
||||
ConvFromAX25(monbuff->ORIGIN, AGWTXHeader.callfrom);
|
||||
|
||||
for (n = 1; n<= CurrentSockets; n++)
|
||||
{
|
||||
sockptr=&Sockets[n];
|
||||
|
||||
if (sockptr->SocketActive && sockptr->MonFlag)
|
||||
SendRawPacket(sockptr, AGWBuffer, Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RawLen = RawLen - (MSGHDDRLEN - 1); // One more for KISS control
|
||||
RawLen = RawLen - 6;
|
||||
|
||||
if (RXFlag || Loopflag) // Send transmitted frames if requested
|
||||
{
|
||||
|
|
@ -823,11 +807,7 @@ 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 +819,14 @@ int AGWDoMonitorData()
|
|||
sockptr=&Sockets[n];
|
||||
|
||||
if (sockptr->SocketActive && sockptr->RawFlag)
|
||||
SendRawPacket(sockptr, &Buffer[MSGHDDRLEN - 1], RawLen);
|
||||
SendRawPacket(sockptr, &Buffer[6], RawLen);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int DeleteConnection(struct BPQConnectionInfo * Con)
|
||||
|
|
@ -1030,7 +1012,6 @@ int AGWDataSocket_Read(struct AGWSocketConnectionInfo * sockptr, SOCKET sock)
|
|||
{
|
||||
int i;
|
||||
int DataLength;
|
||||
struct AGWHeader * AGW = &sockptr->AGWRXHeader;
|
||||
|
||||
ioctlsocket(sock,FIONREAD,&DataLength);
|
||||
|
||||
|
|
@ -1042,56 +1023,6 @@ 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)
|
||||
{
|
||||
|
|
@ -1099,41 +1030,62 @@ int AGWDataSocket_Read(struct AGWSocketConnectionInfo * sockptr, SOCKET sock)
|
|||
|
||||
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
|
||||
|
||||
int n = 50;
|
||||
Sleep(500);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if (DataLength >= sockptr->MsgDataLength)
|
||||
{
|
||||
// Read Data and Process Command
|
||||
|
||||
sockptr->MsgData = malloc(sockptr->MsgDataLength);
|
||||
|
||||
i = recv(sock, sockptr->MsgData, sockptr->MsgDataLength, 0);
|
||||
i=recv(sock, AGWMessage, sockptr->MsgDataLength, 0);
|
||||
|
||||
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 +1093,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 +1107,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 +1159,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
|
||||
|
||||
|
|
@ -1219,14 +1169,14 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
{
|
||||
// Have digis
|
||||
|
||||
char * Digis = sockptr->MsgData;
|
||||
char * Digis = AGWMessage;
|
||||
int nDigis = Digis[0];
|
||||
|
||||
Digis ++;
|
||||
|
||||
while(nDigis--)
|
||||
{
|
||||
n += sprintf(&ConnectMsg[n], " %s", Digis);
|
||||
sprintf(ConnectMsg, "%s, %s", ConnectMsg, Digis);
|
||||
Digis += 10;
|
||||
}
|
||||
}
|
||||
|
|
@ -1256,7 +1206,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
{
|
||||
if (memcmp(AGWConnections[con].CallKey,key,21) == 0)
|
||||
{
|
||||
SendMsg(AGWConnections[con].BPQStream, sockptr->MsgData, sockptr->MsgDataLength);
|
||||
SendMsg(AGWConnections[con].BPQStream, AGWMessage, sockptr->MsgDataLength);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1307,7 +1257,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,7 +1273,9 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
|
||||
|
||||
memset(&AGWTXHeader,0,36);
|
||||
|
||||
AGWTXHeader.DataKind = 'G';
|
||||
|
||||
AGWTXHeader.DataLength =(int)strlen(AGWPorts)+1; // Length
|
||||
|
||||
SendtoSocket(sockptr->socket, AGWPorts);
|
||||
|
|
@ -1329,20 +1283,6 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
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':
|
||||
|
||||
// Toggle Raw receive
|
||||
|
|
@ -1355,7 +1295,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
|
||||
// Send Raw Frame
|
||||
|
||||
SendRaw(sockptr->AGWRXHeader.Port+1,&sockptr->MsgData[1], sockptr->MsgDataLength - 1);
|
||||
SendRaw(sockptr->AGWRXHeader.Port+1,&AGWMessage[1], sockptr->MsgDataLength - 1);
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -1363,20 +1303,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
|
||||
// Toggle Monitor receive
|
||||
|
||||
if (sockptr->AGWRXHeader.DataLength == 12) // QtTermTCP monitor info
|
||||
{
|
||||
// Msg[AGWHDDRRLEN] = AGWUsers->MonSess->mlocaltime;
|
||||
// Msg[AGWHDDRRLEN + 1] = AGWUsers->MonSess->MonitorNODES;
|
||||
//Msg[AGWHDDRRLEN + 2] = AGWUsers->MonSess->MonitorColour;
|
||||
// Msg[AGWHDDRRLEN + 3] = AGWUsers->MonSess->mtxparam;
|
||||
// memcpy(&Msg[AGWHDDRRLEN + 4], (void *)&AGWUsers->MonSess->portmask, 8);
|
||||
sockptr->useLocalTime = sockptr->MsgData[0];
|
||||
sockptr->doNodes = sockptr->MsgData[1];
|
||||
sockptr->MonFlag = 1;
|
||||
}
|
||||
else
|
||||
sockptr->MonFlag = !sockptr->MonFlag;
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
|
|
@ -1392,11 +1319,11 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
|
||||
if (sockptr->AGWRXHeader.DataKind == 'V') // Unproto with VIA string
|
||||
{
|
||||
Digis = sockptr->MsgData[0]; // Number of digis
|
||||
Digis = AGWMessage[0]; // Number of digis
|
||||
|
||||
for (j = 1; j<= Digis; j++)
|
||||
{
|
||||
ConvToAX25(&sockptr->MsgData[(j - 1) * 10 + 1],&TXMessage[7+(j*7)]); // No "last" bit
|
||||
ConvToAX25(&AGWMessage[(j - 1) * 10 + 1],&TXMessage[7+(j*7)]); // No "last" bit
|
||||
}
|
||||
|
||||
// set end of call
|
||||
|
|
@ -1416,7 +1343,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
|
|||
else
|
||||
*(TXMessageptr++) = sockptr->AGWRXHeader.PID;
|
||||
|
||||
memcpy(TXMessageptr,&sockptr->MsgData[MsgStart], sockptr->MsgDataLength - MsgStart);
|
||||
memcpy(TXMessageptr,&AGWMessage[MsgStart], sockptr->MsgDataLength - MsgStart);
|
||||
|
||||
TXMessageptr += (sockptr->MsgDataLength - MsgStart);
|
||||
|
||||
|
|
@ -1440,8 +1367,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
1646
AGWMon.asm
Normal file
File diff suppressed because it is too large
Load diff
134
AGWMoncode.c
134
AGWMoncode.c
|
|
@ -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,14 +61,15 @@ 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);
|
||||
static UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen);
|
||||
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)
|
||||
{
|
||||
UCHAR * ptr;
|
||||
int n;
|
||||
|
|
@ -85,6 +81,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
|
|||
char PFCHAR[3] = " ";
|
||||
int MSGFLAG = 0; //CR and V1 flags
|
||||
char * Output = buffer;
|
||||
int HH, MM, SS;
|
||||
char From[10], To[10];
|
||||
BOOL Info = 0;
|
||||
BOOL FRMRFLAG = 0;
|
||||
|
|
@ -92,13 +89,6 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
|
|||
BOOL TESTFLAG = 0;
|
||||
size_t MsgLen = msg->LENGTH;
|
||||
|
||||
struct tm * TM;
|
||||
|
||||
if (useLocalTime)
|
||||
TM = localtime(&Stamp);
|
||||
else
|
||||
TM = gmtime(&Stamp);
|
||||
|
||||
// GET THE CONTROL BYTE, TO SEE IF THIS FRAME IS TO BE DISPLAYED
|
||||
|
||||
n = 8; // MAX DIGIS
|
||||
|
|
@ -134,6 +124,14 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
|
|||
|
||||
*FrameType = CTL;
|
||||
|
||||
Stamp = Stamp % 86400; // Secs
|
||||
HH = Stamp / 3600;
|
||||
|
||||
Stamp -= HH * 3600;
|
||||
MM = Stamp / 60;
|
||||
|
||||
SS = Stamp - MM * 60;
|
||||
|
||||
Output += sprintf((char *)Output, " %d:Fm ", msg->PORT & 0x7f); // Mask TX bit
|
||||
|
||||
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
||||
|
|
@ -266,18 +264,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 +273,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,91 +291,18 @@ 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);
|
||||
|
||||
}
|
||||
|
||||
Output += sprintf((char *)Output, "[%02d:%02d:%02d]", TM->tm_hour, TM->tm_min, TM->tm_sec);
|
||||
Output += sprintf((char *)Output, "[%02d:%02d:%02d]", HH, MM, SS);
|
||||
|
||||
|
||||
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
|
||||
|
|
@ -432,7 +345,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
|
|||
}
|
||||
case NETROM_PID:
|
||||
|
||||
Output = DISPLAY_NETROM(ADJBUFFER, Output,(int) MsgLen, DoNodes);
|
||||
Output = DISPLAY_NETROM(ADJBUFFER, Output,(int) MsgLen);
|
||||
break;
|
||||
|
||||
case IP_PID:
|
||||
|
|
@ -453,9 +366,6 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
|
|||
}
|
||||
}
|
||||
|
||||
if (Output == NULL)
|
||||
return 0;
|
||||
|
||||
if (Output[-1] != 13)
|
||||
Output += sprintf((char *)Output, "\r");
|
||||
|
||||
|
|
@ -464,7 +374,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, int * Fra
|
|||
}
|
||||
// Display NET/ROM data
|
||||
|
||||
UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen, int DoNodes)
|
||||
UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
|
||||
{
|
||||
char Alias[7]= "";
|
||||
char Dest[10];
|
||||
|
|
@ -476,8 +386,6 @@ UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen, int DoNo
|
|||
{
|
||||
// Display NODES
|
||||
|
||||
if (DoNodes == 0)
|
||||
return NULL;
|
||||
|
||||
// If an INP3 RIF (type <> UI) decode as such
|
||||
|
||||
|
|
@ -509,14 +417,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 ");
|
||||
|
|
|
|||
25
AISCommon.c
25
AISCommon.c
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
159
APRSCode.c
159
APRSCode.c
|
|
@ -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,7 +63,8 @@ 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);
|
||||
int APRSDecodeFrame(char * msg, char * buffer, time_t Stamp, uint64_t Mask); // Unsemaphored DecodeFrame
|
||||
char * strlop(char * buf, char delim);
|
||||
int APRSDecodeFrame(char * msg, char * buffer, time_t Stamp, UINT Mask); // Unsemaphored DecodeFrame
|
||||
APRSHEARDRECORD * UpdateHeard(UCHAR * Call, int Port);
|
||||
BOOL CheckforDups(char * Call, char * Msg, int Len);
|
||||
VOID ProcessQuery(char * Query);
|
||||
|
|
@ -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);
|
||||
|
|
@ -101,8 +103,6 @@ void SaveAPRSMessage(struct APRSMESSAGE * ptr);
|
|||
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();
|
||||
|
|
@ -117,12 +117,13 @@ BOOL LogAPRSIS = FALSE;
|
|||
|
||||
static char ConfigClassName[]="CONFIG";
|
||||
|
||||
extern BPQVECSTRUC * APRSMONVECPTR;
|
||||
BPQVECSTRUC * APRSMONVECPTR;
|
||||
|
||||
extern int MONDECODE();
|
||||
extern VOID * zalloc(int len);
|
||||
extern BOOL StartMinimized;
|
||||
|
||||
extern char * PortConfig[];
|
||||
extern char TextVerstring[];
|
||||
|
||||
extern HWND hConsWnd;
|
||||
|
|
@ -139,7 +140,7 @@ BOOL APRSWeb = FALSE;
|
|||
|
||||
void * APPL_Q = 0; // Queue of frames for APRS Appl
|
||||
void * APPLTX_Q = 0; // Queue of frames from APRS Appl
|
||||
uint64_t APRSPortMask = 0;
|
||||
UINT APRSPortMask = 0;
|
||||
|
||||
char APRSCall[10] = "";
|
||||
char APRSDest[10] = "APBPQ1";
|
||||
|
|
@ -168,7 +169,7 @@ int WXCounter = 29 * 60;
|
|||
char APRSCall[10];
|
||||
char LoppedAPRSCall[10];
|
||||
|
||||
BOOL WXPort[MaxBPQPortNo + 1]; // Ports to send WX to
|
||||
BOOL WXPort[32]; // Ports to send WX to
|
||||
|
||||
BOOL GPSOK = 0;
|
||||
|
||||
|
|
@ -229,16 +230,16 @@ extern BOOL IGateEnabled;
|
|||
char StatusMsg[256] = ""; // Must be in shared segment
|
||||
int StatusMsgLen = 0;
|
||||
|
||||
char * BeaconPath[65] = {0};
|
||||
char * BeaconPath[33] = {0};
|
||||
|
||||
char CrossPortMap[65][65] = {0};
|
||||
char APRSBridgeMap[65][65] = {0};
|
||||
char CrossPortMap[33][33] = {0};
|
||||
char APRSBridgeMap[33][33] = {0};
|
||||
|
||||
UCHAR BeaconHeader[65][10][7] = {""}; // Dest, Source and up to 8 digis
|
||||
int BeaconHddrLen[65] = {0}; // Actual Length used
|
||||
UCHAR BeaconHeader[33][10][7] = {""}; // Dest, Source and up to 8 digis
|
||||
int BeaconHddrLen[33] = {0}; // Actual Length used
|
||||
|
||||
UCHAR GatedHeader[65][10][7] = {""}; // Dest, Source and up to 8 digis for messages gated from IS
|
||||
int GatedHddrLen[65] = {0}; // Actual Length used
|
||||
UCHAR GatedHeader[33][10][7] = {""}; // Dest, Source and up to 8 digis for messages gated from IS
|
||||
int GatedHddrLen[33] = {0}; // Actual Length used
|
||||
|
||||
|
||||
char CFGSYMBOL = 'a';
|
||||
|
|
@ -347,7 +348,7 @@ APRSHEARDRECORD MHTABLE[MAXHEARD] = {0};
|
|||
|
||||
APRSHEARDRECORD * MHDATA = &MHTABLE[0];
|
||||
|
||||
static SOCKET sock = 0;
|
||||
static SOCKET sock = (SOCKET) NULL;
|
||||
|
||||
//Duplicate suppression Code
|
||||
|
||||
|
|
@ -370,7 +371,7 @@ struct OBJECT
|
|||
UCHAR Path[10][7]; // Dest, Source and up to 8 digis
|
||||
int PathLen; // Actual Length used
|
||||
char Message[81];
|
||||
char PortMap[MaxBPQPortNo + 1];
|
||||
char PortMap[33];
|
||||
int Interval;
|
||||
int Timer;
|
||||
};
|
||||
|
|
@ -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;
|
||||
|
|
@ -667,9 +665,8 @@ Dll BOOL APIENTRY Init_APRS()
|
|||
memset(&CrossPortMap[0][0], 0, sizeof(CrossPortMap));
|
||||
memset(&APRSBridgeMap[0][0], 0, sizeof(APRSBridgeMap));
|
||||
|
||||
for (i = 1; i <= MaxBPQPortNo; i++)
|
||||
for (i = 1; i <= 32; i++)
|
||||
{
|
||||
if (CanPortDigi(i))
|
||||
CrossPortMap[i][i] = TRUE; // Set Defaults - Same Port
|
||||
CrossPortMap[i][0] = TRUE; // and APRS-IS
|
||||
}
|
||||
|
|
@ -1224,7 +1221,7 @@ Dll VOID APIENTRY Poll_APRS()
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((APRSPortMask & ((uint64_t)1 << (Port - 1))) == 0)// Port in use for APRS?
|
||||
if ((APRSPortMask & (1 << (Port - 1))) == 0)// Port in use for APRS?
|
||||
{
|
||||
ReleaseBuffer(monbuff);
|
||||
continue;
|
||||
|
|
@ -1299,7 +1296,7 @@ Dll VOID APIENTRY Poll_APRS()
|
|||
|
||||
// Bridge if requested
|
||||
|
||||
for (toPort = 1; toPort <= MaxBPQPortNo; toPort++)
|
||||
for (toPort = 1; toPort <= 32; toPort++)
|
||||
{
|
||||
if (APRSBridgeMap[Port][toPort])
|
||||
{
|
||||
|
|
@ -1583,9 +1580,9 @@ OK:
|
|||
|
||||
// Copy frame to a DIGIMessage Struct
|
||||
|
||||
memcpy(&Msg, monbuff, MSGHDDRLEN + 14 + (7 * Digis)); // Header, Dest, Source, Addresses and Digis
|
||||
memcpy(&Msg, monbuff, 21 + (7 * Digis)); // Header, Dest, Source, Addresses and Digis
|
||||
|
||||
len = Msg.LENGTH - (MSGHDDRLEN + 14) - (7 * Digis); // Payload Length (including CTL and PID
|
||||
len = Msg.LENGTH - 21 - (7 * Digis); // Payload Length (including CTL and PID
|
||||
|
||||
memcpy(&Msg.CTL, &AdjBuff->CTL, len);
|
||||
|
||||
|
|
@ -1738,7 +1735,7 @@ static VOID SendtoDigiPorts(PDIGIMESSAGE Block, DWORD Len, UCHAR Port)
|
|||
|
||||
// Block->CTL = 3; //UI
|
||||
|
||||
for (toPort = 1; toPort <= MaxBPQPortNo; toPort++)
|
||||
for (toPort = 1; toPort <= 32; toPort++)
|
||||
{
|
||||
if (CrossPortMap[Port][toPort])
|
||||
Send_AX((PMESSAGE)Block, Len, toPort);
|
||||
|
|
@ -1785,7 +1782,7 @@ static BOOL APRSReadConfigFile()
|
|||
|
||||
char buf[256],errbuf[256];
|
||||
|
||||
Config = PortConfig[APRSConfigSlot]; // Config from bpq32.cfg
|
||||
Config = PortConfig[34]; // Config fnom bpq32.cfg
|
||||
|
||||
sprintf(StatusMsg, "BPQ32 Igate V %s", VersionString); // Set Default Status Message
|
||||
|
||||
|
|
@ -1949,7 +1946,7 @@ static int APRSProcessLine(char * buf)
|
|||
{
|
||||
SendTo = atoi(ptr); // this gives zero for IS
|
||||
|
||||
if (SendTo > MaxBPQPortNo)
|
||||
if (SendTo > 32)
|
||||
return FALSE;
|
||||
|
||||
Object->PortMap[SendTo] = TRUE;
|
||||
|
|
@ -2084,7 +2081,7 @@ static int APRSProcessLine(char * buf)
|
|||
if (GetPortTableEntryFromPortNum(Port) == NULL)
|
||||
return FALSE;
|
||||
|
||||
APRSPortMask |= (uint64_t)1 << (Port - 1);
|
||||
APRSPortMask |= 1 << (Port - 1);
|
||||
|
||||
if (Context == NULL || Context[0] == 0)
|
||||
return TRUE; // No dest - a receive-only port
|
||||
|
|
@ -2179,17 +2176,11 @@ static int APRSProcessLine(char * buf)
|
|||
if (GetPortTableEntryFromPortNum(Port) == NULL)
|
||||
return FALSE;
|
||||
|
||||
// Check that port can digi (SCS Pactor can't set digi'd bit in calls)
|
||||
|
||||
if (CanPortDigi(Port) == 0)
|
||||
return FALSE;
|
||||
|
||||
|
||||
CrossPortMap[Port][Port] = FALSE; // Cancel Default mapping
|
||||
CrossPortMap[Port][0] = FALSE; // Cancel Default APRSIS
|
||||
|
||||
if (Context == NULL || Context[0] == 0)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
|
||||
ptr = strtok_s(NULL, ",\t\n\r", &Context);
|
||||
|
||||
|
|
@ -2228,7 +2219,7 @@ static int APRSProcessLine(char * buf)
|
|||
{
|
||||
DigiTo = atoi(ptr); // this gives zero for IS
|
||||
|
||||
if (DigiTo > MaxBPQPortNo)
|
||||
if (DigiTo > 32)
|
||||
return FALSE;
|
||||
|
||||
APRSBridgeMap[Port][DigiTo] = TRUE;
|
||||
|
|
@ -2490,7 +2481,7 @@ static int APRSProcessLine(char * buf)
|
|||
char * ptr;
|
||||
int index = 0;
|
||||
|
||||
for (index = 0; index < MaxBPQPortNo; index++)
|
||||
for (index = 0; index < 32; index++)
|
||||
WXPort[index] = FALSE;
|
||||
|
||||
if (strlen(p_value) > 79)
|
||||
|
|
@ -2545,7 +2536,7 @@ VOID SendAPRSMessageEx(char * Message, int toPort, char * FromCall, int Gated)
|
|||
|
||||
if (toPort == -1)
|
||||
{
|
||||
for (Port = 1; Port <= MaxBPQPortNo; Port++)
|
||||
for (Port = 1; Port <= 32; Port++)
|
||||
{
|
||||
if (Gated && GatedHddrLen[Port])
|
||||
memcpy(Msg.DEST, &GatedHeader[Port][0][0], 10 * 7);
|
||||
|
|
@ -2554,8 +2545,6 @@ VOID SendAPRSMessageEx(char * Message, int toPort, char * FromCall, int Gated)
|
|||
else
|
||||
continue;
|
||||
|
||||
Msg.DEST[6] |= 0x80; // set Command Bit
|
||||
|
||||
ConvToAX25(FromCall, Msg.ORIGIN);
|
||||
Msg.PID = 0xf0;
|
||||
Msg.CTL = 3;
|
||||
|
|
@ -2584,8 +2573,6 @@ VOID SendAPRSMessageEx(char * Message, int toPort, char * FromCall, int Gated)
|
|||
else
|
||||
return;
|
||||
|
||||
Msg.DEST[6] |= 0x80; // set Command Bit
|
||||
|
||||
ConvToAX25(FromCall, Msg.ORIGIN);
|
||||
Msg.PID = 0xf0;
|
||||
Msg.CTL = 3;
|
||||
|
|
@ -2762,7 +2749,6 @@ void SendBeaconThread(void * Param)
|
|||
Debugprintf("Sending APRS Beacon to port %d", toPort);
|
||||
|
||||
memcpy(Msg.DEST, &BeaconHeader[toPort][0][0], 10 * 7); // Clear unused digis
|
||||
Msg.DEST[6] |= 0x80; // set Command Bit
|
||||
|
||||
GetSemaphore(&Semaphore, 12);
|
||||
Send_AX_Datagram(&Msg, Len + 2, toPort);
|
||||
|
|
@ -2771,7 +2757,7 @@ void SendBeaconThread(void * Param)
|
|||
return;
|
||||
}
|
||||
|
||||
for (Port = 1; Port <= MaxBPQPortNo; Port++) // Check all ports
|
||||
for (Port = 1; Port <= 32; Port++) // Check all ports
|
||||
{
|
||||
if (BeaconHddrLen[Port]) // Only send to ports with a DEST defined
|
||||
{
|
||||
|
|
@ -2787,8 +2773,6 @@ void SendBeaconThread(void * Param)
|
|||
Msg.CTL = 3;
|
||||
|
||||
memcpy(Msg.DEST, &BeaconHeader[Port][0][0], 10 * 7);
|
||||
Msg.DEST[6] |= 0x80; // set Command Bit
|
||||
|
||||
GetSemaphore(&Semaphore, 12);
|
||||
Send_AX_Datagram(&Msg, Len + 2, Port);
|
||||
FreeSemaphore(&Semaphore);
|
||||
|
|
@ -2816,7 +2800,7 @@ VOID SendObject(struct OBJECT * Object)
|
|||
|
||||
CheckforDups(APRSCall, Object->Message, (int)strlen(Object->Message));
|
||||
|
||||
for (Port = 1; Port <= MaxBPQPortNo; Port++)
|
||||
for (Port = 1; Port <= 32; Port++)
|
||||
{
|
||||
if (Object->PortMap[Port])
|
||||
{
|
||||
|
|
@ -2824,8 +2808,6 @@ VOID SendObject(struct OBJECT * Object)
|
|||
Msg.CTL = 3;
|
||||
Len = sprintf(Msg.L2DATA, "%s", Object->Message);
|
||||
memcpy(Msg.DEST, &Object->Path[0][0], Object->PathLen + 1);
|
||||
Msg.DEST[6] |= 0x80; // set Command Bit
|
||||
|
||||
Send_AX_Datagram(&Msg, Len + 2, Port);
|
||||
}
|
||||
}
|
||||
|
|
@ -2887,13 +2869,11 @@ VOID SendIStatus()
|
|||
|
||||
Len = sprintf(Msg.L2DATA, "<IGATE,MSG_CNT=%d,LOC_CNT=%d", MessageCount , CountLocalStations());
|
||||
|
||||
for (Port = 1; Port <= MaxBPQPortNo; Port++)
|
||||
for (Port = 1; Port <= 32; Port++)
|
||||
{
|
||||
if (BeaconHddrLen[Port]) // Only send to ports with a DEST defined
|
||||
{
|
||||
memcpy(Msg.DEST, &BeaconHeader[Port][0][0], 10 * 7);
|
||||
Msg.DEST[6] |= 0x80; // set Command Bit
|
||||
|
||||
Send_AX_Datagram(&Msg, Len + 2, Port);
|
||||
}
|
||||
}
|
||||
|
|
@ -3115,7 +3095,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 +3656,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
|
||||
}
|
||||
}
|
||||
|
|
@ -4406,7 +4386,6 @@ Lost:
|
|||
}
|
||||
}
|
||||
|
||||
int GPSDAlerted = 0;
|
||||
|
||||
static VOID GPSDConnect(void * unused)
|
||||
{
|
||||
|
|
@ -4448,23 +4427,20 @@ static VOID GPSDConnect(void * unused)
|
|||
#else
|
||||
Debugprintf("GPSD Connected");
|
||||
#endif
|
||||
GPSDAlerted = 0;
|
||||
ioctl(TCPSock, FIONBIO, ¶m);
|
||||
|
||||
// Request data
|
||||
|
||||
send(TCPSock, "?WATCH={\"enable\":true,\"nmea\":true}\r\n", 36, 0);
|
||||
send(TCPSock, "?WATCH={\"enable\":true,\"nmea\":true}", 34, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
err=WSAGetLastError();
|
||||
if (GPSDAlerted == 0)
|
||||
#ifdef LINBPQ
|
||||
printf("GPSD Connect Failed - error code = %d\n", err);
|
||||
#else
|
||||
Debugprintf("GPSD Connect Failed - error code = %d", err);
|
||||
#endif
|
||||
GPSDAlerted = 1;
|
||||
closesocket(TCPSock);
|
||||
GPSDOK = FALSE;
|
||||
|
||||
|
|
@ -4496,10 +4472,6 @@ static VOID GPSDConnect(void * unused)
|
|||
{
|
||||
char Buffer[65536];
|
||||
int len = recv(TCPSock, Buffer, 65500, 0);
|
||||
char TCPMsg[8192];
|
||||
|
||||
char * ptr;
|
||||
char * Lastptr;
|
||||
|
||||
if (len == 0)
|
||||
{
|
||||
|
|
@ -4512,40 +4484,10 @@ static VOID GPSDConnect(void * unused)
|
|||
{
|
||||
Buffer[len] = 0;
|
||||
|
||||
ptr = Lastptr = Buffer;
|
||||
Buffer[len] = 0;
|
||||
if (Buffer[0] == '$' && memcmp(&Buffer[3], "RMC", 3) == 0)
|
||||
if (Check0183CheckSum(Buffer, len))
|
||||
DecodeRMC(Buffer, len);
|
||||
|
||||
while (len > 0)
|
||||
{
|
||||
ptr = strchr(Lastptr, 10);
|
||||
|
||||
if (ptr)
|
||||
{
|
||||
size_t Len = ptr - Lastptr -1;
|
||||
|
||||
if (Len > 8100)
|
||||
return;
|
||||
|
||||
memcpy(TCPMsg, Lastptr, Len);
|
||||
TCPMsg[Len++] = 13;
|
||||
TCPMsg[Len++] = 10;
|
||||
TCPMsg[Len] = 0;
|
||||
|
||||
if (!Check0183CheckSum(TCPMsg, Len))
|
||||
{
|
||||
Debugprintf("Checksum Error %s", TCPMsg);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (memcmp(&TCPMsg[3], "RMC", 3) == 0)
|
||||
DecodeRMC(TCPMsg, Len);
|
||||
}
|
||||
Lastptr = ptr + 1;
|
||||
len -= (int)Len;
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5259,7 +5201,6 @@ int DecodeAPRSPayload(char * Payload, struct STATIONRECORD * Station)
|
|||
DecodeLocationString(Payload + 18, Object);
|
||||
|
||||
Object->TimeLastUpdated = time(NULL);
|
||||
Object->LastPort = Station->LastPort;
|
||||
Station->Object = Object;
|
||||
return 0;
|
||||
|
||||
|
|
@ -6441,7 +6382,7 @@ VOID SendWeatherBeacon()
|
|||
|
||||
Debugprintf(Msg);
|
||||
|
||||
for (index = 0; index < MaxBPQPortNo; index++)
|
||||
for (index = 0; index < 32; index++)
|
||||
{
|
||||
if (WXPort[index])
|
||||
SendAPRSMessageEx(Msg, index, WXCall, FALSE);
|
||||
|
|
@ -7668,7 +7609,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 +7654,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 +8056,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
|
||||
|
||||
|
|
@ -8190,8 +8131,6 @@ VOID APRSCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct
|
|||
else
|
||||
Bufferptr = Cmdprintf(Session, Bufferptr, "but not connected\r");
|
||||
}
|
||||
|
||||
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -8868,7 +8807,7 @@ int GetAPRSPageInfo(char * Buffer, double N, double S, double W, double E, int a
|
|||
if (lastLat != ptr->Lat)
|
||||
Len += sprintf(&Buffer[Len],"%.4f,%.4f,\r\n|", ptr->Lat, ptr->Lon); //Add current position to end of track
|
||||
else
|
||||
Len += sprintf(&Buffer[Len],"\r\n|");
|
||||
Len += sprintf(&Buffer[Len],"\r\n|", ptr->Lat, ptr->Lon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9156,7 +9095,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 +9119,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, ' ');
|
||||
|
|
|
|||
280
APRSStdPages.c
280
APRSStdPages.c
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
|
|
@ -3225,174 +3225,13 @@ 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()
|
||||
{
|
||||
char Msg[] =
|
||||
|
||||
"<!DOCTYPE html>\n"
|
||||
"<html>\n"
|
||||
"<head>\n"
|
||||
|
|
@ -3401,12 +3240,13 @@ char * get_aprs()
|
|||
"\n"
|
||||
"<title>G8BPQ APRS Display</title>\n"
|
||||
"\n"
|
||||
|
||||
"<link rel=\"stylesheet\" href=\"https://unpkg.com/leaflet@1.7.1/dist/leaflet.css\" integrity=\"sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A==\" crossorigin=\"\" />\n"
|
||||
"<script src=\"https://unpkg.com/leaflet@1.7.1/dist/leaflet.js\" integrity=\"sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==\" crossorigin=\"\"></script>\n"
|
||||
"<link href=\"https://unpkg.com/maplibre-gl@2.2.1/dist/maplibre-gl.css\" rel='stylesheet' />\n"
|
||||
"<script src=\"https://unpkg.com/maplibre-gl@2.2.1/dist/maplibre-gl.js\"></script>\n"
|
||||
"<script src=\"https://unpkg.com/@maplibre/maplibre-gl-leaflet@0.0.17/leaflet-maplibre-gl.js\"></script>\n"
|
||||
"\n"
|
||||
|
||||
|
||||
//"<link rel=\"stylesheet\" href=\"http://cdn.leafletjs.com/leaflet/v1.1.0/leaflet.css\" />\n"
|
||||
//"<script src=\"http://cdn.leafletjs.com/leaflet/v1.1.0/leaflet-src.js\"></script>\n"
|
||||
"<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>\n"
|
||||
"<script src=\"leaflet.rotatedMarker.js\"></script>\n"
|
||||
"\n"
|
||||
|
|
@ -3433,54 +3273,19 @@ char * get_aprs()
|
|||
"var sarIcon;\n"
|
||||
"var planeIcon;\n"
|
||||
"var greenplaneIcon;\n"
|
||||
"var myLayer;\n"
|
||||
"var lat = 0; \n"
|
||||
"var lon = 0;\n"
|
||||
"var zoom = 2;\n"
|
||||
"var ais = 0;\n"
|
||||
"var adsb = 0;\n"
|
||||
"var aprs = 0;\n"
|
||||
"var homeLat = 0;var homeLon = 0;var homePoint;\n"
|
||||
"var aprs = 0;\nvar homeLat = 0;var homeLon = 0;var homePoint;"
|
||||
|
||||
"\n"
|
||||
"var url1 = 'http://server1.g8bpq.net:7381/styles/osm-bright/{z}/{x}/{y}.png';\n"
|
||||
"\n"
|
||||
"var myTimeout;\n"
|
||||
"\n"
|
||||
|
||||
//https://tile.openstreetmap.org/{zoom}/{x}/{y}.png
|
||||
|
||||
// "var server1 = \"http://server1.g8bpq.net:7383\"\n"
|
||||
// "var server2 = \"http://server2.g8bpq.net:7383\"\n"
|
||||
|
||||
"var server1 = \"tile.openstreetmap.org\"\n"
|
||||
"var server2 = \"tile.openstreetmap.org\"\n"
|
||||
"\n"
|
||||
"function getMap(p)\n"
|
||||
"{\n"
|
||||
|
||||
" L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {attribution: '© <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'}).addTo(p);\r\n"
|
||||
|
||||
// " var gl = L.maplibreGL({style: server1 + '/styles/G8BPQ/style.json'});\n"
|
||||
// " gl.addTo(p);\n"
|
||||
// " var maplibreMap = gl.getMaplibreMap();\n"
|
||||
// "\n"
|
||||
// " // if load from first server fails, switch to backup\n"
|
||||
// "\n"
|
||||
// " maplibreMap.on('error', e =>\n"
|
||||
// " {\n"
|
||||
// " console.log(e.error);\n"
|
||||
// "\n"
|
||||
// " if (e && e.error == 'Error: Failed to fetch')\n"
|
||||
// " {\n"
|
||||
// " console.log('failed to load from ' + server1 + ', trying ' + server2);\n"
|
||||
// " var gl2 = L.maplibreGL({style: server2 + '/styles/G8BPQ/style.json'});\n"
|
||||
// " p.removeLayer(gl)\n"
|
||||
// " gl2.addTo(p);\n"
|
||||
// " }\n"
|
||||
// " });\n"
|
||||
// "\n"
|
||||
// " p.attributionControl.addAttribution('Map data from <a href=https://www.openstreetmap.org/copyright>OpenStreetMap</a><a href=https://github.com/maplibre/maplibre-gl-leaflet> using maplibre-gl</a> <a href=https://github.com/mapbox/mapbox-gl-styles>Styles based on Mapbox gl');\n"
|
||||
" L.control.scale().addTo(p);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"function initialize()\n"
|
||||
"{\n"
|
||||
" redIcon = L.icon({iconUrl: 'aisred.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]});\n"
|
||||
|
|
@ -3502,9 +3307,9 @@ char * get_aprs()
|
|||
" aprs = getCookie(\"aprs\");\n"
|
||||
" ais = getCookie(\"ais\");\n"
|
||||
" adsb = getCookie(\"adsb\");\n"
|
||||
" \n"
|
||||
" if (aprs == 0 && ais == 0 && adsb == 0) \n"
|
||||
"\taprs = 1; if (aprs == 1)\n"
|
||||
" \n if (aprs == 0 && ais == 0 && adsb == 0)"
|
||||
" \n aprs = 1;"
|
||||
" if (aprs == 1)\n"
|
||||
" document.getElementById(\"aprsid\").checked = true;\n"
|
||||
" if (ais == 1)\n"
|
||||
" document.getElementById(\"aisid\").checked = true;\n"
|
||||
|
|
@ -3517,12 +3322,35 @@ char * get_aprs()
|
|||
" { \n"
|
||||
" clearTimeout(myTimeout);\n"
|
||||
" myTimeout = setTimeout(Refresh, 500);\n"
|
||||
"\n"
|
||||
" });\n"
|
||||
"\n"
|
||||
" myLayer = L.tileLayer(url1, {\n"
|
||||
" maxZoom: 18,\n"
|
||||
" attribution: 'Map data © <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> contributors, ' +\n"
|
||||
" '<a href=\"https://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>, ' +\n"
|
||||
" 'Imagery © <a href=\"https://openmaptiles.org//\">OpenMapTimes</a>',\n"
|
||||
" id: 'mapbox.streets'\n"
|
||||
" }).addTo(map);\n"
|
||||
" \n"
|
||||
" myLayer.on('tileerror', function(error, tile)\n"
|
||||
" {\n"
|
||||
" url1 = 'http://server2.g8bpq.net:7381/styles/osm-bright/{z}/{x}/{y}.png';\n"
|
||||
"\n"
|
||||
" myLayer = L.tileLayer(url1,\n"
|
||||
" {\n"
|
||||
" maxZoom: 18,\n"
|
||||
" attribution: 'Map data © <a href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> \t contributors, ' +\n"
|
||||
" \t'<a href=\"https://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>, ' +\n"
|
||||
" \t'Imagery © <a href=\"https://openmaptiles.org//\">OpenMapTimes</a>',\n"
|
||||
" id: 'mapbox.streets'\n"
|
||||
" }).addTo(map);\n"
|
||||
" });\n"
|
||||
" \n"
|
||||
" getMap(map)\n"
|
||||
" layergroup = L.layerGroup().addTo(map); \n"
|
||||
"L.control.scale().addTo(map);"
|
||||
" myTimeout = setTimeout(Refresh, 100);\n"
|
||||
"}\n"
|
||||
|
||||
"\n"
|
||||
"function getCookie(cname)\n"
|
||||
" {\n"
|
||||
|
|
@ -3598,17 +3426,18 @@ char * get_aprs()
|
|||
" var elements = lines[i].split(\",\");\n"
|
||||
" i++;\t\n"
|
||||
" \t\n"
|
||||
"if (elements[0] == \"H\")\t\t\t\t// Home Position\n"
|
||||
"{ homeLat = elements[1]; homeLon = elements[2]; homePoint = L.latLng(homeLat, homeLon); var m = L.circleMarker([elements[1], elements[2]], {radius: 6, color: '#000000', fillOpacity: 0.3})\n"
|
||||
|
||||
"if (elements[0] == \"H\") // Home Position\n"
|
||||
"{"
|
||||
" homeLat = elements[1]; homeLon = elements[2]; homePoint = L.latLng(homeLat, homeLon);"
|
||||
" var m = L.circleMarker([elements[1], elements[2]], {radius: 6, color: '#000000', fillOpacity: 0.3})\n"
|
||||
" .addTo(layergroup)\n"
|
||||
" .bindPopup(elements[3])\n"
|
||||
" .on('click', function (e) {alert(this.getLatLng());})\n"
|
||||
" .on('mouseover', function (e) {this.openPopup();})\n"
|
||||
" .on('mouseout', function (e) {this.closePopup();});\n"
|
||||
" if (lat == 0 || lat == \"\")\t\t// Not Set\n"
|
||||
" map.setView([elements[1], elements[2]], 8);\n"
|
||||
"}\n"
|
||||
"\n"
|
||||
" if (lat == 0 || lat == \"\") // Not Set\n"
|
||||
" map.setView([elements[1], elements[2]], 8);\n}\n\n"
|
||||
" if (elements[0] == \"N\") \t// Navaid\n"
|
||||
" {\n"
|
||||
" var m = L.marker([elements[1], elements[2]], {rotationAngle: 0, icon: navIcon})\n"
|
||||
|
|
@ -3637,7 +3466,9 @@ char * get_aprs()
|
|||
" var icon;\n"
|
||||
" \n"
|
||||
"var dist = homePoint.distanceTo([elements[1], elements[2]]) / 1609.34;\n"
|
||||
"var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles'; if (elements[6] < 900)\n"
|
||||
"var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles';"
|
||||
|
||||
" if (elements[6] < 900)\n"
|
||||
" \ticon = blueIcon;\n"
|
||||
" else if (elements[6] < 1800)\n"
|
||||
" \ticon = redIcon;\n"
|
||||
|
|
@ -3665,7 +3496,9 @@ char * get_aprs()
|
|||
" else if (elements[0] == \"P\")\n"
|
||||
" {\n"
|
||||
"var dist = homePoint.distanceTo([elements[1], elements[2]]) / 1609.34;\n"
|
||||
"var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles'; var icon;\n"
|
||||
"var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles';"
|
||||
|
||||
" var icon;\n"
|
||||
" \n"
|
||||
" if (elements[7] < 120)\n"
|
||||
" \ticon = greenplaneIcon;\n"
|
||||
|
|
@ -3722,6 +3555,7 @@ char * get_aprs()
|
|||
"</body>\n"
|
||||
"</html>";
|
||||
|
||||
|
||||
return _strdup(Msg);;
|
||||
}
|
||||
|
||||
|
|
@ -3802,10 +3636,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();
|
||||
|
||||
|
|
|
|||
239
ARDOP.c
239
ARDOP.c
|
|
@ -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
|
||||
|
|
@ -120,10 +114,13 @@ static int RigControlRow = 165;
|
|||
#include <commctrl.h>
|
||||
#endif
|
||||
|
||||
extern char * PortConfig[33];
|
||||
extern int SemHeldByAPI;
|
||||
|
||||
static RECT Rect;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
static int ProcessLine(char * buf, int Port);
|
||||
|
||||
|
||||
|
|
@ -142,10 +139,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 +165,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 +317,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 +563,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);
|
||||
|
|
@ -585,6 +575,9 @@ VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
|
|||
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
|
||||
|
||||
|
||||
|
||||
#define MAXBPQPORTS 32
|
||||
|
||||
static time_t ltime;
|
||||
|
||||
|
||||
|
|
@ -656,12 +649,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
|
||||
|
|
@ -880,36 +867,14 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
// approx 100 mS Timer. May now be needed, as Poll can be called more frequently in some circumstances
|
||||
|
||||
// G7TAJ's code to record activity for stats display
|
||||
|
||||
if ( TNC->BusyFlags && CDBusy )
|
||||
TNC->PortRecord->PORTCONTROL.ACTIVE += 2;
|
||||
|
||||
if ( TNC->PTTState )
|
||||
TNC->PortRecord->PORTCONTROL.SENDING += 2;
|
||||
|
||||
// Check session limit timer
|
||||
|
||||
if ((STREAM->Connecting || STREAM->Connected) && !STREAM->Disconnecting)
|
||||
{
|
||||
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 +945,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;
|
||||
|
|
@ -1041,12 +1006,10 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
{
|
||||
TNC->Busy--;
|
||||
if (TNC->Busy == 0)
|
||||
{
|
||||
MySetWindowText(TNC->xIDC_CHANSTATE, "Clear");
|
||||
strcpy(TNC->WEB_CHANSTATE, "Clear");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (TNC->BusyDelay)
|
||||
{
|
||||
|
|
@ -1225,7 +1188,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;
|
||||
|
|
@ -1254,7 +1216,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1298,7 +1260,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)
|
||||
{
|
||||
|
|
@ -1405,7 +1367,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
|
||||
|
|
@ -1504,12 +1466,9 @@ 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]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &buff->L2DATA[0]))
|
||||
{
|
||||
}
|
||||
else
|
||||
|
|
@ -1654,8 +1613,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))
|
||||
|
|
@ -1894,41 +1851,36 @@ 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)
|
||||
{
|
||||
sprintf(TXMsg, "%d %s", TNC->Port, TNC->DefaultRadioCmd);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, TXMsg);
|
||||
Rig_Command(-1, TXMsg);
|
||||
}
|
||||
|
||||
sprintf(TXMsg, "%d SCANSTART 15", TNC->Port);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, TXMsg);
|
||||
Rig_Command(-1, TXMsg);
|
||||
|
||||
ReleaseOtherPorts(TNC);
|
||||
|
||||
}
|
||||
|
||||
VOID ARDOPSuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC)
|
||||
VOID ARDOPSuspendPort(struct TNCINFO * TNC)
|
||||
{
|
||||
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[];
|
||||
|
|
@ -1945,7 +1897,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 %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);
|
||||
|
|
@ -1994,7 +1946,6 @@ VOID * ARDOPExtInit(EXTPORTDATA * PortEntry)
|
|||
}
|
||||
|
||||
TNC->Port = port;
|
||||
TNC->PortRecord = PortEntry;
|
||||
|
||||
if (TNC->LogPath)
|
||||
ARDOPOpenLogFiles(TNC);
|
||||
|
|
@ -2007,7 +1958,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;
|
||||
|
|
@ -2015,6 +1966,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);
|
||||
|
|
@ -2069,12 +2021,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++)
|
||||
{
|
||||
|
|
@ -2098,25 +2059,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)
|
||||
|
|
@ -2168,7 +2113,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);
|
||||
|
|
@ -2299,16 +2244,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->ReportDISC = TRUE;
|
||||
|
||||
{
|
||||
STREAM->Connected = FALSE;
|
||||
STREAM->Connecting = FALSE;
|
||||
|
||||
STREAM->ReportDISC = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2320,13 +2265,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;
|
||||
|
|
@ -2635,8 +2579,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);
|
||||
|
||||
|
|
@ -2716,10 +2658,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;
|
||||
|
||||
|
|
@ -3001,15 +2939,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)
|
||||
|
|
@ -3018,12 +2947,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;
|
||||
}
|
||||
|
||||
|
|
@ -3032,8 +2955,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");
|
||||
|
||||
|
|
@ -3050,12 +2971,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;
|
||||
|
|
@ -3106,7 +3021,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;
|
||||
}
|
||||
|
|
@ -3126,7 +3041,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);
|
||||
|
||||
|
|
@ -3159,7 +3074,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
|
||||
|
||||
|
|
@ -3202,7 +3116,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
|
|||
|
||||
TidyClose(TNC, 0);
|
||||
sprintf(Status, "%d SCANSTART 15", TNC->Port);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Status);
|
||||
Rig_Command(-1, Status);
|
||||
Debugprintf("ARDOP Call from %s rejected", Call);
|
||||
return;
|
||||
}
|
||||
|
|
@ -3227,7 +3141,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
|
|||
|
||||
TidyClose(TNC, 0);
|
||||
sprintf(Status, "%d SCANSTART 15", TNC->Port);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Status);
|
||||
Rig_Command(-1, Status);
|
||||
Debugprintf("ARDOP Call from %s not in ValidCalls - rejected", Call);
|
||||
return;
|
||||
}
|
||||
|
|
@ -3254,7 +3168,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
|
||||
|
|
@ -3304,7 +3218,7 @@ VOID ARDOPProcessResponse(struct TNCINFO * TNC, UCHAR * Buffer, int MsgLen)
|
|||
STREAM->NeedDisc = 100; // 10 secs
|
||||
}
|
||||
}
|
||||
strcpy(STREAM->MyCall, TNC->TargetCall);
|
||||
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
|
@ -3342,9 +3256,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)
|
||||
|
|
@ -3386,21 +3300,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
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -3881,12 +3808,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);
|
||||
|
||||
|
||||
|
|
@ -3910,7 +3838,6 @@ VOID ARDOPProcessDataPacket(struct TNCINFO * TNC, UCHAR * Type, UCHAR * Data, in
|
|||
char * ptr2;
|
||||
char c;
|
||||
int Len = Length;
|
||||
char Call[10] = "";
|
||||
|
||||
Debugprintf(Data);
|
||||
|
||||
|
|
@ -3983,14 +3910,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
|
||||
{
|
||||
|
|
@ -5035,7 +4955,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, ' ');
|
||||
|
|
@ -5108,7 +5028,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
|
||||
|
|
@ -5767,7 +5687,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)
|
||||
{
|
||||
|
|
@ -5775,9 +5696,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;
|
||||
|
|
@ -5976,7 +5897,7 @@ VOID ARAXINIT(struct PORTCONTROL * PORT)
|
|||
char Msg[80] = "";
|
||||
|
||||
memcpy(Msg, PORT->PORTDESCRIPTION, 30);
|
||||
strcat(Msg, "\n);
|
||||
sprintf(Msg, "%s\n", Msg);
|
||||
|
||||
WritetoConsoleLocal(Msg);
|
||||
}
|
||||
|
|
|
|||
255
BBSHTMLConfig.c
255
BBSHTMLConfig.c
|
|
@ -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
|
||||
|
|
@ -38,7 +38,6 @@ extern char LTATString[2048];
|
|||
//static UCHAR BPQDirectory[260];
|
||||
|
||||
extern ConnectionInfo Connections[];
|
||||
|
||||
extern int NumberofStreams;
|
||||
extern time_t MaintClock; // Time to run housekeeping
|
||||
|
||||
|
|
@ -50,7 +49,6 @@ extern int MaxChatStreams;
|
|||
extern char Position[81];
|
||||
extern char PopupText[251];
|
||||
extern int PopupMode;
|
||||
extern int reportMailEvents;
|
||||
|
||||
#define MaxCMS 10 // Numbr of addresses we can keep - currently 4 are used.
|
||||
|
||||
|
|
@ -116,9 +114,6 @@ 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);
|
||||
|
||||
char UNC[] = "";
|
||||
char CHKD[] = "checked=checked ";
|
||||
|
|
@ -160,7 +155,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 +175,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 Callsign Stream Queue Sent Rxed<br>"
|
||||
"<br>User Callsign Stream Queue<br>"
|
||||
"<select style=\"font-family: monospace;\" tabindex=1 size=10 name=call>";
|
||||
|
||||
char StreamEnd[] =
|
||||
|
|
@ -405,22 +398,32 @@ int SendHeader(char * Reply, char * Key)
|
|||
}
|
||||
|
||||
|
||||
void ConvertTitletoUTF8(WebMailInfo * WebMail, char * Title, char * UTF8Title, int Len)
|
||||
void ConvertTitletoUTF8(char * Title, char * UTF8Title)
|
||||
{
|
||||
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
|
||||
int left = 2 * strlen(Title);
|
||||
int len = origlen;
|
||||
iconv_t * icu = NULL;
|
||||
|
||||
if (icu == NULL)
|
||||
icu = iconv_open("UTF-8", "CP1252");
|
||||
|
||||
iconv(icu, NULL, NULL, NULL, NULL); // Reset State Machine
|
||||
iconv(icu, &Title, &len, (char ** __restrict__)&UTF8Title, &left);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
strcpy(UTF8Title, Title);
|
||||
|
|
@ -428,7 +431,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 +461,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,7 +478,6 @@ void ProcessMailHTTPMessage(struct HTTPConnectionInfo * Session, char * Method,
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
if (strcmp(Method, "POST") == 0)
|
||||
{
|
||||
if (_stricmp(NodeURL, "/Mail/Header") == 0)
|
||||
|
|
@ -1627,7 +1622,6 @@ VOID ProcessConfUpdate(struct HTTPConnectionInfo * Session, char * MsgPtr, char
|
|||
UserCantKillT = !UserCantKillT; // Reverse Logic
|
||||
GetCheckBox(input, "FWDtoMe=", &ForwardToMe);
|
||||
GetCheckBox(input, "OnlyKnown=", &OnlyKnown);
|
||||
GetCheckBox(input, "Events=", &reportMailEvents);
|
||||
|
||||
GetParam(input, "POP3Port=", Temp);
|
||||
POP3InPort = atoi(Temp);
|
||||
|
|
@ -1687,87 +1681,6 @@ VOID ProcessConfUpdate(struct HTTPConnectionInfo * Session, char * MsgPtr, char
|
|||
HoldAt = GetMultiStringInput(input, "Hat=");
|
||||
HoldBID = GetMultiStringInput(input, "HBID=");
|
||||
|
||||
// Look for fbb style filters
|
||||
|
||||
input = strstr(input, "&Action=");
|
||||
|
||||
// delete old list
|
||||
|
||||
while(Filters && Filters->Next)
|
||||
{
|
||||
FBBFilter * next = Filters->Next;
|
||||
free(Filters);
|
||||
Filters = next;
|
||||
}
|
||||
|
||||
free(Filters);
|
||||
Filters = NULL;
|
||||
|
||||
UndoTransparency(input);
|
||||
|
||||
while (input)
|
||||
{
|
||||
// extract and validate before saving
|
||||
|
||||
FBBFilter Filter;
|
||||
FBBFilter * PFilter;
|
||||
|
||||
memset(&Filter, 0, sizeof(FBBFilter));
|
||||
|
||||
Filter.Action = toupper(input[8]);
|
||||
|
||||
input = strstr(input, "&Type=");
|
||||
|
||||
if (Filter.Action == 'H' || Filter.Action == 'R' || Filter.Action == 'A')
|
||||
{
|
||||
Filter.Type = toupper(input[6]);
|
||||
input = strstr(input, "&From=");
|
||||
memcpy(Filter.From, &input[6], 10);
|
||||
input = strstr(input, "&TO=");
|
||||
strlop(Filter.From, '&');
|
||||
_strupr(Filter.From);
|
||||
memcpy(Filter.TO, &input[4], 10);
|
||||
input = strstr(input, "&AT=");
|
||||
strlop(Filter.TO, '&');
|
||||
_strupr(Filter.TO);
|
||||
memcpy(Filter.AT, &input[4], 10);
|
||||
input = strstr(input, "&BID=");
|
||||
strlop(Filter.AT, '&');
|
||||
_strupr(Filter.AT);
|
||||
memcpy(Filter.BID, &input[5], 10);
|
||||
input = strstr(input, "&MaxLen=");
|
||||
strlop(Filter.BID, '&');
|
||||
_strupr(Filter.BID);
|
||||
Filter.MaxLen = atoi(&input[8]);
|
||||
|
||||
if (Filter.Type == '&') Filter.Type = '*';
|
||||
if (Filter.From[0] == 0) strcpy(Filter.From, "*");
|
||||
if (Filter.TO[0] == 0) strcpy(Filter.TO, "*");
|
||||
if (Filter.AT[0] == 0) strcpy(Filter.AT, "*");
|
||||
if (Filter.BID[0] == 0) strcpy(Filter.BID, "*");
|
||||
|
||||
// add to list
|
||||
|
||||
PFilter = zalloc(sizeof(FBBFilter));
|
||||
|
||||
memcpy(PFilter, &Filter, sizeof(FBBFilter));
|
||||
|
||||
if (Filters == 0)
|
||||
Filters = PFilter;
|
||||
else
|
||||
{
|
||||
FBBFilter * p = Filters;
|
||||
|
||||
while (p->Next)
|
||||
p = p->Next;
|
||||
|
||||
p->Next = PFilter;
|
||||
}
|
||||
}
|
||||
|
||||
input = strstr(input, "&Action=");
|
||||
}
|
||||
|
||||
SaveConfig(ConfigName);
|
||||
GetConfig(ConfigName);
|
||||
}
|
||||
|
|
@ -1873,7 +1786,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 +2135,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 +2355,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);
|
||||
|
|
@ -2525,7 +2437,7 @@ VOID SendFwdDetails(struct UserInfo * User, char * Reply, int * ReplyLen, char *
|
|||
|
||||
VOID SendConfigPage(char * Reply, int * ReplyLen, char * Key)
|
||||
{
|
||||
int Len, i;
|
||||
int Len;
|
||||
|
||||
char HF[2048] = "";
|
||||
char HT[2048] = "";
|
||||
|
|
@ -2537,12 +2449,6 @@ VOID SendConfigPage(char * Reply, int * ReplyLen, char * Key)
|
|||
char RB[2048] = "";
|
||||
char WPTO[10000] = "";
|
||||
|
||||
char FBBFilters[100000] = "";
|
||||
|
||||
|
||||
char * ptr = FBBFilters;
|
||||
FBBFilter * Filter = Filters;
|
||||
|
||||
SetMultiStringValue(RejFrom, RF);
|
||||
SetMultiStringValue(RejTo, RT);
|
||||
SetMultiStringValue(RejAt, RA);
|
||||
|
|
@ -2553,43 +2459,6 @@ VOID SendConfigPage(char * Reply, int * ReplyLen, char * Key)
|
|||
SetMultiStringValue(HoldBID, HB);
|
||||
SetMultiStringValue(SendWPAddrs, WPTO);
|
||||
|
||||
// set up FB style fiters
|
||||
|
||||
ptr += sprintf(ptr,
|
||||
"<table><tr><th>Action</th><th>Type</th><th>From</th><th>To</th><th>@BBS</th><th>Bid</th><th>Max Size</th></tr>");
|
||||
|
||||
while(Filter)
|
||||
{
|
||||
ptr += sprintf(ptr, "<tr>"
|
||||
"<td><input type=text name=Action style=\"text-transform: uppercase\"maxlength=2 size=2 value=%c></td>"
|
||||
"<td><input type=text name=Type style=\"text-transform: uppercase\"maxlength=2 size=2 value=%c></td>"
|
||||
"<td><input type=text name=From style=\"text-transform: uppercase\" maxlength=7 size=7 value=%s></td>"
|
||||
"<td><input type=text name=TO style=\"text-transform: uppercase\" maxlength=7 size=7 value=%s></td>"
|
||||
"<td><input type=text name=AT style=\"text-transform: uppercase\" maxlength=7 size=7 value=%s></td>"
|
||||
"<td><input type=text name=BID style=\"text-transform: uppercase\" maxlength=13 size=13 value=%s></td>"
|
||||
"<td><input type=text name=MaxLen maxlength=6 size=6 value=%d></td></tr>",
|
||||
Filter->Action, Filter->Type, Filter->From, Filter->TO, Filter->AT, Filter->BID, Filter->MaxLen);
|
||||
|
||||
Filter = Filter->Next;
|
||||
}
|
||||
|
||||
// Add a few blank entries for input
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
ptr += sprintf(ptr, "<tr>"
|
||||
"<td><input type=text name=Action style=\"text-transform: uppercase\"maxlength=2 size=2 value=%c></td>"
|
||||
"<td><input type=text name=Type style=\"text-transform: uppercase\"maxlength=2 size=2 value=%c></td>"
|
||||
"<td><input type=text name=From style=\"text-transform: uppercase\" maxlength=7 size=7 value=%s></td>"
|
||||
"<td><input type=text name=TO style=\"text-transform: uppercase\" maxlength=7 size=7 value=%s></td>"
|
||||
"<td><input type=text name=AT style=\"text-transform: uppercase\" maxlength=7 size=7 value=%s></td>"
|
||||
"<td><input type=text name=BID style=\"text-transform: uppercase\" maxlength=13 size=13 value=%s></td>"
|
||||
"<td><input type=text name=MaxLen maxlength=6 size=6 value=%d></td></tr>", ' ', ' ', "", "", "", "", 0);
|
||||
}
|
||||
|
||||
ptr += sprintf(ptr, "</table>");
|
||||
|
||||
Debugprintf("%d", strlen(FBBFilters));
|
||||
|
||||
Len = sprintf(Reply, ConfigTemplate,
|
||||
BBSName, Key, Key, Key, Key, Key, Key, Key, Key, Key,
|
||||
|
|
@ -2608,7 +2477,6 @@ VOID SendConfigPage(char * Reply, int * ReplyLen, char * Key)
|
|||
(UserCantKillT) ? UNC : CHKD, // Reverse logic
|
||||
(ForwardToMe) ? CHKD : UNC,
|
||||
(OnlyKnown) ? CHKD : UNC,
|
||||
(reportMailEvents) ? CHKD : UNC,
|
||||
POP3InPort, SMTPInPort, NNTPInPort,
|
||||
(RemoteEmail) ? CHKD : UNC,
|
||||
AMPRDomain,
|
||||
|
|
@ -2622,7 +2490,7 @@ VOID SendConfigPage(char * Reply, int * ReplyLen, char * Key)
|
|||
(SendWPType == 0) ? CHKD : UNC,
|
||||
(SendWPType == 1) ? CHKD : UNC,
|
||||
WPTO,
|
||||
RF, RT, RA, RB, HF, HT, HA, HB, FBBFilters);
|
||||
RF, RT, RA, RB, HF, HT, HA, HB);
|
||||
|
||||
*ReplyLen = Len;
|
||||
}
|
||||
|
|
@ -2703,7 +2571,6 @@ VOID SendFwdMainPage(char * Reply, int * RLen, char * Key)
|
|||
(WarnNoRoute) ? CHKD : UNC,
|
||||
(Localtime) ? CHKD : UNC,
|
||||
(SendPtoMultiple) ? CHKD : UNC,
|
||||
(FOURCHARCONT) ? CHKD : UNC,
|
||||
ALIASES);
|
||||
}
|
||||
|
||||
|
|
@ -2759,19 +2626,6 @@ VOID SendUIPage(char * Reply, int * ReplyLen, char * Key)
|
|||
*ReplyLen = Len;
|
||||
}
|
||||
|
||||
void ConvertSpaceTonbsp(char * msg)
|
||||
{
|
||||
// Replace any space with
|
||||
|
||||
char * ptr;
|
||||
|
||||
while (ptr = strchr(msg, ' '))
|
||||
{
|
||||
memmove(ptr + 5, ptr, strlen(ptr) + 1);
|
||||
memcpy(ptr, " ", 6);
|
||||
}
|
||||
}
|
||||
|
||||
VOID SendStatusPage(char * Reply, int * ReplyLen, char * Key)
|
||||
{
|
||||
int Len;
|
||||
|
|
@ -2793,8 +2647,6 @@ VOID SendStatusPage(char * Reply, int * ReplyLen, char * Key)
|
|||
if (!conn->Active)
|
||||
{
|
||||
strcpy(msg,"Idle "
|
||||
" "
|
||||
" "
|
||||
" "
|
||||
" \r\n");
|
||||
}
|
||||
|
|
@ -2808,16 +2660,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 %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 +2847,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 +2867,6 @@ static DWORD WINAPI InstanceThread(LPVOID lpvParam)
|
|||
char URL[100001];
|
||||
char * Context, * Method;
|
||||
int n;
|
||||
char token[16]= "";
|
||||
|
||||
char * ptr;
|
||||
|
||||
|
|
@ -3053,30 +2902,8 @@ 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;
|
||||
|
||||
// Node Flags isn't currently used
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
strcpy(URL, MsgPtr);
|
||||
|
||||
|
||||
|
||||
ptr = strstr(URL, " HTTP");
|
||||
|
||||
if (ptr)
|
||||
|
|
@ -3084,8 +2911,8 @@ static DWORD WINAPI InstanceThread(LPVOID lpvParam)
|
|||
|
||||
Method = strtok_s(URL, " ", &Context);
|
||||
|
||||
ProcessMailHTTPMessage(&Session, Method, Context, MsgPtr, OutBuffer, &OutputLen, InputLen, token);
|
||||
|
||||
ProcessMailHTTPMessage(&Session, Method, Context, MsgPtr, OutBuffer, &OutputLen, InputLen);
|
||||
}
|
||||
|
||||
WriteFile(hPipe, &Session, sizeof (struct HTTPConnectionInfo), &n, NULL);
|
||||
WriteFile(hPipe, OutBuffer, OutputLen, &cbWritten, NULL);
|
||||
|
|
|
|||
1989
BBSUtilities.c
1989
BBSUtilities.c
File diff suppressed because it is too large
Load diff
BIN
BPQChat.aps
Normal file
BIN
BPQChat.aps
Normal file
Binary file not shown.
|
|
@ -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
374
BPQChat.vcproj
Normal 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>
|
||||
65
BPQChat.vcproj.DESKTOP-TGEL8RC.John.user
Normal file
65
BPQChat.vcproj.DESKTOP-TGEL8RC.John.user
Normal 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="DESKTOP-TGEL8RC"
|
||||
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="DESKTOP-TGEL8RC"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
65
BPQChat.vcproj.SKIGACER.johnw.user
Normal file
65
BPQChat.vcproj.SKIGACER.johnw.user
Normal 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>
|
||||
BIN
BPQMail.aps
BIN
BPQMail.aps
Binary file not shown.
125
BPQMail.c
125
BPQMail.c
|
|
@ -1097,68 +1097,18 @@
|
|||
// Disconnect immediately if "Invalid Command" "*** Protocol Error" or "Already Connected" received (.70)
|
||||
// Check Badword and Reject filters before processing WP Messages
|
||||
|
||||
// 6.0.24.1 August 2023
|
||||
// 6.0.24.1 ?? 2022
|
||||
|
||||
// Fix ' in Webmail subject (8)
|
||||
// Change web buttons to white on black when pressed (10)
|
||||
// Add auto-refresh option to Webmail index page (25)
|
||||
// Fix displaying help and info files with crlf line endings on Linux (28)
|
||||
// Improve validation of extended FC message (32)
|
||||
// Improve WP check for SYSTEM as a callsign (33)
|
||||
// Improvements to RMS Relay SYNC mode (47)
|
||||
// Fix BID Hold and Reject filters
|
||||
// Fix Webmail auto-refresh when page exceeds 64K bytes (54)
|
||||
// Fix Webmail send when using both headers/footers and attachmonts (55)
|
||||
// Fix R: line corruption on some 64 bit builds
|
||||
// Dont drop empty lines in TEXTFORWARDING (61)
|
||||
// Dont wait for body prompt for TEXTFORWARDING for SID [PMS-3.2-C$] (62)
|
||||
// Add forwarding mode SETCALLTOSENDER for PMS Systems that don't accept < in SP (63)
|
||||
// QtTerm Monitoring fixed for 63 port version of BPQ (69)
|
||||
// Fix to UI system to support up to 63 ports (79)
|
||||
// Fix recently introduced crash when "Don't allow new users" is set (81)
|
||||
// Skip comments before TIMES at start of Connect Script (83)
|
||||
// Improve WP check for SYSTEM as a callsihn (33)
|
||||
// Improvements to RMS Relay SYNC mode (
|
||||
|
||||
// 6.0.25.1 ??
|
||||
|
||||
// Add FBB reject.sys style filters (3)
|
||||
// Improve Webmail on 64 bit builds
|
||||
// Fix setting status '$' on Bulls sent via WebMail (22)
|
||||
// Implement New Message and Message Read Events (23)
|
||||
// Start adding json api (25)
|
||||
// Fix reading nested directories when loading Standard Templates and other template bugs (25)
|
||||
// Add TO and AT to "Message has nowhere to go" message (28)
|
||||
// Add My Sent and My Received filter options to Webmail (30)
|
||||
// Add Send P to multiple BBS's when routing on HR (30)
|
||||
// Fix Traffic stats for T messages received via B2 forwarding (31)
|
||||
// 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"
|
||||
#define MAIL
|
||||
#include "Versions.h"
|
||||
|
||||
|
|
@ -1173,10 +1123,6 @@ FARPROCX pDllBPQTRACE;
|
|||
FARPROCZ pGetLOC;
|
||||
FARPROCX pRefreshWebMailIndex;
|
||||
FARPROCX pRunEventProgram;
|
||||
FARPROCX pGetPortFrequency;
|
||||
FARPROCX pSendWebRequest;
|
||||
FARPROCX pGetLatLon;
|
||||
FARPROCX pGetPortHardwareType;
|
||||
|
||||
BOOL WINE = FALSE;
|
||||
|
||||
|
|
@ -1400,8 +1346,6 @@ BOOL CreateMulticastConsole();
|
|||
char * CheckToAddress(CIRCUIT * conn, char * Addr);
|
||||
BOOL CheckifPacket(char * Via);
|
||||
int GetHTMLForms();
|
||||
VOID GetPGConfig();
|
||||
void SendBBSDataToPktMap();
|
||||
|
||||
struct _EXCEPTION_POINTERS exinfox;
|
||||
|
||||
|
|
@ -1412,7 +1356,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 +1492,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 +1673,6 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
|||
// SaveUserDatabase();
|
||||
SaveMessageDatabase();
|
||||
SaveBIDDatabase();
|
||||
SaveRestartData();
|
||||
|
||||
configSaved = 1;
|
||||
SaveConfig(ConfigName);
|
||||
|
|
@ -1760,14 +1699,6 @@ int APIENTRY WinMain(HINSTANCE hInstance,
|
|||
FreeForwardingStruct(user);
|
||||
free(user->ForwardingInfo);
|
||||
}
|
||||
/* ---------- TAJ --PG Server------*/
|
||||
|
||||
if (user->Temp && user->Temp->RUNPGPARAMS ) {
|
||||
|
||||
printf("Also freeing RUNPGARGS\n");
|
||||
free(user->Temp->RUNPGPARAMS);
|
||||
}
|
||||
/* --------------------------------*/
|
||||
|
||||
free(user->Temp);
|
||||
|
||||
|
|
@ -1957,12 +1888,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)
|
||||
{
|
||||
|
|
@ -2201,6 +2126,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
CheckTimer();
|
||||
TCPTimer();
|
||||
BBSSlowTimer();
|
||||
FWDTimerProc();
|
||||
if (MaintClock < NOW)
|
||||
{
|
||||
while (MaintClock < NOW) // in case large time step
|
||||
|
|
@ -2209,13 +2135,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
|
||||
|
|
@ -2229,14 +2148,6 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
My__except_Routine("Slow Timer");
|
||||
}
|
||||
if (wParam == 3) // Forward (2 Secs)
|
||||
{
|
||||
__try
|
||||
{
|
||||
FWDTimerProc();
|
||||
}
|
||||
My__except_Routine("Fwd Timer");
|
||||
}
|
||||
else
|
||||
__try
|
||||
{
|
||||
|
|
@ -2849,12 +2760,6 @@ gotAddr:
|
|||
|
||||
EndDialog(hDlg, LOWORD(wParam));
|
||||
|
||||
#ifndef NOMQTT
|
||||
if (MQTT)
|
||||
MQTTMessageEvent(Msg);
|
||||
#endif
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -3032,9 +2937,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3089,13 +2994,13 @@ int RefreshMainWindow()
|
|||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 0
|
||||
|
||||
static SOCKADDR_IN local_sin; /* Local socket - internet style */
|
||||
SOCKADDR_IN local_sin; /* Local socket - internet style */
|
||||
|
||||
static PSOCKADDR_IN psin;
|
||||
PSOCKADDR_IN psin;
|
||||
|
||||
SOCKET sock;
|
||||
|
||||
void GetRestartData();
|
||||
|
||||
|
||||
BOOL Initialise()
|
||||
{
|
||||
|
|
@ -3111,8 +3016,6 @@ BOOL Initialise()
|
|||
|
||||
GetTimeZoneInformation(&TimeZoneInformation);
|
||||
|
||||
Debugprintf("%d", sizeof(struct MsgInfo));
|
||||
|
||||
_tzset();
|
||||
_MYTIMEZONE = timezone;
|
||||
_MYTIMEZONE = TimeZoneInformation.Bias * 60;
|
||||
|
|
@ -3283,8 +3186,6 @@ BOOL Initialise()
|
|||
GetBadWordFile();
|
||||
GetHTMLForms();
|
||||
|
||||
GetRestartData();
|
||||
|
||||
UsingingRegConfig = FALSE;
|
||||
|
||||
// Make sure SYSOPCALL is set
|
||||
|
|
@ -3375,7 +3276,6 @@ BOOL Initialise()
|
|||
|
||||
SetTimer(hWnd,1,10000,NULL); // Slow Timer (10 Secs)
|
||||
SetTimer(hWnd,2,100,NULL); // Send to Node and TCP Poll (100 ms)
|
||||
SetTimer(hWnd,3,2000,NULL); // Forward Check (2 secs)
|
||||
|
||||
// Calulate time to run Housekeeping
|
||||
{
|
||||
|
|
@ -3424,9 +3324,6 @@ BOOL Initialise()
|
|||
// CreateWPReport();
|
||||
|
||||
CreatePipeThread();
|
||||
GetPGConfig();
|
||||
|
||||
APIClock = 0;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
1101
BPQMail.rc
1101
BPQMail.rc
File diff suppressed because it is too large
Load diff
489
BPQMail.vcproj
Normal file
489
BPQMail.vcproj
Normal file
|
|
@ -0,0 +1,489 @@
|
|||
<?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="..\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>
|
||||
65
BPQMail.vcproj.DESKTOP-TGEL8RC.John.user
Normal file
65
BPQMail.vcproj.DESKTOP-TGEL8RC.John.user
Normal 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="DESKTOP-TGEL8RC"
|
||||
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="DESKTOP-TGEL8RC"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
65
BPQMail.vcproj.SKIGACER.johnw.user
Normal file
65
BPQMail.vcproj.SKIGACER.johnw.user
Normal 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>
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -255,8 +255,6 @@
|
|||
#define IDC_REJFROM 7077
|
||||
#define IDC_REJTO 7078
|
||||
#define IDC_REJAT 7079
|
||||
#define IDC_HOLDFROM2 7080
|
||||
#define IDC_REJSYS 7080
|
||||
#define IDM_HOUSEKEEPING 9000
|
||||
#define IDM_PR 9001
|
||||
#define IDM_PUR 9002
|
||||
|
|
@ -319,13 +317,12 @@
|
|||
#define ID_MULTICAST 40024
|
||||
#define IDC_DEFAULTNOWINLINK 41001
|
||||
#define IDC_MULTIP 41002
|
||||
#define IDC_FOURCHARCONTINENT 41003
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 30013
|
||||
#define _APS_NEXT_RESOURCE_VALUE 30012
|
||||
#define _APS_NEXT_COMMAND_VALUE 40027
|
||||
#define _APS_NEXT_CONTROL_VALUE 1093
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
|
|
|
|||
32
BPQNRR.c
32
BPQNRR.c
|
|
@ -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);
|
||||
|
|
@ -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
12
BPQRemotePTT.cfg
Normal 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
228
BPQRemotePTT.vcproj
Normal 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>
|
||||
65
BPQRemotePTT.vcproj.DESKTOP-TGEL8RC.John.user
Normal file
65
BPQRemotePTT.vcproj.DESKTOP-TGEL8RC.John.user
Normal 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="DESKTOP-TGEL8RC"
|
||||
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="DESKTOP-TGEL8RC"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
98
BPQTermMDI.c
98
BPQTermMDI.c
|
|
@ -92,6 +92,7 @@ HBRUSH bgBrush;
|
|||
extern BOOL FrameMaximized;
|
||||
|
||||
char RTFHeader[4000];
|
||||
|
||||
int RTFHddrLen;
|
||||
|
||||
struct ConsoleInfo * ConsHeader = NULL;
|
||||
|
|
@ -157,7 +158,7 @@ int DoStateChange(int Stream);
|
|||
int ToggleFlags(HWND hWnd, int Item, int mask);
|
||||
int CopyScreentoBuffer(char * buff);
|
||||
int DoMonData(int Stream);
|
||||
int TogglePort(HWND hWnd, int Item, uint64_t mask);
|
||||
int TogglePort(HWND hWnd, int Item, int mask);
|
||||
int ToggleMTX(HWND hWnd);
|
||||
int ToggleMCOM(HWND hWnd);
|
||||
int ToggleParam(HMENU hMenu, BOOL * Param, int Item);
|
||||
|
|
@ -174,7 +175,6 @@ struct ConsoleInfo * CreateChildWindow(int Stream, BOOL DuringInit);
|
|||
BOOL CreateMonitorWindow(char * MonSize);
|
||||
VOID SaveMDIWindowPos(HWND hWnd, char * RegKey, char * Value, BOOL Minimized);
|
||||
int ToggleMON_UI_ONLY(HWND hWnd);
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
COLORREF Colours[256] = {0,
|
||||
RGB(0,0,0), RGB(0,0,128), RGB(0,0,192), RGB(0,0,255), // 1 - 4
|
||||
|
|
@ -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;
|
||||
|
|
@ -240,6 +240,11 @@ int ClientHeight, ClientWidth;
|
|||
#define MAXLINES 1000
|
||||
#define LINELEN 200
|
||||
|
||||
char RTFHeader[4000];
|
||||
|
||||
int RTFHddrLen;
|
||||
|
||||
|
||||
char FontName[100] = "FixedSys";
|
||||
int FontSize = 20;
|
||||
int FontWidth = 8;
|
||||
|
|
@ -255,7 +260,7 @@ SOCKET sock;
|
|||
BOOL MonData = FALSE;
|
||||
|
||||
static char Key[80];
|
||||
uint64_t portmask = 1;
|
||||
int portmask=1;
|
||||
int mtxparam=1;
|
||||
int mcomparam=1;
|
||||
int monUI=0;
|
||||
|
|
@ -327,7 +332,7 @@ extern HANDLE hInstance;
|
|||
|
||||
extern byte MCOM;
|
||||
extern char MTX;
|
||||
extern uint64_t MMASK;
|
||||
extern ULONG MMASK;
|
||||
extern byte MUIONLY;
|
||||
|
||||
HMENU hPopMenu1;
|
||||
|
|
@ -456,8 +461,7 @@ extern int SessHandle;
|
|||
|
||||
VOID CALLBACK SetupTermSessions(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
|
||||
{
|
||||
int i, n;
|
||||
uint64_t tempmask = 0xffff;
|
||||
int i, n, tempmask=0xffff;
|
||||
char msg[50];
|
||||
int retCode,Type,Vallen;
|
||||
HKEY hKey=0;
|
||||
|
|
@ -525,7 +529,7 @@ VOID CALLBACK SetupTermSessions(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dw
|
|||
retCode = RegQueryValueEx(hKey,"MONUIONLY",0,
|
||||
(ULONG *)&Type,(UCHAR *)&monUI,(ULONG *)&Vallen);
|
||||
|
||||
Vallen=8;
|
||||
Vallen=4;
|
||||
retCode = RegQueryValueEx(hKey,"PortMask",0,
|
||||
(ULONG *)&Type,(UCHAR *)&tempmask,(ULONG *)&Vallen);
|
||||
|
||||
|
|
@ -608,17 +612,12 @@ VOID CALLBACK SetupTermSessions(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dw
|
|||
|
||||
sprintf(msg,"Port %d %s ",i, PORT->PORTDESCRIPTION);
|
||||
|
||||
if (tempmask & ((uint64_t)1 << (i-1)))
|
||||
if (tempmask & (1<<(i-1)))
|
||||
AppendMenu(hMonCfgMenu,MF_STRING | MF_CHECKED,BPQBASE + i,msg);
|
||||
else
|
||||
AppendMenu(hMonCfgMenu,MF_STRING | MF_UNCHECKED,BPQBASE + i,msg);
|
||||
}
|
||||
|
||||
if (mtxparam & 0x80)
|
||||
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_CHECKED);
|
||||
else
|
||||
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_UNCHECKED);
|
||||
|
||||
if (mtxparam & 1)
|
||||
CheckMenuItem(hMonCfgMenu,BPQMTX,MF_CHECKED);
|
||||
else
|
||||
|
|
@ -723,7 +722,7 @@ SaveHostSessions()
|
|||
RegCreateKeyEx(REGTREE, Key, 0, 0, 0, KEY_ALL_ACCESS, NULL, &hKey, &disp);
|
||||
|
||||
RegSetValueEx(hKey,"ChatMode",0,REG_DWORD,(BYTE *)&ChatMode,4);
|
||||
RegSetValueEx(hKey,"PortMask", 0, REG_DWORD, (BYTE *)&portmask, 8);
|
||||
RegSetValueEx(hKey,"PortMask",0,REG_DWORD,(BYTE *)&portmask,4);
|
||||
RegSetValueEx(hKey,"Bells",0,REG_DWORD,(BYTE *)&Bells,4);
|
||||
RegSetValueEx(hKey,"StripLF",0,REG_DWORD,(BYTE *)&StripLF,4);
|
||||
RegSetValueEx(hKey,"SendDisconnected",0,REG_DWORD,(BYTE *)&SendDisconnected,4);
|
||||
|
|
@ -1124,7 +1123,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
|||
|
||||
SetAppl(Stream, applflags, APPLMASK);
|
||||
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
SetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
if (MinimizetoTray)
|
||||
{
|
||||
|
|
@ -1502,7 +1501,7 @@ BOOL InitInstancex(HINSTANCE hInstance, int nCmdShow)
|
|||
|
||||
SetAppl(Stream, applflags, APPLMASK);
|
||||
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
SetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
|
||||
|
||||
|
|
@ -1683,9 +1682,9 @@ LRESULT CALLBACK MonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
|
|||
wmEvent = HIWORD(wParam); // ...different for Win32!
|
||||
|
||||
|
||||
if (wmId > BPQBASE && wmId < BPQBASE + 64)
|
||||
if (wmId > BPQBASE && wmId < BPQBASE + 33)
|
||||
{
|
||||
TogglePort(hWnd, wmId, (uint64_t)1 << (wmId - (BPQBASE + 1)));
|
||||
TogglePort(hWnd, wmId, 0x1 << (wmId - (BPQBASE + 1)));
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -1738,10 +1737,6 @@ LRESULT CALLBACK MonWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
|
|||
|
||||
break;
|
||||
}
|
||||
case MONLOCALTIME:
|
||||
|
||||
ToggleLocalTime();
|
||||
break;
|
||||
|
||||
case BPQMTX:
|
||||
|
||||
|
|
@ -2974,30 +2969,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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return CallWindowProc(Cinfo->wpOrigInputProc, hwnd, uMsg, wParam, lParam);
|
||||
|
|
@ -4262,7 +4233,7 @@ static CopyScreentoBuffer(char * buff)
|
|||
return (0);
|
||||
}
|
||||
|
||||
int TogglePort(HWND hWnd, int Item, uint64_t mask)
|
||||
int TogglePort(HWND hWnd, int Item, int mask)
|
||||
{
|
||||
portmask ^= mask;
|
||||
|
||||
|
|
@ -4278,7 +4249,7 @@ int TogglePort(HWND hWnd, int Item, uint64_t mask)
|
|||
|
||||
SetAppl(Stream,applflags,APPLMASK);
|
||||
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
SetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
return (0);
|
||||
|
||||
|
|
@ -4295,25 +4266,7 @@ int ToggleMTX(HWND hWnd)
|
|||
|
||||
CheckMenuItem(hMonCfgMenu,BPQMTX,MF_UNCHECKED);
|
||||
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
|
||||
int ToggleLocalTime(HWND hWnd)
|
||||
{
|
||||
mtxparam = mtxparam ^ 0x80;
|
||||
|
||||
if (mtxparam & 0x80)
|
||||
|
||||
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_CHECKED);
|
||||
|
||||
else
|
||||
|
||||
CheckMenuItem(hMonCfgMenu,MONLOCALTIME,MF_UNCHECKED);
|
||||
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
SetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
return (0);
|
||||
|
||||
|
|
@ -4330,7 +4283,7 @@ int ToggleMCOM(HWND hWnd)
|
|||
|
||||
CheckMenuItem(hMonCfgMenu,BPQMCOM,MF_UNCHECKED);
|
||||
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
SetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
return (0);
|
||||
|
||||
|
|
@ -4347,7 +4300,7 @@ int ToggleMON_UI_ONLY(HWND hWnd)
|
|||
|
||||
CheckMenuItem(hMonCfgMenu,MON_UI_ONLY,MF_UNCHECKED);
|
||||
|
||||
IntSetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
SetTraceOptionsEx(portmask,mtxparam,mcomparam, monUI);
|
||||
|
||||
return (0);
|
||||
|
||||
|
|
@ -4841,7 +4794,6 @@ BOOL CreateMonitorWindow(char * MonSize)
|
|||
Cinfo->hConsole = ChildWnd;
|
||||
|
||||
// return if its not possible to create the child window
|
||||
|
||||
if(NULL == ChildWnd)
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -4864,8 +4816,8 @@ BOOL CreateMonitorWindow(char * MonSize)
|
|||
|
||||
Cinfo = &MonWindow;
|
||||
|
||||
MoveWindow(ChildWnd, Rect.left - (OffsetW /2), Rect.top - OffsetH, Rect.right - Rect.left, Rect.bottom - Rect.top, TRUE);
|
||||
|
||||
// MoveWindow(Cinfo->hConsole, Rect.left - (OffsetW /2), Rect.top - OffsetH,
|
||||
// Rect.right-Rect.left, Rect.bottom-Rect.top, TRUE);
|
||||
|
||||
MoveWindows(Cinfo);
|
||||
|
||||
|
|
|
|||
230
BPQWinAPP.vcproj
Normal file
230
BPQWinAPP.vcproj
Normal 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>
|
||||
65
BPQWinAPP.vcproj.DESKTOP-TGEL8RC.John.user
Normal file
65
BPQWinAPP.vcproj.DESKTOP-TGEL8RC.John.user
Normal 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="DESKTOP-TGEL8RC"
|
||||
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="DESKTOP-TGEL8RC"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
65
BPQWinAPP.vcproj.SKIGACER.johnw.user
Normal file
65
BPQWinAPP.vcproj.SKIGACER.johnw.user
Normal 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>
|
||||
|
|
@ -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>
|
||||
|
|
@ -78,6 +78,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
//uintptr_t _beginthread(void( *start_address )( int ), unsigned stack_size, int arglist);
|
||||
|
||||
//int ResetExtDriver(int num);
|
||||
extern char * PortConfig[33];
|
||||
|
||||
void ConnecttoAGWThread(void * portptr);
|
||||
|
||||
|
|
@ -87,7 +88,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);
|
||||
|
||||
|
|
@ -116,6 +117,8 @@ static struct AGWHEADER RXHeader;
|
|||
|
||||
#pragma pack()
|
||||
|
||||
|
||||
#define MAXBPQPORTS 32
|
||||
#define MAXAGWPORTS 16
|
||||
|
||||
//LOGFONT LFTTYFONT ;
|
||||
|
|
@ -495,7 +498,7 @@ static int ProcessLine(char * buf, int Port, BOOL CheckPort)
|
|||
BPQport = Port;
|
||||
p_ipad = ptr;
|
||||
}
|
||||
if(BPQport > 0 && BPQport < MAXBPQPORTS)
|
||||
if(BPQport > 0 && BPQport <33)
|
||||
{
|
||||
p_udpport = strtok(NULL, " \t\n\r");
|
||||
|
||||
|
|
|
|||
6541
Bpq32-HPLaptop.c
Normal file
6541
Bpq32-HPLaptop.c
Normal file
File diff suppressed because it is too large
Load diff
410
Bpq32.c
410
Bpq32.c
|
|
@ -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 ??
|
||||
|
||||
// Apply NODES command wildcard to alias as well a call (2)
|
||||
// Add STOPPORT/STARTPORT to VARA Driver (2)
|
||||
|
|
@ -1115,7 +1115,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
// Fix processing C command if first port driver is SCSPACTROR (20)
|
||||
// Fix crash in UZ7HO driver if bad raw frame received (21)
|
||||
// Fix using FLARQ chat mode with FLDIGI ddriover (22)
|
||||
// Fix to KISSHF driver (23)
|
||||
// Fixed to KISSHF driver (23)
|
||||
// Fix for application buffer loss (24)
|
||||
// Add Web Sockets auto-refresh option for Webmail index page (25)
|
||||
// Fix FREEDATA driver for compatibility with FreeData TNC version 0.6.4-alpha.3 (25)
|
||||
|
|
@ -1144,165 +1144,6 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
// Add PHG to APRS beacons (45)
|
||||
// Dont send DM to stations in exclude list(45)
|
||||
// Improvements to RMS Relay SYNC Mode (46)
|
||||
// Check L4 connects against EXCLUDE list (47)
|
||||
// Add vaidation of LOC in WL2K Session Reports (49)
|
||||
// Change gpsd support for compatibility with Share Gps (50)
|
||||
// Switch APRS Map to my Tiles (52)
|
||||
// Fix using ; in UNPROTO Mode messages (52)
|
||||
// Use sha1 code from https://www.packetizer.com/security/sha1/ instead of openssl (53)
|
||||
// Fix TNC Emulator Monitoring (53)
|
||||
// Fix attach and connect on Telnet port bug introduced in .55 (56)
|
||||
// Fix stopping WinRPR TNC and Start/Stop UZ7HO TNCX on Linux (57)
|
||||
// Fix stack size in beginthread for MAC (58)
|
||||
// Add NETROM over VARA (60)
|
||||
// Add Disconnect Script (64)
|
||||
// Add node commands to set UZ7HO modem mode and freq (64)
|
||||
// Trap empty NODECALL or NETROMCALL(65)
|
||||
// Trap NODES messages with empty From Call (65)
|
||||
// Add RigControl for SDRConsole (66)
|
||||
// Fix FLRig crash (66)
|
||||
// Fix VARA disconnect handling (67)
|
||||
// Support 64 ports (69)
|
||||
// Fix Node commands for setting UZ7HO Modem (70)
|
||||
// Fix processing SABM on an existing session (71)
|
||||
// Extend KISS Node command to send more than one parameter byte (72)
|
||||
// Add G7TAJ's code to record activity of HF ports for stats display (72)
|
||||
// Add option to send KISS command to TNC on startup (73)
|
||||
// Fix Bug in DED Emulator Monitor code (74)
|
||||
// Add Filters to DED Monitor code (75)
|
||||
// Detect loss of DED application (76)
|
||||
// Fix connects to Application Alias with UZ7HO Driver (76)
|
||||
// Fix Interlock of ports on same UZ7HO modem. (76)
|
||||
// Add extended Ports command (77)
|
||||
// Fix crash in Linbpq when stdout is redirected to /dev/tty? and stdin ia redirected (78)
|
||||
// Fix Web Terminal (80)
|
||||
// Trap ENCRYPTION message from VARA (81)
|
||||
// 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
|
||||
|
||||
// Fix 64 bit compatibility problems in SCSTracker and UZ7HO drivers
|
||||
// Add Chat PACLEN config (5)
|
||||
// Fix NC to Application Call (6)
|
||||
// Fix INP3 L3RTT messages on Linux and correct RTT calculation (9)
|
||||
// Get Beacon config from config file on Windows (9)
|
||||
// fix processing DED TNC Emulator M command with space between M and params (10)
|
||||
// Fix sending UI frames on SCSPACTOR (11)
|
||||
// Dont allow ports that can't set digi'ed bit in callsigns to digipeat. (11)
|
||||
// Add SDRAngel rig control (11)
|
||||
// Add option to specify config and data directories on linbpq (12)
|
||||
// Allow zero resptime (send RR immediately) (13)
|
||||
// Make sure CMD bit is set on UI frames
|
||||
// Add setting Modem Flags in QtSM AGW mode
|
||||
// If FT847 om PTC Port send a "Cat On" command (17)
|
||||
// Fix some 63 port bugs in RigCOntrol (17)
|
||||
// Fix 63 port bug in Bridging (18)
|
||||
// Add FTDX10 Rigcontrol (19)
|
||||
// Fix 64 bit bug in displaying INP3 Messages (20)
|
||||
// Improve restart of WinRPR TNC on remote host (21)
|
||||
// Fix some Rigcontrol issues with empty timebands (22)
|
||||
// Fix 64 bit bug in processing INP3 Messages (22)
|
||||
// First pass at api (24)
|
||||
// Send OK in response to Rigcontrol CMD (24)
|
||||
// Disable CTS check in WriteComBlock (26)
|
||||
// Improvments to reporting to M0LTE Map (26)
|
||||
// IPGateway fix from github user isavitsky (27)
|
||||
// Fix possible crash in SCSPactor PTCPORT code (29)
|
||||
// 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)
|
||||
// Fix some issues with NetromX connects and Route Selection when running INP3 and NODES routing (9)
|
||||
// Fix connecting to a netrom node with c p node command (10)
|
||||
// Add validation of INP3 RTT messages and various INP3 fixes (12)
|
||||
// Change NetromX connect syntax to Service@Node to fix passing commands to local applications (12)
|
||||
|
||||
|
||||
#define CKernel
|
||||
|
||||
|
|
@ -1317,6 +1158,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
#include <fcntl.h>
|
||||
|
||||
#include "compatbits.h"
|
||||
|
||||
#include "AsmStrucs.h"
|
||||
|
||||
#include "SHELLAPI.H"
|
||||
|
|
@ -1395,9 +1237,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);
|
||||
|
|
@ -1408,9 +1247,6 @@ VOID ADIFWriteFreqList();
|
|||
void SaveAIS();
|
||||
void initAIS();
|
||||
void initADSB();
|
||||
int CloseAllSessions();
|
||||
int CloseAllLinks();
|
||||
void NETROMTCPResolve();
|
||||
|
||||
extern BOOL ADIFLogEnabled;
|
||||
|
||||
|
|
@ -1418,8 +1254,6 @@ int CloseOnError = 0;
|
|||
|
||||
char UIClassName[]="UIMAINWINDOW"; // the main window class name
|
||||
|
||||
char ClosingClassName[]="CLOSING"; // the main window class name
|
||||
|
||||
HWND UIhWnd;
|
||||
|
||||
extern char AUTOSAVE;
|
||||
|
|
@ -1450,9 +1284,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();
|
||||
|
|
@ -1472,7 +1303,6 @@ extern HWND hIPResWnd;
|
|||
extern BOOL IPMinimized;
|
||||
|
||||
extern int NODESINPROGRESS;
|
||||
extern int NODESToOnePort;
|
||||
extern VOID * CURRENTNODE;
|
||||
|
||||
|
||||
|
|
@ -1540,9 +1370,6 @@ extern char MAPCOMMENT[]; // Locator for Reporting - may be Maidenhead or LAT:L
|
|||
extern char LOC[7]; // Maidenhead Locator for Reporting
|
||||
extern char ReportDest[7];
|
||||
|
||||
extern UCHAR ConfigDirectory[260];
|
||||
|
||||
|
||||
VOID __cdecl Debugprintf(const char * format, ...);
|
||||
VOID __cdecl Consoleprintf(const char * format, ...);
|
||||
|
||||
|
|
@ -1571,7 +1398,6 @@ VOID APRSClose();
|
|||
VOID CloseTNCEmulator();
|
||||
|
||||
VOID Poll_AGW();
|
||||
void RHPPoll();
|
||||
BOOL AGWAPIInit();
|
||||
int AGWAPITerminate();
|
||||
|
||||
|
|
@ -1590,9 +1416,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;
|
||||
|
|
@ -1659,8 +1483,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;
|
||||
|
||||
|
|
@ -1716,8 +1538,6 @@ BOOL ReconfigFlag = FALSE;
|
|||
BOOL RigReconfigFlag = FALSE;
|
||||
BOOL APRSReconfigFlag = FALSE;
|
||||
BOOL CloseAllNeeded = FALSE;
|
||||
int CloseAllTimer = 0;
|
||||
|
||||
BOOL NeedWebMailRefresh = FALSE;
|
||||
|
||||
int AttachedPIDList[100] = {0};
|
||||
|
|
@ -1729,8 +1549,8 @@ char PopupText[30][100] = {""};
|
|||
// Next 3 should be uninitialised so they are local to each process
|
||||
|
||||
UCHAR MCOM;
|
||||
UCHAR MTX; // Top bit indicates use local time
|
||||
uint64_t MMASK;
|
||||
UCHAR MTX;
|
||||
ULONG MMASK;
|
||||
UCHAR MUIONLY;
|
||||
|
||||
UCHAR AuthorisedProgram; // Local Variable. Set if Program is on secure list
|
||||
|
|
@ -1944,8 +1764,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
|
||||
|
||||
|
|
@ -2183,7 +2003,7 @@ VOID TimerProcX()
|
|||
|
||||
GetWindowRect(FrameWnd, &FRect);
|
||||
|
||||
SaveWindowPos(70); // Rigcontrol
|
||||
SaveWindowPos(40); // Rigcontrol
|
||||
|
||||
for (i=0;i<NUMBEROFPORTS;i++)
|
||||
{
|
||||
|
|
@ -2222,8 +2042,6 @@ VOID TimerProcX()
|
|||
|
||||
Start();
|
||||
|
||||
NETROMTCPResolve();
|
||||
|
||||
INITIALISEPORTS(); // Restart Ports
|
||||
|
||||
SetApplPorts();
|
||||
|
|
@ -2301,7 +2119,7 @@ VOID TimerProcX()
|
|||
if(TimerInst == GetCurrentProcessId())
|
||||
{
|
||||
RigReconfigFlag = FALSE;
|
||||
CloseDriverWindow(70);
|
||||
CloseDriverWindow(40);
|
||||
Rig_Close();
|
||||
Sleep(6000); // Allow any CATPTT, HAMLIB and FLRIG threads to close
|
||||
RigActive = Rig_Init();
|
||||
|
|
@ -2368,7 +2186,6 @@ VOID TimerProcX()
|
|||
Poll_AGW();
|
||||
|
||||
DRATSPoll();
|
||||
RHPPoll();
|
||||
|
||||
CheckGuardZone();
|
||||
|
||||
|
|
@ -2401,52 +2218,6 @@ VOID TimerProcX()
|
|||
|
||||
CheckGuardZone();
|
||||
|
||||
if (CloseAllTimer == 50) // First entry
|
||||
{
|
||||
if (CloseAllSessions() == 0)
|
||||
{
|
||||
if (CloseAllLinks() == 0) // No sessions closed so close links now
|
||||
CloseAllTimer = 1; // 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;
|
||||
}
|
||||
|
||||
|
|
@ -2481,9 +2252,6 @@ FirstInit()
|
|||
GetModuleFileNameExPtr = (FARPROCX)GetProcAddress(ExtDriver,"GetModuleFileNameExA");
|
||||
EnumProcessesPtr = (FARPROCX)GetProcAddress(ExtDriver,"EnumProcesses");
|
||||
}
|
||||
|
||||
srand(time(NULL));
|
||||
|
||||
INITIALISEPORTS();
|
||||
|
||||
OpenReportingSockets();
|
||||
|
|
@ -2638,7 +2406,6 @@ Check_Timer()
|
|||
|
||||
WSAStartup(MAKEWORD(2, 0), &WsaData);
|
||||
|
||||
|
||||
// Load Psapi.dll if possible
|
||||
|
||||
ExtDriver = LoadLibrary("Psapi.dll");
|
||||
|
|
@ -2653,8 +2420,6 @@ Check_Timer()
|
|||
|
||||
Start();
|
||||
|
||||
NETROMTCPResolve();
|
||||
|
||||
INITIALISEPORTS();
|
||||
|
||||
OpenReportingSockets();
|
||||
|
|
@ -2783,22 +2548,6 @@ BOOL APIENTRY DllMain(HANDLE hInst, DWORD ul_reason_being_called, LPVOID lpReser
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (sizeof(struct KISSINFO) > PORTENTRYLEN + 200) // 200 bytes of Hardwaredata
|
||||
{
|
||||
// Catastrophic - Refuse to load
|
||||
|
||||
MessageBox(NULL,"BPQ32 Too much KISS data - Recompile","BPQ32", MB_OK);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sizeof(struct _EXTPORTDATA) > PORTENTRYLEN + 200) // 200 bytes of Hardwaredata
|
||||
{
|
||||
// Catastrophic - Refuse to load
|
||||
|
||||
MessageBox(NULL,"BPQ32 Too much _EXTPORTDATA data - Recompile","BPQ32", MB_OK);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (sizeof(LINKTABLE) != LINK_TABLE_LEN)
|
||||
{
|
||||
// Catastrophic - Refuse to load
|
||||
|
|
@ -2978,8 +2727,6 @@ BOOL APIENTRY DllMain(HANDLE hInst, DWORD ul_reason_being_called, LPVOID lpReser
|
|||
}
|
||||
else
|
||||
{
|
||||
NETROMTCPResolve();
|
||||
|
||||
SetApplPorts();
|
||||
|
||||
GetUIConfig();
|
||||
|
|
@ -3067,7 +2814,7 @@ SkipInit:
|
|||
|
||||
MCOM=1;
|
||||
MTX=1;
|
||||
MMASK=0xffffffffffffffff;
|
||||
MMASK=0xffffffff;
|
||||
|
||||
// if (StartMinimized)
|
||||
// if (MinimizetoTray)
|
||||
|
|
@ -3208,7 +2955,7 @@ SkipInit:
|
|||
|
||||
if (AttachedProcesses < 2)
|
||||
{
|
||||
if (AUTOSAVE)
|
||||
if (AUTOSAVE == 1)
|
||||
SaveNodes();
|
||||
if (AUTOSAVEMH)
|
||||
SaveMH();
|
||||
|
|
@ -3468,8 +3215,6 @@ if (_winver < 0x0600)
|
|||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
strcpy(ConfigDirectory, BPQDirectory);
|
||||
|
||||
if (LogDirectory[0] == 0)
|
||||
strcpy(LogDirectory, BPQDirectory);
|
||||
|
||||
|
|
@ -4104,9 +3849,6 @@ VOID * InitializeExtDriver(PEXTPORTDATA PORTVEC)
|
|||
if (strstr(Value, "FREEDATA"))
|
||||
return FreeDataExtInit;
|
||||
|
||||
if (strstr(Value, "6PACK"))
|
||||
return SIXPACKExtInit;
|
||||
|
||||
ExtDriver = LoadLibrary(Value);
|
||||
|
||||
if (ExtDriver == NULL)
|
||||
|
|
@ -5976,106 +5718,13 @@ DllExport VOID APIENTRY CreateNewTrayIcon()
|
|||
trayMenu = NULL;
|
||||
}
|
||||
|
||||
void hookNodeClosing(char * Reason);
|
||||
|
||||
BOOL CALLBACK ClosaAllProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int wmId, wmEvent;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
case WM_CTLCOLORDLG:
|
||||
return (LONG)bgBrush;
|
||||
|
||||
case WM_CTLCOLORSTATIC:
|
||||
{
|
||||
HDC hdcStatic = (HDC)wParam;
|
||||
SetTextColor(hdcStatic, RGB(0, 0, 0));
|
||||
SetBkMode(hdcStatic, TRANSPARENT);
|
||||
|
||||
return (LONG)bgBrush;
|
||||
}
|
||||
|
||||
case WM_COMMAND:
|
||||
|
||||
return 0;
|
||||
|
||||
case WM_SYSCOMMAND:
|
||||
|
||||
wmId = LOWORD(wParam); // Remember, these are...
|
||||
wmEvent = HIWORD(wParam); // ...different for Win32!
|
||||
|
||||
switch (wmId)
|
||||
{
|
||||
case SC_RESTORE:
|
||||
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
|
||||
case SC_MINIMIZE:
|
||||
|
||||
if (MinimizetoTray)
|
||||
return ShowWindow(hWnd, SW_HIDE);
|
||||
else
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
}
|
||||
|
||||
case WM_CLOSE:
|
||||
return(DestroyWindow(hWnd));
|
||||
|
||||
default:
|
||||
return (DefWindowProc(hWnd, message, wParam, lParam));
|
||||
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
HWND hwndClosing = NULL; // Window handle of dialog box
|
||||
|
||||
|
||||
DllExport VOID APIENTRY CloseAllPrograms()
|
||||
{
|
||||
WNDCLASS wc;
|
||||
CLOSING = TRUE;
|
||||
// HANDLE hProc;
|
||||
|
||||
// Tell BG to shut when all links are gone or after 5 secs
|
||||
// Close all attached BPQ32 programs
|
||||
|
||||
CloseAllTimer = 50;
|
||||
|
||||
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wc.lpfnWndProc = ClosaAllProc;
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = DLGWINDOWEXTRA;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIcon( hInstance, MAKEINTRESOURCE(BPQICON) );
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = bgBrush;
|
||||
|
||||
wc.lpszMenuName = NULL;
|
||||
wc.lpszClassName = ClosingClassName;
|
||||
|
||||
RegisterClass(&wc);
|
||||
|
||||
hwndClosing = CreateDialog(hInstance, ClosingClassName, NULL, (DLGPROC)ClosaAllProc);
|
||||
ShowWindow(hwndClosing, SW_SHOW);
|
||||
}
|
||||
|
||||
VOID RealCloseAllPrograms()
|
||||
{
|
||||
hookNodeClosing("Shutdown");
|
||||
Sleep(500);
|
||||
|
||||
Closing = 1;
|
||||
Closing = TRUE;
|
||||
|
||||
ShowWindow(FrameWnd, SW_RESTORE);
|
||||
|
||||
|
|
@ -6323,14 +5972,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;
|
||||
|
|
@ -6356,20 +6004,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;
|
||||
|
|
@ -6752,7 +6399,7 @@ VOID SaveBPQ32Windows()
|
|||
PORTVEC=(PEXTPORTDATA)PORTVEC->PORTCONTROL.PORTPOINTER;
|
||||
}
|
||||
|
||||
SaveWindowPos(70); // Rigcontrol
|
||||
SaveWindowPos(40); // Rigcontrol
|
||||
|
||||
|
||||
if (hIPResWnd)
|
||||
|
|
@ -6782,7 +6429,6 @@ VOID GetParam(char * input, char * key, char * value)
|
|||
char * ptr1, * ptr2;
|
||||
char c;
|
||||
|
||||
|
||||
if (ptr)
|
||||
{
|
||||
ptr2 = strchr(ptr, '&');
|
||||
|
|
@ -6861,14 +6507,6 @@ 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
|
||||
|
|
@ -6957,3 +6595,5 @@ char * stristr (char *ch1, char *ch2)
|
|||
return chRet;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@
|
|||
#define CHATTERM 1179
|
||||
#define IDM_CLOSEWINDOW 1180
|
||||
#define MONITORAPRS 1181
|
||||
#define MONLOCALTIME 1182
|
||||
#define MON_UI_ONLY 40006
|
||||
#define StopALLMon 40007
|
||||
|
||||
|
|
|
|||
BIN
CBPQ32.suo
Normal file
BIN
CBPQ32.suo
Normal file
Binary file not shown.
601
CBPQ32.vcproj
Normal file
601
CBPQ32.vcproj
Normal file
|
|
@ -0,0 +1,601 @@
|
|||
<?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="C:\Dev\Msdev2005\$(SolutionName)\$(ProjectName)\$(ConfigurationName)"
|
||||
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"
|
||||
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=""C:\Program Files\7-Zip\7z.exe" a C:\DevProgs\BPQ32\bpq32.zip C:\DevProgs\BPQ32\bpq32.dll && myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll && 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 "MDIKERNEL""
|
||||
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 DbgHelp.lib comctl32.lib setupapi.lib ..\lib\libconfig.lib miniupnpc.lib zlibstat.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=""C:\Program Files\7-Zip\7z.exe" a C:\DevProgs\BPQ32\bpq32.zip C:\DevProgs\BPQ32\bpq32.dll && myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll && 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="..\CommonSource\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"
|
||||
>
|
||||
</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="..\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=".\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>
|
||||
65
CBPQ32.vcproj.DESKTOP-TGEL8RC.John.user
Normal file
65
CBPQ32.vcproj.DESKTOP-TGEL8RC.John.user
Normal 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="DESKTOP-TGEL8RC"
|
||||
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="DESKTOP-TGEL8RC"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
65
CBPQ32.vcproj.HPLAPTOP.johnw.user
Normal file
65
CBPQ32.vcproj.HPLAPTOP.johnw.user
Normal 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="HPLAPTOP"
|
||||
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="HPLAPTOP"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
65
CBPQ32.vcproj.SKIGACER.johnw.user
Normal file
65
CBPQ32.vcproj.SKIGACER.johnw.user
Normal 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
232
CBPQ32.vcxproj
Normal 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 && myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll && 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 && myxcopy /y c:\DevProgs\BPQ32\bpq32.dll c:\windows\SysWOW64\bpq32.dll && 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
228
CBPQ32.vcxproj.filters
Normal 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>
|
||||
|
|
@ -12,6 +12,10 @@
|
|||
|
||||
#include "asmstrucs.h"
|
||||
|
||||
#ifndef WIN32
|
||||
__asm__(".symver fcntl,fcntl@GLIBC_2.4");
|
||||
#endif
|
||||
|
||||
BOOL CheckExcludeList(UCHAR * Call);
|
||||
|
||||
Dll int ConvFromAX25(unsigned char * incall,unsigned char * outcall);
|
||||
|
|
@ -26,13 +30,8 @@ void * InitializeExtDriver(PEXTPORTDATA PORTVEC);
|
|||
|
||||
VOID PutLengthinBuffer(PDATAMESSAGE buff, USHORT datalen); // Needed for arm5 portability
|
||||
int GetLengthfromBuffer(PDATAMESSAGE buff);
|
||||
int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BOOL APRS, BOOL MCTL);
|
||||
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 +66,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 +94,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 +105,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 +155,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 +201,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 +253,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)
|
||||
|
|
@ -293,7 +293,7 @@ extern int FULL_CTEXT; // CTEXT ON ALL CONNECTS IF NZ
|
|||
|
||||
// Although externally streams are numbered 1 to 64, internally offsets are 0 - 63
|
||||
|
||||
extern BPQVECSTRUC DUMMYVEC; // Needed to force correct order of following
|
||||
extern BPQVECSTRUC DUMMY; // Needed to force correct order of following
|
||||
|
||||
extern BPQVECSTRUC BPQHOSTVECTOR[BPQHOSTSTREAMS + 5];
|
||||
|
||||
|
|
@ -359,7 +359,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];
|
||||
|
|
@ -372,13 +372,13 @@ extern int MINBUFFCOUNT;
|
|||
extern UCHAR BPQDirectory[];
|
||||
extern UCHAR BPQProgramDirectory[];
|
||||
|
||||
extern UCHAR WINMOR[];
|
||||
extern UCHAR PACTORCALL[];
|
||||
extern char WINMOR[];
|
||||
extern char PACTORCALL[];
|
||||
|
||||
extern UCHAR MCOM;
|
||||
extern UCHAR MUIONLY;
|
||||
extern UCHAR MTX;
|
||||
extern uint64_t MMASK;
|
||||
extern unsigned long long MMASK;
|
||||
|
||||
extern UCHAR NODECALL[]; // NODES in ax.25
|
||||
|
||||
|
|
@ -398,50 +398,12 @@ extern int REALTIMETICKS;
|
|||
|
||||
extern time_t CurrentSecs;
|
||||
extern time_t lastSlowSecs;
|
||||
extern time_t lastSaveSecs;
|
||||
|
||||
|
||||
// SNMP Variables
|
||||
|
||||
extern int InOctets[64];
|
||||
extern int OutOctets[64];
|
||||
extern int InOctets[32];
|
||||
extern int OutOctets[32];
|
||||
|
||||
extern BOOL CloseAllNeeded;
|
||||
extern int CloseOnError;
|
||||
|
||||
extern char * PortConfig[70];
|
||||
extern struct TNCINFO * TNCInfo[71]; // Records are Malloc'd
|
||||
|
||||
#define MaxBPQPortNo 63 // Port 64 reserved for BBS Mon
|
||||
#define MAXBPQPORTS 63
|
||||
|
||||
// IP, APRS use port ocnfig slots above the real port range
|
||||
|
||||
#define IPConfigSlot MaxBPQPortNo + 1
|
||||
#define PortMapConfigSlot MaxBPQPortNo + 2
|
||||
#define APRSConfigSlot MaxBPQPortNo + 3
|
||||
|
||||
|
||||
extern char * UIUIDigi[MaxBPQPortNo + 1];
|
||||
extern char UIUIDEST[MaxBPQPortNo + 1][11]; // Dest for Beacons
|
||||
extern UCHAR FN[MaxBPQPortNo + 1][256]; // Filename
|
||||
extern int Interval[MaxBPQPortNo + 1]; // Beacon Interval (Mins)
|
||||
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);
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ extern char OurNode[10];
|
|||
|
||||
extern char PassError[];
|
||||
extern char BusyError[];
|
||||
extern int chatPaclen;
|
||||
|
||||
extern char NodeTail[];
|
||||
extern BOOL APRSApplConnected;
|
||||
|
|
@ -67,7 +66,6 @@ extern int MaxChatStreams;
|
|||
extern char Position[81];
|
||||
extern char PopupText[251];
|
||||
extern int PopupMode;
|
||||
extern int reportChatEvents;
|
||||
|
||||
#include "httpconnectioninfo.h"
|
||||
|
||||
|
|
@ -319,12 +317,6 @@ VOID SaveChatInfo(struct HTTPConnectionInfo * Session, char * MsgPtr, char * Rep
|
|||
ChatApplNum = atoi(Temp);
|
||||
GetParam(input, "Streams=", Temp);
|
||||
MaxChatStreams = atoi(Temp);
|
||||
GetParam(input, "Paclen=", Temp);
|
||||
chatPaclen = atoi(Temp);
|
||||
if (chatPaclen < 60)
|
||||
chatPaclen = 60;
|
||||
|
||||
GetCheckBox(input, "Events=", &reportChatEvents);
|
||||
|
||||
GetParam(input, "nodes=", Nodes);
|
||||
|
||||
|
|
@ -511,9 +503,7 @@ scan:
|
|||
|
||||
Len = sprintf(Reply, ChatConfigTemplate,
|
||||
OurNode, Key, Key, Key,
|
||||
ChatApplNum, MaxChatStreams,
|
||||
(reportChatEvents) ? CHKD : UNC,
|
||||
Nodes, chatPaclen, Position,
|
||||
ChatApplNum, MaxChatStreams, Nodes, Position,
|
||||
(PopupMode) ? UNC : CHKD,
|
||||
(PopupMode) ? CHKD : UNC, Text, ptr2);
|
||||
|
||||
|
|
@ -530,9 +520,9 @@ VOID SendChatStatusPage(char * Reply, int * ReplyLen, char * Key)
|
|||
char * Topic;
|
||||
LINK *link;
|
||||
|
||||
char Streams[65536];
|
||||
char Users[65536];
|
||||
char Links[65536];
|
||||
char Streams[8192];
|
||||
char Users[8192];
|
||||
char Links[8192];
|
||||
|
||||
ChatCIRCUIT * conn;
|
||||
int i = 0, n;
|
||||
|
|
@ -590,7 +580,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> </td><td> </td><td> </td><td> </td></tr>", i, i);
|
||||
else
|
||||
|
|
@ -600,7 +590,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,
|
||||
|
|
|
|||
|
|
@ -984,29 +984,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;
|
||||
}
|
||||
}
|
||||
|
||||
return CallWindowProc(Cinfo->wpOrigInputProc, hwnd, uMsg, wParam, lParam);
|
||||
|
|
|
|||
16
ChatUsers.txt
Normal file
16
ChatUsers.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
IZ4FVW 0 Giulio Cesena ITA JN64ce, 1k2 bps radio link¬55¬0
|
||||
N5UXT 0 Angelo th New Orleans, La¬99¬0
|
||||
N0NJY 0 Rick Oak Island, NC¬76¬0
|
||||
KB8UVN 0 Matt Johnstown, Ohio¬95¬0
|
||||
WA3WLH 0 Rich East Greenville, PA¬55¬0
|
||||
EI2GYB 0 Steve_353 Donegal, Ireland (IO65JG)¬55¬0
|
||||
PE1RRR 0 Red Network Hub Monitor¬91¬0
|
||||
PE1NNZ 0 Guido nr Eindhoven¬91¬0
|
||||
G7TAJ 0 Steve_44 E.Sussex UK,JO00FU¬91¬0
|
||||
N3HYM 0 Ray Frederick, Md¬97¬0
|
||||
VE3CGH 0 Ted ?_qth¬71¬0
|
||||
WE1H 0 Matt Merrimack, NH¬26¬0
|
||||
W9IKU 0 Greg Portage, Wisconsin USA¬55¬0
|
||||
KA3VSP 0 Brian New Castle, DE¬91¬0
|
||||
G8BPQ 0 John Nottingham¬26¬0
|
||||
GM8BPQ 40 John ?_qth¬14¬0
|
||||
|
|
@ -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)
|
||||
|
|
@ -350,8 +346,6 @@ char * ReadInfoFile(char * File)
|
|||
|
||||
// First remove cr from crlf
|
||||
|
||||
ptr1 = MsgBytes;
|
||||
|
||||
while(ptr2 = strstr(ptr1, "\r\n"))
|
||||
{
|
||||
memmove(ptr2, ptr2 + 1, strlen(ptr2));
|
||||
|
|
|
|||
11
ChatUtils.c
11
ChatUtils.c
|
|
@ -16,7 +16,6 @@ extern int NumberofChatStreams;
|
|||
|
||||
extern char ChatConfigName[MAX_PATH];
|
||||
extern char Session[20];
|
||||
extern int chatPaclen;
|
||||
|
||||
extern struct SEM ChatSemaphore;
|
||||
extern struct SEM AllocSemaphore;
|
||||
|
|
@ -68,7 +67,7 @@ int Connected(int Stream)
|
|||
|
||||
if (conn->rtcflags == p_linkini)
|
||||
{
|
||||
conn->paclen = chatPaclen;
|
||||
conn->paclen = 236;
|
||||
|
||||
// Run first line of connect script
|
||||
|
||||
|
|
@ -87,10 +86,8 @@ int Connected(int Stream)
|
|||
conn->Secure_Session = GetConnectionInfo(Stream, callsign,
|
||||
&port, &conn->SessType, &paclen, &maxframe, &l4window);
|
||||
|
||||
if (paclen > chatPaclen || paclen == 0)
|
||||
paclen = chatPaclen;
|
||||
|
||||
conn->paclen = paclen;
|
||||
|
||||
strlop(callsign, ' '); // Remove trailing spaces
|
||||
|
||||
memcpy(conn->Callsign, callsign, 10);
|
||||
|
|
@ -531,8 +528,8 @@ VOID FreeList(char ** Hddr)
|
|||
#include "libconfig.h"
|
||||
|
||||
|
||||
static config_t cfg;
|
||||
static config_setting_t * group;
|
||||
config_t cfg;
|
||||
config_setting_t * group;
|
||||
|
||||
extern char ChatWelcomeMsg[1000];
|
||||
|
||||
|
|
|
|||
5495
Cmd-HPLaptop.c
Normal file
5495
Cmd-HPLaptop.c
Normal file
File diff suppressed because it is too large
Load diff
1160
CommonCode.c
1160
CommonCode.c
File diff suppressed because it is too large
Load diff
164
ConfigDirewolf.vcxproj
Normal file
164
ConfigDirewolf.vcxproj
Normal 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
164
ConfigWinRPR.vcxproj
Normal 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>
|
||||
4
ConfigWinRPR.vcxproj.user
Normal file
4
ConfigWinRPR.vcxproj.user
Normal 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>
|
||||
2
DOSAPI.c
2
DOSAPI.c
|
|
@ -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[];
|
||||
|
|
|
|||
7
DRATS.c
7
DRATS.c
|
|
@ -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)
|
||||
|
|
@ -578,7 +578,6 @@ int doinflate(unsigned char * source, unsigned char * dest, int Len, int destlen
|
|||
strm.next_in = Z_NULL;
|
||||
|
||||
ret = inflateInit(&strm);
|
||||
|
||||
if (ret != Z_OK)
|
||||
return ret;
|
||||
|
||||
|
|
|
|||
210
FBBRoutines.c
210
FBBRoutines.c
|
|
@ -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
|
||||
|
|
@ -602,7 +472,7 @@ ok:
|
|||
|
||||
// Check Filters
|
||||
|
||||
if (CheckRejFilters(FBBHeader->From, FBBHeader->To, FBBHeader->ATBBS, FBBHeader->BID, FBBHeader->MsgType, FBBHeader->Size))
|
||||
if (CheckRejFilters(FBBHeader->From, FBBHeader->To, FBBHeader->ATBBS, FBBHeader->BID, FBBHeader->MsgType))
|
||||
{
|
||||
memset(FBBHeader, 0, sizeof(struct FBBHeaderLine)); // Clear header
|
||||
conn->FBBReplyChars[conn->FBBReplyIndex++] = '-';
|
||||
|
|
@ -734,7 +604,7 @@ ok:
|
|||
char * To = strtok_s(NULL, seps, &Context);
|
||||
char * Type = strtok_s(NULL, seps, &Context);
|
||||
|
||||
if (From && To && ATBBS && Type && CheckRejFilters(From, To, ATBBS, NULL, *Type, FBBHeader->Size))
|
||||
if (From && To && ATBBS && Type && CheckRejFilters(From, To, ATBBS, NULL, *Type))
|
||||
{
|
||||
memset(FBBHeader, 0, sizeof(struct FBBHeaderLine)); // Clear header
|
||||
conn->FBBReplyChars[conn->FBBReplyIndex++] = '-';
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -1381,7 +1244,7 @@ VOID SendCompressed(CIRCUIT * conn, struct MsgInfo * FwdMsg)
|
|||
|
||||
DataOffset = (int)(Outputptr - Output); // Used if restarting
|
||||
|
||||
memcpy(&temp, &FwdMsg->datereceived, sizeof(time_t));
|
||||
memcpy(&temp, &FwdMsg->datereceived, 4);
|
||||
tm = gmtime(&temp);
|
||||
|
||||
sprintf(Rline, "R:%02d%02d%02d/%02d%02dZ %d@%s.%s %s\r\n",
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
107
FLDigi.c
107
FLDigi.c
|
|
@ -23,9 +23,9 @@ 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)();
|
||||
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
|
||||
|
||||
|
|
@ -68,15 +62,17 @@ void hookL4SessionDeleted(struct TNCINFO * TNC, void * STREAM);
|
|||
extern int (WINAPI FAR *GetModuleFileNameExPtr)();
|
||||
|
||||
//int ResetExtDriver(int num);
|
||||
;
|
||||
extern char * PortConfig[33];
|
||||
int SemHeldByAPI;
|
||||
|
||||
void ConnecttoFLDigiThread(void * portptr);
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
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 +95,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,8 +103,11 @@ 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 MAXBPQPORTS 32
|
||||
#define MAXMPSKPORTS 16
|
||||
|
||||
//LOGFONT LFTTYFONT ;
|
||||
|
|
@ -202,7 +200,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
// Stop Scanning
|
||||
|
||||
sprintf(Cmd, "%d SCANSTOP", TNC->Port);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Cmd);
|
||||
Rig_Command(-1, Cmd);
|
||||
|
||||
sprintf(TNC->WEB_TNCSTATE, "In Use by %s", TNC->Streams[0].MyCall);
|
||||
SetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
|
||||
|
|
@ -223,14 +221,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
// 100 mS Timer.
|
||||
|
||||
// G7TAJ's code to record activity for stats display
|
||||
|
||||
if ( TNC->BusyFlags && CDBusy )
|
||||
TNC->PortRecord->PORTCONTROL.ACTIVE += 2;
|
||||
|
||||
if ( TNC->PTTState )
|
||||
TNC->PortRecord->PORTCONTROL.SENDING += 2;
|
||||
|
||||
// See if waiting for busy to clear before sending a connect
|
||||
|
||||
if (TNC->BusyDelay)
|
||||
|
|
@ -544,13 +534,9 @@ 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]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &buff->L2DATA[0]))
|
||||
{
|
||||
}
|
||||
else
|
||||
|
|
@ -601,7 +587,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 +811,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));
|
||||
|
|
@ -1139,7 +1125,7 @@ static int WebProc(struct TNCINFO * TNC, char * Buff, BOOL LOCAL)
|
|||
return Len;
|
||||
}
|
||||
|
||||
VOID FLDIGISuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC)
|
||||
VOID FLDIGISuspendPort(struct TNCINFO * TNC)
|
||||
{
|
||||
TNC->FLInfo->CONOK = FALSE;
|
||||
}
|
||||
|
|
@ -1190,6 +1176,7 @@ VOID * FLDigiExtInit(EXTPORTDATA * PortEntry)
|
|||
}
|
||||
|
||||
TNC->Port = port;
|
||||
|
||||
TNC->PortRecord = PortEntry;
|
||||
|
||||
if (PortEntry->PORTCONTROL.PORTCALL[0] == 0)
|
||||
|
|
@ -1220,7 +1207,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 +1477,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 +1632,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 +2526,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 +2575,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 +2685,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 +2946,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 +3024,7 @@ SendKReply:
|
|||
|
||||
buffptr->Len = Len;
|
||||
memcpy(buffptr->Data, &Input[1], Len);
|
||||
STREAM->bytesRXed += Len;
|
||||
STREAM->BytesRXed += Len;
|
||||
|
||||
UpdateStatsLine(TNC, STREAM);
|
||||
|
||||
|
|
@ -3139,7 +3141,7 @@ VOID SendARQData(struct TNCINFO * TNC, PMSGWITHLEN Buffer)
|
|||
|
||||
ARQ->TXHOLDQ[ARQ->TXSeq] = Buffer;
|
||||
|
||||
STREAM->bytesTXed += Origlen;
|
||||
STREAM->BytesTXed += Origlen;
|
||||
|
||||
UpdateStatsLine(TNC, STREAM);
|
||||
|
||||
|
|
@ -3205,14 +3207,14 @@ 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
|
||||
|
||||
sprintf(TXMsg, "%d SCANSTART 15", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, TXMsg);
|
||||
Rig_Command(-1, TXMsg);
|
||||
|
||||
ReleaseOtherPorts(TNC);
|
||||
|
||||
|
|
@ -3903,27 +3905,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;
|
||||
|
|
|
|||
|
|
@ -1,60 +0,0 @@
|
|||
// FormatHTML.cpp : Defines the entry point for the console application.
|
||||
//
|
||||
#include <stdio.h>
|
||||
|
||||
int main () {
|
||||
FILE *fp, *fp2;
|
||||
char str[256];
|
||||
char newstr[256];
|
||||
char * ptr, * inptr;
|
||||
|
||||
/* opening file for reading */
|
||||
fp = fopen("D:/AtomProject/test.html" , "r");
|
||||
fp2 = fopen("D:/AtomProject/test.html.c" , "w");
|
||||
|
||||
if(fp == NULL) {
|
||||
perror("Error opening file");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
while(fgets (str, 256, fp) != NULL)
|
||||
{
|
||||
// Replace any " with \" and add " on front and \r\n" on end
|
||||
|
||||
char c;
|
||||
ptr = newstr;
|
||||
inptr = str;
|
||||
|
||||
c = *(inptr++);
|
||||
|
||||
*(ptr++) = '"';
|
||||
|
||||
while (c && c != 10)
|
||||
{
|
||||
if (c == '"')
|
||||
*(ptr++) = '\\';
|
||||
|
||||
*(ptr++) = c;
|
||||
|
||||
c = *(inptr++);
|
||||
}
|
||||
|
||||
|
||||
*(ptr++) = '\\';
|
||||
*(ptr++) = 'r';
|
||||
*(ptr++) = '\\';
|
||||
*(ptr++) = 'n';
|
||||
*(ptr++) = '"';
|
||||
*(ptr++) = 10;
|
||||
*(ptr++) = 0;
|
||||
|
||||
puts(newstr);
|
||||
fputs(newstr, fp2);
|
||||
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
fclose(fp2);
|
||||
|
||||
return(0);
|
||||
}
|
||||
4124
FreeDATA-DESKTOP-TGEL8RC.c
Normal file
4124
FreeDATA-DESKTOP-TGEL8RC.c
Normal file
File diff suppressed because it is too large
Load diff
4654
FreeDATA-HPLaptop-2.c
Normal file
4654
FreeDATA-HPLaptop-2.c
Normal file
File diff suppressed because it is too large
Load diff
3490
FreeDATA-HPLaptop.c
Normal file
3490
FreeDATA-HPLaptop.c
Normal file
File diff suppressed because it is too large
Load diff
183
FreeDATA.c
183
FreeDATA.c
|
|
@ -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,12 +43,7 @@ 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)();
|
||||
int (WINAPI FAR *GetModuleFileNameExPtr)();
|
||||
extern int (WINAPI FAR *EnumProcessesPtr)();
|
||||
static int Socket_Data(int sock, int error, int eventcode);
|
||||
VOID MoveWindows(struct TNCINFO * TNC);
|
||||
|
|
@ -78,7 +73,7 @@ int FreeDataDisconnect(struct TNCINFO * TNC);
|
|||
int FreeGetData(struct TNCINFO * TNC);
|
||||
static void SendBeacon(struct TNCINFO * TNC, int Interval);
|
||||
void buildParamString(struct TNCINFO * TNC, char * line);
|
||||
VOID FreeDataSuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC);
|
||||
VOID FreeDataSuspendPort(struct TNCINFO * TNC);
|
||||
VOID FreeDataReleasePort(struct TNCINFO * TNC);
|
||||
|
||||
|
||||
|
|
@ -93,11 +88,13 @@ static int RigControlRow = 205;
|
|||
#include <commctrl.h>
|
||||
#endif
|
||||
|
||||
|
||||
extern char * PortConfig[33];
|
||||
extern int SemHeldByAPI;
|
||||
|
||||
static RECT Rect;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
static int ProcessLine(char * buf, int Port);
|
||||
|
||||
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
|
||||
|
|
@ -352,6 +349,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);
|
||||
|
|
@ -359,6 +391,8 @@ VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
|
|||
|
||||
|
||||
|
||||
#define MAXBPQPORTS 32
|
||||
|
||||
static time_t ltime;
|
||||
|
||||
|
||||
|
|
@ -422,14 +456,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
// 100 mS Timer. May now be needed, as Poll can be called more frequently in some circumstances
|
||||
|
||||
// G7TAJ's code to record activity for stats display
|
||||
|
||||
if ( TNC->BusyFlags && CDBusy )
|
||||
TNC->PortRecord->PORTCONTROL.ACTIVE += 2;
|
||||
|
||||
if ( TNC->PTTState )
|
||||
TNC->PortRecord->PORTCONTROL.SENDING += 2;
|
||||
|
||||
SendPoll(TNC);
|
||||
|
||||
// Check for buffered data to send
|
||||
|
|
@ -457,11 +483,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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -582,7 +603,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
// Stop Listening, and set MYCALL to user's call
|
||||
|
||||
FreeDataSuspendPort(TNC, TNC);
|
||||
FreeDataSuspendPort(TNC);
|
||||
FreeDataChangeMYC(TNC, TNC->Streams[0].MyCall);
|
||||
TNC->SessionTimeLimit = TNC->DefaultSessionTimeLimit; // Reset Limit
|
||||
|
||||
|
|
@ -593,7 +614,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
}
|
||||
|
||||
if (STREAM->Attached)
|
||||
|
|
@ -661,7 +682,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,12 +772,9 @@ 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]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &buff->L2DATA[0]))
|
||||
{
|
||||
}
|
||||
else
|
||||
|
|
@ -845,7 +864,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 +968,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);
|
||||
|
|
@ -1034,7 +1053,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
if (TNC->ConnectPending == 0 && TNC->PTTState == 0)
|
||||
{
|
||||
FreeDataSuspendPort(TNC, TNC);
|
||||
FreeDataSuspendPort(TNC);
|
||||
TNC->GavePermission = TRUE;
|
||||
return 0; // OK to Change
|
||||
}
|
||||
|
|
@ -1076,14 +1095,14 @@ VOID FreeDataReleaseTNC(struct TNCINFO * TNC)
|
|||
|
||||
sprintf(TXMsg, "%d SCANSTART 15", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, TXMsg);
|
||||
Rig_Command(-1, TXMsg);
|
||||
|
||||
FreeDataReleasePort(TNC);
|
||||
ReleaseOtherPorts(TNC);
|
||||
|
||||
}
|
||||
|
||||
VOID FreeDataSuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC)
|
||||
VOID FreeDataSuspendPort(struct TNCINFO * TNC)
|
||||
{
|
||||
// char CMD[] = "{\"type\" : \"set\", \"command\" : \"listen\", \"state\": \"False\"}\n";
|
||||
// send(TNC->TCPDataSock, CMD, strlen(CMD), 0);
|
||||
|
|
@ -1406,14 +1425,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 +1878,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 +1947,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 +2016,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 +2059,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 +2068,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 +2252,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 +2323,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 +2423,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 +2446,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 +2486,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 +2501,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 +2716,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 +2724,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 +2808,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 +2816,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 +3155,22 @@ void ProcessTNCJSON(struct TNCINFO * TNC, char * Msg, int Len)
|
|||
|
||||
if (STREAM->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->Connected = FALSE; // Back to Command Mode
|
||||
STREAM->ReportDISC = TRUE; // Tell Node
|
||||
|
|
@ -3165,7 +3211,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 +3348,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 +3719,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 +3731,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 +4211,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");
|
||||
|
|
|
|||
4631
FreeDATA.c.bak
Normal file
4631
FreeDATA.c.bak
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -4,14 +4,13 @@ char VersionStringWithBuild[50]="";
|
|||
int Ver[4] = {Vers};
|
||||
char TextVerstring[50] = "";
|
||||
|
||||
void GetVersionInfo(char * File)
|
||||
VOID GetVersionInfo(TCHAR * File)
|
||||
{
|
||||
#ifndef LINBPQ
|
||||
|
||||
char isDebug[40]="";
|
||||
|
||||
#ifdef SPECIALVERSION
|
||||
strcat(isDebug, " ");
|
||||
strcat(isDebug, SPECIALVERSION);
|
||||
#endif
|
||||
#ifdef _DEBUG
|
||||
|
|
|
|||
85
HALDriver.c
85
HALDriver.c
|
|
@ -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"
|
||||
|
|
@ -47,6 +47,8 @@ static char ClassName[]="HALSTATUS";
|
|||
static char WindowTitle[] = "HAL";
|
||||
static int RigControlRow = 185;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
#define SOH 0x01 // CONTROL CODES
|
||||
#define ETB 0x17
|
||||
#define DLE 0x10
|
||||
|
|
@ -64,6 +66,7 @@ static char status[23][50] = {"IDLE", "TFC", "RQ", "ERR", "PHS", "OVER", "FSK TX
|
|||
"FREE SIGNAL TX (AMTOR)", "FREE SIGNAL TX TIMED OUT (AMTOR)"};
|
||||
|
||||
struct TNCINFO * CreateTTYInfo(int port, int speed);
|
||||
BOOL OpenConnection(int);
|
||||
BOOL SetupConnection(int);
|
||||
static BOOL WriteCommBlock(struct TNCINFO * TNC);
|
||||
static void CheckRX(struct TNCINFO * TNC);
|
||||
|
|
@ -310,7 +313,7 @@ ConfigLine:
|
|||
return (TRUE);
|
||||
}
|
||||
|
||||
static size_t ExtProc(int fn, int port , PDATAMESSAGE buff)
|
||||
static size_t ExtProc(int fn, int port,unsigned char * buff)
|
||||
{
|
||||
int txlen = 0;
|
||||
PMSGWITHLEN buffptr;
|
||||
|
|
@ -342,7 +345,7 @@ static size_t ExtProc(int fn, int port , PDATAMESSAGE buff)
|
|||
if (STREAM->ReportDISC)
|
||||
{
|
||||
STREAM->ReportDISC = FALSE;
|
||||
buff->PORT = 0;
|
||||
buff[4] = 0;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -359,15 +362,17 @@ static size_t ExtProc(int fn, int port , PDATAMESSAGE buff)
|
|||
|
||||
buffptr=Q_REM(&STREAM->PACTORtoBPQ_Q);
|
||||
|
||||
datalen = (int)buffptr->Len;
|
||||
datalen=buffptr->Len;
|
||||
|
||||
buff->PORT = 0; // Compatibility with Kam Driver
|
||||
buff->PID = 0xf0;
|
||||
memcpy(&buff->L2DATA, &buffptr->Data[0], datalen); // Data goes to + 7, but we have an extra byte
|
||||
datalen += sizeof(void *) + 4;
|
||||
buff[4] = 0;
|
||||
buff[7] = 0xf0;
|
||||
memcpy(&buff[8],buffptr->Data,datalen); // Data goes to +7, but we have an extra byte
|
||||
datalen+=8;
|
||||
|
||||
PutLengthinBuffer(buff, datalen);
|
||||
PutLengthinBuffer((PDATAMESSAGE)buff, datalen);
|
||||
|
||||
// buff[5]=(datalen & 0xff);
|
||||
// buff[6]=(datalen >> 8);
|
||||
|
||||
ReleaseBuffer(buffptr);
|
||||
|
||||
|
|
@ -385,27 +390,24 @@ static size_t ExtProc(int fn, int port , PDATAMESSAGE buff)
|
|||
|
||||
// Find TNC Record
|
||||
|
||||
Stream = buff->PORT;
|
||||
Stream = buff[4];
|
||||
|
||||
if (!TNC->TNCOK)
|
||||
{
|
||||
// Send Error Response
|
||||
|
||||
PMSGWITHLEN buffptr = (PMSGWITHLEN)GetBuff();
|
||||
buffptr->Len = 36;
|
||||
memcpy(buffptr->Data, "No Connection to PACTOR TNC\r", 36);
|
||||
|
||||
if (buffptr == 0) return (0); // No buffers, so ignore
|
||||
C_Q_ADD(&STREAM->PACTORtoBPQ_Q, buffptr);
|
||||
|
||||
buffptr->Len = 27;
|
||||
memcpy(&buffptr->Data[0], "No Connection to PACTOR TNC\r", 27);
|
||||
|
||||
C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
txlen = GetLengthfromBuffer(buff) - (sizeof(void *) + 4);
|
||||
txlen = GetLengthfromBuffer((PDATAMESSAGE)buff) - 8;
|
||||
|
||||
buffptr->Len = txlen;
|
||||
memcpy(&buffptr->Data[0], &buff->L2DATA[0], txlen);
|
||||
memcpy(buffptr->Data, &buff[8], txlen);
|
||||
|
||||
C_Q_ADD(&STREAM->BPQtoPACTOR_Q, buffptr);
|
||||
|
||||
|
|
@ -416,7 +418,7 @@ static size_t ExtProc(int fn, int port , PDATAMESSAGE buff)
|
|||
|
||||
case 3: // CHECK IF OK TO SEND. Also used to check if TNC is responding
|
||||
|
||||
Stream = (int)(size_t)buff;
|
||||
Stream = (int)buff;
|
||||
|
||||
if (STREAM->FramesQueued > 4)
|
||||
return (1 | TNC->HostMode << 8);
|
||||
|
|
@ -464,17 +466,16 @@ static int WebProc(struct TNCINFO * TNC, char * Buff, BOOL LOCAL)
|
|||
}
|
||||
|
||||
|
||||
VOID * HALExtInit(EXTPORTDATA * PortEntry)
|
||||
UINT HALExtInit(EXTPORTDATA * PortEntry)
|
||||
{
|
||||
char msg[500];
|
||||
struct TNCINFO * TNC;
|
||||
int port;
|
||||
char * ptr;
|
||||
int len;
|
||||
char Msg[512];
|
||||
#ifndef LINBPQ
|
||||
char Msg[80];
|
||||
HWND x;
|
||||
#endif
|
||||
|
||||
//
|
||||
// Will be called once for each Pactor Port
|
||||
// The COM port number is in IOBASE
|
||||
|
|
@ -495,19 +496,19 @@ VOID * HALExtInit(EXTPORTDATA * PortEntry)
|
|||
sprintf(msg," ** Error - no info in BPQ32.cfg for this port");
|
||||
WritetoConsole(msg);
|
||||
|
||||
return ExtProc;
|
||||
return (int)ExtProc;
|
||||
}
|
||||
|
||||
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 +549,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);
|
||||
|
|
@ -600,7 +601,7 @@ VOID * HALExtInit(EXTPORTDATA * PortEntry)
|
|||
|
||||
WritetoConsole("\n");
|
||||
|
||||
return ExtProc;
|
||||
return ((int)ExtProc);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -749,7 +750,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;
|
||||
|
|
@ -764,7 +765,7 @@ VOID HALPoll(int Port)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
|
||||
SendCmd(TNC, "\x42", 1); // Connect Enable off
|
||||
|
||||
|
|
@ -819,7 +820,7 @@ VOID HALPoll(int Port)
|
|||
|
||||
sprintf(Status, "%d SCANSTART 15", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Status);
|
||||
Rig_Command(-1, Status);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -829,7 +830,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 +873,7 @@ VOID HALPoll(int Port)
|
|||
ReleaseBuffer(buffptr);
|
||||
WriteLogLine(2, MsgPtr, datalen);
|
||||
|
||||
STREAM->bytesTXed += datalen;
|
||||
STREAM->BytesTXed += datalen;
|
||||
STREAM->FramesQueued--;
|
||||
|
||||
ShowTraffic(TNC);
|
||||
|
|
@ -893,7 +894,7 @@ VOID HALPoll(int Port)
|
|||
if (memcmp(MsgPtr, "RADIO ", 6) == 0)
|
||||
{
|
||||
sprintf(&MsgPtr[40], "%d %s", TNC->Port, &MsgPtr[6]);
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &MsgPtr[40]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &MsgPtr[40]))
|
||||
{
|
||||
ReleaseBuffer(buffptr);
|
||||
}
|
||||
|
|
@ -1090,10 +1091,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 +1122,7 @@ VOID ProcessHALData(struct TNCINFO * TNC)
|
|||
|
||||
WriteLogLine(1, TNC->DataBuffer, Len);
|
||||
|
||||
STREAM->bytesRXed += Len;
|
||||
STREAM->BytesRXed += Len;
|
||||
|
||||
memcpy(buffptr->Data, TNC->DataBuffer, Len);
|
||||
|
||||
|
|
@ -1403,7 +1404,7 @@ CmdLoop:
|
|||
return; // Wait for more
|
||||
|
||||
Call = &TNC->CmdBuffer[1];
|
||||
Used = (int)strlen(Call) + 2; // Opcode and Null
|
||||
Used = strlen(Call) + 2; // Opcode and Null
|
||||
|
||||
UpdateMH(TNC, Call, '!', 0);
|
||||
|
||||
|
|
@ -1460,7 +1461,7 @@ CmdLoop:
|
|||
return; // Wait for more
|
||||
|
||||
Call = &TNC->CmdBuffer[1];
|
||||
Used = (int)strlen(Call) + 2; // Opcode and Null
|
||||
Used = strlen(Call) + 2; // Opcode and Null
|
||||
|
||||
HALConnected(TNC, Call);
|
||||
|
||||
|
|
@ -1756,14 +1757,14 @@ 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
|
||||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
|
||||
ShowTraffic(TNC);
|
||||
|
||||
|
|
@ -1804,7 +1805,7 @@ BOOL HALConnected(struct TNCINFO * TNC, char * Call)
|
|||
EncodeAndSend(TNC, CTEXTMSG, CTEXTLEN);
|
||||
WriteLogLine(2, CTEXTMSG, CTEXTLEN);
|
||||
|
||||
STREAM->bytesTXed += CTEXTLEN;
|
||||
STREAM->BytesTXed += CTEXTLEN;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1444,7 +1444,7 @@ CmdLoop:
|
|||
return; // Wait for more
|
||||
|
||||
Call = &TNC->CmdBuffer[1];
|
||||
Used = strlen(Call) + 2; // Opcode and Null
|
||||
Used = (int)strlen(Call) + 2; // Opcode and Null
|
||||
|
||||
// Could possibly be used for APPLCALLS by changing MYCALL when we see a call to one of our calls
|
||||
|
||||
|
|
|
|||
74
HFCommon.c
74
HFCommon.c
|
|
@ -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>
|
||||
|
|
@ -39,6 +39,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
#include "bpq32.h"
|
||||
#include "adif.h"
|
||||
|
||||
extern char * PortConfig[33];
|
||||
|
||||
HANDLE hInstance;
|
||||
extern HBRUSH bgBrush;
|
||||
|
|
@ -60,15 +61,16 @@ int RestartTNC(struct TNCINFO * TNC);
|
|||
char * GetChallengeResponse(char * Call, char * ChallengeString);
|
||||
|
||||
VOID __cdecl Debugprintf(const char * format, ...);
|
||||
int FromLOC(char * Locator, double * pLat, double * pLon);
|
||||
VOID FromLOC(char * Locator, double * pLat, double * pLon);
|
||||
BOOL ToLOC(double Lat, double Lon , char * Locator);
|
||||
|
||||
int GetPosnFromAPRS(char * Call, double * Lat, double * Lon);
|
||||
char * stristr (char *ch1, char *ch2);
|
||||
|
||||
|
||||
static RECT Rect;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
#define WSA_ACCEPT WM_USER + 1
|
||||
#define WSA_DATA WM_USER + 2
|
||||
#define WSA_CONNECT WM_USER + 3
|
||||
|
|
@ -336,8 +338,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;
|
||||
|
|
@ -753,7 +754,7 @@ IdTag (random alphanumeric, 12 chars)
|
|||
SendHTTPRequest(sock, "/account/exists", Message, Len, Response);
|
||||
closesocket(sock);
|
||||
|
||||
if (strstr(Response, "\"CallsignExists\":false"))
|
||||
if (strstr(Response, "false"))
|
||||
{
|
||||
WritetoConsole("WL2K Traffic Reporting disabled - Gateway ");
|
||||
WritetoConsole(ADIF->CMSCall);
|
||||
|
|
@ -779,10 +780,8 @@ IdTag (random alphanumeric, 12 chars)
|
|||
|
||||
if (LOC[0] && ADIF->LOC[0])
|
||||
{
|
||||
if (FromLOC(LOC, &myLat, &myLon) == 0) // Basic checks on LOCs
|
||||
return TRUE;
|
||||
if (FromLOC(ADIF->LOC, &Lat, &Lon) == 0)
|
||||
return TRUE;
|
||||
FromLOC(LOC, &myLat, &myLon);
|
||||
FromLOC(ADIF->LOC, &Lat, &Lon);
|
||||
|
||||
Dist = (int)Distance(myLat, myLon, Lat, Lon, TRUE);
|
||||
intBearing = (int)Bearing(Lat, Lon, myLat, myLon);
|
||||
|
|
@ -960,7 +959,7 @@ VOID SendHTTPReporttoWL2KThread(void * unused)
|
|||
SendHTTPRequest(sock, "/account/exists", Message, Len, Response);
|
||||
closesocket(sock);
|
||||
|
||||
if (strstr(Response, "\"CallsignExists\":false"))
|
||||
if (strstr(Response, "false"))
|
||||
{
|
||||
WritetoConsole("WL2K Reporting disabled - Gateway ");
|
||||
WritetoConsole(WL2KReport->BaseCall);
|
||||
|
|
@ -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
|
||||
|
|
@ -1624,7 +1623,7 @@ BOOL InterlockedCheckBusy(struct TNCINFO * ThisTNC)
|
|||
if (rxInterlock == 0 && txInterlock == 0)
|
||||
return ThisTNC->Busy; // No Interlock
|
||||
|
||||
for (i=1; i <= MAXBPQPORTS; i++)
|
||||
for (i=1; i<33; i++)
|
||||
{
|
||||
TNC = TNCInfo[i];
|
||||
|
||||
|
|
@ -1833,39 +1832,6 @@ BOOL UpdateWL2KSYSOPInfo(char * Call, char * SQL)
|
|||
|
||||
// Process config lines that are common to a number of HF modes
|
||||
|
||||
static char ** SeparateMultiString(char * MultiString)
|
||||
{
|
||||
char ** Value;
|
||||
int Count = 0;
|
||||
char * ptr, * ptr1;
|
||||
|
||||
// Convert to string array
|
||||
|
||||
Value = zalloc(sizeof(void *)); // always NULL entry on end even if no values
|
||||
Value[0] = NULL;
|
||||
|
||||
strlop(MultiString, 13);
|
||||
ptr = MultiString;
|
||||
|
||||
while (ptr && strlen(ptr))
|
||||
{
|
||||
ptr1 = strchr(ptr, '|');
|
||||
|
||||
if (ptr1)
|
||||
*(ptr1++) = 0;
|
||||
|
||||
if (strlen(ptr))
|
||||
{
|
||||
Value = realloc(Value, (Count+2) * sizeof(void *));
|
||||
Value[Count++] = _strdup(ptr);
|
||||
}
|
||||
ptr = ptr1;
|
||||
}
|
||||
|
||||
Value[Count] = NULL;
|
||||
return Value;
|
||||
}
|
||||
|
||||
extern int nextDummyInterlock;
|
||||
|
||||
int standardParams(struct TNCINFO * TNC, char * buf)
|
||||
|
|
@ -1874,8 +1840,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
|
||||
|
|
@ -1889,8 +1853,6 @@ int standardParams(struct TNCINFO * TNC, char * buf)
|
|||
TNC->LISTENCALLS = _strdup(&buf[8]);
|
||||
strlop(TNC->LISTENCALLS, '\r');
|
||||
}
|
||||
else if (_memicmp(buf, "NRNEIGHBOUR", 11) == 0)
|
||||
TNC->NRNeighbour = _strdup(&buf[12]);
|
||||
else if (_memicmp(buf, "MAXCONREQ", 9) == 0) // Hold Time for Busy Detect
|
||||
TNC->MaxConReq = atoi(&buf[9]);
|
||||
|
||||
|
|
@ -1906,16 +1868,8 @@ int standardParams(struct TNCINFO * TNC, char * buf)
|
|||
TNC->RXRadio = atoi(&buf[8]);
|
||||
else if (_memicmp(buf, "TXFreq", 6) == 0) // For PTT Sets Freq mode
|
||||
TNC->TXFreq = strtoll(&buf[7], NULL, 10);
|
||||
else if (_memicmp(buf, "DefaultTXFreq", 13) == 0) // Set at end of session
|
||||
TNC->DefaultTXFreq = atof(&buf[14]);
|
||||
else if (_memicmp(buf, "DefaultRXFreq", 13) == 0) // Set at end of session
|
||||
TNC->DefaultRXFreq = atof(&buf[14]);
|
||||
else if (_memicmp(buf, "ActiveTXFreq", 12) == 0) // Set at start of session
|
||||
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
|
||||
TNC->DisconnectScript = SeparateMultiString(&buf[17]);
|
||||
else if (_memicmp(buf, "DefaultFreq", 11) == 0) // For PTT Sets Freq mode
|
||||
TNC->DefaultFreq = strtoll(&buf[12], NULL, 10);
|
||||
else if (_memicmp(buf, "PTTONHEX", 8) == 0)
|
||||
{
|
||||
// Hex String to use for PTT on for this port
|
||||
|
|
|
|||
83
HSMODEM.c
83
HSMODEM.c
|
|
@ -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)
|
||||
|
||||
|
|
@ -115,7 +115,7 @@ struct HSMODEMINFO
|
|||
int KillTNC(struct TNCINFO * TNC);
|
||||
int RestartTNC(struct TNCINFO * TNC);
|
||||
|
||||
extern int (WINAPI FAR *GetModuleFileNameExPtr)();
|
||||
int (WINAPI FAR *GetModuleFileNameExPtr)();
|
||||
extern int (WINAPI FAR *EnumProcessesPtr)();
|
||||
|
||||
#include "bpq32.h"
|
||||
|
|
@ -149,10 +149,13 @@ static int RigControlRow = 205;
|
|||
#include <commctrl.h>
|
||||
#endif
|
||||
|
||||
extern char * PortConfig[33];
|
||||
extern int SemHeldByAPI;
|
||||
|
||||
static RECT Rect;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
static int ProcessLine(char * buf, int Port);
|
||||
|
||||
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
|
||||
|
|
@ -283,7 +286,7 @@ static int ProcessLine(char * buf, int Port)
|
|||
return (TRUE);
|
||||
}
|
||||
|
||||
static char * Config;
|
||||
char * Config;
|
||||
static char * ptr1, * ptr2;
|
||||
|
||||
int HSMODEMGetLine(char * buf)
|
||||
|
|
@ -309,10 +312,50 @@ 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);
|
||||
|
||||
|
||||
|
||||
#define MAXBPQPORTS 32
|
||||
|
||||
static time_t ltime;
|
||||
|
||||
|
||||
|
|
@ -376,14 +419,6 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
// 100 mS Timer. May now be needed, as Poll can be called more frequently in some circumstances
|
||||
|
||||
// G7TAJ's code to record activity for stats display
|
||||
|
||||
if ( TNC->BusyFlags && CDBusy )
|
||||
TNC->PortRecord->PORTCONTROL.ACTIVE += 2;
|
||||
|
||||
if ( TNC->PTTState )
|
||||
TNC->PortRecord->PORTCONTROL.SENDING += 2;
|
||||
|
||||
if (TNC->CONNECTED)
|
||||
{
|
||||
TNC->CONNECTED--;
|
||||
|
|
@ -532,7 +567,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
}
|
||||
|
||||
if (STREAM->Attached)
|
||||
|
|
@ -552,7 +587,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);
|
||||
|
|
@ -602,8 +637,8 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
if (buffptr == 0) return (0); // No buffers, so ignore
|
||||
|
||||
buffptr->Len = 21;
|
||||
memcpy(&buffptr->Data[0], "No Connection to TNC\r", 21);
|
||||
buffptr->Len = 36;
|
||||
memcpy(&buffptr->Data[0], "No Connection to TNC\r", 36);
|
||||
|
||||
C_Q_ADD(&TNC->Streams[Stream].PACTORtoBPQ_Q, buffptr);
|
||||
|
||||
|
|
@ -631,7 +666,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,13 +683,9 @@ 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]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &buff->L2DATA[0]))
|
||||
{
|
||||
}
|
||||
else
|
||||
|
|
@ -859,13 +890,13 @@ VOID HSMODEMReleaseTNC(struct TNCINFO * TNC)
|
|||
|
||||
sprintf(TXMsg, "%d SCANSTART 15", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, TXMsg);
|
||||
Rig_Command(-1, TXMsg);
|
||||
|
||||
ReleaseOtherPorts(TNC);
|
||||
|
||||
}
|
||||
|
||||
VOID HSMODEMSuspendPort(struct TNCINFO * TNC, struct TNCINFO * ThisTNC)
|
||||
VOID HSMODEMSuspendPort(struct TNCINFO * TNC)
|
||||
{
|
||||
HSMODEMSendCommand(TNC, "CONOK OFF\r");
|
||||
}
|
||||
|
|
@ -1181,9 +1212,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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
1112
HTTPcode.c
1112
HTTPcode.c
File diff suppressed because it is too large
Load diff
130
HanksRT.c
130
HanksRT.c
|
|
@ -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"
|
||||
|
|
@ -75,9 +75,6 @@ char ChatWelcomeMsg[1000];
|
|||
char Position[81] = "";
|
||||
char PopupText[260] = "";
|
||||
int PopupMode = 0;
|
||||
int chatPaclen = 236;
|
||||
|
||||
int reportChatEvents = 0;
|
||||
|
||||
char RtKnown[MAX_PATH] = "RTKnown.txt";
|
||||
char RtUsr[MAX_PATH] = "STUsers.txt";
|
||||
|
|
@ -100,7 +97,6 @@ int ChatTmr = 0;
|
|||
|
||||
BOOL NeedStatus = FALSE;
|
||||
|
||||
|
||||
char Verstring[80];
|
||||
|
||||
static void node_dec(CHATNODE *node);
|
||||
|
|
@ -139,7 +135,7 @@ int AddtoHistory(struct user_t * user, char * text)
|
|||
struct tm * tm;
|
||||
time_t Now = time(NULL);
|
||||
|
||||
// Don't want to grow indefinitely and fill memory. We only allow display up to 24 hours back, so if first record is older that that
|
||||
// Don't want to grow indefinitely and fill memory. We only allow display upt 24 hours back, so if first record is older that that
|
||||
// remove and reuse it
|
||||
|
||||
if (History && History->Time < Now - 86400)
|
||||
|
|
@ -187,6 +183,9 @@ int AddtoHistory(struct user_t * user, char * text)
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int ChatIsUTF8(unsigned char *ptr, int len)
|
||||
{
|
||||
int n;
|
||||
|
|
@ -426,7 +425,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);
|
||||
}
|
||||
|
||||
|
|
@ -601,9 +600,7 @@ VOID ProcessChatLine(ChatCIRCUIT * conn, struct UserInfo * user, char* OrigBuffe
|
|||
Buffer = BufferB;
|
||||
|
||||
#else
|
||||
size_t left = 65536;
|
||||
size_t clen = len;
|
||||
|
||||
int left = 65536;
|
||||
UCHAR * BufferBP = BufferB;
|
||||
struct user_t * icu = conn->u.user;
|
||||
|
||||
|
|
@ -611,22 +608,22 @@ VOID ProcessChatLine(ChatCIRCUIT * conn, struct UserInfo * user, char* OrigBuffe
|
|||
{
|
||||
if (icu->iconv_toUTF8 == NULL)
|
||||
{
|
||||
icu->iconv_toUTF8 = iconv_open("UTF-8//IGNORE", icu->Codepage);
|
||||
icu->iconv_toUTF8 = iconv_open("UTF-8", icu->Codepage);
|
||||
|
||||
if (icu->iconv_toUTF8 == (iconv_t)-1)
|
||||
icu->iconv_toUTF8 = iconv_open("UTF-8//IGNORE", "CP1252");
|
||||
icu->iconv_toUTF8 = iconv_open("UTF-8", "CP1252");
|
||||
}
|
||||
|
||||
iconv(icu->iconv_toUTF8, NULL, NULL, NULL, NULL); // Reset State Machine
|
||||
iconv(icu->iconv_toUTF8, &Buffer, &clen, (char ** __restrict__)&BufferBP, &left);
|
||||
iconv(icu->iconv_toUTF8, &Buffer, &len, (char ** __restrict__)&BufferBP, &left);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (link_toUTF8 == NULL)
|
||||
link_toUTF8 = iconv_open("UTF-8//IGNORE", "CP1252");
|
||||
link_toUTF8 = iconv_open("UTF-8", "CP1252");
|
||||
|
||||
iconv(link_toUTF8, NULL, NULL, NULL, NULL); // Reset State Machine
|
||||
iconv(link_toUTF8, &Buffer, &clen, (char ** __restrict__)&BufferBP, &left);
|
||||
iconv(link_toUTF8, &Buffer, &len, (char ** __restrict__)&BufferBP, &left);
|
||||
}
|
||||
len = 65536 - left;
|
||||
Buffer = BufferB;
|
||||
|
|
@ -778,7 +775,7 @@ VOID ProcessChatLine(ChatCIRCUIT * conn, struct UserInfo * user, char* OrigBuffe
|
|||
return;
|
||||
}
|
||||
|
||||
if (cmdLen > 1 && _memicmp(&Buffer[1], "History", cmdLen) == 0) // Accept Hi but not H
|
||||
if (_memicmp(&Buffer[1], "History", cmdLen) == 0)
|
||||
{
|
||||
// Param is number of minutes to go back (max 24 hours)
|
||||
|
||||
|
|
@ -788,7 +785,9 @@ VOID ProcessChatLine(ChatCIRCUIT * conn, struct UserInfo * user, char* OrigBuffe
|
|||
int n = HistoryCount;
|
||||
|
||||
if (param)
|
||||
interval = atoi(param);
|
||||
interval = atoi(param) * 60;
|
||||
|
||||
start = time(NULL) - interval;
|
||||
|
||||
if (interval < 1)
|
||||
{
|
||||
|
|
@ -803,8 +802,6 @@ VOID ProcessChatLine(ChatCIRCUIT * conn, struct UserInfo * user, char* OrigBuffe
|
|||
interval = 1440; // Limit to 1 day
|
||||
}
|
||||
|
||||
start = time(NULL) - (interval * 60);
|
||||
|
||||
// Find first record to send
|
||||
|
||||
while (ptr)
|
||||
|
|
@ -1127,12 +1124,12 @@ void rduser(USER *user)
|
|||
// Open an iconv decriptor for each conversion
|
||||
|
||||
if (user->Codepage[0])
|
||||
user->iconv_toUTF8 = iconv_open("UTF-8//IGNORE", user->Codepage);
|
||||
user->iconv_toUTF8 = iconv_open("UTF-8", user->Codepage);
|
||||
else
|
||||
user->iconv_toUTF8 = (iconv_t)-1;
|
||||
|
||||
if (user->iconv_toUTF8 == (iconv_t)-1)
|
||||
user->iconv_toUTF8 = iconv_open("UTF-8//IGNORE", "CP1252");
|
||||
user->iconv_toUTF8 = iconv_open("UTF-8", "CP1252");
|
||||
|
||||
|
||||
if (user->Codepage[0])
|
||||
|
|
@ -1141,7 +1138,7 @@ void rduser(USER *user)
|
|||
user->iconv_fromUTF8 = (iconv_t)-1;
|
||||
|
||||
if (user->iconv_fromUTF8 == (iconv_t)-1)
|
||||
user->iconv_fromUTF8 = iconv_open("CP1252//IGNORE", "UTF-8");
|
||||
user->iconv_fromUTF8 = iconv_open("CP1252", "UTF-8");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
@ -1186,7 +1183,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 +1226,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 +1857,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);
|
||||
|
|
@ -1942,7 +1939,7 @@ void put_text(ChatCIRCUIT * circuit, USER * user, UCHAR * buf)
|
|||
{
|
||||
UCHAR BufferB[4096];
|
||||
|
||||
// Text is UTF-8 internally. If user doen't want UTF-8. convert to Node's locale
|
||||
// Text is UTF-8 internally. If use doen't want UTF-8. convert to Node's locale
|
||||
|
||||
if (circuit->u.user->rtflags & u_noUTF8)
|
||||
{
|
||||
|
|
@ -1963,9 +1960,9 @@ void put_text(ChatCIRCUIT * circuit, USER * user, UCHAR * buf)
|
|||
BufferB[blen + 2] = 0;
|
||||
#else
|
||||
|
||||
size_t left = 4096;
|
||||
int left = 4096;
|
||||
UCHAR * BufferBP = BufferB;
|
||||
size_t len = strlen(buf) + 1;
|
||||
int len = strlen(buf) + 1;
|
||||
struct user_t * icu = circuit->u.user;
|
||||
|
||||
if (icu->iconv_fromUTF8 == NULL)
|
||||
|
|
@ -1973,7 +1970,7 @@ void put_text(ChatCIRCUIT * circuit, USER * user, UCHAR * buf)
|
|||
icu->iconv_fromUTF8 = iconv_open(icu->Codepage, "UTF-8");
|
||||
|
||||
if (icu->iconv_fromUTF8 == (iconv_t)-1)
|
||||
icu->iconv_fromUTF8 = iconv_open("CP1252//IGNORE", "UTF-8");
|
||||
icu->iconv_fromUTF8 = iconv_open("CP1252", "UTF-8");
|
||||
}
|
||||
|
||||
iconv(icu->iconv_fromUTF8, NULL, NULL, NULL, NULL); // Reset State Machine
|
||||
|
|
@ -2081,18 +2078,6 @@ void text_tellu_Joined(USER * user)
|
|||
|
||||
sprintf(buf, "%s%-6.6s : %s *** Joined Chat, Topic %s", Stamp, user->call, user->name, user->topic->name);
|
||||
|
||||
if (reportChatEvents)
|
||||
{
|
||||
|
||||
#ifdef WIN32
|
||||
if (pRunEventProgram)
|
||||
pRunEventProgram("ChatNewUser.exe", user->call);
|
||||
#else
|
||||
sprintf(prog, "%s/%s", BPQDirectory, "ChatNewUser");
|
||||
RunEventProgram(prog, user->call);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Send it to all connected users in the same topic.
|
||||
// Echo to originator if requested.
|
||||
|
||||
|
|
@ -2123,6 +2108,14 @@ void text_tellu_Joined(USER * user)
|
|||
nputc(circuit, 7);
|
||||
|
||||
nputc(circuit, 13);
|
||||
|
||||
#ifdef WIN32
|
||||
if (pRunEventProgram)
|
||||
pRunEventProgram("ChatNewUser.exe", user->call);
|
||||
#else
|
||||
sprintf(prog, "%s/%s", BPQDirectory, "ChatNewUser");
|
||||
RunEventProgram(prog, user->call);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
// Tell one link circuit about a local user change of topic.
|
||||
|
|
@ -2821,7 +2814,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 +2829,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 +2866,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 +2876,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 +2900,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);
|
||||
|
|
@ -3054,7 +3047,7 @@ int rt_cmd(ChatCIRCUIT *circuit, char * Buffer)
|
|||
nputs(circuit, "/T Name - Join Topic or Create new Topic. Topic Names are not case sensitive\r/P - Show Ports and Links.\r");
|
||||
nprintf(circuit, "/A - Toggle Alert on user join - %s.\r",
|
||||
(user->rtflags & u_bells) ? "Enabled" : "Disabled");
|
||||
nprintf(circuit, "/C - Toggle Colour Mode on or off (only works on Console or BPQTerm/TermTCP/QtTermTCP - %s.\r",
|
||||
nprintf(circuit, "/C - Toggle Colour Mode on or off (only works on Console or BPQTerminal - %s.\r",
|
||||
(user->rtflags & u_colour) ? "Enabled" : "Disabled");
|
||||
nputs(circuit, "/Codepage CPnnnn - Set Codepage to use if UTF-8 is disabled.\r");
|
||||
nprintf(circuit, "/E - Toggle Echo - %s .\r",
|
||||
|
|
@ -3682,7 +3675,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;
|
||||
|
|
@ -3763,7 +3756,7 @@ BOOL ProcessChatConnectScript(ChatCIRCUIT * conn, char * Buffer, int len)
|
|||
|
||||
// Some other response to *RTL - disconnect
|
||||
|
||||
Logprintf(LOG_CHAT, conn, '|', "Unexpected Response %s to *RTL - Dropping link", Buffer);
|
||||
Logprintf(LOG_CHAT, conn, '|', "Unexpected Response %s to *RTL - Dropping link", conn->Callsign), Buffer;
|
||||
Disconnect(conn->BPQStream);
|
||||
return FALSE;
|
||||
|
||||
|
|
@ -3873,7 +3866,7 @@ int ChatConnected(int Stream)
|
|||
|
||||
if (conn->rtcflags == p_linkini)
|
||||
{
|
||||
conn->paclen = chatPaclen;
|
||||
conn->paclen = 236;
|
||||
|
||||
// Run first line of connect script
|
||||
|
||||
|
|
@ -3893,9 +3886,6 @@ int ChatConnected(int Stream)
|
|||
if (paclen == 0)
|
||||
paclen = 256;
|
||||
|
||||
if (paclen > chatPaclen)
|
||||
paclen = chatPaclen;
|
||||
|
||||
conn->paclen = paclen;
|
||||
|
||||
strlop(callsign, ' '); // Remove trailing spaces
|
||||
|
|
@ -4176,20 +4166,12 @@ BOOL GetChatConfig(char * ConfigName)
|
|||
|
||||
ChatApplNum = GetIntValue(group, "ApplNum");
|
||||
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)
|
||||
chatPaclen = 236;
|
||||
|
||||
if (chatPaclen < 60)
|
||||
chatPaclen = 60;
|
||||
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
@ -4208,8 +4190,6 @@ VOID SaveChatConfigFile(char * ConfigName)
|
|||
|
||||
SaveIntValue(group, "ApplNum", ChatApplNum);
|
||||
SaveIntValue(group, "MaxStreams", MaxChatStreams);
|
||||
SaveIntValue(group, "reportChatEvents", reportChatEvents);
|
||||
SaveIntValue(group, "chatPaclen", chatPaclen);
|
||||
SaveStringValue(group, "OtherChatNodes", OtherNodesList);
|
||||
SaveStringValue(group, "ChatWelcomeMsg", ChatWelcomeMsg);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
227
IPCode.c
227
IPCode.c
|
|
@ -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"
|
||||
|
|
@ -135,10 +128,11 @@ VOID RecalcUDPChecksum(PIPMSG IPptr);
|
|||
BOOL Send_ETH(VOID * Block, DWORD len, BOOL SendToTAP);
|
||||
VOID ProcessEthARPMsg(PETHARP arpptr, BOOL FromTAP);
|
||||
VOID WriteIPRLine(PROUTEENTRY RouteRecord, FILE * file);
|
||||
int CountBits(uint32_t in);
|
||||
int CountBits(uint64_t in);
|
||||
VOID SendARPMsg(PARPDATA ARPptr, BOOL ToTAP);;
|
||||
BOOL DecodeCallString(char * Calls, BOOL * Stay, BOOL * Spy, UCHAR * AXCalls);
|
||||
int C_Q_ADD_NP(VOID *PQ, VOID *PBUFF);
|
||||
int CountBits(uint64_t in);
|
||||
|
||||
#define ARPTIMEOUT 3600
|
||||
|
||||
|
|
@ -202,6 +196,8 @@ int FramesDropped = 0;
|
|||
int ARPTimeouts = 0;
|
||||
int SecTimer = 10;
|
||||
|
||||
extern char * PortConfig[];
|
||||
|
||||
int baseline=0;
|
||||
|
||||
unsigned char hostaddr[64];
|
||||
|
|
@ -240,7 +236,7 @@ UCHAR ourMACAddr[6] = {02,'B','P','Q',1,1};
|
|||
|
||||
UCHAR RealMacAddress[6];
|
||||
|
||||
uint64_t IPPortMask = 0;
|
||||
int IPPortMask = 0;
|
||||
|
||||
IPSTATS IPStats = {0};
|
||||
|
||||
|
|
@ -390,7 +386,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;
|
||||
|
|
@ -560,9 +556,7 @@ Dll BOOL APIENTRY Init_IP()
|
|||
|
||||
//#ifdef WIN32
|
||||
|
||||
if (Adapter[0] == 0)
|
||||
return FALSE;
|
||||
|
||||
if (Adapter[0])
|
||||
if (GetPCAP() == FALSE)
|
||||
return FALSE;
|
||||
|
||||
|
|
@ -1278,8 +1272,6 @@ static VOID Send_AX_Datagram(PMESSAGE Block, DWORD Len, UCHAR Port, UCHAR * HWAD
|
|||
memcpy(Block->DEST, HWADDR, 7);
|
||||
memcpy(Block->ORIGIN, MYCALL, 7);
|
||||
Block->DEST[6] &= 0x7e; // Clear End of Call
|
||||
Block->DEST[6] |= 0x80; // set Command Bit
|
||||
|
||||
Block->ORIGIN[6] |= 1; // Set End of Call
|
||||
Block->CTL = 3; //UI
|
||||
|
||||
|
|
@ -1555,8 +1547,7 @@ VOID ProcessEthIPMsg(PETHMSG Buffer)
|
|||
|
||||
VOID ProcessEthARPMsg(PETHARP arpptr, BOOL FromTAP)
|
||||
{
|
||||
int i=0;
|
||||
uint64_t Mask=IPPortMask;
|
||||
int i=0, Mask=IPPortMask;
|
||||
PARPDATA Arp;
|
||||
PROUTEENTRY Route;
|
||||
BOOL Found;
|
||||
|
|
@ -1756,7 +1747,7 @@ ProxyARPReply:
|
|||
memset(AXARPREQMSG.TARGETHWADDR, 0, 7);
|
||||
AXARPREQMSG.ARPOPCODE = 0x0100;
|
||||
|
||||
for (i = 1; i <= MaxBPQPortNo; i++)
|
||||
for (i=1; i<=NUMBEROFPORTS; i++)
|
||||
{
|
||||
if (Mask & 1)
|
||||
Send_AX_Datagram((PMESSAGE)&AXARPREQMSG, 46, i, QST);
|
||||
|
|
@ -1855,8 +1846,7 @@ SendBack:
|
|||
|
||||
VOID ProcessAXARPMsg(PAXARP arpptr)
|
||||
{
|
||||
int i=0;
|
||||
uint64_t Mask=IPPortMask;
|
||||
int i=0, Mask=IPPortMask;
|
||||
PARPDATA Arp;
|
||||
PROUTEENTRY Route;
|
||||
|
||||
|
|
@ -1963,7 +1953,7 @@ AXProxyARPReply:
|
|||
AXARPREQMSG.TARGETIPADDR = arpptr->TARGETIPADDR;
|
||||
AXARPREQMSG.SENDIPADDR = arpptr->SENDIPADDR;
|
||||
|
||||
for (i=1; i<=MaxBPQPortNo; i++)
|
||||
for (i=1; i<=NUMBEROFPORTS; i++)
|
||||
{
|
||||
if (i != arpptr->MSGHDDR.PORT)
|
||||
if (Mask & 1)
|
||||
|
|
@ -2227,10 +2217,7 @@ BOOL CheckIPChecksum(PIPMSG IPptr)
|
|||
|
||||
checksum = cksum((unsigned short *)IPptr, 20);
|
||||
|
||||
if (checksum == 0xffff)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
if (checksum == 0xffff) return TRUE; else return FALSE;
|
||||
|
||||
}
|
||||
BOOL Check_Checksum(VOID * ptr1, int Len)
|
||||
|
|
@ -2239,10 +2226,7 @@ BOOL Check_Checksum(VOID * ptr1, int Len)
|
|||
|
||||
checksum = cksum((unsigned short *)ptr1, Len);
|
||||
|
||||
if (checksum == 0xffff)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
if (checksum == 0xffff) return TRUE; else return FALSE;
|
||||
|
||||
}
|
||||
USHORT Generate_CHECKSUM(VOID * ptr1, int Len)
|
||||
|
|
@ -3244,7 +3228,7 @@ static BOOL ReadConfigFile()
|
|||
BOOL Found;
|
||||
char buf[256],errbuf[256];
|
||||
|
||||
Config = PortConfig[IPConfigSlot]; // Config fnom bpq32.cfg
|
||||
Config = PortConfig[33]; // Config fnom bpq32.cfg
|
||||
|
||||
if (Config)
|
||||
{
|
||||
|
|
@ -3296,7 +3280,7 @@ static BOOL ReadConfigFile()
|
|||
|
||||
static int ProcessLine(char * buf)
|
||||
{
|
||||
char * ptr, * p_value, * p_origport, * p_host;
|
||||
char * ptr, * p_value, * p_origport, * p_host, * p_port;
|
||||
int port, mappedport, ipad, mappedipad;
|
||||
BOOL NATTAP = FALSE;
|
||||
int i;
|
||||
|
|
@ -3462,28 +3446,16 @@ static int ProcessLine(char * buf)
|
|||
|
||||
if (_stricmp(ptr,"IPPorts") == 0)
|
||||
{
|
||||
struct _EXTPORTDATA * PORTVEC;
|
||||
p_port = strtok(p_value, " ,\t\n\r");
|
||||
|
||||
while (p_value != NULL)
|
||||
while (p_port != NULL)
|
||||
{
|
||||
i=atoi(p_value);
|
||||
i=atoi(p_port);
|
||||
if (i == 0) return FALSE;
|
||||
if (i > NUMBEROFPORTS) return FALSE;
|
||||
|
||||
PORTVEC = (struct _EXTPORTDATA * )GetPortTableEntryFromPortNum(i);
|
||||
|
||||
if (PORTVEC == NULL)
|
||||
return FALSE;
|
||||
|
||||
// if not KISS, make sure it can send UI frames
|
||||
|
||||
if (PORTVEC->PORTCONTROL.PORTTYPE == 16) // EXTERNAL
|
||||
if (PORTVEC->PORTCONTROL.PROTOCOL == 10) // Pactor/WINMOR
|
||||
if (PORTVEC->PORTCONTROL.UICAPABLE == 0)
|
||||
return FALSE;
|
||||
|
||||
|
||||
IPPortMask |= (uint64_t)1 << (i-1);
|
||||
p_value = strlop(p_value, ',');
|
||||
IPPortMask |= 1 << (i-1);
|
||||
p_port = strtok(NULL, " ,\t\n\r");
|
||||
}
|
||||
return (TRUE);
|
||||
}
|
||||
|
|
@ -4552,50 +4524,6 @@ void OpenTAP()
|
|||
return;
|
||||
}
|
||||
|
||||
// Fix from github user isavitsky
|
||||
|
||||
/*
|
||||
* After some research I found that on most of my
|
||||
* systems, including Raspberry Pi IV, a slight delay
|
||||
* is needed before considering the TAP device
|
||||
* up and running. Otherwise the interface structures
|
||||
* do not initialise properly and later in the code
|
||||
* around the line 4700 when we initialise our ARP
|
||||
* structure:
|
||||
*
|
||||
* memcpy(Arp->HWADDR, xbuffer.ifr_hwaddr.sa_data, 6);
|
||||
*
|
||||
* the MAC address is getting filled in with random
|
||||
* value which makes the communication via our TAP
|
||||
* device using the configured IPADDR virtually
|
||||
* impossible.
|
||||
*
|
||||
*/
|
||||
|
||||
Debugprintf("Waiting for the TAP to become UP and RUNNING");
|
||||
|
||||
for (int i=10; i>0; i--)
|
||||
{
|
||||
Sleep(10);
|
||||
|
||||
if ((err = ioctl(sockfd, SIOCGIFFLAGS, &ifr)) < 0)
|
||||
{
|
||||
perror("SIOCGIFFLAGS");
|
||||
return;
|
||||
}
|
||||
|
||||
if((ifr.ifr_flags & IFF_UP) && (ifr.ifr_flags & IFF_RUNNING))
|
||||
{
|
||||
Debugprintf("TAP is UP and RUNNING");
|
||||
break;
|
||||
}
|
||||
else if (i == 1)
|
||||
{
|
||||
Debugprintf("TAP is still not UP and RUNNING");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
printf("TAP brought up\n");
|
||||
|
||||
// Set MTU to 256
|
||||
|
|
@ -4738,7 +4666,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 +4724,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 +4819,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
|
||||
|
||||
|
|
@ -4928,7 +4856,7 @@ VOID SHOWNAT(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, struct
|
|||
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
|
||||
}
|
||||
|
||||
int CountBits64(uint64_t in)
|
||||
int CountBits(uint64_t in)
|
||||
{
|
||||
int n = 0;
|
||||
while (in)
|
||||
|
|
@ -4939,18 +4867,7 @@ int CountBits64(uint64_t in)
|
|||
return n;
|
||||
}
|
||||
|
||||
int CountBits(uint32_t in)
|
||||
{
|
||||
int n = 0;
|
||||
while (in)
|
||||
{
|
||||
if (in & 1) n ++;
|
||||
in >>=1;
|
||||
}
|
||||
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 +4892,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++)
|
||||
{
|
||||
|
|
@ -5076,8 +4993,8 @@ int sysNameLen = 8;
|
|||
|
||||
extern time_t TimeLoaded;
|
||||
|
||||
int InOctets[64] = {0};
|
||||
int OutOctets[64] = {0};
|
||||
int InOctets[32] = {0};
|
||||
int OutOctets[32] = {0};
|
||||
|
||||
// ASN PDUs have to be constructed backwards, as each header included a length
|
||||
|
||||
|
|
@ -5192,17 +5109,33 @@ int BuildReply(UCHAR * Buffer, int Offset, UCHAR * OID, int OIDLen, UCHAR * Valu
|
|||
|
||||
// snmpget -v1 -c jnos [ve4klm.ampr.org | www.langelaar.net] 1.3.6.1.2.1.2.2.1.16.5
|
||||
|
||||
int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
||||
|
||||
VOID ProcessSNMPMessage(PIPMSG IPptr)
|
||||
{
|
||||
int Len;
|
||||
PUDPMSG UDPptr = (PUDPMSG)&IPptr->Data;
|
||||
char Community[256];
|
||||
UCHAR OID[256];
|
||||
int OIDLen;
|
||||
UCHAR * Msg;
|
||||
int Type;
|
||||
int Length, ComLen;
|
||||
int IntVal;
|
||||
int ReqID;
|
||||
int RequestType;
|
||||
|
||||
Len = ntohs(IPptr->IPLENGTH);
|
||||
Len-=20;
|
||||
|
||||
Check_Checksum(UDPptr, Len);
|
||||
|
||||
// 4 bytes version
|
||||
// Null Terminated Community
|
||||
|
||||
Msg = (char *) UDPptr;
|
||||
|
||||
Msg += 8; // Over UDP Header
|
||||
Len -= 8;
|
||||
|
||||
// ASN 1 Encoding - Type, Len, Data
|
||||
|
||||
|
|
@ -5214,7 +5147,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
// First should be a Sequence
|
||||
|
||||
if (Type != 0x30)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
Len -= 2;
|
||||
|
||||
|
|
@ -5225,7 +5158,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
// Should be Integer - SNMP Version - We support V1, identified by zero
|
||||
|
||||
if (Type != 2 || Length != 1 || IntVal != 0)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
Len -= 3;
|
||||
|
||||
|
|
@ -5235,7 +5168,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
// Should Be String (community)
|
||||
|
||||
if (Type != 4)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
memcpy(Community, Msg, ComLen);
|
||||
Community[ComLen] = 0;
|
||||
|
|
@ -5261,7 +5194,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Length = *(Msg++);
|
||||
|
||||
if (Type != 2)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
ReqID = ASNGetInt(Msg, Length);
|
||||
|
||||
|
|
@ -5274,7 +5207,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Length = *(Msg++);
|
||||
|
||||
if (Type != 2)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
ASNGetInt(Msg, Length);
|
||||
|
||||
|
|
@ -5285,7 +5218,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Length = *(Msg++);
|
||||
|
||||
if (Type != 2)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
ASNGetInt(Msg, Length);
|
||||
|
||||
|
|
@ -5300,7 +5233,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Len -= 2;
|
||||
|
||||
if (Type != 0x30)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
Type = *(Msg++);
|
||||
Length = *(Msg++);
|
||||
|
|
@ -5308,7 +5241,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Len -= 2;
|
||||
|
||||
if (Type != 0x30)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
// Next is OID
|
||||
|
||||
|
|
@ -5316,7 +5249,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Length = *(Msg++);
|
||||
|
||||
if (Type != 6) // Object ID
|
||||
return 0;
|
||||
return;
|
||||
|
||||
memcpy(OID, Msg, Length);
|
||||
OID[Length] = 0;
|
||||
|
|
@ -5334,17 +5267,18 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Length = *(Msg++);
|
||||
|
||||
if (Type != 5 || Length != 0)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
Len -=2; // Header
|
||||
|
||||
// Should be nothing left
|
||||
}
|
||||
|
||||
if (RequestType == 160)
|
||||
if (RequestType = 160)
|
||||
{
|
||||
UCHAR Reply[256];
|
||||
int Offset = 255;
|
||||
int PDULen = 0;
|
||||
int PDULen, SendLen;
|
||||
char Value[256];
|
||||
int ValLen;
|
||||
|
||||
|
|
@ -5386,7 +5320,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
return;
|
||||
|
||||
Offset -= PDULen;
|
||||
Offset -= ComLen;
|
||||
|
|
@ -5404,39 +5338,7 @@ int ProcessSNMPPayload(UCHAR * Msg, int Len, UCHAR * Reply, int * OffPtr)
|
|||
Reply[--Offset] = PDULen + ComLen + 5;
|
||||
Reply[--Offset] = 48;
|
||||
|
||||
*OffPtr = Offset;
|
||||
|
||||
return PDULen + ComLen + 7;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
VOID ProcessSNMPMessage(PIPMSG IPptr)
|
||||
{
|
||||
int Len;
|
||||
PUDPMSG UDPptr = (PUDPMSG)&IPptr->Data;
|
||||
UCHAR * Msg;
|
||||
UCHAR Reply[256];
|
||||
int SendLen;
|
||||
int Offset = 0;
|
||||
|
||||
Len = ntohs(IPptr->IPLENGTH);
|
||||
Len-=20;
|
||||
|
||||
Check_Checksum(UDPptr, Len);
|
||||
|
||||
// 4 bytes version
|
||||
// Null Terminated Community
|
||||
|
||||
Msg = (char *) UDPptr;
|
||||
|
||||
Msg += 8; // Over UDP Header
|
||||
Len -= 8;
|
||||
|
||||
SendLen = ProcessSNMPPayload(Msg, Len, Reply, &Offset);
|
||||
|
||||
if (SendLen == 0)
|
||||
return;
|
||||
SendLen = PDULen + ComLen + 7;
|
||||
|
||||
memcpy(UDPptr->UDPData, &Reply[Offset], SendLen);
|
||||
|
||||
|
|
@ -5455,5 +5357,6 @@ VOID ProcessSNMPMessage(PIPMSG IPptr)
|
|||
CheckSumAndSendUDP(IPptr, UDPptr, SendLen);
|
||||
}
|
||||
|
||||
|
||||
// Ingnore others
|
||||
}
|
||||
|
||||
|
|
|
|||
234
KAMPactor.c
234
KAMPactor.c
|
|
@ -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"
|
||||
|
|
@ -68,10 +68,10 @@ static int RigControlRow = 165;
|
|||
extern UCHAR LogDirectory[];
|
||||
static RECT Rect;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
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};
|
||||
|
||||
|
|
@ -254,6 +254,9 @@ ConfigLine:
|
|||
|
||||
static int MaxStreams = 26;
|
||||
|
||||
struct TNCINFO * CreateTTYInfo(int port, int speed);
|
||||
BOOL OpenConnection(int);
|
||||
BOOL SetupConnection(int);
|
||||
BOOL CloseConnection(struct TNCINFO * conn);
|
||||
static BOOL WriteCommBlock(struct TNCINFO * TNC);
|
||||
BOOL DestroyTTYInfo(int port);
|
||||
|
|
@ -330,14 +333,6 @@ ok:
|
|||
|
||||
// 100 mS Timer. May now be needed, as Poll can be called more frequently in some circumstances
|
||||
|
||||
// G7TAJ's code to record activity for stats display
|
||||
|
||||
if ( TNC->BusyFlags && CDBusy )
|
||||
TNC->PortRecord->PORTCONTROL.ACTIVE += 2;
|
||||
|
||||
if ( TNC->PTTState )
|
||||
TNC->PortRecord->PORTCONTROL.SENDING += 2;
|
||||
|
||||
CheckRXKAM(TNC);
|
||||
KAMPoll(port);
|
||||
|
||||
|
|
@ -519,28 +514,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 +564,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 +592,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
|
||||
|
||||
|
|
@ -916,30 +884,15 @@ VOID KAMPoll(int Port)
|
|||
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, 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->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);
|
||||
|
||||
|
|
@ -947,7 +900,7 @@ VOID KAMPoll(int Port)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1080,30 +1033,16 @@ 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)
|
||||
EncodeAndSend(TNC, "C20PACTOR", 9); // Back to Listen
|
||||
else
|
||||
EncodeAndSend(TNC, "C20TOR", 6); // Back to Listen
|
||||
|
||||
|
||||
TNC->InternalCmd = 'T';
|
||||
TNC->Timeout = 50;
|
||||
TNC->IntCmdDelay--;
|
||||
|
|
@ -1112,7 +1051,7 @@ VOID KAMPoll(int Port)
|
|||
|
||||
sprintf(Status, "%d SCANSTART 15", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Status);
|
||||
Rig_Command(-1, Status);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -1157,7 +1096,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 +1129,7 @@ VOID KAMPoll(int Port)
|
|||
}
|
||||
|
||||
Next = 0;
|
||||
STREAM->bytesTXed += datalen;
|
||||
STREAM->BytesTXed += datalen;
|
||||
|
||||
if (Stream == 0)
|
||||
{
|
||||
|
|
@ -1215,7 +1154,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
|
||||
|
|
@ -1250,7 +1189,7 @@ VOID KAMPoll(int Port)
|
|||
if ((Stream == 0) && memcmp(MsgPtr, "RADIO ", 6) == 0)
|
||||
{
|
||||
sprintf(&MsgPtr[40], "%d %s", TNC->Port, &MsgPtr[6]);
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, &MsgPtr[40]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &MsgPtr[40]))
|
||||
{
|
||||
ReleaseBuffer(buffptr);
|
||||
}
|
||||
|
|
@ -1324,51 +1263,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 +1529,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 +1552,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 +1560,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 +1641,6 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
WritetoTrace(TNC, Buffer, Len);
|
||||
|
||||
|
||||
// Pass to Appl
|
||||
|
||||
Stream = TNC->CmdStream;
|
||||
|
|
@ -1787,76 +1677,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 +1759,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)
|
||||
|
|
@ -1950,10 +1770,10 @@ VOID ProcessKHOSTPacket(struct TNCINFO * TNC, UCHAR * Msg, int Len)
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-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 +1787,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 +1871,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,10 +2044,6 @@ 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;
|
||||
}
|
||||
|
||||
|
|
|
|||
143
KISSHF.c
143
KISSHF.c
|
|
@ -27,10 +27,10 @@ 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)();
|
||||
int (WINAPI FAR *GetModuleFileNameExPtr)();
|
||||
extern int (WINAPI FAR *EnumProcessesPtr)();
|
||||
|
||||
#include "bpq32.h"
|
||||
|
|
@ -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);
|
||||
|
|
@ -68,10 +68,13 @@ static int RigControlRow = 165;
|
|||
#include <commctrl.h>
|
||||
#endif
|
||||
|
||||
extern char * PortConfig[33];
|
||||
extern int SemHeldByAPI;
|
||||
|
||||
static RECT Rect;
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
static int ProcessLine(char * buf, int Port);
|
||||
|
||||
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
|
||||
|
|
@ -222,6 +225,8 @@ VOID SuspendOtherPorts(struct TNCINFO * ThisTNC);
|
|||
VOID ReleaseOtherPorts(struct TNCINFO * ThisTNC);
|
||||
VOID WritetoTrace(struct TNCINFO * TNC, char * Msg, int Len);
|
||||
|
||||
#define MAXBPQPORTS 32
|
||||
|
||||
static time_t ltime;
|
||||
|
||||
static VOID SendToTNC(struct TNCINFO * TNC, int Stream, UCHAR * Encoded, int EncLen)
|
||||
|
|
@ -265,7 +270,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
|
||||
|
|
@ -342,7 +346,7 @@ ok:
|
|||
|
||||
sprintf(Msg, "%d SCANSTOP", TNC->Port);
|
||||
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Msg);
|
||||
Rig_Command(-1, Msg);
|
||||
}
|
||||
|
||||
if (STREAM->Attached)
|
||||
|
|
@ -350,7 +354,6 @@ ok:
|
|||
|
||||
// See if any frames for this port
|
||||
|
||||
|
||||
STREAM = &TNC->Streams[0];
|
||||
|
||||
if (STREAM->BPQtoPACTOR_Q)
|
||||
|
|
@ -359,7 +362,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 +422,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,13 +458,9 @@ 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]))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, &buff->L2DATA[0]))
|
||||
{
|
||||
}
|
||||
else
|
||||
|
|
@ -513,8 +509,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 +621,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;
|
||||
|
|
@ -722,7 +717,7 @@ VOID KISSHFReleaseTNC(struct TNCINFO * TNC)
|
|||
// Start Scanner
|
||||
|
||||
sprintf(TXMsg, "%d SCANSTART 15", TNC->Port);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, TXMsg);
|
||||
Rig_Command(-1, TXMsg);
|
||||
|
||||
strcpy(TNC->WEB_TNCSTATE, "Free");
|
||||
MySetWindowText(TNC->xIDC_TNCSTATE, TNC->WEB_TNCSTATE);
|
||||
|
|
@ -730,18 +725,12 @@ VOID KISSHFReleaseTNC(struct TNCINFO * TNC)
|
|||
ReleaseOtherPorts(TNC);
|
||||
}
|
||||
|
||||
VOID KISSHFSuspendPort(struct TNCINFO * TNC, struct TNCINFO * THISTNC)
|
||||
VOID KISSHFSuspendPort(struct TNCINFO * TNC)
|
||||
{
|
||||
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 +740,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 +751,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 +802,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 +981,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 +1189,7 @@ VOID KISSThread(void * portptr)
|
|||
if (FD_ISSET(TNC->TCPSock, &readfs))
|
||||
{
|
||||
GetSemaphore(&Semaphore, 52);
|
||||
KISSHFProcessReceivedPacket(TNC, Channel);
|
||||
KISSHFProcessReceivedPacket(TNC);
|
||||
FreeSemaphore(&Semaphore);
|
||||
}
|
||||
|
||||
|
|
@ -1260,43 +1248,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[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 +1288,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 +1340,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 +1359,6 @@ VOID KISSHFProcessReceivedPacket(struct TNCINFO * TNC, int Channel)
|
|||
}
|
||||
}
|
||||
|
||||
ignoreit:
|
||||
|
||||
if (TNC->InputLen == 0)
|
||||
return;
|
||||
|
||||
|
|
@ -1541,7 +1468,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;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
#include "BpqTermMDI.h"
|
||||
#include "bpqtermmdi.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
|
@ -50,19 +50,6 @@ BEGIN
|
|||
LTEXT "Enable IGate",IDC_STATIC,5,2,49,10
|
||||
END
|
||||
|
||||
CLOSING DIALOG DISCARDABLE 300, 300, 200, 50
|
||||
STYLE DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU |
|
||||
WS_THICKFRAME
|
||||
CAPTION "BPQ32 Close All"
|
||||
CLASS "CLOSING"
|
||||
FONT 8, "Fixedsys"
|
||||
BEGIN
|
||||
LTEXT "Closing Links - Please wait....",IDC_BACKGROUND,22,20,337,273
|
||||
|
||||
END
|
||||
|
||||
|
||||
|
||||
CONFIG DIALOGEX 249, 200, 160, 118
|
||||
STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_CAPTION
|
||||
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
|
||||
|
|
@ -228,7 +215,7 @@ BEGIN
|
|||
MENUITEM "Strip Linefeeds", BPQStripLF
|
||||
MENUITEM "Log Output", BPQLogOutput
|
||||
MENUITEM "Send Disconnected", BPQSendDisconnected
|
||||
MENUITEM "Chat Terminal Mode (Send Keppalives)", CHATTERM
|
||||
MENUITEM "Chat Terminal Mode", CHATTERM
|
||||
MENUITEM "Restore Windows on load", ID_WINDOWS_RESTORE
|
||||
MENUITEM "Beep if input too long", ID_WARNWRAP
|
||||
MENUITEM "Wrap Input", ID_WRAP
|
||||
|
|
@ -254,7 +241,6 @@ BEGIN
|
|||
END
|
||||
POPUP "Monitor"
|
||||
BEGIN
|
||||
MENUITEM "Use Local Time", MONLOCALTIME
|
||||
MENUITEM "Monitor TX", BPQMTX
|
||||
MENUITEM "Monitor Supervisory", BPQMCOM
|
||||
MENUITEM "Monitor UI Only", MON_UI_ONLY
|
||||
|
|
@ -290,13 +276,13 @@ INCOMINGCALL WAVE MOVEABLE PURE "Ring.wav"
|
|||
BEGIN
|
||||
"kernelresource.h\0"
|
||||
"""\r\n"
|
||||
"BpqTermMDI.h\0"
|
||||
"bpqtermmdi.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE DISCARDABLE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"#include ""BpqTermMDI.h""\r\n"
|
||||
"#include ""bpqtermmdi.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
|
|
|
|||
209
L3Code.c
209
L3Code.c
|
|
@ -49,8 +49,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
#include "stdio.h"
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "cheaders.h"
|
||||
#include "tncinfo.h"
|
||||
#include "CHeaders.h"
|
||||
|
||||
VOID UPDATEDESTLIST();
|
||||
VOID MOVEALL(dest_list * DEST);
|
||||
|
|
@ -58,14 +57,6 @@ VOID MOVE3TO2(dest_list * DEST);
|
|||
VOID CLEARTHIRD(dest_list * DEST);
|
||||
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 +64,6 @@ extern dest_list * CURRENTNODE;
|
|||
|
||||
int L3_10SECS = 10;
|
||||
|
||||
extern int PREFERINP3ROUTES;
|
||||
|
||||
|
||||
VOID L3BG()
|
||||
{
|
||||
|
|
@ -84,7 +73,6 @@ VOID L3BG()
|
|||
struct DEST_LIST * DEST = DESTS; // NODE LIST
|
||||
struct PORTCONTROL * PORT = PORTTABLE;
|
||||
struct ROUTE * ROUTE;
|
||||
struct TNCINFO * TNC;
|
||||
|
||||
struct _LINKTABLE * LINK;
|
||||
|
||||
|
|
@ -99,28 +87,6 @@ VOID L3BG()
|
|||
if (ActiveRoute)
|
||||
{
|
||||
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 (ROUTE)
|
||||
{
|
||||
TNC = TNCInfo[ROUTE->NEIGHBOUR_PORT];
|
||||
|
||||
if (TNC && TNC->NetRomMode)
|
||||
{
|
||||
PL3MESSAGEBUFFER MSG = (PL3MESSAGEBUFFER)Q_REM(&DEST->DEST_Q);
|
||||
SendVARANetromMsg(TNC, MSG);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (ROUTE)
|
||||
LINK = ROUTE->NEIGHBOUR_LINK;
|
||||
else
|
||||
|
|
@ -151,14 +117,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,24 +136,13 @@ 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 (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
|
||||
}
|
||||
}
|
||||
if (DEST->DEST_ROUTE == 0) // ALREADY HAVE A SELECTED ROUTE?
|
||||
DEST->DEST_ROUTE = 1; // TRY TO ACTIVATE FIRST
|
||||
|
||||
ActiveRoute = DEST->DEST_ROUTE - 1;
|
||||
|
||||
|
|
@ -197,7 +150,7 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
|
|||
|
||||
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,24 +158,11 @@ 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;
|
||||
}
|
||||
|
||||
if (ROUTE == 0) // Shouldn't happen
|
||||
return FALSE;
|
||||
|
||||
|
||||
// if NetROM over VARA conection is made by the driver
|
||||
|
||||
TNC = TNCInfo[ROUTE->NEIGHBOUR_PORT];
|
||||
|
||||
if (TNC && TNC->NetRomMode)
|
||||
{
|
||||
return TRUE;
|
||||
ROUTE = DEST->ROUTE[0].ROUT_NEIGHBOUR;
|
||||
}
|
||||
|
||||
LINK = ROUTE->NEIGHBOUR_LINK;
|
||||
|
|
@ -236,7 +176,7 @@ BOOL ACTIVATE_DEST(struct DEST_LIST * DEST)
|
|||
return L2SETUPCROSSLINK(ROUTE);
|
||||
}
|
||||
|
||||
// We must be waiting for link to come up
|
||||
// We mst be waiting for link to come up
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
|
@ -255,13 +195,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,17 +231,11 @@ 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;
|
||||
}
|
||||
|
||||
Msg->ORIGIN[6] &= 0x1E; // MASK OFF LAST ADDR BIT
|
||||
|
||||
// Trap Empty Call
|
||||
|
||||
if (Msg->ORIGIN[0] == 0x40)
|
||||
return;
|
||||
|
||||
/*
|
||||
// validate call ptr = &Buffer->ORIGIN[0];
|
||||
n = 6;
|
||||
|
|
@ -358,13 +285,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 +299,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
|
||||
|
|
@ -475,10 +402,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 +514,7 @@ VOID PROCESSNODEMESSAGE(MESSAGE * Msg, struct PORTCONTROL * PORT)
|
|||
|
||||
ptr1 += 7;
|
||||
|
||||
// UPDATE ALIAS#
|
||||
// UPDATE ALIAS
|
||||
|
||||
memcpy(DEST->DEST_ALIAS, ptr1, 6);
|
||||
|
||||
|
|
@ -627,6 +554,9 @@ VOID PROCROUTES(struct DEST_LIST * DEST, struct ROUTE * ROUTE, int Qual)
|
|||
if (Index == 0)
|
||||
{
|
||||
// THIS IS A REFRESH OF BEST - IF THIS ISNT ACTIVE ROUTE, MAKE IT ACTIVE
|
||||
|
||||
if (DEST->DEST_ROUTE > 1) // LEAVE IT IF NOT SELECTED OR ALREADY USING BEST
|
||||
DEST->DEST_ROUTE = 1;
|
||||
}
|
||||
|
||||
goto UpdatateThisEntry;
|
||||
|
|
@ -725,8 +655,6 @@ SORTROUTES:
|
|||
|
||||
goto SORTROUTES; // 1 AND 2 MAY NOW BE WRONG!
|
||||
}
|
||||
|
||||
DEST->DEST_ROUTE = 0; // OForce re-evaluation.
|
||||
}
|
||||
|
||||
int COUNTNODES(struct ROUTE * ROUTE)
|
||||
|
|
@ -745,11 +673,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++;
|
||||
|
|
@ -764,26 +692,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;
|
||||
|
||||
SENDNEXTNODESFRAGMENT();
|
||||
}
|
||||
|
||||
|
|
@ -812,25 +726,21 @@ VOID SENDNEXTNODESFRAGMENT()
|
|||
|
||||
fragmentCount = 0;
|
||||
|
||||
// Don't send NODES to Shared TX or INP3 Port
|
||||
|
||||
while (PORT->PORTQUALITY == 0 || PORT->TXPORT || PORT->INP3ONLY)
|
||||
// Don't send NODES to Shared TX or INP3 Port
|
||||
{
|
||||
// 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;
|
||||
|
||||
DEST = CURRENTNODE = DESTS; // START OF LIST
|
||||
|
|
@ -888,16 +798,6 @@ VOID SENDNEXTNODESFRAGMENT()
|
|||
if (DEST >= ENDDESTLIST)
|
||||
{
|
||||
CURRENTNODE = 0; // Finished on this port
|
||||
|
||||
// if sending to only one port then stop
|
||||
|
||||
if (NODESToOnePort)
|
||||
{
|
||||
NODESToOnePort = 0;
|
||||
NODESINPROGRESS = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
L3CURRENTPORT = PORT->PORTPOINTER;
|
||||
if (L3CURRENTPORT == NULL)
|
||||
{
|
||||
|
|
@ -905,13 +805,12 @@ VOID SENDNEXTNODESFRAGMENT()
|
|||
|
||||
NODESINPROGRESS = 0;
|
||||
}
|
||||
}
|
||||
goto Sendit;
|
||||
}
|
||||
|
||||
if (DEST->DEST_CALL[0] != 0x40 && DEST->NRROUTE[0].ROUT_QUALITY >= TXMINQUAL &&
|
||||
if (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
|
||||
|
||||
|
|
@ -944,9 +843,6 @@ VOID SENDNEXTNODESFRAGMENT()
|
|||
|
||||
*(ptr1++) = (UCHAR)Qual;
|
||||
|
||||
if (Qual == 0)
|
||||
continue;
|
||||
|
||||
Count--;
|
||||
}
|
||||
DEST++;
|
||||
|
|
@ -960,11 +856,7 @@ Sendit:
|
|||
|
||||
if (Buffer->LENGTH > 35 || fragmentCount == 0) // Always send first even if no other nodes
|
||||
{
|
||||
if (PORT->TNC && PORT->TNC->Hardware == H_VARA)
|
||||
SendVARANetromNodes(PORT->TNC, Buffer);
|
||||
else
|
||||
PUT_ON_PORT_Q(PORT, Buffer);
|
||||
|
||||
fragmentCount++;
|
||||
}
|
||||
else
|
||||
|
|
@ -993,15 +885,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;
|
||||
|
|
@ -1016,7 +906,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
|
||||
|
||||
|
|
@ -1041,8 +931,7 @@ VOID L3TimerProc()
|
|||
LINK = LINKS;
|
||||
i = MAXLINKS;
|
||||
|
||||
|
||||
while (i--)
|
||||
while (i--);
|
||||
{
|
||||
if (LINK->LINKTYPE == 3) // Only if Internode
|
||||
{
|
||||
|
|
@ -1095,7 +984,7 @@ VOID L3TimerProc()
|
|||
|
||||
L3TIMER = L3INTERVAL;
|
||||
UPDATEDESTLIST();
|
||||
SENDNODESMSG(0);
|
||||
SENDNODESMSG();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1110,7 +999,7 @@ VOID L3TimerProc()
|
|||
{
|
||||
ROUTE++;
|
||||
|
||||
if (ROUTE->NEIGHBOUR_FLAG) // Locked?
|
||||
if (ROUTE->NEIGHBOUR_FLAG & 1) // Locked?
|
||||
continue;
|
||||
|
||||
if (ROUTE->NEIGHBOUR_LINK) // Has an active Session
|
||||
|
|
@ -1131,20 +1020,10 @@ VOID L3FastTimer()
|
|||
// ID MESSAGE SEQUENCE
|
||||
|
||||
MESSAGE * Msg;
|
||||
struct PORTCONTROL * PORT = PORTTABLE;
|
||||
|
||||
// Not if Node is closing
|
||||
|
||||
if (CLOSING)
|
||||
return;
|
||||
struct PORTCONTROL * PORT ;
|
||||
|
||||
INP3TIMER();
|
||||
|
||||
// Send Node faster if VARA
|
||||
|
||||
if (NODESINPROGRESS && L3CURRENTPORT->TNC && L3CURRENTPORT->TNC->NetRomMode)
|
||||
SENDNEXTNODESFRAGMENT();
|
||||
|
||||
L3_10SECS--;
|
||||
|
||||
if (L3_10SECS == 0)
|
||||
|
|
@ -1197,7 +1076,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
|
||||
|
||||
|
|
@ -1310,9 +1189,6 @@ VOID REMOVENODE(dest_list * DEST)
|
|||
while (DEST->DEST_Q)
|
||||
ReleaseBuffer(Q_REM(&DEST->DEST_Q));
|
||||
|
||||
if (DEST->DEST_STATE & 0x80) // LOCKED DESTINATION
|
||||
return;
|
||||
|
||||
// MAY NEED TO CHECK FOR L4 CIRCUITS USING DEST, BUT PROBABLY NOT,
|
||||
// AS THEY SHOULD HAVE TIMED OUT LONG AGO
|
||||
|
||||
|
|
@ -1372,25 +1248,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
|
||||
|
|
@ -1399,10 +1269,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;
|
||||
|
|
@ -1415,7 +1284,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)
|
||||
{
|
||||
|
|
|
|||
478
LinBPQ.c
478
LinBPQ.c
|
|
@ -21,14 +21,13 @@ 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>
|
||||
//#include "C:\Program Files (x86)\GnuWin32\include\iconv.h"
|
||||
#else
|
||||
#include <iconv.h>
|
||||
#include <errno.h>
|
||||
#ifndef MACBPQ
|
||||
#ifndef FREEBSD
|
||||
#include <sys/prctl.h>
|
||||
|
|
@ -45,11 +44,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,13 +74,6 @@ int upnpClose();
|
|||
void SaveAIS();
|
||||
void initAIS();
|
||||
void DRATSPoll();
|
||||
void RHPPoll();
|
||||
|
||||
VOID GetPGConfig();
|
||||
void SendBBSDataToPktMap();
|
||||
void CloseAllLinks();
|
||||
void hookNodeClosing(char * Reason);
|
||||
void NETROMTCPResolve();
|
||||
|
||||
BOOL IncludesMail = FALSE;
|
||||
BOOL IncludesChat = FALSE;
|
||||
|
|
@ -186,15 +174,8 @@ int _MYTIMEZONE = 0;
|
|||
/* #define F_PWD 0x1000 */
|
||||
|
||||
|
||||
extern UCHAR BPQDirectory[260];
|
||||
extern UCHAR LogDirectory[260];
|
||||
extern UCHAR ConfigDirectory[260];
|
||||
|
||||
// overrides from params
|
||||
UCHAR LogDir[260] = "";
|
||||
UCHAR ConfigDir[260] = "";
|
||||
UCHAR DataDir[260] = "";
|
||||
|
||||
UCHAR BPQDirectory[260];
|
||||
UCHAR LogDirectory[260];
|
||||
|
||||
BOOL GetConfig(char * ConfigName);
|
||||
VOID DecryptPass(char * Encrypt, unsigned char * Pass, unsigned int len);
|
||||
|
|
@ -209,8 +190,8 @@ BOOL ChatInit();
|
|||
VOID CloseChat();
|
||||
VOID CloseTNCEmulator();
|
||||
|
||||
static config_t cfg;
|
||||
static config_setting_t * group;
|
||||
config_t cfg;
|
||||
config_setting_t * group;
|
||||
|
||||
BOOL MonBBS = TRUE;
|
||||
BOOL MonCHAT = TRUE;
|
||||
|
|
@ -263,9 +244,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;
|
||||
|
|
@ -276,26 +257,6 @@ int Slowtimer = 0;
|
|||
#define REPORTINTERVAL 15 * 549; // Magic Ticks Per Minute for PC's nominal 100 ms timer
|
||||
int ReportTimer = 0;
|
||||
|
||||
// Console Terminal Support
|
||||
|
||||
struct ConTermS
|
||||
{
|
||||
int BPQStream;
|
||||
BOOL Active;
|
||||
int Incoming;
|
||||
|
||||
char kbbuf[INPUTLEN];
|
||||
int kbptr;
|
||||
|
||||
char * KbdStack[MAXSTACK];
|
||||
int StackIndex;
|
||||
|
||||
BOOL CONNECTED;
|
||||
int SlowTimer;
|
||||
};
|
||||
|
||||
struct ConTermS ConTerm = {0, 0};
|
||||
|
||||
|
||||
VOID CheckProgramErrors()
|
||||
{
|
||||
|
|
@ -338,7 +299,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 );
|
||||
|
|
@ -346,7 +306,6 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
|
|||
// CTRL-CLOSE: confirm that the user wants to exit.
|
||||
case CTRL_CLOSE_EVENT:
|
||||
|
||||
CloseAllLinks();
|
||||
CLOSING = TRUE;
|
||||
printf( "Ctrl-Close event\n\n" );
|
||||
Sleep(20000);
|
||||
|
|
@ -357,7 +316,6 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
|
|||
case CTRL_BREAK_EVENT:
|
||||
Beep( 900, 200 );
|
||||
printf( "Ctrl-Break event\n\n" );
|
||||
CloseAllLinks();
|
||||
CLOSING = TRUE;
|
||||
Beep( 750, 300 );
|
||||
return FALSE;
|
||||
|
|
@ -370,7 +328,6 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
|
|||
case CTRL_SHUTDOWN_EVENT:
|
||||
Beep( 750, 500 );
|
||||
printf( "Ctrl-Shutdown event\n\n" );
|
||||
CloseAllLinks();
|
||||
CLOSING = TRUE;
|
||||
Beep( 750, 300 );
|
||||
return FALSE;
|
||||
|
|
@ -382,70 +339,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();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -524,9 +429,8 @@ 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;
|
||||
}
|
||||
|
|
@ -582,7 +486,7 @@ int SESSHDDRLEN = 0;
|
|||
UCHAR MCOM;
|
||||
UCHAR MUIONLY;
|
||||
UCHAR MTX;
|
||||
uint64_t MMASK;
|
||||
unsigned long long MMASK;
|
||||
|
||||
|
||||
UCHAR AuthorisedProgram; // Local Variable. Set if Program is on secure list
|
||||
|
|
@ -614,202 +518,6 @@ UCHAR * GetLogDirectory()
|
|||
}
|
||||
extern int POP3Timer;
|
||||
|
||||
// Console Terminal Stuff
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
|
||||
|
||||
#define _getch getchar
|
||||
|
||||
/**
|
||||
Linux (POSIX) implementation of _kbhit().
|
||||
Morgan McGuire, morgan@cs.brown.edu
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/select.h>
|
||||
#include <termios.h>
|
||||
|
||||
int _kbhit() {
|
||||
static const int STDIN = 0;
|
||||
static int initialized = 0;
|
||||
|
||||
if (! initialized) {
|
||||
// Use termios to turn off line buffering
|
||||
struct termios term;
|
||||
tcgetattr(STDIN, &term);
|
||||
term.c_lflag &= ~ICANON;
|
||||
|
||||
tcsetattr(STDIN, TCSANOW, &term);
|
||||
setbuf(stdin, NULL);
|
||||
initialized = 1;
|
||||
}
|
||||
|
||||
int bytesWaiting;
|
||||
ioctl(STDIN, FIONREAD, &bytesWaiting);
|
||||
return bytesWaiting;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void ConTermInput(char * Msg)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (ConTerm.BPQStream == 0)
|
||||
{
|
||||
ConTerm.BPQStream = FindFreeStream();
|
||||
|
||||
if (ConTerm.BPQStream == 255)
|
||||
{
|
||||
ConTerm.BPQStream = 0;
|
||||
printf("No Free Streams\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ConTerm.CONNECTED)
|
||||
SessionControl(ConTerm.BPQStream, 1, 0);
|
||||
|
||||
ConTerm.StackIndex = 0;
|
||||
|
||||
// Stack it
|
||||
|
||||
if (ConTerm.KbdStack[19])
|
||||
free(ConTerm.KbdStack[19]);
|
||||
|
||||
for (i = 18; i >= 0; i--)
|
||||
{
|
||||
ConTerm.KbdStack[i+1] = ConTerm.KbdStack[i];
|
||||
}
|
||||
|
||||
ConTerm.KbdStack[0] = _strdup(ConTerm.kbbuf);
|
||||
|
||||
ConTerm.kbbuf[ConTerm.kbptr]=13;
|
||||
|
||||
SendMsg(ConTerm.BPQStream, ConTerm.kbbuf, ConTerm.kbptr+1);
|
||||
}
|
||||
|
||||
void ConTermPoll()
|
||||
{
|
||||
int port, sesstype, paclen, maxframe, l4window, len;
|
||||
int state, change, InputLen, count;
|
||||
char callsign[11] = "";
|
||||
char Msg[300];
|
||||
|
||||
// Get current Session State. Any state changed is ACK'ed
|
||||
// automatically. See BPQHOST functions 4 and 5.
|
||||
|
||||
SessionState(ConTerm.BPQStream, &state, &change);
|
||||
|
||||
if (change == 1)
|
||||
{
|
||||
if (state == 1)
|
||||
{
|
||||
// Connected
|
||||
|
||||
ConTerm.CONNECTED = TRUE;
|
||||
ConTerm.SlowTimer = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConTerm.CONNECTED = FALSE;
|
||||
printf("*** Disconnected\n");
|
||||
}
|
||||
}
|
||||
|
||||
GetMsg(ConTerm.BPQStream, Msg, &InputLen, &count);
|
||||
|
||||
if (InputLen)
|
||||
{
|
||||
char * ptr = Msg;
|
||||
char * ptr2 = ptr;
|
||||
Msg[InputLen] = 0;
|
||||
|
||||
while (ptr)
|
||||
{
|
||||
ptr2 = strlop(ptr, 13);
|
||||
|
||||
// Replace CR with CRLF
|
||||
|
||||
printf("%s", ptr);
|
||||
|
||||
if (ptr2)
|
||||
printf("\r\n");
|
||||
|
||||
ptr = ptr2;
|
||||
}
|
||||
}
|
||||
|
||||
if (_kbhit())
|
||||
{
|
||||
unsigned char c = _getch();
|
||||
|
||||
if (c == 0xe0)
|
||||
{
|
||||
// Cursor control
|
||||
|
||||
c = _getch();
|
||||
|
||||
if (c == 75) // cursor left
|
||||
c = 8;
|
||||
}
|
||||
|
||||
#ifdef WIN32
|
||||
printf("%c", c);
|
||||
#endif
|
||||
if (c == 8)
|
||||
{
|
||||
if (ConTerm.kbptr)
|
||||
ConTerm.kbptr--;
|
||||
printf(" \b"); // Already echoed bs - clear typed char from screen
|
||||
return;
|
||||
}
|
||||
|
||||
if (c == 13 || c == 10)
|
||||
{
|
||||
ConTermInput(ConTerm.kbbuf);
|
||||
ConTerm.kbptr = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
ConTerm.kbbuf[ConTerm.kbptr++] = c;
|
||||
fflush(NULL);
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
#include <getopt.h>
|
||||
|
||||
static struct option long_options[] =
|
||||
{
|
||||
{"logdir", required_argument, 0 , 'l'},
|
||||
{"configdir", required_argument, 0 , 'c'},
|
||||
{"datadir", required_argument, 0 , 'd'},
|
||||
{"help", no_argument, 0 , 'h'},
|
||||
{ NULL , no_argument , NULL , no_argument }
|
||||
};
|
||||
|
||||
char HelpScreen[] =
|
||||
"Usage:\n"
|
||||
"Optional Paramters\n"
|
||||
"-l path or --logdir path Path for log files\n"
|
||||
"-c path or --configdir path Path to Config file bpq32.cfg\n"
|
||||
"-d path or --datadir path Path to Data Files\n"
|
||||
"-v Show version and exit\n";
|
||||
|
||||
int Redirected = 0;
|
||||
|
||||
static void segvhandler(int sig);
|
||||
static void abrthandler(int sig);
|
||||
|
||||
void GetRestartData();
|
||||
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
int i;
|
||||
|
|
@ -817,6 +525,7 @@ int main(int argc, char * argv[])
|
|||
ConnectionInfo * conn;
|
||||
struct stat STAT;
|
||||
PEXTPORTDATA PORTVEC;
|
||||
UCHAR LogDir[260];
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
|
|
@ -839,10 +548,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);
|
||||
|
|
@ -851,82 +556,20 @@ int main(int argc, char * argv[])
|
|||
prctl(PR_SET_DUMPABLE, 1); // Enable Core Dumps even with setcap
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// 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;
|
||||
|
||||
#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
|
||||
|
||||
{
|
||||
int val;
|
||||
UCHAR * ptr1;
|
||||
UCHAR * ptr2;
|
||||
int c;
|
||||
|
||||
while (1)
|
||||
{
|
||||
int option_index = 0;
|
||||
|
||||
c = getopt_long(argc, argv, "l:c:d:hv", long_options, &option_index);
|
||||
|
||||
// Check for end of operation or error
|
||||
|
||||
if (c == -1)
|
||||
break;
|
||||
|
||||
// Handle options
|
||||
switch (c)
|
||||
{
|
||||
case 'h':
|
||||
|
||||
printf("%s", HelpScreen);
|
||||
exit (0);
|
||||
|
||||
case 'l':
|
||||
strcpy(LogDir, optarg);
|
||||
printf("cc %s\n", LogDir);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
strcpy(ConfigDir, optarg);
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
strcpy(DataDir, optarg);
|
||||
break;
|
||||
|
||||
|
||||
case '?':
|
||||
/* getopt_long already printed an error message. */
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
if (argc > 1 && _stricmp(argv[1], "-v") == 0)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(RlineVer, "LinBPQ%d.%d.%d", Ver[0], Ver[1], Ver[2]);
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
|
@ -935,41 +578,22 @@ int main(int argc, char * argv[])
|
|||
|
||||
#ifdef WIN32
|
||||
GetCurrentDirectory(256, BPQDirectory);
|
||||
GetCurrentDirectory(256, LogDirectory);
|
||||
#else
|
||||
getcwd(BPQDirectory, 256);
|
||||
getcwd(LogDirectory, 256);
|
||||
#endif
|
||||
Consoleprintf("Current Directory is %s\n", BPQDirectory);
|
||||
|
||||
strcpy(ConfigDirectory, BPQDirectory);
|
||||
strcpy(LogDirectory, BPQDirectory);
|
||||
|
||||
Consoleprintf("Current Directory is %s", BPQDirectory);
|
||||
|
||||
if (LogDir[0])
|
||||
{
|
||||
strcpy(LogDirectory, LogDir);
|
||||
}
|
||||
if (DataDir[0])
|
||||
{
|
||||
strcpy(BPQDirectory, DataDir);
|
||||
Consoleprintf("Working Directory is %s", BPQDirectory);
|
||||
}
|
||||
if (ConfigDir[0])
|
||||
{
|
||||
strcpy(ConfigDirectory, ConfigDir);
|
||||
Consoleprintf("Config Directory is %s", ConfigDirectory);
|
||||
}
|
||||
|
||||
for (i = optind; i < argc; i++)
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (_memicmp(argv[i], "logdir=", 7) == 0)
|
||||
{
|
||||
strcpy(LogDirectory, &argv[i][7]);
|
||||
Consoleprintf("Log Directory is %s\n", LogDirectory);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Consoleprintf("Log Directory is %s", LogDirectory);
|
||||
|
||||
// Make sure logs directory exists
|
||||
|
||||
|
|
@ -978,13 +602,7 @@ int main(int argc, char * argv[])
|
|||
#ifdef WIN32
|
||||
CreateDirectory(LogDir, NULL);
|
||||
#else
|
||||
printf("Making Directory %s\n", LogDir);
|
||||
i = mkdir(LogDir, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
if (i == -1 && errno != EEXIST)
|
||||
{
|
||||
perror("Couldn't create log directory\n");
|
||||
return 0;
|
||||
}
|
||||
mkdir(LogDir, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
chmod(LogDir, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
#endif
|
||||
|
||||
|
|
@ -1012,8 +630,6 @@ int main(int argc, char * argv[])
|
|||
return (0);
|
||||
}
|
||||
|
||||
NETROMTCPResolve();
|
||||
|
||||
for (i=0;PWTEXT[i] > 0x20;i++); //Scan for cr or null
|
||||
|
||||
PWLen=i;
|
||||
|
|
@ -1070,7 +686,7 @@ int main(int argc, char * argv[])
|
|||
|
||||
#endif
|
||||
|
||||
for (i = optind; i < argc; i++)
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (_stricmp(argv[i], "chat") == 0)
|
||||
IncludesChat = TRUE;
|
||||
|
|
@ -1121,7 +737,7 @@ int main(int argc, char * argv[])
|
|||
|
||||
// Start Mail if requested by command line or config
|
||||
|
||||
for (i = optind; i < argc; i++)
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (_stricmp(argv[i], "mail") == 0)
|
||||
IncludesMail = TRUE;
|
||||
|
|
@ -1200,8 +816,6 @@ int main(int argc, char * argv[])
|
|||
chmod(MailDir, S_IRWXU | S_IRWXG | S_IRWXO);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// Make backup copies of Databases
|
||||
|
||||
// CopyConfigFile(ConfigName);
|
||||
|
|
@ -1222,8 +836,6 @@ int main(int argc, char * argv[])
|
|||
GetBIDDatabase();
|
||||
GetBadWordFile();
|
||||
GetHTMLForms();
|
||||
GetPGConfig();
|
||||
GetRestartData();
|
||||
|
||||
// Make sure there is a user record for the BBS, with BBS bit set.
|
||||
|
||||
|
|
@ -1313,7 +925,10 @@ int main(int argc, char * argv[])
|
|||
|
||||
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
|
||||
|
|
@ -1352,8 +967,7 @@ int main(int argc, char * argv[])
|
|||
DoHouseKeeping(FALSE);
|
||||
}
|
||||
}
|
||||
for (i = optind; i < argc; i++)
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
if (_stricmp(argv[i], "tidymail") == 0)
|
||||
DeleteRedundantMessages();
|
||||
|
|
@ -1365,22 +979,16 @@ int main(int argc, char * argv[])
|
|||
printf("Mail Started\n");
|
||||
Logprintf(LOG_BBS, NULL, '!', "Mail Starting");
|
||||
|
||||
APIClock = 0;
|
||||
|
||||
SendBBSDataToPktMap();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
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++)
|
||||
|
|
@ -1471,7 +1079,6 @@ int main(int argc, char * argv[])
|
|||
SaveMessageDatabase();
|
||||
SaveBIDDatabase();
|
||||
SaveConfig(ConfigName);
|
||||
SaveRestartData();
|
||||
}
|
||||
|
||||
KEEPGOING--; // Give time for links to close
|
||||
|
|
@ -1546,8 +1153,6 @@ int main(int argc, char * argv[])
|
|||
|
||||
Start();
|
||||
|
||||
NETROMTCPResolve();
|
||||
|
||||
INITIALISEPORTS();
|
||||
|
||||
SetApplPorts();
|
||||
|
|
@ -1609,9 +1214,6 @@ int main(int argc, char * argv[])
|
|||
|
||||
FreeSemaphore(&Semaphore);
|
||||
|
||||
if (Redirected == 0)
|
||||
ConTermPoll();
|
||||
|
||||
if (NUMBEROFTNCPORTS)
|
||||
TNCTimer();
|
||||
|
||||
|
|
@ -1619,7 +1221,6 @@ int main(int argc, char * argv[])
|
|||
Poll_AGW();
|
||||
|
||||
DRATSPoll();
|
||||
RHPPoll();
|
||||
|
||||
HTTPTimer();
|
||||
|
||||
|
|
@ -1651,15 +1252,13 @@ int main(int argc, char * argv[])
|
|||
{
|
||||
PollStreams();
|
||||
|
||||
if ((Slowtimer % 20) == 0)
|
||||
FWDTimerProc();
|
||||
|
||||
if (Slowtimer > 100) // 10 secs
|
||||
{
|
||||
time_t NOW = time(NULL);
|
||||
struct tm * tm;
|
||||
|
||||
TCPTimer();
|
||||
FWDTimerProc();
|
||||
BBSSlowTimer();
|
||||
|
||||
if (MaintClock < NOW)
|
||||
|
|
@ -1671,21 +1270,14 @@ 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
|
||||
{
|
||||
if (GenerateTrafficReport && (LastTrafficTime + 86400) < NOW)
|
||||
{
|
||||
CreateBBSTrafficReport();
|
||||
LastTrafficTime = NOW;
|
||||
CreateBBSTrafficReport();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1697,9 +1289,6 @@ int main(int argc, char * argv[])
|
|||
Slowtimer = 0;
|
||||
}
|
||||
|
||||
hookNodeClosing("Shutdown");
|
||||
Sleep(500);
|
||||
|
||||
printf("Closing Ports\n");
|
||||
|
||||
CloseTNCEmulator();
|
||||
|
|
@ -1803,10 +1392,8 @@ void * InitializeExtDriver(PEXTPORTDATA PORTVEC)
|
|||
_strupr(Value);
|
||||
|
||||
#ifndef FREEBSD
|
||||
#ifndef MACBPQ
|
||||
if (strstr(Value, "BPQETHER"))
|
||||
return ETHERExtInit;
|
||||
#endif
|
||||
#endif
|
||||
if (strstr(Value, "BPQAXIP"))
|
||||
return AXIPExtInit;
|
||||
|
|
@ -2000,7 +1587,6 @@ struct TNCINFO * TNC;
|
|||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#ifndef MACBPQ
|
||||
#ifdef __MACH__
|
||||
|
||||
#include <mach/mach_time.h>
|
||||
|
|
@ -2008,8 +1594,6 @@ struct TNCINFO * TNC;
|
|||
#define CLOCK_REALTIME 0
|
||||
#define CLOCK_MONOTONIC 0
|
||||
|
||||
|
||||
|
||||
int clock_gettime(int clk_id, struct timespec *t){
|
||||
mach_timebase_info_data_t timebase;
|
||||
mach_timebase_info(&timebase);
|
||||
|
|
@ -2022,10 +1606,8 @@ int clock_gettime(int clk_id, struct timespec *t){
|
|||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
uint64_t GetTickCount()
|
||||
int GetTickCount()
|
||||
{
|
||||
struct timespec ts;
|
||||
clock_gettime(CLOCK_REALTIME, &ts);
|
||||
|
|
|
|||
|
|
@ -23,10 +23,6 @@ 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 ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int len)
|
||||
{
|
||||
Buffer[len] = 0;
|
||||
|
|
@ -90,7 +86,6 @@ VOID ProcessMBLLine(CIRCUIT * conn, struct UserInfo * user, UCHAR* Buffer, int l
|
|||
FBBputs(conn, ">\r");
|
||||
Msg->status = 'Y'; // Mark as read
|
||||
SaveMessageDatabase();
|
||||
SendMessageReadEvent(user->Call, Msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -200,12 +195,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 +278,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 +296,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 +350,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--;
|
||||
}
|
||||
|
||||
|
|
|
|||
427
MCP2221.c
427
MCP2221.c
|
|
@ -1,427 +0,0 @@
|
|||
// MCP2221.cpp : This file contains the 'main' function. Program execution begins and ends there.
|
||||
//
|
||||
|
||||
#define _CRT_SECURE_NO_DEPRECATE
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "time.h"
|
||||
#include "winstdint.h"
|
||||
|
||||
#include "hidapi.h"
|
||||
void DecodeCM108(int Port, char * ptr);
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
/* Simple Raw HID functions for Windows - for use with Teensy RawHID example
|
||||
* http://www.pjrc.com/teensy/rawhid.html
|
||||
* Copyright (c) 2009 PJRC.COM, LLC
|
||||
*
|
||||
* rawhid_open - open 1 or more devices
|
||||
* rawhid_recv - receive a packet
|
||||
* rawhid_send - send a packet
|
||||
* rawhid_close - close a device
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above description, website URL and copyright notice and this permission
|
||||
* notice shall be included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
* Version 1.0: Initial Release
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
//#include <stdint.h>
|
||||
#include <windows.h>
|
||||
#include <setupapi.h>
|
||||
//#include <ddk/hidsdi.h>
|
||||
//#include <ddk/hidclass.h>
|
||||
|
||||
typedef USHORT USAGE;
|
||||
|
||||
|
||||
typedef struct _HIDD_CONFIGURATION {
|
||||
PVOID cookie;
|
||||
ULONG size;
|
||||
ULONG RingBufferSize;
|
||||
} HIDD_CONFIGURATION, *PHIDD_CONFIGURATION;
|
||||
|
||||
typedef struct _HIDD_ATTRIBUTES {
|
||||
ULONG Size;
|
||||
USHORT VendorID;
|
||||
USHORT ProductID;
|
||||
USHORT VersionNumber;
|
||||
} HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES;
|
||||
|
||||
|
||||
typedef struct _HIDP_CAPS {
|
||||
USAGE Usage;
|
||||
USAGE UsagePage;
|
||||
USHORT InputReportByteLength;
|
||||
USHORT OutputReportByteLength;
|
||||
USHORT FeatureReportByteLength;
|
||||
USHORT Reserved[17];
|
||||
USHORT NumberLinkCollectionNodes;
|
||||
USHORT NumberInputButtonCaps;
|
||||
USHORT NumberInputValueCaps;
|
||||
USHORT NumberInputDataIndices;
|
||||
USHORT NumberOutputButtonCaps;
|
||||
USHORT NumberOutputValueCaps;
|
||||
USHORT NumberOutputDataIndices;
|
||||
USHORT NumberFeatureButtonCaps;
|
||||
USHORT NumberFeatureValueCaps;
|
||||
USHORT NumberFeatureDataIndices;
|
||||
} HIDP_CAPS, *PHIDP_CAPS;
|
||||
|
||||
|
||||
typedef struct _HIDP_PREPARSED_DATA * PHIDP_PREPARSED_DATA;
|
||||
|
||||
|
||||
|
||||
// a list of all opened HID devices, so the caller can
|
||||
// simply refer to them by number
|
||||
typedef struct hid_struct hid_t;
|
||||
static hid_t *first_hid = NULL;
|
||||
static hid_t *last_hid = NULL;
|
||||
struct hid_struct {
|
||||
HANDLE handle;
|
||||
int open;
|
||||
struct hid_struct *prev;
|
||||
struct hid_struct *next;
|
||||
};
|
||||
static HANDLE rx_event=NULL;
|
||||
static HANDLE tx_event=NULL;
|
||||
static CRITICAL_SECTION rx_mutex;
|
||||
static CRITICAL_SECTION tx_mutex;
|
||||
|
||||
|
||||
// private functions, not intended to be used from outside this file
|
||||
static void add_hid(hid_t *h);
|
||||
static hid_t * get_hid(int num);
|
||||
static void free_all_hid(void);
|
||||
void print_win32_err(void);
|
||||
|
||||
|
||||
|
||||
|
||||
// rawhid_recv - receive a packet
|
||||
// Inputs:
|
||||
// num = device to receive from (zero based)
|
||||
// buf = buffer to receive packet
|
||||
// len = buffer's size
|
||||
// timeout = time to wait, in milliseconds
|
||||
// Output:
|
||||
// number of bytes received, or -1 on error
|
||||
//
|
||||
int rawhid_recv(int num, void *buf, int len, int timeout)
|
||||
{
|
||||
hid_t *hid;
|
||||
unsigned char tmpbuf[516];
|
||||
OVERLAPPED ov;
|
||||
DWORD r;
|
||||
int n;
|
||||
|
||||
if (sizeof(tmpbuf) < len + 1) return -1;
|
||||
hid = get_hid(num);
|
||||
if (!hid || !hid->open) return -1;
|
||||
EnterCriticalSection(&rx_mutex);
|
||||
ResetEvent(&rx_event);
|
||||
memset(&ov, 0, sizeof(ov));
|
||||
ov.hEvent = rx_event;
|
||||
if (!ReadFile(hid->handle, tmpbuf, len + 1, NULL, &ov)) {
|
||||
if (GetLastError() != ERROR_IO_PENDING) goto return_error;
|
||||
r = WaitForSingleObject(rx_event, timeout);
|
||||
if (r == WAIT_TIMEOUT) goto return_timeout;
|
||||
if (r != WAIT_OBJECT_0) goto return_error;
|
||||
}
|
||||
if (!GetOverlappedResult(hid->handle, &ov, &n, FALSE)) goto return_error;
|
||||
LeaveCriticalSection(&rx_mutex);
|
||||
if (n <= 0) return -1;
|
||||
n--;
|
||||
if (n > len) n = len;
|
||||
memcpy(buf, tmpbuf + 1, n);
|
||||
return n;
|
||||
return_timeout:
|
||||
CancelIo(hid->handle);
|
||||
LeaveCriticalSection(&rx_mutex);
|
||||
return 0;
|
||||
return_error:
|
||||
print_win32_err();
|
||||
LeaveCriticalSection(&rx_mutex);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// rawhid_send - send a packet
|
||||
// Inputs:
|
||||
// num = device to transmit to (zero based)
|
||||
// buf = buffer containing packet to send
|
||||
// len = number of bytes to transmit
|
||||
// timeout = time to wait, in milliseconds
|
||||
// Output:
|
||||
// number of bytes sent, or -1 on error
|
||||
//
|
||||
int rawhid_send(int num, void *buf, int len, int timeout)
|
||||
{
|
||||
hid_t *hid;
|
||||
unsigned char tmpbuf[516];
|
||||
OVERLAPPED ov;
|
||||
DWORD n, r;
|
||||
|
||||
if (sizeof(tmpbuf) < len + 1) return -1;
|
||||
hid = get_hid(num);
|
||||
if (!hid || !hid->open) return -1;
|
||||
EnterCriticalSection(&tx_mutex);
|
||||
ResetEvent(&tx_event);
|
||||
memset(&ov, 0, sizeof(ov));
|
||||
ov.hEvent = tx_event;
|
||||
tmpbuf[0] = 0;
|
||||
memcpy(tmpbuf + 1, buf, len);
|
||||
if (!WriteFile(hid->handle, tmpbuf, len + 1, NULL, &ov)) {
|
||||
if (GetLastError() != ERROR_IO_PENDING) goto return_error;
|
||||
r = WaitForSingleObject(tx_event, timeout);
|
||||
if (r == WAIT_TIMEOUT) goto return_timeout;
|
||||
if (r != WAIT_OBJECT_0) goto return_error;
|
||||
}
|
||||
if (!GetOverlappedResult(hid->handle, &ov, &n, FALSE)) goto return_error;
|
||||
LeaveCriticalSection(&tx_mutex);
|
||||
if (n <= 0) return -1;
|
||||
return n - 1;
|
||||
return_timeout:
|
||||
CancelIo(hid->handle);
|
||||
LeaveCriticalSection(&tx_mutex);
|
||||
return 0;
|
||||
return_error:
|
||||
print_win32_err();
|
||||
LeaveCriticalSection(&tx_mutex);
|
||||
return -1;
|
||||
}
|
||||
|
||||
HANDLE rawhid_open(char * Device)
|
||||
{
|
||||
DWORD index=0;
|
||||
HANDLE h;
|
||||
hid_t *hid;
|
||||
int count=0;
|
||||
|
||||
if (first_hid) free_all_hid();
|
||||
|
||||
if (!rx_event)
|
||||
{
|
||||
rx_event = CreateEvent(NULL, TRUE, TRUE, NULL);
|
||||
tx_event = CreateEvent(NULL, TRUE, TRUE, NULL);
|
||||
InitializeCriticalSection(&rx_mutex);
|
||||
InitializeCriticalSection(&tx_mutex);
|
||||
}
|
||||
h = CreateFile(Device, GENERIC_READ|GENERIC_WRITE,
|
||||
FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
|
||||
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
||||
|
||||
if (h == INVALID_HANDLE_VALUE)
|
||||
return 0;
|
||||
|
||||
hid = (struct hid_struct *)malloc(sizeof(struct hid_struct));
|
||||
if (!hid)
|
||||
{
|
||||
CloseHandle(h);
|
||||
return 0;
|
||||
}
|
||||
hid->handle = h;
|
||||
hid->open = 1;
|
||||
add_hid(hid);
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
|
||||
// rawhid_close - close a device
|
||||
//
|
||||
// Inputs:
|
||||
// num = device to close (zero based)
|
||||
// Output
|
||||
// (nothing)
|
||||
//
|
||||
void rawhid_close(int num)
|
||||
{
|
||||
hid_t *hid;
|
||||
|
||||
hid = get_hid(num);
|
||||
if (!hid || !hid->open) return;
|
||||
|
||||
CloseHandle(hid->handle);
|
||||
hid->handle = NULL;
|
||||
hid->open = FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void add_hid(hid_t *h)
|
||||
{
|
||||
if (!first_hid || !last_hid) {
|
||||
first_hid = last_hid = h;
|
||||
h->next = h->prev = NULL;
|
||||
return;
|
||||
}
|
||||
last_hid->next = h;
|
||||
h->prev = last_hid;
|
||||
h->next = NULL;
|
||||
last_hid = h;
|
||||
}
|
||||
|
||||
|
||||
static hid_t * get_hid(int num)
|
||||
{
|
||||
hid_t *p;
|
||||
for (p = first_hid; p && num > 0; p = p->next, num--) ;
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
static void free_all_hid(void)
|
||||
{
|
||||
hid_t *p, *q;
|
||||
|
||||
for (p = first_hid; p; p = p->next)
|
||||
{
|
||||
CloseHandle(p->handle);
|
||||
p->handle = NULL;
|
||||
p->open = FALSE;
|
||||
}
|
||||
p = first_hid;
|
||||
while (p) {
|
||||
q = p;
|
||||
p = p->next;
|
||||
free(q);
|
||||
}
|
||||
first_hid = last_hid = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void print_win32_err(void)
|
||||
{
|
||||
char buf[256];
|
||||
DWORD err;
|
||||
|
||||
err = GetLastError();
|
||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
|
||||
0, buf, sizeof(buf), NULL);
|
||||
printf("err %ld: %s\n", err, buf);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
HANDLE hDevice;
|
||||
|
||||
char * HIDDevice;
|
||||
|
||||
int main()
|
||||
{
|
||||
int Len;
|
||||
unsigned char Msg[65] = "";
|
||||
|
||||
DecodeCM108(0, "0x4D8:0xDD");
|
||||
|
||||
hDevice = rawhid_open(HIDDevice);
|
||||
|
||||
if (hDevice)
|
||||
printf("Rigcontrol HID Device %s opened\n", HIDDevice);
|
||||
|
||||
Msg[0] = 0x51;
|
||||
Msg[0] = 0xB0;
|
||||
Msg[1] = 0x1;
|
||||
|
||||
Len = rawhid_send(0, Msg, 64, 100);
|
||||
|
||||
Msg[0] = 0;
|
||||
|
||||
#ifdef WIN32
|
||||
Len = rawhid_recv(0, Msg, 64, 100);
|
||||
#else
|
||||
Len = read(PORT->hDevice, Msg, 64);
|
||||
#endif
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
char * CM108Device = NULL;
|
||||
|
||||
void DecodeCM108(int Port, char * ptr)
|
||||
{
|
||||
// Called if Device Name or PTT = Param is CM108
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
// Next Param is VID and PID - 0xd8c:0x8 or Full device name
|
||||
// On Windows device name is very long and difficult to find, so
|
||||
// easier to use VID/PID, but allow device in case more than one needed
|
||||
|
||||
char * next;
|
||||
int32_t VID = 0, PID = 0;
|
||||
char product[256];
|
||||
char sernum[256] = "NULL";
|
||||
|
||||
struct hid_device_info *devs, *cur_dev;
|
||||
const char *path_to_open = NULL;
|
||||
hid_device *handle = NULL;
|
||||
|
||||
if (strlen(ptr) > 16)
|
||||
CM108Device = _strdup(ptr);
|
||||
else
|
||||
{
|
||||
VID = strtol(ptr, &next, 0);
|
||||
if (next)
|
||||
PID = strtol(++next, &next, 0);
|
||||
|
||||
// Look for Device
|
||||
|
||||
devs = hid_enumerate(0, 0); // so we list devices(USHORT)VID, (USHORT)PID);
|
||||
cur_dev = devs;
|
||||
while (cur_dev)
|
||||
{
|
||||
wcstombs(product, cur_dev->product_string, 255);
|
||||
if (cur_dev->serial_number)
|
||||
wcstombs(sernum, cur_dev->serial_number, 255);
|
||||
|
||||
if (product)
|
||||
printf("HID Device %s VID %X PID %X Ser %s %s\n", product, cur_dev->vendor_id, cur_dev->product_id, sernum, cur_dev->path);
|
||||
else
|
||||
printf("HID Device %s VID %X PID %X Ser %s %s", "Missing Product\n", cur_dev->vendor_id, cur_dev->product_id, sernum, cur_dev->path);
|
||||
|
||||
if (cur_dev->vendor_id == VID && cur_dev->product_id == PID)
|
||||
path_to_open = cur_dev->path;
|
||||
|
||||
cur_dev = cur_dev->next;
|
||||
}
|
||||
|
||||
if (path_to_open)
|
||||
{
|
||||
HIDDevice = _strdup(path_to_open);
|
||||
}
|
||||
hid_free_enumeration(devs);
|
||||
}
|
||||
#else
|
||||
|
||||
// Linux - Next Param HID Device, eg /dev/hidraw0
|
||||
|
||||
CM108Device = _strdup(ptr);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
35
MULTIPSK.c
35
MULTIPSK.c
|
|
@ -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>
|
||||
|
||||
|
|
@ -54,13 +54,16 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
extern int (WINAPI FAR *GetModuleFileNameExPtr)();
|
||||
|
||||
//int ResetExtDriver(int num);
|
||||
extern char * PortConfig[33];
|
||||
|
||||
extern struct TNCINFO * TNCInfo[41]; // Records are Malloc'd
|
||||
|
||||
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,8 +74,11 @@ 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 MAXBPQPORTS 32
|
||||
#define MAXMPSKPORTS 16
|
||||
|
||||
//LOGFONT LFTTYFONT ;
|
||||
|
|
@ -82,7 +88,7 @@ extern UCHAR BPQDirectory[];
|
|||
static int MPSKChannel[MAXBPQPORTS+1]; // BPQ Port to MPSK Port
|
||||
static int BPQPort[MAXMPSKPORTS][MAXBPQPORTS+1]; // MPSK Port and Connection to BPQ Port
|
||||
|
||||
extern int MasterPort[MAXBPQPORTS+1]; // Pointer to first BPQ port for a specific MPSK host
|
||||
static int MasterPort[MAXBPQPORTS+1]; // Pointer to first BPQ port for a specific MPSK host
|
||||
|
||||
// Each port may be on a different machine. We only open one connection to each MPSK instance
|
||||
|
||||
|
|
@ -181,7 +187,7 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
// Stop Scanning
|
||||
|
||||
sprintf(Cmd, "%d SCANSTOP", TNC->Port);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Cmd);
|
||||
Rig_Command(-1, Cmd);
|
||||
|
||||
len = sprintf(Cmd, "%cSTOP_BEACON_ARQ_FAE\x1b", '\x1a');
|
||||
|
||||
|
|
@ -407,12 +413,9 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
|
|||
|
||||
if (_memicmp(buff->L2DATA, "RADIO ", 6) == 0)
|
||||
{
|
||||
char cmd[56];
|
||||
sprintf(buff->L2DATA, "%d %s", TNC->Port, &buff->L2DATA[6]);
|
||||
|
||||
strcpy(cmd, &buff->L2DATA[6]);
|
||||
sprintf(buff->L2DATA, "%d %s", TNC->Port, cmd);
|
||||
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK, buff->L2DATA))
|
||||
if (Rig_Command(TNC->PortRecord->ATTACHEDSESSIONS[0]->L4CROSSLINK->CIRCUITINDEX, buff->L2DATA))
|
||||
{
|
||||
}
|
||||
else
|
||||
|
|
@ -713,7 +716,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 +1321,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 +1391,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 +1406,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 +1487,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++)
|
||||
{
|
||||
|
|
@ -1534,7 +1537,7 @@ VOID CloseComplete(struct TNCINFO * TNC, int Stream)
|
|||
int Len;
|
||||
|
||||
sprintf(Cmd, "%d SCANSTART 15", TNC->Port);
|
||||
Rig_Command( (TRANSPORTENTRY *) -1, Cmd);
|
||||
Rig_Command(-1, Cmd);
|
||||
|
||||
Cmd[0] = 0;
|
||||
|
||||
|
|
@ -1542,7 +1545,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);
|
||||
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@ VOID DoSetIdleTime(CIRCUIT * conn, struct UserInfo * user, char * Arg1, char * C
|
|||
return;
|
||||
}
|
||||
|
||||
nodeprintf(conn, "Idle Time set to %d\r", IdleTime);
|
||||
nodeprintf(conn, "Idle Tine set to %d\r", IdleTime);
|
||||
SendPrompt(conn, user);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
|
|
@ -221,4 +219,3 @@ char ** HoldTo; // Hold on TO Call
|
|||
char ** HoldAt; // Hold on AT Call
|
||||
char ** HoldBID; // Hold on BID
|
||||
|
||||
struct ConsoleInfo * ConsHeader[2];
|
||||
627
MailNode.vcproj
Normal file
627
MailNode.vcproj
Normal file
|
|
@ -0,0 +1,627 @@
|
|||
<?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="..\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="..\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="..\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>
|
||||
65
MailNode.vcproj.DESKTOP-TGEL8RC.John.user
Normal file
65
MailNode.vcproj.DESKTOP-TGEL8RC.John.user
Normal 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="DESKTOP-TGEL8RC"
|
||||
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="DESKTOP-TGEL8RC"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
65
MailNode.vcproj.SKIGACER.johnw.user
Normal file
65
MailNode.vcproj.SKIGACER.johnw.user
Normal 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="SKIGACER"
|
||||
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="SKIGACER"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
296
MailNode.vcxproj
Normal file
296
MailNode.vcxproj
Normal file
|
|
@ -0,0 +1,296 @@
|
|||
<?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>$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir>C:\Dev\Msdev2005\Intermed\LinBPQ\$(Configuration)\</IntDir>
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IntDir>C:\Dev\Msdev2005\Intermed\LinBPQ\$(Configuration)\</IntDir>
|
||||
<OutDir>c:\LinBPQ</OutDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>$(SolutionDir)$(Configuration)\</OutDir>
|
||||
<IntDir>C:\Dev\Msdev2005\Intermed\LinBPQ\$(Configuration)\</IntDir>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IntDir>C:\Dev\Msdev2005\Intermed\LinBPQ\$(Configuration)\</IntDir>
|
||||
</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;C:\Dev\Msdev2005\Projects\BPQ32\CKernel\Debug\libconfig.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:\Dev\Msdev2005\Projects\BPQ32\CKernel\x64\Debug\libconfig.lib;DbgHelp.lib;setupapi.lib;C:\Users\John\OneDrive\Dev\Source\miniupnpc-2.2.3\msvc\x64\Debug\miniupnpc.lib;zlibstat64.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>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
</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;%(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;%(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;%(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="FBBRoutines.c" />
|
||||
<ClCompile Include="FLDigi.c" />
|
||||
<ClCompile Include="FreeDATA.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" />
|
||||
<ClInclude Include="pngconf.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
220
MailRouting.c
220
MailRouting.c
|
|
@ -29,9 +29,9 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
|||
|
||||
// Bulls should not be distributed outside their designated area.
|
||||
|
||||
// Use 4 char continent codes if this is set
|
||||
// Use 4 char continent codes if this isn't defined
|
||||
|
||||
int FOURCHARCONT = 0;
|
||||
#define TWOCHARCONT
|
||||
|
||||
|
||||
#include "bpqmail.h"
|
||||
|
|
@ -95,21 +95,21 @@ struct Continent Continents[] =
|
|||
|
||||
struct Country Countries[] =
|
||||
{
|
||||
"AFG", "ASIA", "AS", // Afghanistan
|
||||
"AFG", "****", "AS", // Afghanistan
|
||||
"ALA", "EURO", "EU", // Åland Islands
|
||||
"ALB", "EURO", "EU", // Albania
|
||||
"DZA", "NAFR", "AF", // Algeria
|
||||
"ASM", "ASIA", "AS", // American Samoa
|
||||
"ASM", "****", "AS", // American Samoa
|
||||
"AND", "EURO", "EU", // Andorra
|
||||
"AGO", "CAFR", "AF", // Angola
|
||||
"AIA", "CARB", "NA", // Anguilla
|
||||
"ATG", "CARB", "NA", // Antigua and Barbuda
|
||||
"ARG", "SOAM", "SA", // Argentina
|
||||
"ARM", "ASIA", "AS", // Armenia
|
||||
"ARM", "****", "AS", // Armenia
|
||||
"ABW", "CARB", "NA", // Aruba
|
||||
"AUS", "AUNZ", "OC", // Australia
|
||||
"AUT", "EURO", "EU", // Austria
|
||||
"AZE", "ASIA", "AS", // Azerbaijan
|
||||
"AZE", "****", "AS", // Azerbaijan
|
||||
"BHS", "CARB", "NA", // Bahamas
|
||||
"BHR", "MDLE", "AS", // Bahrain
|
||||
"BGD", "INDE", "AS", // Bangladesh
|
||||
|
|
@ -122,14 +122,14 @@ struct Country Countries[] =
|
|||
"BTN", "ASIA", "AS", // Bhutan
|
||||
"BOL", "SOAM", "SA", // Bolivia (Plurinational State of)
|
||||
"BIH", "EURO", "EU", // Bosnia and Herzegovina
|
||||
"BWA", "SAFR", "AF", // Botswana
|
||||
"BWA", "****", "AF", // Botswana
|
||||
"BRA", "SOAM", "SA", // Brazil
|
||||
"VGB", "CARB", "NA", // British Virgin Islands
|
||||
"BRN", "ASIA", "AS", // Brunei Darussalam
|
||||
"BGR", "EURO", "EU", // Bulgaria
|
||||
"BFA", "CAFR", "AF", // Burkina Faso
|
||||
"BDI", "CAFR", "AF", // Burundi
|
||||
"KHM", "ASIA", "AS", // Cambodia
|
||||
"KHM", "****", "AS", // Cambodia
|
||||
"CMR", "CAFR", "AF", // Cameroon
|
||||
"CAN", "NOAM", "NA", // Canada
|
||||
"CPV", "NAFR", "AF", // Cape Verde
|
||||
|
|
@ -137,12 +137,12 @@ struct Country Countries[] =
|
|||
"CAF", "CAFR", "AF", // Central African Republic
|
||||
"TCD", "CAFR", "AF", // Chad
|
||||
"CHL", "SOAM", "SA", // Chile
|
||||
"CHN", "ASIA", "AS", // China
|
||||
"HKG", "ASIA", "AS", // Hong Kong Special Administrative Region of China
|
||||
"MAC", "ASIA", "AS", // Macao Special Administrative Region of China
|
||||
"COL", "ASIA", "SA", // Colombia
|
||||
// "COM", "SAFR", "AF", // Comoros
|
||||
"COG", "CAFR", "AF", // Congo
|
||||
"CHN", "****", "AS", // China
|
||||
"HKG", "****", "AS", // Hong Kong Special Administrative Region of China
|
||||
"MAC", "****", "AS", // Macao Special Administrative Region of China
|
||||
"COL", "****", "SA", // Colombia
|
||||
"COM", "SAFR", "AF", // Comoros
|
||||
"COG", "****", "AF", // Congo
|
||||
"COK", "SPAC", "OC", // Cook Islands
|
||||
"CRI", "CEAM", "NA", // Costa Rica
|
||||
"CIV", "CAFR", "AF", // Côte d'Ivoire
|
||||
|
|
@ -150,8 +150,8 @@ struct Country Countries[] =
|
|||
"CUB", "CARB", "NA", // Cuba
|
||||
"CYP", "EURO", "EU", // Cyprus
|
||||
"CZE", "EURO", "EU", // Czech Republic
|
||||
"PRK", "ASIA", "AS", // Democratic People's Republic of Korea
|
||||
"COD", "CAFR", "AF", // Democratic Republic of the Congo
|
||||
"PRK", "****", "AS", // Democratic People's Republic of Korea
|
||||
"COD", "****", "AF", // Democratic Republic of the Congo
|
||||
"DNK", "EURO", "EU", // Denmark
|
||||
"DJI", "NAFR", "AF", // Djibouti
|
||||
"DMA", "CARB", "NA", // Dominica
|
||||
|
|
@ -160,9 +160,9 @@ struct Country Countries[] =
|
|||
"EGY", "MDLE", "AF", // Egypt
|
||||
"SLV", "CEAM", "NA", // El Salvador
|
||||
"GNQ", "CAFR", "AF", // Equatorial Guinea
|
||||
"ERI", "NAFR", "AF", // Eritrea
|
||||
"ERI", "****", "AF", // Eritrea
|
||||
"EST", "EURO", "EU", // Estonia
|
||||
"ETH", "NAFR", "AF", // Ethiopia
|
||||
"ETH", "****", "AF", // Ethiopia
|
||||
"FRO", "EURO", "EU", // Faeroe Islands
|
||||
"FLK", "SOAM", "SA", // Falkland Islands (Malvinas)
|
||||
"FJI", "SPAC", "OC", // Fiji
|
||||
|
|
@ -192,7 +192,7 @@ struct Country Countries[] =
|
|||
"HUN", "EURO", "EU", // Hungary
|
||||
"ISL", "EURO", "EU", // Iceland
|
||||
"IND", "INDI", "AS", // India
|
||||
"IDN", "ASIA", "AS", // Indonesia
|
||||
"IDN", "****", "AS", // Indonesia
|
||||
"IRN", "MDLE", "AS", // Iran (Islamic Republic of)
|
||||
"IRQ", "MDLE", "AS", // Iraq
|
||||
"IRL", "EURO", "EU", // Ireland
|
||||
|
|
@ -200,11 +200,11 @@ struct Country Countries[] =
|
|||
"ISR", "MDLE", "AS", // Israel
|
||||
"ITA", "EURO", "EU", // Italy
|
||||
"JAM", "CEAM", "NA", // Jamaica
|
||||
"JPN", "ASIA", "AS", // Japan
|
||||
"JPN", "****", "AS", // Japan
|
||||
"JEY", "EURO", "EU", // Jersey
|
||||
"JOR", "MDLE", "AS", // Jordan
|
||||
"KAZ", "ASIA", "AS", // Kazakhstan
|
||||
"KEN", "CAFR", "AF", // Kenya
|
||||
"KAZ", "****", "AS", // Kazakhstan
|
||||
"KEN", "****", "AF", // Kenya
|
||||
"KIR", "EPAC", "OC", // Kiribati
|
||||
"KWT", "MDLE", "AS", // Kuwait
|
||||
"KGZ", "ASIA", "AS", // Kyrgyzstan
|
||||
|
|
@ -228,25 +228,25 @@ struct Country Countries[] =
|
|||
"MRT", "NAFR", "AF", // Mauritania
|
||||
"MUS", "SAFR", "AF", // Mauritius
|
||||
"MYT", "SAFR", "AF", // Mayotte
|
||||
"MEX", "NOAM", "NA", // Mexico
|
||||
"MEX", "****", "NA", // Mexico
|
||||
"FSM", "WPAC", "OC", // Micronesia (Federated States of)
|
||||
"MCO", "EURO", "EU", // Monaco
|
||||
"MNG", "ASIA", "AS", // Mongolia
|
||||
"MNG", "****", "AS", // Mongolia
|
||||
"MNE", "EURO", "EU", // Montenegro
|
||||
"MSR", "CARB", "NA", // Montserrat
|
||||
"MAR", "NAFR", "AF", // Morocco
|
||||
"MOZ", "SAFR", "AF", // Mozambique
|
||||
"MMR", "ASIA", "AS", // Myanmar
|
||||
"NAM", "SAFR", "AF", // Namibia
|
||||
"NAM", "****", "AF", // Namibia
|
||||
"NRU", "WPAC", "OC", // Nauru
|
||||
"NPL", "ASIA", "AS", // Nepal
|
||||
"NPL", "****", "AS", // Nepal
|
||||
"NLD", "EURO", "EU", // Netherlands
|
||||
"ANT", "CARB", "NA", // Netherlands Antilles
|
||||
"NCL", "SPAC", "OC", // New Caledonia
|
||||
"NZL", "AUNZ", "OC", // New Zealand
|
||||
"NIC", "CEAM", "SA", // Nicaragua
|
||||
"NIC", "****", "SA", // Nicaragua
|
||||
"NER", "NAFR", "AF", // Niger
|
||||
"NGA", "CAFR", "AF", // Nigeria
|
||||
"NGA", "****", "AF", // Nigeria
|
||||
"NIU", "SPAC", "OC", // Niue
|
||||
"NFK", "SPAC", "OC", // Norfolk Island
|
||||
"MNP", "WPAC", "OC", // Northern Mariana Islands
|
||||
|
|
@ -270,7 +270,7 @@ struct Country Countries[] =
|
|||
"REU", "SAFR", "AF", // Réunion
|
||||
"ROU", "EURO", "EU", // Romania
|
||||
"RUS", "ASIA", "AS", // Russian Federation
|
||||
"RWA", "CAFR", "AF", // Rwanda
|
||||
"RWA", "****", "AF", // Rwanda
|
||||
"BLM", "CARB", "NA", // Saint-Barthélemy
|
||||
"SHN", "SOAM", "SA", // Saint Helena
|
||||
"KNA", "CARB", "NA", // Saint Kitts and Nevis
|
||||
|
|
@ -285,50 +285,50 @@ struct Country Countries[] =
|
|||
"SEN", "CAFR", "AF", // Senegal
|
||||
"SRB", "EURO", "EU", // Serbia
|
||||
"SYC", "SAFR", "AF", // Seychelles
|
||||
"SLE", "NAFR", "AF", // Sierra Leone
|
||||
"SGP", "ASIA", "AS", // Singapore
|
||||
"SLE", "****", "AF", // Sierra Leone
|
||||
"SGP", "****", "AS", // Singapore
|
||||
"SVK", "EURO", "EU", // Slovakia
|
||||
"SVN", "EURO", "EU", // Slovenia
|
||||
"SLB", "SPAC", "OC", // Solomon Islands
|
||||
"SOM", "NAFR", "AF", // Somalia
|
||||
"SOM", "****", "AF", // Somalia
|
||||
"ZAF", "SAFR", "AF", // South Africa
|
||||
"ESP", "EURO", "EU", // Spain
|
||||
"LKA", "INDE", "AS", // Sri Lanka
|
||||
"SDN", "NAFR", "AF", // Sudan
|
||||
"SDN", "****", "AF", // Sudan
|
||||
"SUR", "SOAM", "SA", // Suriname
|
||||
"SJM", "EURO", "EU", // Svalbard and Jan Mayen Islands
|
||||
"SWZ", "SAFR", "AF", // Swaziland
|
||||
"SWZ", "****", "AF", // Swaziland
|
||||
"SWE", "EURO", "EU", // Sweden
|
||||
"CHE", "EURO", "EU", // Switzerland
|
||||
"SYR", "MDLE", "AS", // Syrian Arab Republic
|
||||
"TJK", "ASIA", "AS", // Tajikistan
|
||||
"THA", "ASIA", "AS", // Thailand
|
||||
"THA", "****", "AS", // Thailand
|
||||
"MKD", "EURO", "EU", // The former Yugoslav Republic of Macedonia
|
||||
"TLS", "ASIA", "AS", // Timor-Leste
|
||||
"TGO", "CAFR", "AF", // Togo
|
||||
"TKL", "AUNZ", "OC", // Tokelau
|
||||
"TON", "SPAC", "OC", // Tonga
|
||||
"TTO", "CARB", "NA", // Trinidad and Tobago
|
||||
"TUN", "NAFR", "AF", // Tunisia
|
||||
"TUN", "****", "AF", // Tunisia
|
||||
"TUR", "EURO", "EU", // Turkey
|
||||
"TKM", "ASIA", "AS", // Turkmenistan
|
||||
"TKM", "****", "AS", // Turkmenistan
|
||||
"TCA", "CARB", "NA", // Turks and Caicos Islands
|
||||
"TUV", "SPAC", "OC", // Tuvalu
|
||||
"UGA", "SAFR", "AF", // Uganda
|
||||
"UGA", "****", "AF", // Uganda
|
||||
"UKR", "EURO", "EU", // Ukraine
|
||||
"ARE", "MDLE", "AS", // United Arab Emirates
|
||||
"GBR", "EURO", "EU", // United Kingdom of Great Britain and Northern Ireland
|
||||
"TZA", "SAFR", "AF", // United Republic of Tanzania
|
||||
"TZA", "****", "AF", // United Republic of Tanzania
|
||||
"USA", "NOAM", "NA", // United States of America
|
||||
"VIR", "CARB", "NA", // United States Virgin Islands
|
||||
"URY", "SOAM", "SA", // Uruguay
|
||||
"UZB", "ASIA", "AS", // Uzbekistan
|
||||
"VUT", "SPAC", "OC", // Vanuatu
|
||||
"VEN", "SOAM", "SA", // Venezuela (Bolivarian Republic of)
|
||||
"VNM", "ASIA", "AS", // Viet Nam
|
||||
"VNM", "****", "AS", // Viet Nam
|
||||
"WLF", "SPAC", "OC", // Wallis and Futuna Islands
|
||||
"ESH", "CAFR", "AF", // Western Sahara
|
||||
"YEM", "NAFR", "AF", // Yemen
|
||||
"ESH", "****", "AF", // Western Sahara
|
||||
"YEM", "****", "AF", // Yemen
|
||||
"ZMB", "SAFR", "AF", // Zambia
|
||||
"ZWE", "SAFR", "AF" // Zimbabwe
|
||||
};
|
||||
|
|
@ -435,8 +435,7 @@ VOID SetupMyHA()
|
|||
|
||||
if (MyElements[1])
|
||||
{
|
||||
if (FOURCHARCONT == 0)
|
||||
{
|
||||
#ifdef TWOCHARCONT
|
||||
if (strlen(MyElements[1]) == 4)
|
||||
{
|
||||
// Convert to 2 char Continent;
|
||||
|
|
@ -447,9 +446,7 @@ VOID SetupMyHA()
|
|||
MyElements[1] = _strdup(Continent->TwoCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#else
|
||||
if (strlen(MyElements[1]) == 2)
|
||||
{
|
||||
// Convert to 4 char Continent;
|
||||
|
|
@ -460,7 +457,7 @@ VOID SetupMyHA()
|
|||
MyElements[1] = _strdup(Continent->FourCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -582,8 +579,7 @@ VOID SetupHAElements(struct BBSForwardingInfo * ForwardingInfo)
|
|||
|
||||
if (ForwardingInfo->BBSHAElements[1])
|
||||
{
|
||||
if (FOURCHARCONT == 0)
|
||||
{
|
||||
#ifdef TWOCHARCONT
|
||||
if (strlen(ForwardingInfo->BBSHAElements[1]) == 4)
|
||||
{
|
||||
// Convert to 2 char Continent;
|
||||
|
|
@ -594,9 +590,7 @@ VOID SetupHAElements(struct BBSForwardingInfo * ForwardingInfo)
|
|||
ForwardingInfo->BBSHAElements[1] = _strdup(Continent->TwoCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#else
|
||||
if (strlen(ForwardingInfo->BBSHAElements[1]) == 2)
|
||||
{
|
||||
// Convert to 4 char Continent;
|
||||
|
|
@ -607,7 +601,8 @@ VOID SetupHAElements(struct BBSForwardingInfo * ForwardingInfo)
|
|||
ForwardingInfo->BBSHAElements[1] = _strdup(Continent->FourCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
free(SaveHText);
|
||||
|
|
@ -699,9 +694,7 @@ VOID SetupHAddreses(struct BBSForwardingInfo * ForwardingInfo)
|
|||
|
||||
if (ForwardingInfo->HADDRS[Count][1])
|
||||
{
|
||||
if (FOURCHARCONT == 0)
|
||||
{
|
||||
|
||||
#ifdef TWOCHARCONT
|
||||
if (strlen(ForwardingInfo->HADDRS[Count][1]) == 4)
|
||||
{
|
||||
// Convert to 2 char Continent;
|
||||
|
|
@ -712,9 +705,7 @@ VOID SetupHAddreses(struct BBSForwardingInfo * ForwardingInfo)
|
|||
ForwardingInfo->HADDRS[Count][1] = _strdup(Continent->TwoCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#else
|
||||
if (strlen(ForwardingInfo->HADDRS[Count][1]) == 2)
|
||||
{
|
||||
// Convert to 4 char Continent;
|
||||
|
|
@ -725,7 +716,8 @@ VOID SetupHAddreses(struct BBSForwardingInfo * ForwardingInfo)
|
|||
ForwardingInfo->HADDRS[Count][1] = _strdup(Continent->FourCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
free(SaveHText);
|
||||
HText++;
|
||||
|
|
@ -789,9 +781,7 @@ VOID SetupHAddresesP(struct BBSForwardingInfo * ForwardingInfo)
|
|||
|
||||
if (ForwardingInfo->HADDRSP[Count][1])
|
||||
{
|
||||
if (FOURCHARCONT == 0)
|
||||
{
|
||||
|
||||
#ifdef TWOCHARCONT
|
||||
if (strlen(ForwardingInfo->HADDRSP[Count][1]) == 4)
|
||||
{
|
||||
// Convert to 2 char Continent;
|
||||
|
|
@ -802,9 +792,7 @@ VOID SetupHAddresesP(struct BBSForwardingInfo * ForwardingInfo)
|
|||
ForwardingInfo->HADDRSP[Count][1] = _strdup(Continent->TwoCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#else
|
||||
if (strlen(ForwardingInfo->HADDRSP[Count][1]) == 2)
|
||||
{
|
||||
// Convert to 4 char Continent;
|
||||
|
|
@ -815,7 +803,7 @@ VOID SetupHAddresesP(struct BBSForwardingInfo * ForwardingInfo)
|
|||
ForwardingInfo->HADDRSP[Count][1] = _strdup(Continent->FourCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
free(SaveHText);
|
||||
HText++;
|
||||
|
|
@ -829,14 +817,14 @@ VOID CheckAndSend(struct MsgInfo * Msg, CIRCUIT * conn, struct UserInfo * bbs)
|
|||
{
|
||||
struct BBSForwardingInfo * ForwardingInfo = bbs->ForwardingInfo;
|
||||
|
||||
if (ForwardToMe || _stricmp(bbs->Call, BBSName) != 0) // Don't forward to ourself - already here! (unless ForwardToMe set)
|
||||
if (ForwardToMe || _stricmp(bbs->Call, BBSName) != 0) // Dont forward to ourself - already here! (unless ForwardToMe set)
|
||||
{
|
||||
if ((conn == NULL) || (!(conn->BBSFlags & BBS) || (_stricmp(conn->UserPointer->Call, bbs->Call) != 0))) // Dont send back
|
||||
{
|
||||
set_fwd_bit(Msg->fbbs, bbs->BBSNumber);
|
||||
ForwardingInfo->MsgCount++;
|
||||
if (ForwardingInfo->SendNew)
|
||||
ForwardingInfo->FwdTimer = ForwardingInfo->FwdInterval - (2 + (rand() % 30)); //Short delay to prevent all starting at once
|
||||
ForwardingInfo->FwdTimer = ForwardingInfo->FwdInterval;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -1235,11 +1223,11 @@ int MatchMessagetoBBSList(struct MsgInfo * Msg, CIRCUIT * conn)
|
|||
if (Country)
|
||||
{
|
||||
// Just need to add Continent and WW
|
||||
if (FOURCHARCONT == 0)
|
||||
#ifdef TWOCHARCONT
|
||||
sprintf_s(FullRoute, sizeof(FullRoute),"%s.%s.WW", RouteElements, Country->Continent2);
|
||||
else
|
||||
#else
|
||||
sprintf_s(FullRoute, sizeof(FullRoute),"%s.%s.WW", RouteElements, Country->Continent4);
|
||||
|
||||
#endif
|
||||
goto FULLHA;
|
||||
}
|
||||
|
||||
|
|
@ -1282,8 +1270,7 @@ FULLHA:
|
|||
|
||||
if (HElements[1])
|
||||
{
|
||||
if (FOURCHARCONT == 0)
|
||||
{
|
||||
#ifdef TWOCHARCONT
|
||||
if (strlen(HElements[1]) == 4)
|
||||
{
|
||||
// Convert to 2 char Continent;
|
||||
|
|
@ -1294,9 +1281,7 @@ FULLHA:
|
|||
HElements[1] = _strdup(Continent->TwoCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#else
|
||||
if (strlen(HElements[1]) == 2)
|
||||
{
|
||||
// Convert to 4 char Continent;
|
||||
|
|
@ -1307,7 +1292,7 @@ FULLHA:
|
|||
HElements[1] = _strdup(Continent->FourCharCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1317,10 +1302,6 @@ FULLHA:
|
|||
{
|
||||
int i = 0;
|
||||
|
||||
// Log My HA for debugging
|
||||
|
||||
Logprintf(LOG_BBS, conn, '?', "Routing Trace. Check if reached correct area My HA is %s", HRoute);
|
||||
|
||||
// All elements of Helements must match Myelements
|
||||
|
||||
while (MyElements[i] && HElements[i]) // Until one set runs out
|
||||
|
|
@ -1405,75 +1386,6 @@ NOHA:
|
|||
goto CheckWildCardedAT;
|
||||
}
|
||||
|
||||
// First check P message to multiple destinations
|
||||
|
||||
// We should choose the BBS with most matching elements (ie match on #23.GBR better that GBR)
|
||||
// If SendPtoMultiple is set I think we send to any with same match level
|
||||
|
||||
// So if SendPtoMultiple is set I think I need to find the best depth then send to all with the same depth
|
||||
// If none are found on HA match drop through.
|
||||
|
||||
// But this means a message at the @BBS call will be forwarded without checking the Implied AT. So do that first
|
||||
|
||||
|
||||
if (SendPtoMultiple && Msg->type == 'P')
|
||||
{
|
||||
struct UserInfo * bestbbs = NULL;
|
||||
int bestmatch = 0;
|
||||
int depth;
|
||||
int Matched = 0;
|
||||
int MultiPDepth = 0;
|
||||
|
||||
Count = 0;
|
||||
|
||||
Logprintf(LOG_BBS, conn, '?', "SendPtoMultiple is set. Checking for best match level");
|
||||
|
||||
for (bbs = BBSChain; bbs; bbs = bbs->BBSNext)
|
||||
{
|
||||
ForwardingInfo = bbs->ForwardingInfo;
|
||||
|
||||
// Check Implied AT
|
||||
|
||||
if ((strcmp(ATBBS, bbs->Call) == 0)) // @BBS = BBS
|
||||
{
|
||||
Logprintf(LOG_BBS, conn, '?', "Routing Trace %s Matches implied AT %s", ATBBS, bbs->Call);
|
||||
|
||||
CheckAndSend(Msg, conn, bbs);
|
||||
return 1;
|
||||
}
|
||||
|
||||
depth = CheckBBSHElements(Msg, bbs, ForwardingInfo, ATBBS, &HElements[0]);
|
||||
|
||||
if (depth)
|
||||
{
|
||||
if (depth > MultiPDepth)
|
||||
{
|
||||
MultiPDepth = depth;
|
||||
bestbbs = bbs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (MultiPDepth)
|
||||
{
|
||||
for (bbs = BBSChain; bbs; bbs = bbs->BBSNext)
|
||||
{
|
||||
ForwardingInfo = bbs->ForwardingInfo;
|
||||
|
||||
depth = CheckBBSHElements(Msg, bbs, ForwardingInfo, ATBBS, &HElements[0]);
|
||||
|
||||
if (depth == MultiPDepth)
|
||||
{
|
||||
Logprintf(LOG_BBS, conn, '?', "Routing Trace HR Matches BBS %s Depth %d", bbs->Call, depth);
|
||||
CheckAndSend(Msg, conn, bbs);
|
||||
Count++;
|
||||
}
|
||||
}
|
||||
return Count;
|
||||
}
|
||||
else
|
||||
Logprintf(LOG_BBS, conn, '?', "SendPtoMultiple is set but no match on HA");
|
||||
}
|
||||
|
||||
if (Msg->type == 'P' || Flood == 0)
|
||||
{
|
||||
|
|
@ -1486,7 +1398,6 @@ NOHA:
|
|||
int bestmatch = 0;
|
||||
int depth;
|
||||
int Matched = 0;
|
||||
int MultiPDepth = 0;
|
||||
|
||||
for (bbs = BBSChain; bbs; bbs = bbs->BBSNext)
|
||||
{
|
||||
|
|
@ -1555,7 +1466,8 @@ NOHA:
|
|||
return 1;
|
||||
}
|
||||
|
||||
// Normal HA match (not SendPToMultiple)
|
||||
// We should choose the BBS with most matching elements (ie match on #23.GBR better that GBR)
|
||||
// If SendPtoMultiple is set I think we send to any with same mtch level
|
||||
|
||||
for (bbs = BBSChain; bbs; bbs = bbs->BBSNext)
|
||||
{
|
||||
|
|
|
|||
26
MailTCP.c
26
MailTCP.c
|
|
@ -39,8 +39,9 @@ int CurrentSockets=0;
|
|||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 0
|
||||
|
||||
static SOCKADDR_IN local_sin; /* Local socket - internet style */
|
||||
static PSOCKADDR_IN psin;
|
||||
SOCKADDR_IN local_sin; /* Local socket - internet style */
|
||||
|
||||
PSOCKADDR_IN psin;
|
||||
|
||||
SOCKET smtpsock, pop3sock;
|
||||
|
||||
|
|
@ -859,11 +860,6 @@ BOOL CheckforMIME(SocketConn * sockptr, char * Msg, char ** Body, int * MsgLen)
|
|||
|
||||
int Files = 0;
|
||||
|
||||
if (*MsgLen > 5000000)
|
||||
{
|
||||
int xxx = 1;
|
||||
}
|
||||
|
||||
ptr = Msg;
|
||||
|
||||
while(*ptr != 13)
|
||||
|
|
@ -1570,12 +1566,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 +1587,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;
|
||||
|
|
@ -2105,6 +2101,7 @@ int CreateSMTPMessage(SocketConn * sockptr, int i, char * MsgTitle, time_t Date,
|
|||
else
|
||||
strcpy(B2To, Msg->to);
|
||||
|
||||
|
||||
Msg->B2Flags = B2Msg | Attachments;
|
||||
|
||||
if (Msg->type == 'P')
|
||||
|
|
@ -2211,7 +2208,6 @@ int TidyString(char * Address)
|
|||
size_t len;
|
||||
|
||||
_strupr(Address);
|
||||
Debugprintf(Address);
|
||||
|
||||
ptr1 = strchr(Address, '<');
|
||||
|
||||
|
|
@ -2265,10 +2261,6 @@ int TidyString(char * Address)
|
|||
ptr1=ptr2;
|
||||
}
|
||||
|
||||
if (ptr1 == 0)
|
||||
return 0;
|
||||
|
||||
|
||||
if (*ptr1 == '<') ptr1++;
|
||||
|
||||
ptr2 = strlop(ptr1, '>');
|
||||
|
|
@ -2655,7 +2647,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)
|
||||
|
|
@ -2896,8 +2887,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 )
|
||||
{
|
||||
//
|
||||
|
|
@ -3591,6 +3580,7 @@ VOID ProcessPOP3ClientMessage(SocketConn * sockptr, char * Buffer, int Len)
|
|||
if (sockptr->POP3MsgCount > sockptr->POP3MsgNum++)
|
||||
{
|
||||
sockprintf(sockptr, "RETR %d", sockptr->POP3MsgNum);
|
||||
|
||||
sockptr->State = WaitingForRETRResponse;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
226
Moncode.c
226
Moncode.c
|
|
@ -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,12 +59,13 @@ 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);
|
||||
|
||||
char * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen);
|
||||
UCHAR * DISPLAYIPDATAGRAM(IPMSG * IP, UCHAR * Output, int MsgLen);
|
||||
char * DISPLAYARPDATAGRAM(UCHAR * Datagram, UCHAR * Output);
|
||||
|
||||
int CountBits(uint64_t in);
|
||||
|
||||
DllExport int APIENTRY SetTraceOptions(int mask, int mtxparam, int mcomparam)
|
||||
{
|
||||
|
|
@ -75,8 +76,6 @@ DllExport int APIENTRY SetTraceOptions(int mask, int mtxparam, int mcomparam)
|
|||
// enables monitoring of protocol control frames (eg SABM, UA, RR),
|
||||
// as well as info frames.
|
||||
|
||||
// *** For external use only, supports portnum up to 31 ***
|
||||
|
||||
MMASK = mask;
|
||||
MTX = mtxparam;
|
||||
MCOM = mcomparam;
|
||||
|
|
@ -84,29 +83,9 @@ DllExport int APIENTRY SetTraceOptions(int mask, int mtxparam, int mcomparam)
|
|||
return (0);
|
||||
}
|
||||
|
||||
DllExport int APIENTRY SetTraceOptions64(uint64_t mask, int mtxparam, int mcomparam, int monUIOnly)
|
||||
{
|
||||
|
||||
// Sets the tracing options for DecodeFrame. Mask is a bit
|
||||
// mask of ports to monitor (ie 101 binary will monitor ports
|
||||
// 1 and 3). MTX enables monitoring on transmitted frames. MCOM
|
||||
// enables monitoring of protocol control frames (eg SABM, UA, RR),
|
||||
// as well as info frames.
|
||||
|
||||
// *** For external use only, supports portnum up to 63 ***
|
||||
|
||||
MMASK = mask;
|
||||
MTX = mtxparam;
|
||||
MCOM = mcomparam;
|
||||
MUIONLY = monUIOnly;
|
||||
|
||||
return (0);
|
||||
}
|
||||
DllExport int APIENTRY SetTraceOptionsEx(int mask, int mtxparam, int mcomparam, int monUIOnly)
|
||||
{
|
||||
|
||||
// *** For external use only, supports portnum up to 31 ***
|
||||
|
||||
// Sets the tracing options for DecodeFrame. Mask is a bit
|
||||
// mask of ports to monitor (ie 101 binary will monitor ports
|
||||
// 1 and 3). MTX enables monitoring on transmitted frames. MCOM
|
||||
|
|
@ -139,17 +118,18 @@ int IntSetTraceOptionsEx(uint64_t mask, int mtxparam, int mcomparam, int monUIOn
|
|||
|
||||
return 0;
|
||||
}
|
||||
int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, unsigned long long Mask, BOOL APRS, BOOL MCTL);
|
||||
|
||||
int APRSDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask)
|
||||
int APRSDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, UINT Mask)
|
||||
{
|
||||
return IntDecodeFrame(msg, buffer, Stamp, Mask, TRUE, FALSE);
|
||||
}
|
||||
DllExport int APIENTRY DecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp)
|
||||
DllExport int APIENTRY DecodeFrame(MESSAGE * msg, char * buffer, int Stamp)
|
||||
{
|
||||
return IntDecodeFrame(msg, buffer, Stamp, MMASK, FALSE, FALSE);
|
||||
}
|
||||
|
||||
int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BOOL APRS, BOOL MINI)
|
||||
int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, unsigned long long Mask, BOOL APRS, BOOL MINI)
|
||||
{
|
||||
UCHAR * ptr;
|
||||
int n;
|
||||
|
|
@ -162,6 +142,7 @@ int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BO
|
|||
int Port;
|
||||
int MSGFLAG = 0; //CR and V1 flags
|
||||
char * Output = buffer;
|
||||
int HH, MM, SS;
|
||||
char TR = 'R';
|
||||
char From[10], To[10];
|
||||
BOOL Info = 0;
|
||||
|
|
@ -171,15 +152,6 @@ int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BO
|
|||
|
||||
size_t MsgLen = msg->LENGTH;
|
||||
|
||||
// Use gmtime so we can also display in local time
|
||||
|
||||
struct tm * TM;
|
||||
|
||||
if (MTX & 0x80)
|
||||
TM = localtime(&Stamp);
|
||||
else
|
||||
TM = gmtime(&Stamp);
|
||||
|
||||
// MINI mode is for Node Listen (remote monitor) Mode. Keep info to minimum
|
||||
/*
|
||||
KO6IZ*>K7TMG-1:
|
||||
|
|
@ -195,12 +167,9 @@ KC6OAR*>ID:
|
|||
|
||||
Port = msg->PORT;
|
||||
|
||||
if (Port == 40)
|
||||
Port = Port;
|
||||
|
||||
if (Port & 0x80)
|
||||
{
|
||||
if ((MTX & 1) == 0)
|
||||
if (MTX == 0)
|
||||
return 0; // TRANSMITTED FRAME - SEE IF MTX ON
|
||||
|
||||
TR = 'T';
|
||||
|
|
@ -208,13 +177,8 @@ KC6OAR*>ID:
|
|||
|
||||
Port &= 0x7F;
|
||||
|
||||
if ((((uint64_t)1 << (Port - 1)) & Mask) == 0) // Check MMASK
|
||||
{
|
||||
if (msg->Padding[0] == '[')
|
||||
msg->Padding[0] = 0;
|
||||
|
||||
if (((1ll << (Port - 1)) & Mask) == 0) // Check MMASK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// We now pass Text format monitoring from non-ax25 drivers through this code
|
||||
|
|
@ -229,9 +193,17 @@ KC6OAR*>ID:
|
|||
|
||||
// Need Timestamp and T/R
|
||||
|
||||
// Add Port: unless Mail Mon (port 64)
|
||||
Stamp = Stamp % 86400; // Secs
|
||||
HH = (int)(Stamp / 3600);
|
||||
|
||||
Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", TM->tm_hour, TM->tm_min, TM->tm_sec, TR);
|
||||
Stamp -= HH * 3600;
|
||||
MM = (int)(Stamp / 60);
|
||||
|
||||
SS = (int)(Stamp - MM * 60);
|
||||
|
||||
// Add Port: unless Mail Mon (port 33)
|
||||
|
||||
Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", HH, MM, SS, TR);
|
||||
|
||||
strcpy(Output, &msg->DEST[1]);
|
||||
Output += strlen(Output);
|
||||
|
|
@ -239,7 +211,7 @@ KC6OAR*>ID:
|
|||
if (buffer[strlen(buffer) -1] == '\r')
|
||||
Output--;
|
||||
|
||||
if (Port == 64)
|
||||
if (Port == 33)
|
||||
Output += sprintf((char *)Output, " \r");
|
||||
else
|
||||
Output += sprintf((char *)Output, " Port=%d\r", Port);
|
||||
|
|
@ -257,9 +229,11 @@ KC6OAR*>ID:
|
|||
ptr += 7;
|
||||
n--;
|
||||
|
||||
if (n < 0)
|
||||
if (n == 0)
|
||||
{
|
||||
return 0; // Corrupt - no end of address bit
|
||||
}
|
||||
}
|
||||
|
||||
// Reached End of digis
|
||||
|
||||
|
|
@ -291,12 +265,20 @@ KC6OAR*>ID:
|
|||
}
|
||||
|
||||
|
||||
Stamp = Stamp % 86400; // Secs
|
||||
HH = (int)(Stamp / 3600);
|
||||
|
||||
Stamp -= HH * 3600;
|
||||
MM = (int)(Stamp / 60);
|
||||
|
||||
SS = (int)(Stamp - MM * 60);
|
||||
|
||||
// Add Port: if MINI mode and monitoring more than one port
|
||||
|
||||
if (MINI == 0)
|
||||
Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", TM->tm_hour, TM->tm_min, TM->tm_sec, TR);
|
||||
Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", HH, MM, SS, TR);
|
||||
else
|
||||
if (CountBits64(Mask) > 1)
|
||||
if (CountBits(Mask) > 1)
|
||||
Output += sprintf((char *)Output, "%d:", Port);
|
||||
|
||||
From[ConvFromAX25(msg->ORIGIN, From)] = 0;
|
||||
|
|
@ -535,41 +517,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,17 +612,16 @@ 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
|
||||
return DisplayINP3RIF(&ADJBUFFER->L2DATA[1], Output, MsgLen - (MSGHDDRLEN + 14 + 3));
|
||||
return DisplayINP3RIF(&ADJBUFFER->L2DATA[1], Output, MsgLen - 24);
|
||||
|
||||
memcpy(Alias, ++ptr, 6);
|
||||
|
||||
|
|
@ -692,14 +648,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 +671,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,9 +679,6 @@ 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);
|
||||
|
||||
if (MsgLen > 38) // BPQ Extended Params
|
||||
|
|
@ -755,7 +694,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 +704,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 +722,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 +935,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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue