50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
#pragma once
|
|
|
|
#include <ws2tcpip.h>
|
|
#pragma comment (lib, "Ws2_32.lib")
|
|
|
|
/**
|
|
This module is a plain C class emulation. The POC written by decoder was in cpp and used some classes
|
|
in particular for the local negotiator.
|
|
See https://stackoverflow.com/questions/40992945/convert-a-cpp-class-cpp-file-into-a-c-structure-c-file
|
|
for how I emulated a class in pure C.
|
|
|
|
This class defines a base server object. Inheritance will be emulated in order to create a
|
|
Rogue WinRM service and a simple http server derived from this class.
|
|
*/
|
|
|
|
struct _Server;
|
|
|
|
typedef void (*serviceConstructor) (struct _Server*, char*, char*);
|
|
typedef void (*serviceDestructor) (struct _Server*);
|
|
typedef void (*starter) (struct _Server*);
|
|
typedef void (*cleaner) (struct _Server*, SOCKET, char*);
|
|
|
|
typedef struct _Server
|
|
{
|
|
// Methods as pointer to functions
|
|
serviceConstructor construct;
|
|
serviceDestructor destruct;
|
|
starter listenerStart;
|
|
cleaner serverStop;
|
|
|
|
// Arguments
|
|
char* listen_port; // Trivial
|
|
char* listen_address; // Trivial
|
|
SOCKET socket; // Trivial
|
|
struct addrinfo hints; // Temporary variables used to compute
|
|
struct addrinfo* socketInfos;
|
|
} Server;
|
|
|
|
|
|
// Constructor and destructor
|
|
void initService(Server* this, char* listen_address, char* listen_port);
|
|
void destructService(Server* this);
|
|
|
|
// Class methods
|
|
static void startListener(Server* this);
|
|
static void SocketError(Server* this, SOCKET Socket, char* error_message);
|
|
|
|
// Static functions
|
|
void hexDump_if_debug_env(char* desc, void* addr, int len);
|