| 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);
|
|
|