6.0.23.58
This commit is contained in:
parent
814c68fcc4
commit
f1bf68a545
|
@ -11323,7 +11323,7 @@ VOID ProcessTextFwdLine(ConnectionInfo * conn, struct UserInfo * user, char * Bu
|
||||||
MsgPtr = MsgBytes;
|
MsgPtr = MsgBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(&temp, &conn->FwdMsg->datereceived, 4);
|
memcpy(&temp, &conn->FwdMsg->datereceived, sizeof(time_t));
|
||||||
tm = gmtime(&temp);
|
tm = gmtime(&temp);
|
||||||
|
|
||||||
nodeprintf(conn, "R:%02d%02d%02d/%02d%02dZ %d@%s.%s %s\r",
|
nodeprintf(conn, "R:%02d%02d%02d/%02d%02dZ %d@%s.%s %s\r",
|
||||||
|
|
|
@ -1109,7 +1109,7 @@
|
||||||
// Fix BID Hold and Reject filters
|
// Fix BID Hold and Reject filters
|
||||||
// Fix Webmail auto-refresh when page exceeds 64K bytes (54)
|
// Fix Webmail auto-refresh when page exceeds 64K bytes (54)
|
||||||
// Fix Webmail send when using both headers/footers and attachmonts (55)
|
// Fix Webmail send when using both headers/footers and attachmonts (55)
|
||||||
|
// Fix R: line corruption on some 64 bit builds
|
||||||
|
|
||||||
#include "bpqmail.h"
|
#include "bpqmail.h"
|
||||||
#define MAIL
|
#define MAIL
|
||||||
|
|
2
Bpq32.c
2
Bpq32.c
|
@ -1152,6 +1152,8 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
|
||||||
// Use sha1 code from https://www.packetizer.com/security/sha1/ instead of openssl (53)
|
// Use sha1 code from https://www.packetizer.com/security/sha1/ instead of openssl (53)
|
||||||
// Fix TNC Emulator Monitoring (53)
|
// Fix TNC Emulator Monitoring (53)
|
||||||
// Fix attach and connect on Telnet port bug introduced in .55 (56)
|
// Fix attach and connect on Telnet port bug introduced in .55 (56)
|
||||||
|
// Fix stopping WinRPR TNC and Start/Stop UZ7HO TNCX on Linux (57)
|
||||||
|
|
||||||
|
|
||||||
#define CKernel
|
#define CKernel
|
||||||
|
|
||||||
|
|
|
@ -1244,7 +1244,7 @@ VOID SendCompressed(CIRCUIT * conn, struct MsgInfo * FwdMsg)
|
||||||
|
|
||||||
DataOffset = (int)(Outputptr - Output); // Used if restarting
|
DataOffset = (int)(Outputptr - Output); // Used if restarting
|
||||||
|
|
||||||
memcpy(&temp, &FwdMsg->datereceived, 4);
|
memcpy(&temp, &FwdMsg->datereceived, sizeof(time_t));
|
||||||
tm = gmtime(&temp);
|
tm = gmtime(&temp);
|
||||||
|
|
||||||
sprintf(Rline, "R:%02d%02d%02d/%02d%02dZ %d@%s.%s %s\r\n",
|
sprintf(Rline, "R:%02d%02d%02d/%02d%02dZ %d@%s.%s %s\r\n",
|
||||||
|
|
|
@ -1340,9 +1340,11 @@ void * UZ7HOExtInit(EXTPORTDATA * PortEntry)
|
||||||
|
|
||||||
MoveWindows(TNC);
|
MoveWindows(TNC);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
if (MasterPort[port] == port)
|
if (MasterPort[port] == port)
|
||||||
{
|
{
|
||||||
// First port for this TNC - start TNC if sonfigured and connect
|
// First port for this TNC - start TNC if configured and connect
|
||||||
|
|
||||||
#ifndef LINBPQ
|
#ifndef LINBPQ
|
||||||
if (EnumWindows(EnumTNCWindowsProc, (LPARAM)TNC))
|
if (EnumWindows(EnumTNCWindowsProc, (LPARAM)TNC))
|
||||||
|
@ -1362,10 +1364,8 @@ void * UZ7HOExtInit(EXTPORTDATA * PortEntry)
|
||||||
MySetWindowText(TNC->xIDC_COMMSSTATE, TNC->WEB_COMMSSTATE);
|
MySetWindowText(TNC->xIDC_COMMSSTATE, TNC->WEB_COMMSSTATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
time(&lasttime[port]); // Get initial time value
|
time(&lasttime[port]); // Get initial time value
|
||||||
|
|
||||||
#endif
|
|
||||||
return ExtProc;
|
return ExtProc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,14 +10,14 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KVers 6,0,23,56
|
#define KVers 6,0,23,58
|
||||||
#define KVerstring "6.0.23.56\0"
|
#define KVerstring "6.0.23.58\0"
|
||||||
|
|
||||||
#ifdef CKernel
|
#ifdef CKernel
|
||||||
|
|
||||||
#define Vers KVers
|
#define Vers KVers
|
||||||
#define Verstring KVerstring
|
#define Verstring KVerstring
|
||||||
#define Datestring "March 2023"
|
#define Datestring "April 2023"
|
||||||
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
#define VerComments "G8BPQ Packet Switch (C Version)" KVerstring
|
||||||
#define VerCopyright "Copyright © 2001-2023 John Wiseman G8BPQ\0"
|
#define VerCopyright "Copyright © 2001-2023 John Wiseman G8BPQ\0"
|
||||||
#define VerDesc "BPQ32 Switch\0"
|
#define VerDesc "BPQ32 Switch\0"
|
||||||
|
|
2
WINMOR.c
2
WINMOR.c
|
@ -2844,7 +2844,7 @@ int KillTNC(struct TNCINFO * TNC)
|
||||||
|
|
||||||
SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);
|
SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);
|
||||||
struct sockaddr_in destaddr;
|
struct sockaddr_in destaddr;
|
||||||
char Msg[80];
|
char Msg[256];
|
||||||
int Len;
|
int Len;
|
||||||
|
|
||||||
if (sock == INVALID_SOCKET)
|
if (sock == INVALID_SOCKET)
|
||||||
|
|
29
WinRPR.c
29
WinRPR.c
|
@ -39,6 +39,12 @@ extern int (WINAPI FAR *EnumProcessesPtr)();
|
||||||
|
|
||||||
#include "tncinfo.h"
|
#include "tncinfo.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define SD_RECEIVE 0x00
|
||||||
|
#define SD_SEND 0x01
|
||||||
|
#define SD_BOTH 0x02
|
||||||
|
|
||||||
|
|
||||||
//#include "bpq32.h"
|
//#include "bpq32.h"
|
||||||
|
|
||||||
static char ClassName[]="TRACKERSTATUS";
|
static char ClassName[]="TRACKERSTATUS";
|
||||||
|
@ -106,6 +112,7 @@ VOID TrkExitHost(struct TNCINFO * TNC);
|
||||||
int ConnecttoWinRPR(int port);
|
int ConnecttoWinRPR(int port);
|
||||||
|
|
||||||
BOOL KillOldTNC(char * Path);
|
BOOL KillOldTNC(char * Path);
|
||||||
|
int KillTNC(struct TNCINFO * TNC);
|
||||||
|
|
||||||
static BOOL RestartTNC(struct TNCINFO * TNC)
|
static BOOL RestartTNC(struct TNCINFO * TNC)
|
||||||
{
|
{
|
||||||
|
@ -605,12 +612,19 @@ ok:
|
||||||
|
|
||||||
TrkExitHost(TNC);
|
TrkExitHost(TNC);
|
||||||
Sleep(50);
|
Sleep(50);
|
||||||
CloseCOMPort(TNC->hDevice);
|
|
||||||
TNC->hDevice =(HANDLE)0;
|
|
||||||
TNC->ReopenTimer = 250;
|
TNC->ReopenTimer = 250;
|
||||||
TNC->HostMode = FALSE;
|
TNC->HostMode = FALSE;
|
||||||
|
|
||||||
return (0);
|
shutdown(TNC->TCPSock, SD_BOTH);
|
||||||
|
Sleep(100);
|
||||||
|
closesocket(TNC->TCPSock);
|
||||||
|
|
||||||
|
if (TNC->WeStartedTNC)
|
||||||
|
{
|
||||||
|
KillTNC(TNC);
|
||||||
|
RestartTNC(TNC);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
case 5: // Close
|
case 5: // Close
|
||||||
|
|
||||||
|
@ -620,7 +634,14 @@ ok:
|
||||||
|
|
||||||
Sleep(25);
|
Sleep(25);
|
||||||
|
|
||||||
CloseCOMPort(TNC->hDevice);
|
shutdown(TNC->TCPSock, SD_BOTH);
|
||||||
|
Sleep(100);
|
||||||
|
closesocket(TNC->TCPSock);
|
||||||
|
if (TNC->WeStartedTNC)
|
||||||
|
KillTNC(TNC);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
case 6: // Scan Interface
|
case 6: // Scan Interface
|
||||||
|
|
|
@ -0,0 +1,486 @@
|
||||||
|
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#include <windows.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
struct RIGPORTINFO
|
||||||
|
{
|
||||||
|
char IOBASE[80];
|
||||||
|
char PTTIOBASE[80]; // Port for Hardware PTT - may be same as control port.
|
||||||
|
int SPEED;
|
||||||
|
|
||||||
|
HANDLE hDevice; // COM device Handle
|
||||||
|
int ReopenDelay;
|
||||||
|
SOCKET remoteSock; // Socket for use with WINMORCONROL
|
||||||
|
struct sockaddr remoteDest; // Dest for above
|
||||||
|
UCHAR TXBuffer[500]; // Last message sent - saved for Retry
|
||||||
|
int TXLen; // Len of last sent
|
||||||
|
int CONNECTED; // for HAMLIB
|
||||||
|
int CONNECTING;
|
||||||
|
int Alerted;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RIGPORTINFO PORTS[4];
|
||||||
|
|
||||||
|
char PTTCATPort[4][64] = {"", "", "", ""};
|
||||||
|
HANDLE PTTCATHandles[4] = {0, 0, 0, 0};
|
||||||
|
int RealMux[4] = {0, 0, 0, 0}; // BPQ Virtual or Real
|
||||||
|
|
||||||
|
|
||||||
|
VOID PTTCATThread();
|
||||||
|
VOID ConnecttoHAMLIB(struct RIGPORTINFO * PORT);
|
||||||
|
|
||||||
|
char * strlop(char * buf, char delim)
|
||||||
|
{
|
||||||
|
// Terminate buf at delim, and return rest of string
|
||||||
|
|
||||||
|
char * ptr;
|
||||||
|
|
||||||
|
if (buf == NULL) return NULL; // Protect
|
||||||
|
|
||||||
|
ptr = strchr(buf, delim);
|
||||||
|
|
||||||
|
if (ptr == NULL) return NULL;
|
||||||
|
|
||||||
|
*(ptr)++=0;
|
||||||
|
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SendHamLib(struct RIGPORTINFO * PORT, int PTTState)
|
||||||
|
{
|
||||||
|
char cmd[32];
|
||||||
|
int Len = sprintf(cmd, "T %d\n", PTTState);
|
||||||
|
|
||||||
|
Len = send(PORT->remoteSock, cmd, Len, 0);
|
||||||
|
Len = GetLastError();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int DecodeHAMLIBAddr(struct RIGPORTINFO * PORT, char * ptr)
|
||||||
|
{
|
||||||
|
// Param is IPADDR:PORT. Only Allow numeric addresses
|
||||||
|
|
||||||
|
struct sockaddr_in * destaddr = (SOCKADDR_IN *)&PORT->remoteDest;
|
||||||
|
char * port;
|
||||||
|
|
||||||
|
strcpy(PORT->IOBASE, ptr);
|
||||||
|
|
||||||
|
port = strlop(ptr, ':');
|
||||||
|
|
||||||
|
if (port == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
destaddr->sin_family = AF_INET;
|
||||||
|
destaddr->sin_addr.s_addr = inet_addr(ptr);
|
||||||
|
destaddr->sin_port = htons(atoi(port));
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void HAMLIBProcessMessage(struct RIGPORTINFO * PORT)
|
||||||
|
{
|
||||||
|
// Called from Background thread. I think we just need to read and discard
|
||||||
|
|
||||||
|
char RXBuffer[512];
|
||||||
|
|
||||||
|
int InputLen = recv(PORT->remoteSock, RXBuffer, 500, 0);
|
||||||
|
|
||||||
|
if (InputLen == 0 || InputLen == SOCKET_ERROR)
|
||||||
|
{
|
||||||
|
if (PORT->remoteSock)
|
||||||
|
closesocket(PORT->remoteSock);
|
||||||
|
|
||||||
|
PORT->remoteSock = 0;
|
||||||
|
|
||||||
|
PORT->CONNECTED = FALSE;
|
||||||
|
PORT->hDevice = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char ** argv)
|
||||||
|
{
|
||||||
|
struct RIGPORTINFO * PORT;
|
||||||
|
int n = 0;
|
||||||
|
WSADATA WsaData; // receives data from WSAStartup
|
||||||
|
|
||||||
|
if (argc < 3)
|
||||||
|
{
|
||||||
|
printf ("Missing paramters - you need COM port and IP Address and rigctl port of BPQ, eg \r\n"
|
||||||
|
" WinRPRHelper com10 192.168.1.64:4532\r\n\r\n"
|
||||||
|
"Press any key to exit\r\n");
|
||||||
|
|
||||||
|
getchar();
|
||||||
|
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
WSAStartup(MAKEWORD(2, 0), &WsaData);
|
||||||
|
|
||||||
|
while (argc > 2)
|
||||||
|
{
|
||||||
|
PORT = &PORTS[n];
|
||||||
|
strcpy(PTTCATPort[n], argv[n + n +1]);
|
||||||
|
DecodeHAMLIBAddr(PORT, argv[n + n + 2]);
|
||||||
|
n++;
|
||||||
|
argc -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
_beginthread(PTTCATThread, 0, 0);
|
||||||
|
|
||||||
|
for (n = 0; n < 4; n++)
|
||||||
|
{
|
||||||
|
if (PTTCATPort[n][0]) // Serial port RTS to HAMLIB PTT
|
||||||
|
{
|
||||||
|
PORT = &PORTS[n];
|
||||||
|
ConnecttoHAMLIB(PORT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Sleep(2000);
|
||||||
|
|
||||||
|
printf("WinRPRHelper running - Press ctrl/c to exit\r\n");
|
||||||
|
fflush(stdout);
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
Sleep(1000);
|
||||||
|
|
||||||
|
for (n = 0; n < 4; n++)
|
||||||
|
{
|
||||||
|
if (PTTCATPort[n][0]) // Serial port RTS to HAMLIB PTT
|
||||||
|
{
|
||||||
|
PORT = &PORTS[n];
|
||||||
|
|
||||||
|
if (PORT->hDevice == 0)
|
||||||
|
{
|
||||||
|
// Try to reopen every 15 secs
|
||||||
|
|
||||||
|
PORT->ReopenDelay++;
|
||||||
|
|
||||||
|
if (PORT->ReopenDelay > 15)
|
||||||
|
{
|
||||||
|
PORT->ReopenDelay = 0;
|
||||||
|
|
||||||
|
ConnecttoHAMLIB(PORT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VOID PTTCATThread()
|
||||||
|
{
|
||||||
|
DWORD dwLength = 0;
|
||||||
|
int Length, ret, i;
|
||||||
|
UCHAR * ptr1;
|
||||||
|
UCHAR * ptr2;
|
||||||
|
UCHAR c;
|
||||||
|
UCHAR Block[4][80];
|
||||||
|
UCHAR CurrentState[4] = {0};
|
||||||
|
#define RTS 2
|
||||||
|
#define DTR 4
|
||||||
|
HANDLE Event;
|
||||||
|
HANDLE Handle[4];
|
||||||
|
DWORD EvtMask[4];
|
||||||
|
OVERLAPPED Overlapped[4];
|
||||||
|
char Port[32];
|
||||||
|
int PIndex = 0;
|
||||||
|
int HIndex = 0;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
while (PIndex < 4 && PTTCATPort[PIndex][0])
|
||||||
|
{
|
||||||
|
RealMux[HIndex] = 0;
|
||||||
|
|
||||||
|
sprintf(Port, "\\\\.\\pipe\\BPQ%s", PTTCATPort[PIndex]);
|
||||||
|
|
||||||
|
Handle[HIndex] = CreateFile(Port, GENERIC_READ | GENERIC_WRITE,
|
||||||
|
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
|
||||||
|
|
||||||
|
if (Handle[HIndex] == (HANDLE) -1)
|
||||||
|
{
|
||||||
|
int Err = GetLastError();
|
||||||
|
printf("PTTMUX port BPQ%s Open failed code %d - trying real com port\r\n", PTTCATPort[PIndex], Err);
|
||||||
|
|
||||||
|
// See if real com port
|
||||||
|
|
||||||
|
sprintf(Port, "\\\\.\\\\%s", PTTCATPort[PIndex]);
|
||||||
|
|
||||||
|
Handle[HIndex] = CreateFile(Port, GENERIC_READ | GENERIC_WRITE,
|
||||||
|
0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
|
||||||
|
|
||||||
|
RealMux[HIndex] = 1;
|
||||||
|
|
||||||
|
if (Handle[HIndex] == (HANDLE) -1)
|
||||||
|
{
|
||||||
|
int Err = GetLastError();
|
||||||
|
printf("PTTMUX port %s Open failed code %d\r\n", PTTCATPort[PIndex], Err);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rc = SetCommMask(Handle[HIndex], EV_CTS | EV_DSR); // Request notifications
|
||||||
|
HIndex++;
|
||||||
|
printf("PTTMUX port %s Opened\r\n", PTTCATPort[PIndex]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
HIndex++;
|
||||||
|
|
||||||
|
PIndex++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PIndex == 0)
|
||||||
|
return; // No ports
|
||||||
|
|
||||||
|
Event = CreateEvent(NULL, TRUE, FALSE, NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < HIndex; i ++)
|
||||||
|
{
|
||||||
|
memset(&Overlapped[i], 0, sizeof(OVERLAPPED));
|
||||||
|
Overlapped[i].hEvent = Event;
|
||||||
|
|
||||||
|
if (RealMux[i])
|
||||||
|
{
|
||||||
|
// Request Interface change notifications
|
||||||
|
|
||||||
|
rc = WaitCommEvent(Handle[i], &EvtMask[i], &Overlapped[i]);
|
||||||
|
rc = GetLastError();
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
// Prime a read on each handle
|
||||||
|
|
||||||
|
ReadFile(Handle[i], Block[i], 80, &Length, &Overlapped[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
|
||||||
|
WaitAgain:
|
||||||
|
|
||||||
|
ret = WaitForSingleObject(Event, 1000);
|
||||||
|
|
||||||
|
if (ret == WAIT_TIMEOUT)
|
||||||
|
goto WaitAgain;
|
||||||
|
|
||||||
|
ResetEvent(Event);
|
||||||
|
|
||||||
|
// See which request(s) have completed
|
||||||
|
|
||||||
|
for (i = 0; i < HIndex; i ++)
|
||||||
|
{
|
||||||
|
ret = GetOverlappedResult(Handle[i], &Overlapped[i], &Length, FALSE);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
if (RealMux[i])
|
||||||
|
{
|
||||||
|
// Request Interface change notifications
|
||||||
|
|
||||||
|
DWORD Mask;
|
||||||
|
|
||||||
|
GetCommModemStatus(Handle[i], &Mask);
|
||||||
|
|
||||||
|
if (Mask & MS_CTS_ON)
|
||||||
|
SendHamLib(&PORTS[i], TRUE);
|
||||||
|
else
|
||||||
|
SendHamLib(&PORTS[i], FALSE);
|
||||||
|
|
||||||
|
memset(&Overlapped[i], 0, sizeof(OVERLAPPED));
|
||||||
|
Overlapped[i].hEvent = Event;
|
||||||
|
WaitCommEvent(Handle[i], &EvtMask[i], &Overlapped[i]);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
ptr1 = Block[i];
|
||||||
|
ptr2 = Block[i];
|
||||||
|
|
||||||
|
while (Length > 0)
|
||||||
|
{
|
||||||
|
c = *(ptr1++);
|
||||||
|
|
||||||
|
Length--;
|
||||||
|
|
||||||
|
if (c == 0xff)
|
||||||
|
{
|
||||||
|
c = *(ptr1++);
|
||||||
|
Length--;
|
||||||
|
|
||||||
|
if (c == 0xff) // ff ff means ff
|
||||||
|
{
|
||||||
|
Length--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// This is connection / RTS/DTR statua from other end
|
||||||
|
// Convert to CAT Command
|
||||||
|
|
||||||
|
if (c == CurrentState[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (c & RTS)
|
||||||
|
SendHamLib(&PORTS[i], TRUE);
|
||||||
|
else
|
||||||
|
SendHamLib(&PORTS[i], FALSE);
|
||||||
|
|
||||||
|
CurrentState[i] = c;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&Overlapped[i], 0, sizeof(OVERLAPPED));
|
||||||
|
Overlapped[i].hEvent = Event;
|
||||||
|
|
||||||
|
ReadFile(Handle[i], Block[i], 80, &Length, &Overlapped[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VOID HAMLIBThread(struct RIGPORTINFO * PORT);
|
||||||
|
|
||||||
|
VOID ConnecttoHAMLIB(struct RIGPORTINFO * PORT)
|
||||||
|
{
|
||||||
|
_beginthread(HAMLIBThread, 0, (void *)PORT);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID HAMLIBThread(struct RIGPORTINFO * PORT)
|
||||||
|
{
|
||||||
|
// Opens sockets and looks for data
|
||||||
|
|
||||||
|
char Msg[255];
|
||||||
|
int err, i, ret;
|
||||||
|
u_long param=1;
|
||||||
|
BOOL bcopt=TRUE;
|
||||||
|
fd_set readfs;
|
||||||
|
fd_set errorfs;
|
||||||
|
struct timeval timeout;
|
||||||
|
|
||||||
|
if (PORT->remoteSock)
|
||||||
|
{
|
||||||
|
closesocket(PORT->remoteSock);
|
||||||
|
}
|
||||||
|
|
||||||
|
PORT->remoteSock = 0;
|
||||||
|
PORT->remoteSock = socket(AF_INET,SOCK_STREAM,0);
|
||||||
|
|
||||||
|
if (PORT->remoteSock == INVALID_SOCKET)
|
||||||
|
{
|
||||||
|
i=sprintf(Msg, "Socket Failed for HAMLIB socket - error code = %d\r\n", WSAGetLastError());
|
||||||
|
printf(Msg);
|
||||||
|
|
||||||
|
PORT->CONNECTING = FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setsockopt(PORT->remoteSock, SOL_SOCKET, SO_REUSEADDR, (const char FAR *)&bcopt, 4);
|
||||||
|
setsockopt(PORT->remoteSock, IPPROTO_TCP, TCP_NODELAY, (const char FAR *)&bcopt, 4);
|
||||||
|
|
||||||
|
if (connect(PORT->remoteSock,(LPSOCKADDR) &PORT->remoteDest,sizeof(PORT->remoteDest)) == 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Connected successful
|
||||||
|
//
|
||||||
|
|
||||||
|
ioctlsocket(PORT->remoteSock, FIONBIO, ¶m);
|
||||||
|
printf("Connected to HAMLIB socket Addr %s\r\n", PORT->IOBASE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (PORT->Alerted == FALSE)
|
||||||
|
{
|
||||||
|
struct sockaddr_in * destaddr = (SOCKADDR_IN * )&PORT->remoteDest;
|
||||||
|
|
||||||
|
err = WSAGetLastError();
|
||||||
|
|
||||||
|
sprintf(Msg, "Connect Failed for HAMLIB socket - error code = %d Addr %s\r\n", err, PORT->IOBASE);
|
||||||
|
|
||||||
|
printf(Msg);
|
||||||
|
PORT->Alerted = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
closesocket(PORT->remoteSock);
|
||||||
|
|
||||||
|
PORT->remoteSock = 0;
|
||||||
|
PORT->CONNECTING = FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PORT->CONNECTED = TRUE;
|
||||||
|
PORT->hDevice = (HANDLE)1; // simplifies check code
|
||||||
|
|
||||||
|
PORT->Alerted = TRUE;
|
||||||
|
|
||||||
|
while (PORT->CONNECTED)
|
||||||
|
{
|
||||||
|
FD_ZERO(&readfs);
|
||||||
|
FD_ZERO(&errorfs);
|
||||||
|
|
||||||
|
FD_SET(PORT->remoteSock,&readfs);
|
||||||
|
FD_SET(PORT->remoteSock,&errorfs);
|
||||||
|
|
||||||
|
timeout.tv_sec = 5;
|
||||||
|
timeout.tv_usec = 0;
|
||||||
|
|
||||||
|
ret = select((int)PORT->remoteSock + 1, &readfs, NULL, &errorfs, &timeout);
|
||||||
|
|
||||||
|
if (ret == SOCKET_ERROR)
|
||||||
|
{
|
||||||
|
printf("HAMLIB Select failed %d r\n", WSAGetLastError());
|
||||||
|
goto Lost;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret > 0)
|
||||||
|
{
|
||||||
|
// See what happened
|
||||||
|
|
||||||
|
if (FD_ISSET(PORT->remoteSock, &readfs))
|
||||||
|
{
|
||||||
|
HAMLIBProcessMessage(PORT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FD_ISSET(PORT->remoteSock, &errorfs))
|
||||||
|
{
|
||||||
|
Lost:
|
||||||
|
sprintf(Msg, "HAMLIB Connection lost for Addr %s\r\n", PORT->IOBASE);
|
||||||
|
printf(Msg);
|
||||||
|
|
||||||
|
PORT->CONNECTED = FALSE;
|
||||||
|
PORT->Alerted = FALSE;
|
||||||
|
PORT->hDevice = 0; // simplifies check code
|
||||||
|
|
||||||
|
closesocket(PORT->remoteSock);
|
||||||
|
PORT->remoteSock = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sprintf(Msg, "HAMLIB Thread Terminated Addr %s\r\n", PORT->IOBASE);
|
||||||
|
printf(Msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,199 @@
|
||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="8.00"
|
||||||
|
Name="WinRPRHelper"
|
||||||
|
ProjectGUID="{8FED3782-1A9B-435D-96AC-6A1432995818}"
|
||||||
|
RootNamespace="WinRPRHelper"
|
||||||
|
Keyword="Win32Proj"
|
||||||
|
>
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"
|
||||||
|
/>
|
||||||
|
</Platforms>
|
||||||
|
<ToolFiles>
|
||||||
|
</ToolFiles>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory="c:\devprogs\bpq32\"
|
||||||
|
IntermediateDirectory="$(SolutionDir))Intermed\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||||
|
MinimalRebuild="true"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="4"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="WS2_32.Lib"
|
||||||
|
LinkIncremental="2"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory="c:\devprogs\bpq32\"
|
||||||
|
IntermediateDirectory="$(SolutionDir)Intermed\$(ConfigurationName)"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2"
|
||||||
|
WholeProgramOptimization="1"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
UsePrecompiledHeader="0"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="true"
|
||||||
|
DebugInformationFormat="3"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="WS2_32.Lib"
|
||||||
|
LinkIncremental="1"
|
||||||
|
GenerateDebugInformation="true"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
TargetMachine="1"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCALinkTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManifestTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXDCMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCBscMakeTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCFxCopTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAppVerifierTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"
|
||||||
|
/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<Filter
|
||||||
|
Name="Source Files"
|
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||||
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\WinRPRHelper.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>
|
|
@ -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="COM53 127.0.0.1:4532"
|
||||||
|
Attach="false"
|
||||||
|
DebuggerType="3"
|
||||||
|
Remote="1"
|
||||||
|
RemoteMachine="DESKTOP-TGEL8RC"
|
||||||
|
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="COM53 127.0.0.1:4532"
|
||||||
|
Attach="false"
|
||||||
|
DebuggerType="3"
|
||||||
|
Remote="1"
|
||||||
|
RemoteMachine="DESKTOP-TGEL8RC"
|
||||||
|
RemoteCommand=""
|
||||||
|
HttpUrl=""
|
||||||
|
PDBPath=""
|
||||||
|
SQLDebugging=""
|
||||||
|
Environment=""
|
||||||
|
EnvironmentMerge="true"
|
||||||
|
DebuggerFlavor="0"
|
||||||
|
MPIRunCommand=""
|
||||||
|
MPIRunArguments=""
|
||||||
|
MPIRunWorkingDirectory=""
|
||||||
|
ApplicationCommand=""
|
||||||
|
ApplicationArguments=""
|
||||||
|
ShimCommand=""
|
||||||
|
MPIAcceptMode=""
|
||||||
|
MPIAcceptFilter=""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
</VisualStudioUserFile>
|
|
@ -39,8 +39,6 @@
|
||||||
|
|
||||||
#define BPQICON 400
|
#define BPQICON 400
|
||||||
|
|
||||||
WSADATA WsaData; // receives data from WSAStartup
|
|
||||||
|
|
||||||
#define WSA_READ WM_USER + 1
|
#define WSA_READ WM_USER + 1
|
||||||
|
|
||||||
HINSTANCE hInst;
|
HINSTANCE hInst;
|
||||||
|
@ -569,6 +567,7 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
|
||||||
BOOL bcopt=TRUE;
|
BOOL bcopt=TRUE;
|
||||||
char Msg[255];
|
char Msg[255];
|
||||||
int ret, err;
|
int ret, err;
|
||||||
|
WSADATA WsaData; // receives data from WSAStartup
|
||||||
|
|
||||||
|
|
||||||
hInst = hInstance; // Store instance handle in our global variable
|
hInst = hInstance; // Store instance handle in our global variable
|
||||||
|
|
|
@ -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>
|
Binary file not shown.
Loading…
Reference in New Issue