diff options
author | darin@google.com <darin@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-04 20:12:18 +0000 |
---|---|---|
committer | darin@google.com <darin@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-04 20:12:18 +0000 |
commit | b61e30dff7d2dba5be886e837c9371682efc8ced (patch) | |
tree | 9a281cb9d154c46f1bd34b660d38ee8ff1ca1d7a /net/base | |
parent | 467d8a78689a19aaa96c6700eb02dd94cac5eae1 (diff) | |
download | chromium_src-b61e30dff7d2dba5be886e837c9371682efc8ced.zip chromium_src-b61e30dff7d2dba5be886e837c9371682efc8ced.tar.gz chromium_src-b61e30dff7d2dba5be886e837c9371682efc8ced.tar.bz2 |
Use base::ObjectWatcher instead of MessageLoop::WatchObject for some consumers in the net module.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@335 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r-- | net/base/listen_socket.cc | 28 | ||||
-rw-r--r-- | net/base/listen_socket.h | 21 | ||||
-rw-r--r-- | net/base/listen_socket_unittest.h | 3 | ||||
-rw-r--r-- | net/base/telnet_server.cc | 10 | ||||
-rw-r--r-- | net/base/telnet_server.h | 7 | ||||
-rw-r--r-- | net/base/telnet_server_unittest.cc | 2 |
6 files changed, 34 insertions, 37 deletions
diff --git a/net/base/listen_socket.cc b/net/base/listen_socket.cc index 4893dcc..182aa63 100644 --- a/net/base/listen_socket.cc +++ b/net/base/listen_socket.cc @@ -33,27 +33,23 @@ #include "net/base/listen_socket.h" -#include "base/thread.h" - #define READ_BUF_SIZE 200 -ListenSocket::ListenSocket(SOCKET s, ListenSocketDelegate *del, - MessageLoop *loop) - : socket_(s), socket_delegate_(del), loop_(loop) { +ListenSocket::ListenSocket(SOCKET s, ListenSocketDelegate *del) + : socket_(s), + socket_delegate_(del) { socket_event_ = WSACreateEvent(); WSAEventSelect(socket_, socket_event_, FD_ACCEPT | FD_CLOSE | FD_READ); - loop_->WatchObject(socket_event_, this); + watcher_.StartWatching(socket_event_, this); } ListenSocket::~ListenSocket() { - DCHECK(MessageLoop::current() == loop_); if (socket_event_) { - loop_->WatchObject(socket_event_, NULL); + watcher_.StopWatching(); WSACloseEvent(socket_event_); } - if (socket_) { + if (socket_) closesocket(socket_); - } } SOCKET ListenSocket::Listen(std::string ip, int port) { @@ -72,12 +68,12 @@ SOCKET ListenSocket::Listen(std::string ip, int port) { } ListenSocket* ListenSocket::Listen(std::string ip, int port, - ListenSocketDelegate* del, MessageLoop* l) { + ListenSocketDelegate* del) { SOCKET s = Listen(ip, port); if (s == INVALID_SOCKET) { // TODO(erikkay): error handling } else { - ListenSocket* sock = new ListenSocket(s, del, l); + ListenSocket* sock = new ListenSocket(s, del); sock->Listen(); return sock; } @@ -85,7 +81,6 @@ ListenSocket* ListenSocket::Listen(std::string ip, int port, } void ListenSocket::Listen() { - DCHECK(MessageLoop::current() == loop_); int backlog = 10; // TODO(erikkay): maybe don't allow any backlog? listen(socket_, backlog); // TODO(erikkay): handle error @@ -109,7 +104,7 @@ void ListenSocket::Accept() { // TODO } else { scoped_refptr<ListenSocket> sock = - new ListenSocket(conn, socket_delegate_, loop_); + new ListenSocket(conn, socket_delegate_); // it's up to the delegate to AddRef if it wants to keep it around socket_delegate_->DidAccept(this, sock); } @@ -150,6 +145,10 @@ void ListenSocket::OnObjectSignaled(HANDLE object) { // TODO return; } + + // The object was reset by WSAEnumNetworkEvents. Watch for the next signal. + watcher_.StartWatching(object, this); + if (ev.lNetworkEvents == 0) { // Occasionally the event is set even though there is no new data. // The net seems to think that this is ignorable. @@ -167,7 +166,6 @@ void ListenSocket::OnObjectSignaled(HANDLE object) { } void ListenSocket::SendInternal(const char* bytes, int len) { - DCHECK(MessageLoop::current() == loop_); int sent = send(socket_, bytes, len, 0); if (sent == SOCKET_ERROR) { // TODO diff --git a/net/base/listen_socket.h b/net/base/listen_socket.h index 92df390..f9c6a83 100644 --- a/net/base/listen_socket.h +++ b/net/base/listen_socket.h @@ -33,18 +33,18 @@ // happen in that loop's thread always and that all other methods (including // constructors and destructors) should also be called from the same thread. -#ifndef NET_BASE_SOCKET_H__ -#define NET_BASE_SOCKET_H__ +#ifndef NET_BASE_SOCKET_H_ +#define NET_BASE_SOCKET_H_ #include "base/basictypes.h" -#include "base/message_loop.h" +#include "base/object_watcher.h" #include "base/ref_counted.h" #include <winsock2.h> // Implements a raw socket interface class ListenSocket : public base::RefCountedThreadSafe<ListenSocket>, - public MessageLoop::Watcher { + public base::ObjectWatcher::Delegate { public: // TODO(erikkay): this delegate should really be split into two parts // to split up the listener from the connected socket. Perhaps this class @@ -62,8 +62,7 @@ class ListenSocket : public base::RefCountedThreadSafe<ListenSocket>, // Listen on port for the specified IP address. Use 127.0.0.1 to only // accept local connections. static ListenSocket* Listen(std::string ip, int port, - ListenSocketDelegate* del, - MessageLoop* loop); + ListenSocketDelegate* del); virtual ~ListenSocket(); // send data to the socket @@ -71,14 +70,14 @@ class ListenSocket : public base::RefCountedThreadSafe<ListenSocket>, void Send(const std::string& str, bool append_linefeed = false); protected: - ListenSocket(SOCKET s, ListenSocketDelegate* del, MessageLoop* loop); + ListenSocket(SOCKET s, ListenSocketDelegate* del); static SOCKET Listen(std::string ip, int port); // if valid, returned SOCKET is non-blocking static SOCKET Accept(SOCKET s); virtual void SendInternal(const char* bytes, int len); - // MessageLoop watcher callback + // ObjectWatcher delegate virtual void OnObjectSignaled(HANDLE object); virtual void Listen(); @@ -89,11 +88,11 @@ class ListenSocket : public base::RefCountedThreadSafe<ListenSocket>, SOCKET socket_; HANDLE socket_event_; ListenSocketDelegate *socket_delegate_; - MessageLoop* loop_; + + base::ObjectWatcher watcher_; private: - DISALLOW_EVIL_CONSTRUCTORS(ListenSocket); }; -#endif // BASE_SOCKET_H__ +#endif // NET_BASE_SOCKET_H_ diff --git a/net/base/listen_socket_unittest.h b/net/base/listen_socket_unittest.h index 243696c..57b4316 100644 --- a/net/base/listen_socket_unittest.h +++ b/net/base/listen_socket_unittest.h @@ -37,6 +37,7 @@ #include "base/basictypes.h" #include "base/logging.h" +#include "base/message_loop.h" #include "base/string_util.h" #include "base/thread.h" #include "net/base/listen_socket.h" @@ -81,7 +82,7 @@ class ListenSocketTester : public base::RefCountedThreadSafe<ListenSocketTester> { protected: virtual ListenSocket* DoListen() { - return ListenSocket::Listen("127.0.0.1", TEST_PORT, this, loop_); + return ListenSocket::Listen("127.0.0.1", TEST_PORT, this); } public: diff --git a/net/base/telnet_server.cc b/net/base/telnet_server.cc index 75d9361..82506a0 100644 --- a/net/base/telnet_server.cc +++ b/net/base/telnet_server.cc @@ -90,8 +90,8 @@ class TelnetProtocol { /////////////////////// // must run in the IO thread -TelnetServer::TelnetServer(SOCKET s, ListenSocketDelegate* del, MessageLoop *l) - : ListenSocket(s, del, l) { +TelnetServer::TelnetServer(SOCKET s, ListenSocketDelegate* del) + : ListenSocket(s, del) { input_state_ = NOT_IN_IAC_OR_ESC_SEQUENCE; } @@ -133,7 +133,7 @@ void TelnetServer::Accept() { // TODO } else { scoped_refptr<TelnetServer> sock = - new TelnetServer(conn, socket_delegate_, loop_); + new TelnetServer(conn, socket_delegate_); // Setup the way we want to communicate sock->SendIAC(TelnetProtocol::DO, TelnetProtocol::ECHO); @@ -148,12 +148,12 @@ void TelnetServer::Accept() { } TelnetServer* TelnetServer::Listen(std::string ip, int port, - ListenSocketDelegate *del, MessageLoop* l) { + ListenSocketDelegate *del) { SOCKET s = ListenSocket::Listen(ip, port); if (s == INVALID_SOCKET) { // TODO } else { - TelnetServer *serv = new TelnetServer(s, del, l); + TelnetServer *serv = new TelnetServer(s, del); serv->Listen(); return serv; } diff --git a/net/base/telnet_server.h b/net/base/telnet_server.h index 8b509be..45697c8 100644 --- a/net/base/telnet_server.h +++ b/net/base/telnet_server.h @@ -38,8 +38,7 @@ class TelnetServer : public ListenSocket { public: static TelnetServer* Listen(std::string ip, int port, - ListenSocketDelegate *del, - MessageLoop* loop); + ListenSocketDelegate *del); virtual ~TelnetServer(); protected: @@ -61,7 +60,7 @@ private: EXPECTING_NUMBER_SEMICOLON_OR_END // Processing "ESC [" sequence. }; - TelnetServer(SOCKET s, ListenSocketDelegate* del, MessageLoop* loop); + TelnetServer(SOCKET s, ListenSocketDelegate* del); // telnet commands void SendIAC(int command, int option); @@ -75,4 +74,4 @@ private: DISALLOW_EVIL_CONSTRUCTORS(TelnetServer); }; -#endif // BASE_TELNET_SERVER_H_
\ No newline at end of file +#endif // BASE_TELNET_SERVER_H_ diff --git a/net/base/telnet_server_unittest.cc b/net/base/telnet_server_unittest.cc index 2ec1164..5cdf99a 100644 --- a/net/base/telnet_server_unittest.cc +++ b/net/base/telnet_server_unittest.cc @@ -39,7 +39,7 @@ const std::string CRLF("\r\n"); class TelnetServerTester : public ListenSocketTester { public: virtual ListenSocket* DoListen() { - return TelnetServer::Listen("127.0.0.1", TEST_PORT, this, loop_); + return TelnetServer::Listen("127.0.0.1", TEST_PORT, this); } virtual void SetUp() { |