Index: chrome/browser/debugger/devtools_remote_listen_socket.cc |
diff --git a/chrome/browser/debugger/devtools_remote_listen_socket.cc b/chrome/browser/debugger/devtools_remote_listen_socket.cc |
index e4a84cb546512256ea302bfe1b2c6a8e4fd7bfab..87b88d0153964f8bceca274b03e1b4c46cfbd221 100644 |
--- a/chrome/browser/debugger/devtools_remote_listen_socket.cc |
+++ b/chrome/browser/debugger/devtools_remote_listen_socket.cc |
@@ -41,9 +41,8 @@ const int kReadBufSize = 200; |
DevToolsRemoteListenSocket::DevToolsRemoteListenSocket( |
SOCKET s, |
- ListenSocketDelegate* del, |
DevToolsRemoteListener* message_listener) |
- : ListenSocket(s, del), |
+ : ALLOW_THIS_IN_INITIALIZER_LIST(ListenSocket(s, this)), |
state_(HANDSHAKE), |
remaining_payload_length_(0), |
message_listener_(message_listener), |
@@ -86,55 +85,30 @@ DevToolsRemoteListenSocket::~DevToolsRemoteListenSocket() {} |
DevToolsRemoteListenSocket* |
DevToolsRemoteListenSocket::Listen(const std::string& ip, |
int port, |
- ListenSocketDelegate* del, |
DevToolsRemoteListener* listener) { |
SOCKET s = ListenSocket::Listen(ip, port); |
if (s == INVALID_SOCKET) { |
// TODO(apavlov): error handling |
} else { |
DevToolsRemoteListenSocket* sock = |
- new DevToolsRemoteListenSocket(s, del, listener); |
+ new DevToolsRemoteListenSocket(s, listener); |
sock->Listen(); |
return sock; |
} |
return NULL; |
} |
-void DevToolsRemoteListenSocket::Read() { |
- char buf[kReadBufSize]; |
- int len; |
- do { |
- len = HANDLE_EINTR(recv(socket_, buf, kReadBufSize, 0)); |
- if (len == SOCKET_ERROR) { |
-#if defined(OS_WIN) |
- int err = WSAGetLastError(); |
- if (err == WSAEWOULDBLOCK) { |
-#elif defined(OS_POSIX) |
- if (errno == EWOULDBLOCK || errno == EAGAIN) { |
-#endif |
- break; |
- } else { |
- // TODO(apavlov): some error handling required here |
- break; |
- } |
- } else if (len == 0) { |
- // In Windows, Close() is called by OnObjectSignaled. In POSIX, we need |
- // to call it here. |
-#if defined(OS_POSIX) |
- Close(); |
-#endif |
- } else { |
- // TODO(apavlov): maybe change DidRead to take a length instead |
- DCHECK(len > 0 && len <= kReadBufSize); |
- this->DispatchRead(buf, len); |
- } |
- } while (len == kReadBufSize); |
+void DevToolsRemoteListenSocket::DidAccept(ListenSocket *server, |
+ ListenSocket *connection) { |
+ connection->AddRef(); |
+ message_listener_->OnAcceptConnection(connection); |
} |
// Dispatches data from socket to socket_delegate_, extracting messages |
// delimited by newlines. |
-void DevToolsRemoteListenSocket::DispatchRead(char* buf, int len) { |
- char* pBuf = buf; |
+void DevToolsRemoteListenSocket::DidRead(ListenSocket* connection, |
+ const char* pBuf, |
+ int len) { |
while (len > 0) { |
if (state_ != PAYLOAD) { |
if (cr_received_ && *pBuf == '\n') { |
@@ -173,6 +147,11 @@ void DevToolsRemoteListenSocket::DispatchRead(char* buf, int len) { |
} |
} |
+void DevToolsRemoteListenSocket::DidClose(ListenSocket *connection) { |
+ message_listener_->OnConnectionLost(); |
+ connection->Release(); |
+} |
+ |
void DevToolsRemoteListenSocket::DispatchField() { |
static const std::string kHandshakeString = "ChromeDevToolsHandshake"; |
switch (state_) { |
@@ -231,7 +210,6 @@ void DevToolsRemoteListenSocket::Accept() { |
if (conn != INVALID_SOCKET) { |
scoped_refptr<DevToolsRemoteListenSocket> sock = |
new DevToolsRemoteListenSocket(conn, |
- socket_delegate_, |
message_listener_); |
// it's up to the delegate to AddRef if it wants to keep it around |
#if defined(OS_POSIX) |