00001 #ifndef N2NCPACKETMANAGER_H
00002 #define N2NCPACKETMANAGER_H
00003
00004 #include "nixsys.h"
00005 #include "socket.h"
00006
00007 using namespace n2nc ;
00008
00009 namespace n2nc {
00013 class PacketManager : public n2nc::net::Socket {
00014 public:
00015 PacketManager(net::Socket *sk);
00016 ~PacketManager();
00017 virtual int send(void *buf, size_t len);
00018 virtual int recv(void *buf, size_t len);
00019
00020 struct srv_packet_header{
00021 int16_t h_type ;
00022 int16_t p_size ;
00023 int32_t p_seq ;
00024 };
00025 enum srv_packet_type{
00026 SRV_PK_GARBAGE = 0,
00027 SRV_PK_GARBAGE_ACK,
00028 SRV_PK_DATA
00029 };
00030 typedef struct srv_packet_header srv_packet_header_t ;
00031
00032 srv_packet_header m_pklastsent ;
00033
00034 srv_packet_header m_pklastrecvd ;
00035
00036 srv_packet_header_t *getRecvPkHeader();
00037 srv_packet_header_t *getSendPkHeader();
00038 size_t mps ;
00040 uint64_t totalsent ;
00041 uint64_t totalrecvd ;
00042 private:
00043 net::Socket *m_sk;
00044 void *m_sendbuf ;
00045 void *m_recvbuf ;
00046
00047 #define MAX_MSS 1472
00048 #define MAX_MPS_1 (MAX_MSS - sizeof(n2nc::PacketManager::srv_packet_type) - sizeof(n2nc::FilterBlowFish::bfheader_t) )
00049 #define MAX_MPS ((( (MAX_MPS_1 -1 ) / 8 ) ) * 8 )
00050
00051
00052
00053 };
00054 }
00055
00056 #endif