blob: 64b36d3f851806559c923dbb5294b35fd3e54f47 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef RTC_BASE_NATTYPES_H_
12#define RTC_BASE_NATTYPES_H_
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000013
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020014namespace rtc {
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000015
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020016/* 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.orgf0488722014-05-13 18:00:26 +000023
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020024// 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
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020047#endif // RTC_BASE_NATTYPES_H_