mirror of
https://github.com/reactos/reactos.git
synced 2024-08-29 14:48:37 +00:00
141 lines
3.5 KiB
C++
141 lines
3.5 KiB
C++
/*
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
* PROJECT: ReactOS HTTP Daemon
|
|
* FILE: include/socket.h
|
|
*/
|
|
#ifndef __SOCKET_H
|
|
#define __SOCKET_H
|
|
#include <stdio.h>
|
|
#include <winsock2.h>
|
|
#include <thread.h>
|
|
#include <list.h>
|
|
#include <exception>
|
|
#include <assert.h>
|
|
|
|
#define MAX_PENDING_CONNECTS 4 // The backlog allowed for listen()
|
|
|
|
VOID InitWinsock();
|
|
VOID DeinitWinsock();
|
|
|
|
class CSocket;
|
|
class CClientSocket;
|
|
class CServerClientSocket;
|
|
class CServerClientThread;
|
|
class CServerSocket;
|
|
|
|
typedef CSocket* LPCSocket;
|
|
typedef CClientSocket* LPCClientSocket;
|
|
typedef CServerClientSocket* LPCServerClientSocket;
|
|
typedef CServerClientThread* LPCServerClientThread;
|
|
typedef CServerSocket* LPCServerSocket;
|
|
|
|
class ESocket {
|
|
public:
|
|
ESocket() { Description = NULL; }
|
|
ESocket(LPTSTR description) { Description = description; }
|
|
LPTSTR what() { return Description; }
|
|
protected:
|
|
LPTSTR Description;
|
|
};
|
|
|
|
class ESocketWinsock : public ESocket {
|
|
public:
|
|
ESocketWinsock(LPTSTR description) { Description = description; }
|
|
};
|
|
|
|
class ESocketDll : public ESocket {
|
|
public:
|
|
ESocketDll(LPTSTR description) { Description = description; }
|
|
};
|
|
|
|
class ESocketOpen : public ESocket {
|
|
public:
|
|
ESocketOpen(LPTSTR description) { Description = description; }
|
|
};
|
|
|
|
class ESocketClose : public ESocket {
|
|
public:
|
|
ESocketClose(LPTSTR description) { Description = description; }
|
|
};
|
|
|
|
class ESocketSend : public ESocket {
|
|
public:
|
|
ESocketSend(LPTSTR description) { Description = description; }
|
|
};
|
|
|
|
class ESocketReceive : public ESocket {
|
|
public:
|
|
ESocketReceive(LPTSTR description) { Description = description; }
|
|
};
|
|
|
|
|
|
class CSocket {
|
|
public:
|
|
CSocket();
|
|
virtual ~CSocket();
|
|
virtual SOCKET GetSocket();
|
|
virtual VOID SetSocket(SOCKET socket);
|
|
virtual SOCKADDR_IN GetSockAddrIn();
|
|
virtual VOID SetSockAddrIn(SOCKADDR_IN sockaddrin);
|
|
virtual VOID SetEvents(LONG lEvents);
|
|
virtual LONG GetEvents();
|
|
virtual VOID SetPort( UINT nPort) {};
|
|
virtual VOID Open();
|
|
virtual VOID Close();
|
|
virtual INT Transmit( LPCSTR lpsBuffer, UINT nLength) { return 0; };
|
|
virtual INT Receive(LPSTR lpsBuffer, UINT nLength) { return 0; };
|
|
virtual INT SendText( LPCSTR lpsStr) { return 0; };
|
|
protected:
|
|
SOCKET Socket;
|
|
SOCKADDR_IN SockAddrIn;
|
|
WSAEVENT Event;
|
|
UINT Port;
|
|
BOOL Active;
|
|
private:
|
|
LONG Events;
|
|
};
|
|
|
|
class CServerClientSocket : public CSocket {
|
|
public:
|
|
CServerClientSocket() {};
|
|
CServerClientSocket(LPCServerSocket lpServerSocket);
|
|
CServerSocket *GetServerSocket();
|
|
virtual INT Transmit( LPCSTR lpsBuffer, UINT nLength);
|
|
virtual INT Receive(LPSTR lpsBuffer, UINT nLength);
|
|
virtual INT SendText( LPCSTR lpsText);
|
|
virtual VOID MessageLoop();
|
|
virtual VOID OnRead() {};
|
|
//virtual VOID OnWrite() {};
|
|
virtual VOID OnClose() {};
|
|
protected:
|
|
LPCServerSocket ServerSocket;
|
|
};
|
|
|
|
class CServerClientThread : public CThread {
|
|
public:
|
|
CServerClientThread() {};
|
|
CServerClientThread(CServerClientSocket *socket);
|
|
virtual ~CServerClientThread();
|
|
protected:
|
|
CServerClientSocket *ClientSocket;
|
|
};
|
|
|
|
class CServerSocket : public CSocket {
|
|
public:
|
|
CServerSocket();
|
|
virtual ~CServerSocket();
|
|
virtual VOID SetPort( UINT nPort);
|
|
virtual VOID Open();
|
|
virtual VOID Close();
|
|
virtual LPCServerClientSocket OnGetSocket(LPCServerSocket lpServerSocket);
|
|
virtual LPCServerClientThread OnGetThread(LPCServerClientSocket lpSocket);
|
|
virtual VOID OnAccept( LPCServerClientThread lpThread) {};
|
|
virtual VOID MessageLoop();
|
|
VOID InsertClient(LPCServerClientThread lpClient);
|
|
VOID RemoveClient(LPCServerClientThread lpClient);
|
|
protected:
|
|
CList<LPCServerClientThread> Connections;
|
|
};
|
|
|
|
#endif /* __SOCKET_H */
|