Files
CPP/sstp/socketconnectionreceiver.hpp
2025-08-16 09:13:07 -04:00

54 lines
1.4 KiB
C++

#ifndef _SSTP_SOCKETCONNECTIONRECEIVER_HPP_
#define _SSTP_SOCKETCONNECTIONRECEIVER_HPP_
#include <stdio.h>
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <thread>
#include <common/string.hpp>
#include <common/profiler.hpp>
#include <common/block.hpp>
#include <common/fileio.hpp>
class SocketConnectionReceiver
{
public:
SocketConnectionReceiver();
SocketConnectionReceiver(int socket, sockaddr_in inernalSocketAddress);
virtual ~SocketConnectionReceiver();
void initialize(int socket, sockaddr_in inernalSocketAddress);
void close(void);
private:
static constexpr size_t BUFFER_LENGTH=65536; // this is the buffer length for the socket
void isRunnable(bool isRunnable);
bool isRunnable(void);
void threadFunction(int data);
bool handlePut(Block<String> &commands);
void handleQuit(void);
size_t readLine(String &line);
size_t expectPacket(void);
size_t read(Array<char> &buffer);
String restoreFileName(Block<String> block,DWORD startIndex,DWORD endIndex);
friend class SocketServer;
char mBuffer[BUFFER_LENGTH] = {0};
int mSocket;
bool mIsRunnable;
sockaddr_in mInternalSocketAddress;
};
inline
void SocketConnectionReceiver::isRunnable(bool isRunnable)
{
mIsRunnable=isRunnable;
}
inline
bool SocketConnectionReceiver::isRunnable(void)
{
return mIsRunnable;
}
#endif