| 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/curvecp/test_server.h" | 5 #include "net/curvecp/test_server.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 | 56 |
| 57 void TestServer::OnAccept(CurveCPServerSocket* new_socket) { | 57 void TestServer::OnAccept(CurveCPServerSocket* new_socket) { |
| 58 DCHECK(new_socket); | 58 DCHECK(new_socket); |
| 59 LOG(ERROR) << "Accepted socket! Starting Echo Server"; | 59 LOG(ERROR) << "Accepted socket! Starting Echo Server"; |
| 60 EchoServer* new_server = new EchoServer(); | 60 EchoServer* new_server = new EchoServer(); |
| 61 new_server->Start(new_socket); | 61 new_server->Start(new_socket); |
| 62 } | 62 } |
| 63 | 63 |
| 64 EchoServer::EchoServer() | 64 EchoServer::EchoServer() |
| 65 : socket_(NULL), | 65 : socket_(NULL), |
| 66 bytes_received_(0), | 66 bytes_received_(0) { |
| 67 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 68 read_callback_(this, &EchoServer::OnReadComplete)), | |
| 69 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 70 write_callback_(this, &EchoServer::OnWriteComplete)) { | |
| 71 } | 67 } |
| 72 | 68 |
| 73 EchoServer::~EchoServer() { | 69 EchoServer::~EchoServer() { |
| 74 } | 70 } |
| 75 | 71 |
| 76 void EchoServer::Start(CurveCPServerSocket* socket) { | 72 void EchoServer::Start(CurveCPServerSocket* socket) { |
| 77 DCHECK(!socket_); | 73 DCHECK(!socket_); |
| 78 socket_ = socket; | 74 socket_ = socket; |
| 79 | 75 |
| 80 ReadData(); | 76 ReadData(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 93 | 89 |
| 94 if (!received_stream_.VerifyBytes(read_buffer_->data(), result)) { | 90 if (!received_stream_.VerifyBytes(read_buffer_->data(), result)) { |
| 95 LOG(ERROR) << "Server Received corrupt receive data!"; | 91 LOG(ERROR) << "Server Received corrupt receive data!"; |
| 96 delete this; | 92 delete this; |
| 97 return; | 93 return; |
| 98 } | 94 } |
| 99 | 95 |
| 100 // Echo the read data back here. | 96 // Echo the read data back here. |
| 101 DCHECK(!write_buffer_.get()); | 97 DCHECK(!write_buffer_.get()); |
| 102 write_buffer_ = new DrainableIOBuffer(read_buffer_, result); | 98 write_buffer_ = new DrainableIOBuffer(read_buffer_, result); |
| 103 int rv = socket_->Write(write_buffer_, result, &write_callback_); | 99 int rv = socket_->Write(write_buffer_, result, |
| 100 base::Bind(&EchoServer::OnWriteComplete, |
| 101 base::Unretained(this))); |
| 104 if (rv == ERR_IO_PENDING) | 102 if (rv == ERR_IO_PENDING) |
| 105 return; | 103 return; |
| 106 OnWriteComplete(rv); | 104 OnWriteComplete(rv); |
| 107 } | 105 } |
| 108 | 106 |
| 109 void EchoServer::OnWriteComplete(int result) { | 107 void EchoServer::OnWriteComplete(int result) { |
| 110 if (result <= 0) { | 108 if (result <= 0) { |
| 111 delete this; | 109 delete this; |
| 112 return; | 110 return; |
| 113 } | 111 } |
| 114 | 112 |
| 115 write_buffer_->DidConsume(result); | 113 write_buffer_->DidConsume(result); |
| 116 while (write_buffer_->BytesRemaining()) { | 114 while (write_buffer_->BytesRemaining()) { |
| 117 int rv = socket_->Write(write_buffer_, | 115 int rv = socket_->Write(write_buffer_, |
| 118 write_buffer_->BytesRemaining(), | 116 write_buffer_->BytesRemaining(), |
| 119 &write_callback_); | 117 base::Bind(&EchoServer::OnWriteComplete, |
| 118 base::Unretained(this))); |
| 120 if (rv == ERR_IO_PENDING) | 119 if (rv == ERR_IO_PENDING) |
| 121 return; | 120 return; |
| 122 OnWriteComplete(rv); | 121 OnWriteComplete(rv); |
| 123 } | 122 } |
| 124 | 123 |
| 125 // Now we can read more data. | 124 // Now we can read more data. |
| 126 write_buffer_ = NULL; | 125 write_buffer_ = NULL; |
| 127 // read_buffer_ = NULL; | 126 // read_buffer_ = NULL; |
| 128 // ReadData(); | 127 // ReadData(); |
| 129 } | 128 } |
| 130 | 129 |
| 131 void EchoServer::ReadData() { | 130 void EchoServer::ReadData() { |
| 132 DCHECK(!read_buffer_.get()); | 131 DCHECK(!read_buffer_.get()); |
| 133 read_buffer_ = new IOBuffer(kMaxMessage); | 132 read_buffer_ = new IOBuffer(kMaxMessage); |
| 134 | 133 |
| 135 int rv; | 134 int rv; |
| 136 do { | 135 do { |
| 137 rv = socket_->Read(read_buffer_, kMaxMessage, &read_callback_); | 136 rv = socket_->Read(read_buffer_, kMaxMessage, |
| 137 base::Bind(&EchoServer::OnReadComplete, |
| 138 base::Unretained(this))); |
| 138 if (rv == ERR_IO_PENDING) | 139 if (rv == ERR_IO_PENDING) |
| 139 return; | 140 return; |
| 140 OnReadComplete(rv); // Complete the read manually | 141 OnReadComplete(rv); // Complete the read manually |
| 141 } while (rv > 0); | 142 } while (rv > 0); |
| 142 } | 143 } |
| 143 | 144 |
| 144 } // namespace net | 145 } // namespace net |
| OLD | NEW |