blob: cc846c039e616acb0404a0f8c8cbf53f43f3bbec [file] [log] [blame]
henrike@webrtc.org47be73b2014-05-13 18:00:261/*
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
Henrik Kjellanderfb3e1b62017-06-29 06:03:0411#ifndef WEBRTC_RTC_BASE_NATTYPES_H_
12#define WEBRTC_RTC_BASE_NATTYPES_H_
henrike@webrtc.org47be73b2014-05-13 18:00:2613
Henrik Kjellander88b2dd42017-06-29 05:52:5014namespace rtc {
henrike@webrtc.org47be73b2014-05-13 18:00:2615
Henrik Kjellander88b2dd42017-06-29 05:52:5016/* Identifies each type of NAT that can be simulated. */
17enum NATType {
18 NAT_OPEN_CONE,
19 NAT_ADDR_RESTRICTED,
20 NAT_PORT_RESTRICTED,
21 NAT_SYMMETRIC
22};
henrike@webrtc.org47be73b2014-05-13 18:00:2623
Henrik Kjellander88b2dd42017-06-29 05:52:5024// Implements the rules for each specific type of NAT.
25class NAT {
26public:
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
Henrik Kjellanderfb3e1b62017-06-29 06:03:0447#endif // WEBRTC_RTC_BASE_NATTYPES_H_