blob: 60e7fbd4b410bad269aedeaf4bbef6a1f882d0b7 [file] [log] [blame]
henrike@webrtc.orgf0488722014-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
Steve Anton10542f22019-01-11 17:11:0011#ifndef RTC_BASE_NAT_TYPES_H_
12#define RTC_BASE_NAT_TYPES_H_
henrike@webrtc.orgf0488722014-05-13 18:00:2613
Henrik Kjellanderec78f1c2017-06-29 05:52:5014namespace rtc {
henrike@webrtc.orgf0488722014-05-13 18:00:2615
Henrik Kjellanderec78f1c2017-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.orgf0488722014-05-13 18:00:2623
Henrik Kjellanderec78f1c2017-06-29 05:52:5024// Implements the rules for each specific type of NAT.
25class NAT {
Yves Gerey665174f2018-06-19 13:03:0526 public:
27 virtual ~NAT() {}
Henrik Kjellanderec78f1c2017-06-29 05:52:5028
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
Yves Gerey665174f2018-06-19 13:03:0545} // namespace rtc
Henrik Kjellanderec78f1c2017-06-29 05:52:5046
Steve Anton10542f22019-01-11 17:11:0047#endif // RTC_BASE_NAT_TYPES_H_