blob: 29936ad848b116d8fe19404e2758581eabba7e92 [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#include "rtc_base/nattypes.h"
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "rtc_base/checks.h"
kwiberg22487b22016-09-13 01:17:10 -070014
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000015namespace rtc {
16
17class SymmetricNAT : public NAT {
18public:
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000019 bool IsSymmetric() override { return true; }
20 bool FiltersIP() override { return true; }
21 bool FiltersPort() override { return true; }
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000022};
23
24class OpenConeNAT : public NAT {
25public:
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000026 bool IsSymmetric() override { return false; }
27 bool FiltersIP() override { return false; }
28 bool FiltersPort() override { return false; }
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000029};
30
31class AddressRestrictedNAT : public NAT {
32public:
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000033 bool IsSymmetric() override { return false; }
34 bool FiltersIP() override { return true; }
35 bool FiltersPort() override { return false; }
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000036};
37
38class PortRestrictedNAT : public NAT {
39public:
kwiberg@webrtc.org67186fe2015-03-09 22:21:53 +000040 bool IsSymmetric() override { return false; }
41 bool FiltersIP() override { return true; }
42 bool FiltersPort() override { return true; }
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000043};
44
45NAT* NAT::Create(NATType type) {
46 switch (type) {
kwiberg22487b22016-09-13 01:17:10 -070047 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:26 +000058 }
59}
60
61} // namespace rtc