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 |