added licence header to wireshark lua script
[anytun.git] / src / seqWindow.cpp
blob1a36392642ba76494e598046341afb45f4aaa1c5
1 /*
2 * anytun
4 * The secure anycast tunneling protocol (satp) defines a protocol used
5 * for communication between any combination of unicast and anycast
6 * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
7 * mode and allows tunneling of every ETHER TYPE protocol (e.g.
8 * ethernet, ip, arp ...). satp directly includes cryptography and
9 * message authentication based on the methodes used by SRTP. It is
10 * intended to deliver a generic, scaleable and secure solution for
11 * tunneling and relaying of packets of any protocol.
14 * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl,
15 * Christian Pointner <satp@wirdorange.org>
17 * This file is part of Anytun.
19 * Anytun is free software: you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 3 as
21 * published by the Free Software Foundation.
23 * Anytun is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License
29 * along with anytun. If not, see <http://www.gnu.org/licenses/>.
32 #include "threadUtils.hpp"
33 #include "datatypes.h"
35 #include "seqWindow.h"
37 SeqWindow::SeqWindow(window_size_t w) : window_size_(w)
41 SeqWindow::~SeqWindow()
45 SeqWindow::SeqDeque::size_type SeqWindow::getLength(sender_id_t sender)
47 Lock lock(mutex_);
48 SenderMap::const_iterator s = sender_.find(sender);
49 if(s == sender_.end())
50 return 0;
52 return s->second.size();
55 bool SeqWindow::hasSeqNr(sender_id_t sender, seq_nr_t seq)
57 Lock lock(mutex_);
58 if (!window_size_)
59 return false;
60 SenderMap::const_iterator s = sender_.find(sender);
61 if(s == sender_.end())
62 return false;
64 SeqDeque::const_iterator it;
65 for(it = s->second.begin(); it != s->second.end(); it++)
66 if(*it == seq)
67 return true;
69 return false;
72 void SeqWindow::addSeqNr(sender_id_t sender, seq_nr_t seq)
74 Lock lock(mutex_);
75 if (!window_size_)
76 return;
77 if(sender_[sender].size() >= window_size_)
78 sender_[sender].pop_front();
79 sender_[sender].push_back(seq);
82 void SeqWindow::clear(sender_id_t sender)
84 Lock lock(mutex_);
85 sender_[sender].clear();
86 sender_.erase(sender);
89 void SeqWindow::clear()
91 Lock lock(mutex_);
92 sender_.clear();