master 24.66
John Wiseman 10 months ago
parent 098dc645bb
commit d3c2c5dea8

@ -1244,7 +1244,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Attempt to fix NC going to wrong application. (57) // Attempt to fix NC going to wrong application. (57)
// Improve ARDOP end of session code (58) // Improve ARDOP end of session code (58)
// Run M0LTE Map reporting in a separate thread (59/60) // Run M0LTE Map reporting in a separate thread (59/60)
// Add support for WhatsPac (59) // Add RHP support for WhatsPac (59)
// Add timestamps to LIS monitor (60) // Add timestamps to LIS monitor (60)
// Fix problem with L4 frames being delivered out of sequence (60) // Fix problem with L4 frames being delivered out of sequence (60)
// Add Compression of Netrom connections (62) // Add Compression of Netrom connections (62)
@ -1252,6 +1252,9 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Add L4 RESET (Paula G8PZT's extension to NETROM) // Add L4 RESET (Paula G8PZT's extension to NETROM)
// Fix problem using SENDRAW from BPQMail (63) // Fix problem using SENDRAW from BPQMail (63)
// Fix compatibility with latest ardopcf (64) // Fix compatibility with latest ardopcf (64)
// Fix bug in RHP socket timeout code (65)
#define CKernel #define CKernel
#include "Versions.h" #include "Versions.h"

@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License
along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
*/ */
// General C Routines common to bpq32 and linbpq. Mainly moved from BPQ32.c // General C Routines common to bpq32 and linbpq. Mainly moved from BPQ32.c
#pragma data_seg("_BPQDATA") #pragma data_seg("_BPQDATA")

20
RHP.c

