Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1220)

Unified Diff: webrtc/base/firewallsocketserver.cc

Issue 2877023002: Move webrtc/{base => rtc_base} (Closed)
Patch Set: update presubmit.py and DEPS include rules Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/firewallsocketserver.h ('k') | webrtc/base/flags.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/base/firewallsocketserver.cc
diff --git a/webrtc/base/firewallsocketserver.cc b/webrtc/base/firewallsocketserver.cc
deleted file mode 100644
index 4a2a4048f37684bc4c2e0cc7838e984cf0269ee9..0000000000000000000000000000000000000000
--- a/webrtc/base/firewallsocketserver.cc
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright 2004 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/base/firewallsocketserver.h"
-
-#include <algorithm>
-
-#include "webrtc/base/asyncsocket.h"
-#include "webrtc/base/checks.h"
-#include "webrtc/base/logging.h"
-
-namespace rtc {
-
-class FirewallSocket : public AsyncSocketAdapter {
- public:
- FirewallSocket(FirewallSocketServer* server, AsyncSocket* socket, int type)
- : AsyncSocketAdapter(socket), server_(server), type_(type) {
- }
-
- int Bind(const SocketAddress& addr) override {
- if (!server_->IsBindableIp(addr.ipaddr())) {
- SetError(EINVAL);
- return SOCKET_ERROR;
- }
- return AsyncSocketAdapter::Bind(addr);
- }
-
- int Connect(const SocketAddress& addr) override {
- if (type_ == SOCK_STREAM) {
- if (!server_->Check(FP_TCP, GetLocalAddress(), addr)) {
- LOG(LS_VERBOSE) << "FirewallSocket outbound TCP connection from "
- << GetLocalAddress().ToSensitiveString() << " to "
- << addr.ToSensitiveString() << " denied";
- // TODO: Handle this asynchronously.
- SetError(EHOSTUNREACH);
- return SOCKET_ERROR;
- }
- }
- return AsyncSocketAdapter::Connect(addr);
- }
- int Send(const void* pv, size_t cb) override {
- return SendTo(pv, cb, GetRemoteAddress());
- }
- int SendTo(const void* pv, size_t cb, const SocketAddress& addr) override {
- RTC_DCHECK(type_ == SOCK_DGRAM || type_ == SOCK_STREAM);
- FirewallProtocol protocol = (type_ == SOCK_DGRAM) ? FP_UDP : FP_TCP;
- if (!server_->Check(protocol, GetLocalAddress(), addr)) {
- LOG(LS_VERBOSE) << "FirewallSocket outbound packet with type " << type_
- << " from " << GetLocalAddress().ToSensitiveString()
- << " to " << addr.ToSensitiveString() << " dropped";
- return static_cast<int>(cb);
- }
- return AsyncSocketAdapter::SendTo(pv, cb, addr);
- }
- int Recv(void* pv, size_t cb, int64_t* timestamp) override {
- SocketAddress addr;
- return RecvFrom(pv, cb, &addr, timestamp);
- }
- int RecvFrom(void* pv,
- size_t cb,
- SocketAddress* paddr,
- int64_t* timestamp) override {
- if (type_ == SOCK_DGRAM) {
- while (true) {
- int res = AsyncSocketAdapter::RecvFrom(pv, cb, paddr, timestamp);
- if (res <= 0)
- return res;
- if (server_->Check(FP_UDP, *paddr, GetLocalAddress()))
- return res;
- LOG(LS_VERBOSE) << "FirewallSocket inbound UDP packet from "
- << paddr->ToSensitiveString() << " to "
- << GetLocalAddress().ToSensitiveString() << " dropped";
- }
- }
- return AsyncSocketAdapter::RecvFrom(pv, cb, paddr, timestamp);
- }
-
- int Listen(int backlog) override {
- if (!server_->tcp_listen_enabled()) {
- LOG(LS_VERBOSE) << "FirewallSocket listen attempt denied";
- return -1;
- }
-
- return AsyncSocketAdapter::Listen(backlog);
- }
- AsyncSocket* Accept(SocketAddress* paddr) override {
- SocketAddress addr;
- while (AsyncSocket* sock = AsyncSocketAdapter::Accept(&addr)) {
- if (server_->Check(FP_TCP, addr, GetLocalAddress())) {
- if (paddr)
- *paddr = addr;
- return sock;
- }
- sock->Close();
- delete sock;
- LOG(LS_VERBOSE) << "FirewallSocket inbound TCP connection from "
- << addr.ToSensitiveString() << " to "
- << GetLocalAddress().ToSensitiveString() << " denied";
- }
- return 0;
- }
-
- private:
- FirewallSocketServer* server_;
- int type_;
-};
-
-FirewallSocketServer::FirewallSocketServer(SocketServer* server,
- FirewallManager* manager,
- bool should_delete_server)
- : server_(server), manager_(manager),
- should_delete_server_(should_delete_server),
- udp_sockets_enabled_(true), tcp_sockets_enabled_(true),
- tcp_listen_enabled_(true) {
- if (manager_)
- manager_->AddServer(this);
-}
-
-FirewallSocketServer::~FirewallSocketServer() {
- if (manager_)
- manager_->RemoveServer(this);
-
- if (server_ && should_delete_server_) {
- delete server_;
- server_ = nullptr;
- }
-}
-
-void FirewallSocketServer::AddRule(bool allow, FirewallProtocol p,
- FirewallDirection d,
- const SocketAddress& addr) {
- SocketAddress any;
- if (d == FD_IN || d == FD_ANY) {
- AddRule(allow, p, any, addr);
- }
- if (d == FD_OUT || d == FD_ANY) {
- AddRule(allow, p, addr, any);
- }
-}
-
-
-void FirewallSocketServer::AddRule(bool allow, FirewallProtocol p,
- const SocketAddress& src,
- const SocketAddress& dst) {
- Rule r;
- r.allow = allow;
- r.p = p;
- r.src = src;
- r.dst = dst;
- CritScope scope(&crit_);
- rules_.push_back(r);
-}
-
-void FirewallSocketServer::ClearRules() {
- CritScope scope(&crit_);
- rules_.clear();
-}
-
-bool FirewallSocketServer::Check(FirewallProtocol p,
- const SocketAddress& src,
- const SocketAddress& dst) {
- CritScope scope(&crit_);
- for (size_t i = 0; i < rules_.size(); ++i) {
- const Rule& r = rules_[i];
- if ((r.p != p) && (r.p != FP_ANY))
- continue;
- if ((r.src.ipaddr() != src.ipaddr()) && !r.src.IsNil())
- continue;
- if ((r.src.port() != src.port()) && (r.src.port() != 0))
- continue;
- if ((r.dst.ipaddr() != dst.ipaddr()) && !r.dst.IsNil())
- continue;
- if ((r.dst.port() != dst.port()) && (r.dst.port() != 0))
- continue;
- return r.allow;
- }
- return true;
-}
-
-void FirewallSocketServer::SetUnbindableIps(
- const std::vector<rtc::IPAddress>& unbindable_ips) {
- unbindable_ips_ = unbindable_ips;
-}
-
-bool FirewallSocketServer::IsBindableIp(const rtc::IPAddress& ip) {
- return std::find(unbindable_ips_.begin(), unbindable_ips_.end(), ip) ==
- unbindable_ips_.end();
-}
-
-Socket* FirewallSocketServer::CreateSocket(int type) {
- return CreateSocket(AF_INET, type);
-}
-
-Socket* FirewallSocketServer::CreateSocket(int family, int type) {
- return WrapSocket(server_->CreateAsyncSocket(family, type), type);
-}
-
-AsyncSocket* FirewallSocketServer::CreateAsyncSocket(int type) {
- return CreateAsyncSocket(AF_INET, type);
-}
-
-AsyncSocket* FirewallSocketServer::CreateAsyncSocket(int family, int type) {
- return WrapSocket(server_->CreateAsyncSocket(family, type), type);
-}
-
-void FirewallSocketServer::SetMessageQueue(MessageQueue* queue) {
- server_->SetMessageQueue(queue);
-}
-
-bool FirewallSocketServer::Wait(int cms, bool process_io) {
- return server_->Wait(cms, process_io);
-}
-
-void FirewallSocketServer::WakeUp() {
- return server_->WakeUp();
-}
-
-AsyncSocket* FirewallSocketServer::WrapSocket(AsyncSocket* sock, int type) {
- if (!sock ||
- (type == SOCK_STREAM && !tcp_sockets_enabled_) ||
- (type == SOCK_DGRAM && !udp_sockets_enabled_)) {
- LOG(LS_VERBOSE) << "FirewallSocketServer socket creation denied";
- delete sock;
- return nullptr;
- }
- return new FirewallSocket(this, sock, type);
-}
-
-FirewallManager::FirewallManager() {
-}
-
-FirewallManager::~FirewallManager() {
- RTC_DCHECK(servers_.empty());
-}
-
-void FirewallManager::AddServer(FirewallSocketServer* server) {
- CritScope scope(&crit_);
- servers_.push_back(server);
-}
-
-void FirewallManager::RemoveServer(FirewallSocketServer* server) {
- CritScope scope(&crit_);
- servers_.erase(std::remove(servers_.begin(), servers_.end(), server),
- servers_.end());
-}
-
-void FirewallManager::AddRule(bool allow, FirewallProtocol p,
- FirewallDirection d, const SocketAddress& addr) {
- CritScope scope(&crit_);
- for (std::vector<FirewallSocketServer*>::const_iterator it =
- servers_.begin(); it != servers_.end(); ++it) {
- (*it)->AddRule(allow, p, d, addr);
- }
-}
-
-void FirewallManager::ClearRules() {
- CritScope scope(&crit_);
- for (std::vector<FirewallSocketServer*>::const_iterator it =
- servers_.begin(); it != servers_.end(); ++it) {
- (*it)->ClearRules();
- }
-}
-
-} // namespace rtc
« no previous file with comments | « webrtc/base/firewallsocketserver.h ('k') | webrtc/base/flags.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698