OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/socket/web_socket_server_socket.h" | 5 #include "net/socket/web_socket_server_socket.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <deque> | 8 #include <deque> |
9 #include <limits> | 9 #include <limits> |
10 #include <map> | 10 #include <map> |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 | 390 |
391 net::IOBuffer* frame_end = new net::IOBuffer(1); | 391 net::IOBuffer* frame_end = new net::IOBuffer(1); |
392 frame_end->data()[0] = '\xff'; | 392 frame_end->data()[0] = '\xff'; |
393 pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE_METADATA, | 393 pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE_METADATA, |
394 new net::DrainableIOBuffer(frame_end, 1), | 394 new net::DrainableIOBuffer(frame_end, 1), |
395 NULL)); | 395 NULL)); |
396 | 396 |
397 ConsiderTransportWrite(); | 397 ConsiderTransportWrite(); |
398 return net::ERR_IO_PENDING; | 398 return net::ERR_IO_PENDING; |
399 } | 399 } |
| 400 virtual int Write(net::IOBuffer* buf, int buf_len, |
| 401 const net::CompletionCallback& callback) OVERRIDE { |
| 402 if (buf_len == 0) |
| 403 return 0; |
| 404 if (buf == NULL || buf_len < 0) { |
| 405 NOTREACHED(); |
| 406 return net::ERR_INVALID_ARGUMENT; |
| 407 } |
| 408 DCHECK_EQ(std::find(buf->data(), buf->data() + buf_len, '\xff'), |
| 409 buf->data() + buf_len); |
| 410 switch (phase_) { |
| 411 case PHASE_FRAME_OUTSIDE: |
| 412 case PHASE_FRAME_INSIDE: |
| 413 case PHASE_FRAME_LENGTH: |
| 414 case PHASE_FRAME_SKIP: { |
| 415 break; |
| 416 } |
| 417 case PHASE_SHUT: { |
| 418 return net::ERR_SOCKET_NOT_CONNECTED; |
| 419 } |
| 420 case PHASE_NYMPH: |
| 421 case PHASE_HANDSHAKE: |
| 422 default: { |
| 423 NOTREACHED(); |
| 424 return net::ERR_UNEXPECTED; |
| 425 } |
| 426 } |
| 427 |
| 428 net::IOBuffer* frame_start = new net::IOBuffer(1); |
| 429 frame_start->data()[0] = '\x00'; |
| 430 pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE_METADATA, |
| 431 new net::DrainableIOBuffer(frame_start, 1), |
| 432 NULL)); |
| 433 |
| 434 pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE, |
| 435 new net::DrainableIOBuffer(buf, buf_len), |
| 436 callback)); |
| 437 |
| 438 net::IOBuffer* frame_end = new net::IOBuffer(1); |
| 439 frame_end->data()[0] = '\xff'; |
| 440 pending_reqs_.push_back(PendingReq(PendingReq::TYPE_WRITE_METADATA, |
| 441 new net::DrainableIOBuffer(frame_end, 1), |
| 442 NULL)); |
| 443 |
| 444 ConsiderTransportWrite(); |
| 445 return net::ERR_IO_PENDING; |
| 446 } |
400 | 447 |
401 virtual bool SetReceiveBufferSize(int32 size) OVERRIDE { | 448 virtual bool SetReceiveBufferSize(int32 size) OVERRIDE { |
402 return transport_socket_->SetReceiveBufferSize(size); | 449 return transport_socket_->SetReceiveBufferSize(size); |
403 } | 450 } |
404 | 451 |
405 virtual bool SetSendBufferSize(int32 size) OVERRIDE { | 452 virtual bool SetSendBufferSize(int32 size) OVERRIDE { |
406 return transport_socket_->SetSendBufferSize(size); | 453 return transport_socket_->SetSendBufferSize(size); |
407 } | 454 } |
408 | 455 |
409 // WebSocketServerSocket implementation. | 456 // WebSocketServerSocket implementation. |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
996 | 1043 |
997 WebSocketServerSocket* CreateWebSocketServerSocket( | 1044 WebSocketServerSocket* CreateWebSocketServerSocket( |
998 Socket* transport_socket, WebSocketServerSocket::Delegate* delegate) { | 1045 Socket* transport_socket, WebSocketServerSocket::Delegate* delegate) { |
999 return new WebSocketServerSocketImpl(transport_socket, delegate); | 1046 return new WebSocketServerSocketImpl(transport_socket, delegate); |
1000 } | 1047 } |
1001 | 1048 |
1002 WebSocketServerSocket::~WebSocketServerSocket() { | 1049 WebSocketServerSocket::~WebSocketServerSocket() { |
1003 } | 1050 } |
1004 | 1051 |
1005 } // namespace net; | 1052 } // namespace net; |
OLD | NEW |