summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/base/listen_socket.cc28
-rw-r--r--net/base/listen_socket.h21
-rw-r--r--net/base/listen_socket_unittest.h3
-rw-r--r--net/base/telnet_server.cc10
-rw-r--r--net/base/telnet_server.h7
-rw-r--r--net/base/telnet_server_unittest.cc2
-rw-r--r--net/url_request/url_request_file_job.cc11
-rw-r--r--net/url_request/url_request_file_job.h17
8 files changed, 47 insertions, 52 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() {
diff --git a/net/url_request/url_request_file_job.cc b/net/url_request/url_request_file_job.cc
index a738b3a..9f828d4 100644
--- a/net/url_request/url_request_file_job.cc
+++ b/net/url_request/url_request_file_job.cc
@@ -40,7 +40,7 @@
// attempts to read more from the file to fill its buffer. If reading from the
// file does not complete synchronously, then the URLRequestFileJob waits for a
// signal from the OS that the overlapped read has completed. It does so by
-// leveraging the MessageLoop::WatchObject API.
+// leveraging the ObjectWatcher API.
#include <process.h>
#include <windows.h>
@@ -57,6 +57,7 @@
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_file_dir_job.h"
+// TODO(darin): The file job should not depend on WinInet!!
using net::WinInetUtil;
namespace {
@@ -165,7 +166,7 @@ void URLRequestFileJob::Start() {
void URLRequestFileJob::Kill() {
// If we are killed while waiting for an overlapped result...
if (is_waiting_) {
- MessageLoop::current()->WatchObject(overlapped_.hEvent, NULL);
+ watcher_.StopWatching();
is_waiting_ = false;
Release();
}
@@ -203,7 +204,7 @@ bool URLRequestFileJob::ReadRawData(char* dest, int dest_size,
DWORD err = GetLastError();
if (err == ERROR_IO_PENDING) {
// OK, wait for the object to become signaled
- MessageLoop::current()->WatchObject(overlapped_.hEvent, this);
+ watcher_.StartWatching(overlapped_.hEvent, this);
is_waiting_ = true;
SetStatus(URLRequestStatus(URLRequestStatus::IO_PENDING, 0));
AddRef();
@@ -284,9 +285,7 @@ void URLRequestFileJob::OnObjectSignaled(HANDLE object) {
DCHECK(overlapped_.hEvent == object);
DCHECK(is_waiting_);
- // We'll resume watching this handle if need be when we do
- // another IO.
- MessageLoop::current()->WatchObject(object, NULL);
+ // We'll resume watching this handle if need be when we do another IO.
is_waiting_ = false;
DWORD bytes_read = 0;
diff --git a/net/url_request/url_request_file_job.h b/net/url_request/url_request_file_job.h
index 1851444..d5e63fb 100644
--- a/net/url_request/url_request_file_job.h
+++ b/net/url_request/url_request_file_job.h
@@ -27,11 +27,12 @@
// (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 BASE_URL_REQUEST_URL_REQUEST_FILE_JOB_H__
-#define BASE_URL_REQUEST_URL_REQUEST_FILE_JOB_H__
+#ifndef BASE_URL_REQUEST_URL_REQUEST_FILE_JOB_H_
+#define BASE_URL_REQUEST_URL_REQUEST_FILE_JOB_H_
#include "base/lock.h"
#include "base/message_loop.h"
+#include "base/object_watcher.h"
#include "base/thread.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_job.h"
@@ -39,7 +40,7 @@
// A request job that handles reading file URLs
class URLRequestFileJob : public URLRequestJob,
- protected MessageLoop::Watcher {
+ public base::ObjectWatcher::Delegate {
public:
URLRequestFileJob(URLRequest* request);
virtual ~URLRequestFileJob();
@@ -62,13 +63,10 @@ class URLRequestFileJob : public URLRequestJob,
std::wstring file_path_;
private:
- // The net util test wants to run our FileURLToFilePath function.
- FRIEND_TEST(NetUtilTest, FileURLConversion);
-
void CloseHandles();
void StartAsync();
- // MessageLoop::Watcher callback
+ // base::ObjectWatcher::Delegate implementation:
virtual void OnObjectSignaled(HANDLE object);
// We use overlapped reads to ensure that reads from network file systems do
@@ -79,6 +77,8 @@ class URLRequestFileJob : public URLRequestJob,
bool is_directory_; // true when the file request is for a direcotry.
bool is_not_found_; // true when the file requested does not exist.
+ base::ObjectWatcher watcher_;
+
// This lock ensure that the network_file_thread is not using the loop_ after
// is has been set to NULL in Kill().
Lock loop_lock_;
@@ -94,5 +94,4 @@ class URLRequestFileJob : public URLRequestJob,
DISALLOW_EVIL_CONSTRUCTORS(URLRequestFileJob);
};
-
-#endif // BASE_URL_REQUEST_URL_REQUEST_FILE_JOB_H__
+#endif // BASE_URL_REQUEST_URL_REQUEST_FILE_JOB_H_