-
Notifications
You must be signed in to change notification settings - Fork 18
/
packetmanager.cpp
79 lines (70 loc) · 1.98 KB
/
packetmanager.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
/*
Copyright 2008 Utah State University
This file is part of OIP.
OIP is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OIP is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OIP. If not, see <http://www.gnu.org/licenses/>.
*/
#include "packetmanager.h"
#include "ips.h"
#include <iostream>
using std::cerr;
bool packetmanager::addpacket(unsigned int s, unsigned int d, unsigned int c, unsigned int size)
{
if (count < maxpacket)
{
SDL_mutexP(packetlock);
packettype p(s,d,c);
pmdict::iterator i = packets.find(p);
if (i == packets.end())
{
packets[p] = size;
count++;
}
else
(*i).second += size;
SDL_mutexV(packetlock);
}
else
{
cerr << "Too many packets in the queue, dropping\n";
}
return true;
}
/*
* dumps all the accumulated packets into a packetsink object
*/
//bool packetmanager::dumpdata(packetsink& ps)
bool packetmanager::dumpdata(packetsink& ps, int speed)
{
bool hasroom=true;
SDL_mutexP(packetlock);
pmdict::iterator i = packets.begin();
while(i != packets.end())
{
if (!(hasroom = ps.addpacket((*i).first.src, (*i).first.dst, (*i).first.color, (*i).second)))
break;
packets.erase(i++);
count--;
}
SDL_mutexV(packetlock);
return !hasroom;
}
void packetmanager::copydata(packetpeek& ps)
{
SDL_mutexP(packetlock);
pmdict::iterator i = packets.begin();
while(i != packets.end())
{
ps.copypacket((*i).first.src, (*i).first.dst, (*i).first.color, (*i).second);
i++;
}
SDL_mutexV(packetlock);
}