Home | History | Annotate | Download | only in protocol
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef REMOTING_PROTOCOL_NETWORK_SETTINGS_H_
      6 #define REMOTING_PROTOCOL_NETWORK_SETTINGS_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/logging.h"
     12 
     13 namespace remoting {
     14 namespace protocol {
     15 
     16 struct NetworkSettings {
     17 
     18   // When hosts are configured with NAT traversal disabled they will
     19   // typically also limit their P2P ports to this range, so that
     20   // sessions may be blocked or un-blocked via firewall rules.
     21   static const int kDefaultMinPort = 12400;
     22   static const int kDefaultMaxPort = 12409;
     23 
     24   enum Flags {
     25     // Don't use STUN or relay servers. Accept incoming P2P connection
     26     // attempts, but don't initiate any. This ensures that the peer is
     27     // on the same network. Note that connection will always fail if
     28     // both ends use this mode.
     29     NAT_TRAVERSAL_DISABLED = 0x0,
     30 
     31     // Allow outgoing connections, even when STUN and RELAY are not enabled.
     32     NAT_TRAVERSAL_OUTGOING = 0x1,
     33 
     34     // Active NAT traversal using STUN.
     35     NAT_TRAVERSAL_STUN = 0x2,
     36 
     37     // Allow the use of relay servers when a direct connection is not available.
     38     NAT_TRAVERSAL_RELAY = 0x4,
     39 
     40     // Active NAT traversal using STUN and relay servers.
     41     NAT_TRAVERSAL_FULL = NAT_TRAVERSAL_STUN | NAT_TRAVERSAL_RELAY |
     42         NAT_TRAVERSAL_OUTGOING
     43   };
     44 
     45   NetworkSettings()
     46       : flags(NAT_TRAVERSAL_DISABLED),
     47         min_port(0),
     48         max_port(0) {
     49     DCHECK(!(flags & (NAT_TRAVERSAL_STUN | NAT_TRAVERSAL_RELAY)) ||
     50            (flags & NAT_TRAVERSAL_OUTGOING));
     51   }
     52 
     53   explicit NetworkSettings(uint32 flags)
     54       : flags(flags),
     55         min_port(0),
     56         max_port(0) {
     57   }
     58 
     59   // Parse string in the form "<min_port>-<max_port>". E.g. "12400-12409".
     60   // Returns true if string was parsed successfuly.
     61   static bool ParsePortRange(const std::string& port_range,
     62                              int* out_min_port,
     63                              int* out_max_port);
     64 
     65   uint32 flags;
     66 
     67   // |min_port| and |max_port| specify range (inclusive) of ports used by
     68   // P2P sessions. Any port can be used when both values are set to 0.
     69   int min_port;
     70   int max_port;
     71 };
     72 
     73 }  // namespace protocol
     74 }  // namespace remoting
     75 
     76 #endif  // REMOTING_HOST_NETWORK_SETTINGS_H_
     77