55#include " transport/ice/IceSession.h"
66#include " transport/ice/Stun.h"
77#include " utils/ContainerAlgorithms.h"
8+ #include " utils/Function.h"
89#include " utils/Time.h"
910#include < unistd.h>
1011
1112namespace transport
1213{
13- ProbeServer::ProbeServer (const ice::IceConfig& iceConfig, const config::Config& config)
14+ ProbeServer::ProbeServer (const ice::IceConfig& iceConfig,
15+ const config::Config& config,
16+ jobmanager::JobManager& jobmanager)
1417 : _iceConfig(iceConfig),
1518 _config (config),
19+ _jobQueue(jobmanager, 1024 ),
1620 _queue(1024 ),
1721 _maintenanceThreadIsRunning(true ),
1822 _maintenanceThread(new std::thread([this ] { this ->run (); }))
@@ -40,7 +44,7 @@ void ProbeServer::onDtlsReceived(Endpoint& endpoint,
4044 const SocketAddress& source,
4145 const SocketAddress& target,
4246 memory::UniquePacket packet,
43- const uint64_t timestamp){};
47+ const uint64_t timestamp) {};
4448
4549void ProbeServer::onRtcpReceived (Endpoint& endpoint,
4650 const SocketAddress& source,
@@ -56,7 +60,12 @@ void ProbeServer::onIceReceived(Endpoint& endpoint,
5660 memory::UniquePacket packet,
5761 const uint64_t timestamp)
5862{
59- replyStunOk (endpoint, source, std::move (packet));
63+ _jobQueue.post (utils::bind (&ProbeServer::onIceReceivedInternal,
64+ this ,
65+ std::ref (endpoint),
66+ source,
67+ utils::moveParam (packet),
68+ timestamp));
6069}
6170
6271void ProbeServer::onRegistered (Endpoint& endpoint)
@@ -242,26 +251,24 @@ void ProbeServer::onIceTcpConnect(std::shared_ptr<Endpoint> endpoint,
242251 memory::UniquePacket packet,
243252 const uint64_t timestamp)
244253{
245- if (endpoint->getTransportType () == ice::TransportType::TCP)
246- {
247- replyStunOk (*endpoint, source, std::move (packet));
248254
249- ProbeTcpConnection connection;
250- connection.endpoint = endpoint;
251- connection.timestamp = utils::Time::getAbsoluteTime ();
252- _queue.push (connection);
253- }
255+ _jobQueue.post (utils::bind (&ProbeServer::onIceTcpConnectInternal,
256+ this ,
257+ endpoint,
258+ source,
259+ utils::moveParam (packet),
260+ timestamp));
254261}
255262
256263// Endpoint::IStopEvents
257264void ProbeServer::onEndpointStopped (Endpoint* endpoint) {}
258265
259- void ProbeServer::replyStunOk (Endpoint& endpoint, const SocketAddress& destination, memory::UniquePacket packet)
266+ bool ProbeServer::replyStunOk (Endpoint& endpoint,
267+ const SocketAddress& destination,
268+ memory::UniquePacket packet,
269+ const uint64_t timestamp)
260270{
261- uint64_t timestamp = utils::Time::getAbsoluteTime ();
262- const void * data = packet->get ();
263-
264- auto * stunMessage = ice::StunMessage::fromPtr (data);
271+ auto * stunMessage = ice::StunMessage::fromPtr (packet->get ());
265272
266273 if (stunMessage && stunMessage->isValid () && stunMessage->header .isRequest () &&
267274 stunMessage->isAuthentic (_hmacComputer))
@@ -274,11 +281,40 @@ void ProbeServer::replyStunOk(Endpoint& endpoint, const SocketAddress& destinati
274281 response.addFingerprint ();
275282
276283 endpoint.sendStunTo (destination, response.header .transactionId .get (), &response, response.size (), timestamp);
284+ return true ;
277285 }
278- else
286+
287+ if (endpoint.getTransportType () != ice::TransportType::UDP)
279288 {
280289 endpoint.stop (this );
281290 }
291+
292+ return false ;
293+ }
294+
295+ void ProbeServer::onIceReceivedInternal (Endpoint& endpoint,
296+ const SocketAddress& source,
297+ memory::UniquePacket packet,
298+ uint64_t timestamp)
299+ {
300+ replyStunOk (endpoint, source, std::move (packet), timestamp);
301+ }
302+
303+ void ProbeServer::onIceTcpConnectInternal (std::shared_ptr<Endpoint> endpoint,
304+ const SocketAddress& source,
305+ memory::UniquePacket packet,
306+ const uint64_t timestamp)
307+ {
308+ if (endpoint->getTransportType () == ice::TransportType::TCP)
309+ {
310+ if (replyStunOk (*endpoint, source, std::move (packet), timestamp))
311+ {
312+ ProbeTcpConnection connection;
313+ connection.endpoint = endpoint;
314+ connection.timestamp = utils::Time::getAbsoluteTime ();
315+ _queue.push (connection);
316+ }
317+ }
282318}
283319
284320void ProbeServer::addCandidate (const ice::IceCandidate& candidate)
0 commit comments