Clone of Akilla's acserver @ https://github.com/deregtd/ACServer

Socket.h 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // Socket.h
  2. // Delcaration of class UDP Socket - spoof for the UDP protocol
  3. #pragma once
  4. #include "PacketHeaders.h"
  5. class cUDPSocket
  6. {
  7. CRITICAL_SECTION m_cs;
  8. WSAEVENT m_hInputWaiting,
  9. m_hOutputWaiting,
  10. m_hShutdown;
  11. HANDLE m_hTCPThread;
  12. struct cPacket
  13. {
  14. BYTE *m_pbPayload;
  15. WORD m_wSize;
  16. };
  17. typedef std::list< cPacket > cPacketQueue;
  18. cPacketQueue m_input,
  19. m_output;
  20. EmuHeader m_currentinput;
  21. int m_inputstate,
  22. m_outputstate;
  23. sockaddr_in m_connect;
  24. SOCKET m_s;
  25. enum eConnectStage
  26. {
  27. eStrobe,
  28. eStrobe2,
  29. eVersionInfo,
  30. eNormalStream,
  31. eDisconnected
  32. };
  33. struct state_bits
  34. {
  35. bool m_bConnected : 1;
  36. eConnectStage m_stage : 3;
  37. };
  38. state_bits m_state;
  39. int m_dwServerSequence,
  40. m_dwClientSequence,
  41. m_dwFragmentSequence;
  42. DWORD m_dwSession;
  43. public:
  44. cUDPSocket ( DWORD dwIP, const char *szUserName, const char *szPassword, short ConnPort );
  45. ~cUDPSocket ();
  46. inline SOCKET getSocket ()
  47. {
  48. return m_s;
  49. }
  50. int recvfrom ( char *buf, int len, int flags, sockaddr FAR *from, int *fromlen );
  51. int sendto ( const char FAR *buf, int len, int flags, const struct sockaddr FAR *to, int tolen );
  52. int select ( fd_set FAR *readfds, fd_set FAR *writefds, fd_set FAR *exceptfds, const struct timeval FAR *timeout );
  53. private:
  54. void postPacket ( cPacket &p );
  55. void postReceivePacket ( void *buf, int len );
  56. void postAppPacket ( void *buffer, size_t bytecount );
  57. void postPong ();
  58. void postFragment ( void *buffer, WORD wClass, size_t bytecount );
  59. void sendFragment ( void *payload, size_t bytecount );
  60. #pragma pack(push,1)
  61. struct cPacketHeader
  62. {
  63. int m_nSequence;
  64. DWORD m_dwFlags;
  65. DWORD m_dwCRC;
  66. DWORD m_dwServer;
  67. WORD m_wSize;
  68. BYTE m_bTime;
  69. BYTE m_bUnknown;
  70. };
  71. struct cFragmentHeader
  72. {
  73. DWORD m_dwSequence,
  74. m_dwChannel;
  75. WORD m_wFragmentCount,
  76. m_wLength,
  77. m_wFragmentIndex,
  78. m_wUnknown;
  79. };
  80. #pragma pack(pop)
  81. void readPackets ();
  82. bool writePackets ();
  83. void threadRuntime ();
  84. static DWORD WINAPI tcpThread ( LPVOID pvParam );
  85. };