blob: a7af57d8c57cd11e5f5d07b645609c5538635c37 [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
Mirko Bonadei92ea95e2017-09-15 04:47:3111#include "rtc_base/nattypes.h"
henrike@webrtc.orgf0488722014-05-13 18:00:2612
Mirko Bonadei92ea95e2017-09-15 04:47:3113#include "rtc_base/checks.h"
kwiberg22487b22016-09-13 08:17:1014
henrike@webrtc.orgf0488722014-05-13 18:00:2615namespace rtc {
16
17class SymmetricNAT : public NAT {
Yves Gerey665174f2018-06-19 13:03:0518 public:
19 bool IsSymmetric() override { return true; }
20 bool FiltersIP() override { return true; }
21 bool FiltersPort() override { return true; }
henrike@webrtc.orgf0488722014-05-13 18:00:2622};
23
24class OpenConeNAT : public NAT {
Yves Gerey665174f2018-06-19 13:03:0525 public:
26 bool IsSymmetric() override { return false; }
27 bool FiltersIP() override { return false; }
28 bool FiltersPort() override { return false; }
henrike@webrtc.orgf0488722014-05-13 18:00:2629};
30
31class AddressRestrictedNAT : public NAT {
Yves Gerey665174f2018-06-19 13:03:0532 public:
33 bool IsSymmetric() override { return false; }
34 bool FiltersIP() override { return true; }
35 bool FiltersPort() override { return false; }
henrike@webrtc.orgf0488722014-05-13 18:00:2636};
37
38class PortRestrictedNAT : public NAT {
Yves Gerey665174f2018-06-19 13:03:0539 public:
40 bool IsSymmetric() override { return false; }
41 bool FiltersIP() override { return true; }
42 bool FiltersPort() override { return true; }
henrike@webrtc.orgf0488722014-05-13 18:00:2643};
44
45NAT* NAT::Create(NATType type) {
46 switch (type) {
kwiberg22487b22016-09-13 08:17:1047 case NAT_OPEN_CONE:
48 return new OpenConeNAT();
49 case NAT_ADDR_RESTRICTED:
50 return new AddressRestrictedNAT();
51 case NAT_PORT_RESTRICTED:
52 return new PortRestrictedNAT();
53 case NAT_SYMMETRIC:
54 return new SymmetricNAT();
55 default:
56 RTC_NOTREACHED();
57 return 0;
henrike@webrtc.orgf0488722014-05-13 18:00:2658 }
59}
60
Yves Gerey665174f2018-06-19 13:03:0561} // namespace rtc