-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPacket.cpp
91 lines (81 loc) · 1.38 KB
/
Packet.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "Packet.h"
CPacketQueue::CPacketQueue()
{
}
int CPacketQueue::PushbackQ(void *data)
{
// lock
int succ = 0;
do
{
if (data)
{
PacketHeader *header = data;
if (header->m_PacketLen > MAX_PACKET_LEN || header->m_PacketLen <= sizeof(*header))
{
break;
}
char *pData = new char[header->m_PacketLen];
memcpy(pData, data, header->m_PacketLen];
m_Data.push_back(pData);
succ = 1;
}
} while(0)
// unlock
return succ;
}
int CPacketQueue::PushfrontQ(void *data)
{
// lock
int succ = 0;
do
{
if (data)
{
PacketHeader *header = data;
if (header->m_PacketLen > MAX_PACKET_LEN || header->m_PacketLen <= sizeof(*header))
{
break;
}
char *pData = new char[header->m_PacketLen];
memcpy(pData, data, header->m_PacketLen];
m_Data.push_front(pData);
succ = 1;
}
} while(0)
// unlock
return succ;
}
int CPacketQueue::PopfrontQ(void **data)
{
// lock
int succ = 0;
do
{
if (data)
{
list<void *>::iterator it = m_Data.begin();
if (it == m_Data.end())
{
*data = NULL;
break;
}
*data = *it;
succ = 1;
}
} while(0)
// unlock
return succ;
}
CPullThread::CPullThread(CPacketQueue *queue): m_Queue(queue);
{
}
int CPullThread::Run()
{
while (!StopThread())
{
void **data;
m_Queue->PopQ(data);
// table->Proc(*data);
}
}