Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141/* * 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 */