| /* | 
 |  *  Copyright 2004 The WebRTC Project Authors. All rights reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 |  | 
 | #ifndef WEBRTC_BASE_NATTYPE_H__ | 
 | #define WEBRTC_BASE_NATTYPE_H__ | 
 |  | 
 | namespace rtc { | 
 |  | 
 | /* Identifies each type of NAT that can be simulated. */ | 
 | enum NATType { | 
 |   NAT_OPEN_CONE, | 
 |   NAT_ADDR_RESTRICTED, | 
 |   NAT_PORT_RESTRICTED, | 
 |   NAT_SYMMETRIC | 
 | }; | 
 |  | 
 | // Implements the rules for each specific type of NAT. | 
 | class NAT { | 
 | public: | 
 |   virtual ~NAT() { } | 
 |  | 
 |   // Determines whether this NAT uses both source and destination address when | 
 |   // checking whether a mapping already exists. | 
 |   virtual bool IsSymmetric() = 0; | 
 |  | 
 |   // Determines whether this NAT drops packets received from a different IP | 
 |   // the one last sent to. | 
 |   virtual bool FiltersIP() = 0; | 
 |  | 
 |   // Determines whether this NAT drops packets received from a different port | 
 |   // the one last sent to. | 
 |   virtual bool FiltersPort() = 0; | 
 |  | 
 |   // Returns an implementation of the given type of NAT. | 
 |   static NAT* Create(NATType type); | 
 | }; | 
 |  | 
 | } // namespace rtc | 
 |  | 
 | #endif // WEBRTC_BASE_NATTYPE_H__ |