Home | History | Annotate | Download | only in base
      1 /*
      2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_BASE_NATTYPE_H__
     12 #define WEBRTC_BASE_NATTYPE_H__
     13 
     14 namespace rtc {
     15 
     16 /* Identifies each type of NAT that can be simulated. */
     17 enum NATType {
     18   NAT_OPEN_CONE,
     19   NAT_ADDR_RESTRICTED,
     20   NAT_PORT_RESTRICTED,
     21   NAT_SYMMETRIC
     22 };
     23 
     24 // Implements the rules for each specific type of NAT.
     25 class NAT {
     26 public:
     27   virtual ~NAT() { }
     28 
     29   // Determines whether this NAT uses both source and destination address when
     30   // checking whether a mapping already exists.
     31   virtual bool IsSymmetric() = 0;
     32 
     33   // Determines whether this NAT drops packets received from a different IP
     34   // the one last sent to.
     35   virtual bool FiltersIP() = 0;
     36 
     37   // Determines whether this NAT drops packets received from a different port
     38   // the one last sent to.
     39   virtual bool FiltersPort() = 0;
     40 
     41   // Returns an implementation of the given type of NAT.
     42   static NAT* Create(NATType type);
     43 };
     44 
     45 } // namespace rtc
     46 
     47 #endif // WEBRTC_BASE_NATTYPE_H__
     48