1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef REMOTING_PROTOCOL_NETWORK_SETTINGS_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define REMOTING_PROTOCOL_NETWORK_SETTINGS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <string> 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/basictypes.h" 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/logging.h" 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace remoting { 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace protocol { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NetworkSettings { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When hosts are configured with NAT traversal disabled they will 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // typically also limit their P2P ports to this range, so that 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sessions may be blocked or un-blocked via firewall rules. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kDefaultMinPort = 12400; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const int kDefaultMaxPort = 12409; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu enum Flags { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't use STUN or relay servers. Accept incoming P2P connection 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // attempts, but don't initiate any. This ensures that the peer is 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on the same network. Note that connection will always fail if 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // both ends use this mode. 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NAT_TRAVERSAL_DISABLED = 0x0, 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Allow outgoing connections, even when STUN and RELAY are not enabled. 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NAT_TRAVERSAL_OUTGOING = 0x1, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Active NAT traversal using STUN. 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NAT_TRAVERSAL_STUN = 0x2, 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Allow the use of relay servers when a direct connection is not available. 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NAT_TRAVERSAL_RELAY = 0x4, 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Active NAT traversal using STUN and relay servers. 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NAT_TRAVERSAL_FULL = NAT_TRAVERSAL_STUN | NAT_TRAVERSAL_RELAY | 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NAT_TRAVERSAL_OUTGOING 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NetworkSettings() 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : flags(NAT_TRAVERSAL_DISABLED), 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) min_port(0), 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_port(0) { 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DCHECK(!(flags & (NAT_TRAVERSAL_STUN | NAT_TRAVERSAL_RELAY)) || 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu (flags & NAT_TRAVERSAL_OUTGOING)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu explicit NetworkSettings(uint32 flags) 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu : flags(flags), 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) min_port(0), 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_port(0) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Parse string in the form "<min_port>-<max_port>". E.g. "12400-12409". 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Returns true if string was parsed successfuly. 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static bool ParsePortRange(const std::string& port_range, 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int* out_min_port, 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int* out_max_port); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu uint32 flags; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |min_port| and |max_port| specify range (inclusive) of ports used by 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // P2P sessions. Any port can be used when both values are set to 0. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int min_port; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int max_port; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace protocol 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace remoting 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // REMOTING_HOST_NETWORK_SETTINGS_H_ 77