-
Notifications
You must be signed in to change notification settings - Fork 158
/
Copy pathtsocket.h
94 lines (76 loc) · 3.99 KB
/
tsocket.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Module: tsocket.h
// Author: Zufyxe, September 2010
// Description:
// Universal socket interface.
//
#include "kstream.h"
#define TSOCKET ULONG_PTR
#define TDISTATUS LONG
#define SOCKET_TO_OBJECT(x) (PFILE_OBJECT)(x | 0x80000000)
#define OBJECT_TO_SOCKET(x) ((ULONG_PTR)x & 0x7fffffff)
extern PTSOCKET_TABLE g_CurrentTsocketTable;
extern TSOCKET_TABLE g_TsocketLwipTable;
#ifdef _TDI_SUPPORT
extern TSOCKET_TABLE g_TsocketTdiTable;
#endif
LONG __stdcall _tsocket( int domain, int type, int protocol );
LONG __stdcall _tclosesocket( LONG Socket );
LONG __stdcall _tioctlsocket( LONG s, long cmd, ULONG* argp );
LONG __stdcall _tsendto( LONG s, char* buf, int len, int flags, struct sockaddr* to, int tolen );
LONG __stdcall _trecvfrom( LONG s, char* buf, int len, int flags, struct sockaddr* from, int* fromlen );
LONG __stdcall _tgetsockopt( LONG s, int level, int optname, char* optval, int* optlen );
LONG __stdcall _tselect( int maxfdp1, struct fd_set *readset, struct fd_set *writeset, struct fd_set *exceptset, struct timeval *timeout );
LONG __stdcall _tconnect( LONG s, struct sockaddr* name, int namelen );
LONG __stdcall _tsetsockopt( LONG s, int level, int optname, char* optval, int optlen );
LONG __stdcall _tbind( LONG s, struct sockaddr* name, int namelen );
LONG __stdcall _tshutdown( LONG s, int how );
LONG __stdcall _tsend( LONG s, char* buf, int len, int flags );
LONG __stdcall _trecv( LONG s, char* buf, int len, int flags );
LONG __stdcall _tgetsockname( LONG s, struct sockaddr* name, int* namelen );
LONG __stdcall _tgetpeername( LONG s, struct sockaddr* name, int* namelen );
LONG __stdcall _tlisten( LONG s, int backlog );
LONG __stdcall _taccept( LONG s, struct sockaddr* addr, int* addrlen );
struct hostent* __stdcall _tgethostbyname( char *name );
//#define _tsocket(x, y, z) (g_CurrentTsocketTable->socket)(x, y, z)
//#define _tclosesocket(x) (g_CurrentTsocketTable->close)(x)
//#define _tioctlsocket(x, y, z) (g_CurrentTsocketTable->ioctl)(x, y, z)
//#define _tsendto(a, b, c, d, e, f) (g_CurrentTsocketTable->sendto)(a, b, c, d, e, f)
//#define _trecvfrom(a, b, c, d, e, f)(g_CurrentTsocketTable->recvfrom)(a, b, c, d, e, f)
//#define _tgetsockopt(a, b, c, d, e) (g_CurrentTsocketTable->getsockopt)(a, b, c, d, e)
//#define _tselect(a, b, c, d, e) (g_CurrentTsocketTable->select)(a, b, c, d, e)
//#define _tconnect(a, b, c) (g_CurrentTsocketTable->connect)(a, b, c)
//#define _tsetsockopt(a, b, c, d, e) (g_CurrentTsocketTable->setsockopt)(a, b, c, d, e)
//#define _tbind(a, b, c) (g_CurrentTsocketTable->bind)(a, b, c)
//#define _tshutdown(a, b) (g_CurrentTsocketTable->shutdown)(a, b)
//#define _tsend(a, b, c, d) (g_CurrentTsocketTable->send)(a, b, c, d)
//#define _tgetsockname(a, b, c) (g_CurrentTsocketTable->getsockname)(a, b, c)
//#define _tgethostbyname(a) (g_CurrentTsocketTable->gethostbyname)(a)
#define _tgethostbynamer(a,b,c,d,e,f) (g_CurrentTsocketTable->gethostbynamer)(a,b,c,d,e,f)
//#define _trecv(a, b, c, d) (g_CurrentTsocketTable->recv)(a, b, c, d)
//#define _tgetpeername(a, b, c) (g_CurrentTsocketTable->getpeername)(a, b, c)
//#define _tlisten(a, b ) (g_CurrentTsocketTable->listen)(a, b )
//#define _taccept(a, b, c) (g_CurrentTsocketTable->accept)(a, b, c)
void TsocketSetTdi( void );
void TsocketSetLwip( void );
BOOLEAN TsocketIsLwip( void );
typedef struct _TSOCKET_CONTEXT
{
PFILE_OBJECT AddressObject;
HANDLE AddressHandle;
PFILE_OBJECT ConnectionObject;
HANDLE ConnectionHandle;
ULONG Flags;
ULONG Type;
ULONG SendTimeout; // milliseconds
ULONG RecvTimeout; // milliseconds
KEVENT ReadComplete;
KEVENT WriteComplete;
KEVENT ReadReady;
NTSTATUS LastStatus;
PDSTREAM Datagrams;
PKSTREAM Datastream;
IO_STATUS_BLOCK IoStatus;
}TSOCKET_CONTEXT, *PTSOCKET_CONTEXT;
NTSTATUS TsocketInit(VOID);
#define TS_FLAG_BLOCKING 1