micetools/src/micetools/lib/libpcp/pcpt.h

82 lines
2.4 KiB
C

#pragma once
#include "pcp.h"
typedef enum e_pcpt {
e_pcpt_ok = 0,
e_pcpt_to = 1,
e_pcpt_closed = 2,
e_pcpt_no_client = 3,
e_pcpt_not_open = -1,
// TODO: Check if these two are the wrong way round!
e_pcpt_already_open = -2,
e_pcpt_already_connected = -3,
e_pcpt_pointer_unset = -4,
e_pcpt_cannot_open = -8,
e_pcpt_nobufs = -9,
e_pcpt_wsa2_generic = -10,
e_pcpt_inval_addr = -12,
e_pcpt_NO_IDEA_WHAT_THIS_IS = -13,
e_pcpt_recv_unset = -15,
e_pcpt_wsa_noinit = -16,
e_pcpt_unknown = -17,
} e_pcpt_t;
typedef enum {
PCPT_CONFIG_0 = 0,
PCPT_CONFIG_1 = 1,
PCPT_SO_LINGER = 2,
PCPT_TCP_NODELAY = 3,
} pcpt_config_t;
e_pcpt_t _pcptGetErrorFromWin(int err);
#define _errW2T(err) _pcptGetErrorFromWin(err)
typedef struct pcpt {
SOCKET server_sock;
SOCKET client_sock;
int client_open;
int open;
e_pcpt_t err;
timeout_t field_0x14;
timeout_t config_0;
uint config_1;
uint so_linger;
uint tcp_nodelay;
WSAEVENT client_event;
WSAEVENT server_event;
const unsigned char* send_buf;
size_t* send_buf_count;
unsigned char* recv_buf;
size_t* recv_buf_count;
uint field_0x40;
SOCKADDR_IN client_addr;
int field_0x54;
int field_0x58;
} pcpt_t;
// Confirmed with nrs.pdb
void pcptClose(pcpt_t* sock);
void pcptCloseDataSock(pcpt_t* sock);
int pcptGetConfig(pcpt_t* sock, pcpt_config_t config);
e_pcpt_t pcptInitStream(pcpt_t* sock);
e_pcpt_t pcptIsBusy(pcpt_t* sock, timeout_t timeout_ms);
e_pcpt_t pcptOpenClient(pcpt_t* stream, char* ipAddr, ushort port, timeout_t timeout);
e_pcpt_t pcptRecv(pcpt_t* sock, unsigned char* recv_buf, size_t* recv_buf_len,
timeout_t timeout_ms);
e_pcpt_t pcptSend(pcpt_t* sock, const unsigned char* send_buf, size_t* send_len, uint param_4,
timeout_t timeout_ms);
void pcptSetConfig(pcpt_t* sock, pcpt_config_t config, int value);
// Unconfirmed
e_pcpt_t pcptAcceptServer(pcpt_t* stream, timeout_t timeout_ms);
e_pcpt_t pcptCheckConnectAble(pcpt_t* sock, timeout_t timeout_ms);
e_pcpt_t pcptCheckEvent(HANDLE event, timeout_t timeout_ms, SOCKET socket, uint event_mask);
e_pcpt_t pcptOpenDataSockServer(pcpt_t* sock, timeout_t timeout_ms);
e_pcpt_t pcptSendAllMsg(pcpt_t* sock, timeout_t timeout_ms);
e_pcpt_t pcptOpenServer(pcpt_t* sock, int open_mode, ushort port);