diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-03 01:19:53 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-03 01:19:53 +0000 |
commit | 97f2db27a730693ac0711894dcff741c1b1451a3 (patch) | |
tree | f0190c3eceeb38ade4856272b50c6d195f1ffe1d /third_party/libjingle/files/talk/base/firewallsocketserver.h | |
parent | de5834cf1962af5607b459731f8960cfd3baa4c2 (diff) | |
download | chromium_src-97f2db27a730693ac0711894dcff741c1b1451a3.zip chromium_src-97f2db27a730693ac0711894dcff741c1b1451a3.tar.gz chromium_src-97f2db27a730693ac0711894dcff741c1b1451a3.tar.bz2 |
Revert 48798 - New libjingle integrated to chrome.
BUG=none
TEST=Chrome Sync works
Review URL: http://codereview.chromium.org/2255007
TBR=sergeyu@chromium.org
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48800 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/libjingle/files/talk/base/firewallsocketserver.h')
-rw-r--r-- | third_party/libjingle/files/talk/base/firewallsocketserver.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/third_party/libjingle/files/talk/base/firewallsocketserver.h b/third_party/libjingle/files/talk/base/firewallsocketserver.h new file mode 100644 index 0000000..10c07e6 --- /dev/null +++ b/third_party/libjingle/files/talk/base/firewallsocketserver.h @@ -0,0 +1,95 @@ +/* + * libjingle + * Copyright 2004--2005, Google Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef TALK_BASE_FIREWALLSOCKETSERVER_H__ +#define TALK_BASE_FIREWALLSOCKETSERVER_H__ + +#include <vector> +#include "talk/base/socketserver.h" +#include "talk/base/criticalsection.h" + +namespace talk_base { + +class FirewallManager; + +// This SocketServer shim simulates a rule-based firewall server + +enum FirewallProtocol { FP_UDP, FP_TCP, FP_ANY }; +enum FirewallDirection { FD_IN, FD_OUT, FD_ANY }; + +class FirewallSocketServer : public SocketServer { +public: + FirewallSocketServer(SocketServer * server, FirewallManager * manager = 0); + virtual ~FirewallSocketServer(); + + void AddRule(bool allow, FirewallProtocol p = FP_ANY, FirewallDirection d = FD_ANY, const SocketAddress& addr = SocketAddress()); + void ClearRules(); + + bool Check(FirewallProtocol p, FirewallDirection d, const SocketAddress& addr); + + virtual Socket* CreateSocket(int type); + virtual AsyncSocket* CreateAsyncSocket(int type); + virtual bool Wait(int cms, bool process_io) { return server_->Wait(cms, process_io); } + virtual void WakeUp() { return server_->WakeUp(); } + + Socket * WrapSocket(Socket * sock, int type); + AsyncSocket * WrapSocket(AsyncSocket * sock, int type); + +private: + SocketServer * server_; + FirewallManager * manager_; + CriticalSection crit_; + struct Rule { + bool allow; + FirewallProtocol p; + FirewallDirection d; + SocketAddress addr; + }; + std::vector<Rule> rules_; +}; + +// FirewallManager allows you to manage firewalls in multiple threads together + +class FirewallManager { +public: + FirewallManager(); + ~FirewallManager(); + + void AddServer(FirewallSocketServer * server); + void RemoveServer(FirewallSocketServer * server); + + void AddRule(bool allow, FirewallProtocol p = FP_ANY, FirewallDirection d = FD_ANY, const SocketAddress& addr = SocketAddress()); + void ClearRules(); + +private: + CriticalSection crit_; + std::vector<FirewallSocketServer *> servers_; +}; + +} // namespace talk_base + +#endif // TALK_BASE_FIREWALLSOCKETSERVER_H__ |