@ -28,6 +28,7 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
#include "cheaders.h" #include "cheaders.h"
#include "bpq32.h" #include "bpq32.h"
#include "telnetserver.h"
int FindFreeStreamNoSem(); int FindFreeStreamNoSem();
DllExport int APIENTRY DeallocateStream(int stream); DllExport int APIENTRY DeallocateStream(int stream);
@ -40,6 +41,7 @@ static int GetJSONInt(char * _REPLYBUFFER, char * Name);
struct RHPSessionInfo struct RHPSessionInfo
{ {
struct ConnectionInfo * sockptr;
SOCKET Socket; // Websocks Socket SOCKET Socket; // Websocks Socket
int BPQStream; int BPQStream;
int Handle; // RHP session ID int Handle; // RHP session ID
@ -66,6 +68,7 @@ struct RHPParamBlock
unsigned char * Msg; unsigned char * Msg;
int Len; int Len;
SOCKET Socket; SOCKET Socket;
struct ConnectionInfo * sockptr;
}; };
@ -113,7 +116,7 @@ int WhatsPacConfigured = 1;
int RHPPaclen = 236; int RHPPaclen = 236;
int processRHCPOpen(SOCKET Socket, char * Msg, char * ReplyBuffer); int processRHCPOpen(struct ConnectionInfo * sockptr, SOCKET Socket, char * Msg, char * ReplyBuffer);
int processRHCPSend(SOCKET Socket, char * Msg, char * ReplyBuffer); int processRHCPSend(SOCKET Socket, char * Msg, char * ReplyBuffer);
int processRHCPClose(SOCKET Socket, char * Msg, char * ReplyBuffer); int processRHCPClose(SOCKET Socket, char * Msg, char * ReplyBuffer);
int processRHCPStatus(SOCKET Socket, char * Msg, char * ReplyBuffer); int processRHCPStatus(SOCKET Socket, char * Msg, char * ReplyBuffer);
@ -129,7 +132,6 @@ void SendWebSockMessage(SOCKET socket, char * Msg, int Len)
// WebSock Encode. Buffer has 10 bytes on front for header but header len depends on Msg len // WebSock Encode. Buffer has 10 bytes on front for header but header len depends on Msg len
if (Len < 126) if (Len < 126)
{ {
// Two Byte Header // Two Byte Header
@ -189,7 +191,7 @@ void SendWebSockMessage(SOCKET socket, char * Msg, int Len)
return; return;
} }
void ProcessRHPWebSock(SOCKET Socket, char * Msg, int MsgLen); void ProcessRHPWebSock(struct ConnectionInfo * sockptr, SOCKET Socket, char * Msg, int MsgLen);
void RHPThread(void * Params) void RHPThread(void * Params)
{ {
@ -197,7 +199,7 @@ void RHPThread(void * Params)
struct RHPParamBlock * Block = (struct RHPParamBlock *)Params; struct RHPParamBlock * Block = (struct RHPParamBlock *)Params;
ProcessRHPWebSock(Block->Socket, Block->Msg, Block->Len); ProcessRHPWebSock(Block->sockptr, Block->Socket, Block->Msg, Block->Len);
free(Block->Msg); free(Block->Msg);
free(Params); free(Params);
@ -209,7 +211,7 @@ int RHPProcessHTTPMessage(void * conn, char * response, char * Method, char * UR
return 0; return 0;
} }
void ProcessRHPWebSock(SOCKET Socket, char * Msg, int MsgLen) void ProcessRHPWebSock(struct ConnectionInfo * sockptr, SOCKET Socket, char * Msg, int MsgLen)
{ {
int Loops = 0; int Loops = 0;
int InputLen = 0; int InputLen = 0;
@ -278,7 +280,7 @@ void ProcessRHPWebSock(SOCKET Socket, char * Msg, int MsgLen)
if (_stricmp(Value, "open") == 0) if (_stricmp(Value, "open") == 0)
{ {
Len = processRHCPOpen(Socket, Msg, &OutBuffer[10]); // Space at front for WebSock Header Len = processRHCPOpen(sockptr, Socket, Msg, &OutBuffer[10]); // Space at front for WebSock Header
if (Len) if (Len)
SendWebSockMessage(Socket, OutBuffer, Len); SendWebSockMessage(Socket, OutBuffer, Len);
return; return;
@ -351,7 +353,7 @@ void ProcessRHPWebSockClosed(SOCKET socket)
int processRHCPOpen(SOCKET Socket, char * Msg, char * ReplyBuffer) int processRHCPOpen(struct ConnectionInfo * sockptr, SOCKET Socket, char * Msg, char * ReplyBuffer)
{ {
//{"type":"open","id":5,"pfam":"ax25","mode":"stream","port":"1","local":"G8BPQ","remote":"G8BPQ-2","flags":128} //{"type":"open","id":5,"pfam":"ax25","mode":"stream","port":"1","local":"G8BPQ","remote":"G8BPQ-2","flags":128}
@ -424,6 +426,7 @@ int processRHCPOpen(SOCKET Socket, char * Msg, char * ReplyBuffer)
RHPSession->Handle = Handle; RHPSession->Handle = Handle;
RHPSession->Connecting = TRUE; RHPSession->Connecting = TRUE;
RHPSession->Socket = Socket; RHPSession->Socket = Socket;
RHPSession->sockptr = sockptr;
strcpy(RHPSession->Local, Local); strcpy(RHPSession->Local, Local);
strcpy(RHPSession->Remote, Remote); strcpy(RHPSession->Remote, Remote);
@ -632,6 +635,9 @@ void RHPPoll()
Buffer[pktlen] = 0; Buffer[pktlen] = 0;
RHPSession->sockptr->LastSendTime = time(NULL);
// Message is JSON so Convert CR to \r, \ to \\ " to \" // Message is JSON so Convert CR to \r, \ to \\ " to \"
// Looks like I need to escape everything not between 0x20 and 0x7f eg \U00c3 // Looks like I need to escape everything not between 0x20 and 0x7f eg \U00c3

@ -4989,6 +4989,7 @@ struct RHPParamBlock
unsigned char * Msg; unsigned char * Msg;
int Len; int Len;
SOCKET Socket; SOCKET Socket;
struct ConnectionInfo * sockptr;
}; };
@ -5131,10 +5132,13 @@ int DataSocket_ReadHTTP(struct TNCINFO * TNC, struct ConnectionInfo * sockptr, S
struct RHPParamBlock * ParamBlock = malloc(sizeof(struct RHPParamBlock)); struct RHPParamBlock * ParamBlock = malloc(sizeof(struct RHPParamBlock));
ParamBlock->sockptr = sockptr;
ParamBlock->Socket = sockptr->socket; ParamBlock->Socket = sockptr->socket;
ParamBlock->Len = Len; ParamBlock->Len = Len;
ParamBlock->Msg = malloc(Len + 10); ParamBlock->Msg = malloc(Len + 10);
memcpy(ParamBlock->Msg, Payload, Len); memcpy(ParamBlock->Msg, Payload, Len);
sockptr->LastSendTime = time(NULL);
_beginthread(RHPThread, 0, (VOID *)ParamBlock); _beginthread(RHPThread, 0, (VOID *)ParamBlock);
sockptr->InputLen = 0; sockptr->InputLen = 0;

@ -10,8 +10,8 @@
#endif #endif
#define KVers 6,0,24,64 #define KVers 6,0,24,65
#define KVerstring "6.0.24.64\0" #define KVerstring "6.0.24.65\0"
#ifdef CKernel #ifdef CKernel

Loading…
Cancel
Save

Powered by TurnKey Linux.