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
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef REMOTING_PROTOCOL_PORT_ALLOCATOR_H_
#define REMOTING_PROTOCOL_PORT_ALLOCATOR_H_
#include <string>
#include <string_view>
#include <vector>
#include "base/memory/weak_ptr.h"
#include "remoting/protocol/ice_config.h"
#include "remoting/protocol/network_settings.h"
#include "remoting/protocol/transport_context.h"
#include "third_party/webrtc/api/environment/environment.h"
#include "third_party/webrtc/p2p/client/basic_port_allocator.h"
namespace remoting::protocol {
class PortAllocator : public webrtc::BasicPortAllocator {
public:
PortAllocator(const webrtc::Environment& webrtc_env,
std::unique_ptr<webrtc::NetworkManager> network_manager,
std::unique_ptr<webrtc::PacketSocketFactory> socket_factory,
scoped_refptr<TransportContext> transport_context);
~PortAllocator() override;
void ApplyNetworkSettings(const NetworkSettings& network_settings);
scoped_refptr<TransportContext> transport_context() {
return transport_context_;
}
webrtc::PortAllocatorSession* CreateSessionInternal(
std::string_view content_name,
int component,
std::string_view ice_ufrag,
std::string_view ice_pwd) override;
base::WeakPtr<PortAllocator> GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
private:
std::unique_ptr<webrtc::NetworkManager> network_manager_;
std::unique_ptr<webrtc::PacketSocketFactory> socket_factory_;
scoped_refptr<TransportContext> transport_context_;
bool network_settings_applied_ = false;
base::WeakPtrFactory<PortAllocator> weak_factory_{this};
};
class PortAllocatorSession : public webrtc::BasicPortAllocatorSession {
public:
PortAllocatorSession(PortAllocator* allocator,
const std::string& content_name,
int component,
const std::string& ice_ufrag,
const std::string& ice_pwd);
~PortAllocatorSession() override;
private:
bool relay_enabled() {
return !(flags() & webrtc::PORTALLOCATOR_DISABLE_RELAY);
}
// BasicPortAllocatorSession overrides.
void GetPortConfigurations() override;
// Callback for TransportContext::GetIceConfig().
void OnIceConfig(const IceConfig& ice_config);
// Creates PortConfiguration that includes STUN and TURN servers from
// |ice_config_|.
std::unique_ptr<webrtc::PortConfiguration> GetPortConfiguration();
scoped_refptr<TransportContext> transport_context_;
IceConfig ice_config_;
base::WeakPtrFactory<PortAllocatorSession> weak_factory_{this};
};
} // namespace remoting::protocol
#endif // REMOTING_PROTOCOL_PORT_ALLOCATOR_H_
|