udpsession.h
上传用户:zslianheng
上传日期:2013-04-03
资源大小:946k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Visual C++

  1. /***************************************************************************
  2.  *                                                                         *
  3.  *   This program is free software; you can redistribute it and/or modify  *
  4.  *   it under the terms of the GNU General Public License as published by  *
  5.  *   the Free Software Foundation; either version 2 of the License, or     *
  6.  *   (at your option) any later version.                                   *
  7.  *                                                                         *
  8.  *   copyright            : (C) 2002 by Zhang Yong                         *
  9.  *   email                : z-yong163@163.com                              *
  10.  ***************************************************************************/
  11. #ifndef _UDP_SESSION_H
  12. #define _UDP_SESSION_H
  13. #include "icqsession.h"
  14. #include "icqsocket.h"
  15. enum {
  16. UDP_ACK = 1,
  17. UDP_NEW_UIN,
  18. UDP_GET_CONTACTLIST,
  19. UDP_LOGIN,
  20. UDP_LOGOUT,
  21. UDP_KEEPALIVE,
  22. UDP_CHANGE_STATUS,
  23. UDP_UPDATE_CONTACT,
  24. UDP_MODIFY_USER,
  25. UDP_UPDATE_USER,
  26. UDP_SEND_MSG,
  27. UDP_GROUP_SEND_MSG,
  28. UDP_SEARCH_RANDOM,
  29. UDP_SEARCH_CUSTOM,
  30. UDP_ADD_FRIEND,
  31. UDP_DEL_FRIEND,
  32. UDP_BROADCAST_MSG,
  33. UDP_SRV_USER_ONLINE = 0x0100,
  34. UDP_SRV_USER_OFFLINE,
  35. UDP_SRV_MULTI_ONLINE,
  36. UDP_SRV_STATUS_CHANGED,
  37. UDP_SRV_MESSAGE,
  38. UDP_SRV_SEARCH,
  39. UDP_MSG_FIRST = 0x0200,
  40. UDP_MSG_MESSAGE = UDP_MSG_FIRST,
  41. UDP_MSG_MESSAGE_ACK,
  42. };
  43. #define KEEPALIVE_TIMEOUT (2 * 60)
  44. #define SEND_TIMEOUT 10
  45. class IcqLink;
  46. class UdpOutPacket;
  47. class UdpInPacket;
  48. class UdpSession : public IcqSession {
  49. public:
  50. UdpSession(IcqLink *link, const char *name, uint32 uin);
  51. virtual ~UdpSession();
  52. virtual bool onReceive();
  53. void connect(uint32 ip, uint16 port);
  54. time_t checkSendQueue();
  55. protected:
  56. virtual bool onPacketReceived(UdpInPacket &in);
  57. virtual void sendDirect(UdpOutPacket *p);
  58. virtual void onSendError(UdpOutPacket *p);
  59. void sendDirect(UdpOutPacket *out, int s, sockaddr_in *addr = NULL);
  60. bool onAck(uint16 seq);
  61. void clearSendQueue();
  62. void initSession();
  63. void createPacket(UdpOutPacket &out, uint16 cmd, uint16 seq, uint16 ackseq = 0);
  64. UdpOutPacket *createPacket(uint16 cmd, uint16 ackseq = 0);
  65. void sendAckPacket(uint16 seq);
  66. uint16 sendPacket(UdpOutPacket *);
  67. bool setWindow(uint16 seq);
  68. static int udpSock; // initialized by ServerSession
  69. static string destHost;
  70. static sockaddr_in proxyAddr;
  71. uint32 sid;
  72. uint16 sendSeq;
  73. uint16 recvSeq;
  74. uint32 window;
  75. PtrList sendQueue;
  76. sockaddr_in destAddr;
  77. };
  78. #endif