removed deadlock in rtpSession
[anytun.git] / rtpSession.cpp
bloba65ab5f50e2240dd73d1188a65ceee11f1e8bc69
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 anytun.org <satp@wirdorange.org>
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2
18 * as published by the Free Software Foundation.
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
25 * You should have received a copy of the GNU General Public License
26 * along with this program (see the file COPYING included with this
27 * distribution); if not, write to the Free Software Foundation, Inc.,
28 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
31 #include "rtpSession.h"
33 #include "anyrtpproxy/callIdQueue.h"
35 RtpSession::RtpSession(const std::string& call_id) : in_sync_(false), call_id_(call_id) , dead_(false), complete_(false),
36 local_addr_("") , local_port1_(0), local_port2_(0),
37 remote_addr1_(""), remote_addr2_(""), remote_port1_(0), remote_port2_(0),seen1_(false), seen2_(false)
41 void RtpSession::reinit()
43 gCallIdQueue.push(call_id_);
46 bool RtpSession::isDead()
48 Lock lock(mutex_);
49 return (dead_ && in_sync_);
52 bool RtpSession::isDead(bool d)
54 Lock Lock(mutex_);
55 return dead_ = d;
58 bool RtpSession::isComplete()
60 Lock lock(mutex_);
61 return complete_;
64 bool RtpSession::isComplete(bool c)
66 Lock lock(mutex_);
67 return complete_ = c;
70 std::string RtpSession::getLocalAddr()
72 Lock lock(mutex_);
73 return local_addr_;
76 RtpSession& RtpSession::setLocalAddr(std::string a)
78 Lock lock(mutex_);
79 in_sync_ = false;
80 local_addr_ = a;
81 return *this;
84 bool RtpSession::getSeen1()
86 Lock lock(mutex_);
87 return seen1_;
90 RtpSession& RtpSession::setSeen1()
92 Lock lock(mutex_);
93 //in_sync_ = false;
94 seen1_ = true;
95 return *this;
98 bool RtpSession::getSeen2()
100 Lock lock(mutex_);
101 return seen2_;
104 RtpSession& RtpSession::setSeen2()
106 Lock lock(mutex_);
107 //in_sync_ = false;
108 seen2_ = true;
109 return *this;
112 u_int16_t RtpSession::getLocalPort1()
114 Lock lock(mutex_);
115 return local_port1_;
118 RtpSession& RtpSession::setLocalPort1(u_int16_t p)
120 Lock lock(mutex_);
121 in_sync_ = false;
122 local_port1_ = p;
123 return *this;
126 u_int16_t RtpSession::getLocalPort2()
128 Lock lock(mutex_);
129 return local_port2_;
132 RtpSession& RtpSession::setLocalPort2(u_int16_t p)
134 Lock lock(mutex_);
135 in_sync_ = false;
136 local_port2_ = p;
137 return *this;
140 u_int16_t RtpSession::getRemotePort1()
142 Lock lock(mutex_);
143 return remote_port1_;
146 RtpSession& RtpSession::setRemotePort1(u_int16_t p)
148 Lock lock(mutex_);
149 in_sync_ = false;
150 remote_port1_ = p;
151 return *this;
154 std::string RtpSession::getRemoteAddr1()
156 Lock lock(mutex_);
157 return remote_addr1_;
160 RtpSession& RtpSession::setRemoteAddr1(std::string a)
162 Lock lock(mutex_);
163 in_sync_ = false;
164 remote_addr1_ = a;
165 return *this;
168 u_int16_t RtpSession::getRemotePort2()
170 Lock lock(mutex_);
171 return remote_port2_;
174 RtpSession& RtpSession::setRemotePort2(u_int16_t p)
176 Lock lock(mutex_);
177 in_sync_ = false;
178 remote_port2_ = p;
179 return *this;
182 std::string RtpSession::getRemoteAddr2()
184 Lock lock(mutex_);
185 return remote_addr2_;
188 RtpSession& RtpSession::setRemoteAddr2(std::string a)
190 Lock lock(mutex_);
191 in_sync_ = false;
192 remote_addr2_ = a;
193 return *this;