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

Unified Diff: net/socket/web_socket_server_socket.cc

Issue 8831001: base::Bind: Convert Socket::Write. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix alignment. Created 9 years 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
Index: net/socket/web_socket_server_socket.cc
diff --git a/net/socket/web_socket_server_socket.cc b/net/socket/web_socket_server_socket.cc
index d79268981fb08f847e814a1f3d271617ef0c1a9b..b24f25cf65ee7c00ca73fc36e67f9c5f4a5adc6e 100644
--- a/net/socket/web_socket_server_socket.cc
+++ b/net/socket/web_socket_server_socket.cc
@@ -397,6 +397,53 @@ class WebSocketServerSocketImpl : public net::WebSocketServerSocket {
ConsiderTransportWrite();
return net::ERR_IO_PENDING;
}
+ virtual int Write(net::IOBuffer* buf, int buf_len,
+ const net::CompletionCallback& callback) OVERRIDE {
+ if (buf_len == 0)
+ return 0;
+ if (buf == NULL || buf_len < 0) {
+ NOTREACHED();
+ return net::ERR_INVALID_ARGUMENT;
+ }
+ DCHECK_EQ(std::find(buf->data(), buf->data() + buf_len, '\xff'),
+ buf->data() + buf_len);
+ switch (phase_) {
+ case PHASE_FRAME_OUTSIDE:
+ case PHASE_FRAME_INSIDE:
+ case PHASE_FRAME_LENGTH:
+ case PHASE_FRAME_SKIP: {
+ break;
+ }
+ case PHASE_SHUT: {
+ return net::ERR_SOCKET_NOT_CONNECTED;
+ }
+ case PHASE_NYMPH:
+ case PHASE_HANDSHAKE:
+ default: {
+ NOTREACHED();
+ return net::ERR_UNEXPECTED;
+ }
+ }
+
+ net::IOBuffer* frame_start = new net::IOBuffer(1);
+ frame_start->data()[0] = '\x00';
+ pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE_METADATA,
+ new net::DrainableIOBuffer(frame_start, 1),
+ NULL));
+
+ pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE,
+ new net::DrainableIOBuffer(buf, buf_len),
+ callback));
+
+ net::IOBuffer* frame_end = new net::IOBuffer(1);
+ frame_end->data()[0] = '\xff';
+ pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE_METADATA,
+ new net::DrainableIOBuffer(frame_end, 1),
+ NULL));
+
+ ConsiderTransportWrite();
+ return net::ERR_IO_PENDING;
+ }
virtual bool SetReceiveBufferSize(int32 size) OVERRIDE {
return transport_socket_->SetReceiveBufferSize(size);
« no previous file with comments | « net/socket/transport_client_socket_pool_unittest.cc ('k') | net/socket/web_socket_server_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698