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 "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 LOG(INFO) << "Server received " << result << "(" << bytes_received_ << ")"; | 80 LOG(INFO) << "Server received " << result << "(" << bytes_received_ << ")"; |
81 | 81 |
82 if (!received_stream_.VerifyBytes(read_buffer_->data(), result)) { | 82 if (!received_stream_.VerifyBytes(read_buffer_->data(), result)) { |
83 LOG(ERROR) << "Server Received corrupt receive data!"; | 83 LOG(ERROR) << "Server Received corrupt receive data!"; |
84 delete this; | 84 delete this; |
85 return; | 85 return; |
86 } | 86 } |
87 | 87 |
88 // Echo the read data back here. | 88 // Echo the read data back here. |
89 DCHECK(!write_buffer_.get()); | 89 DCHECK(!write_buffer_.get()); |
90 write_buffer_ = new DrainableIOBuffer(read_buffer_, result); | 90 write_buffer_ = new DrainableIOBuffer(read_buffer_.get(), result); |
91 int rv = socket_->Write(write_buffer_, result, | 91 int rv = socket_->Write(write_buffer_.get(), result, |
92 base::Bind(&EchoServer::OnWriteComplete, | 92 base::Bind(&EchoServer::OnWriteComplete, |
93 base::Unretained(this))); | 93 base::Unretained(this))); |
94 if (rv == ERR_IO_PENDING) | 94 if (rv == ERR_IO_PENDING) |
95 return; | 95 return; |
96 OnWriteComplete(rv); | 96 OnWriteComplete(rv); |
97 } | 97 } |
98 | 98 |
99 void EchoServer::OnWriteComplete(int result) { | 99 void EchoServer::OnWriteComplete(int result) { |
100 if (result <= 0) { | 100 if (result <= 0) { |
101 delete this; | 101 delete this; |
102 return; | 102 return; |
103 } | 103 } |
104 | 104 |
105 write_buffer_->DidConsume(result); | 105 write_buffer_->DidConsume(result); |
106 while (write_buffer_->BytesRemaining()) { | 106 while (write_buffer_->BytesRemaining()) { |
107 int rv = socket_->Write(write_buffer_, | 107 int rv = socket_->Write(write_buffer_.get(), |
108 write_buffer_->BytesRemaining(), | 108 write_buffer_->BytesRemaining(), |
109 base::Bind(&EchoServer::OnWriteComplete, | 109 base::Bind(&EchoServer::OnWriteComplete, |
110 base::Unretained(this))); | 110 base::Unretained(this))); |
111 if (rv == ERR_IO_PENDING) | 111 if (rv == ERR_IO_PENDING) |
112 return; | 112 return; |
113 OnWriteComplete(rv); | 113 OnWriteComplete(rv); |
114 } | 114 } |
115 | 115 |
116 // Now we can read more data. | 116 // Now we can read more data. |
117 write_buffer_ = NULL; | 117 write_buffer_ = NULL; |
118 // read_buffer_ = NULL; | 118 // read_buffer_ = NULL; |
119 // ReadData(); | 119 // ReadData(); |
120 } | 120 } |
121 | 121 |
122 void EchoServer::ReadData() { | 122 void EchoServer::ReadData() { |
123 DCHECK(!read_buffer_.get()); | 123 DCHECK(!read_buffer_.get()); |
124 read_buffer_ = new IOBuffer(kMaxMessage); | 124 read_buffer_ = new IOBuffer(kMaxMessage); |
125 | 125 |
126 int rv; | 126 int rv; |
127 do { | 127 do { |
128 rv = socket_->Read(read_buffer_, kMaxMessage, | 128 rv = socket_->Read(read_buffer_.get(), kMaxMessage, |
129 base::Bind(&EchoServer::OnReadComplete, | 129 base::Bind(&EchoServer::OnReadComplete, |
130 base::Unretained(this))); | 130 base::Unretained(this))); |
131 if (rv == ERR_IO_PENDING) | 131 if (rv == ERR_IO_PENDING) |
132 return; | 132 return; |
133 OnReadComplete(rv); // Complete the read manually | 133 OnReadComplete(rv); // Complete the read manually |
134 } while (rv > 0); | 134 } while (rv > 0); |
135 } | 135 } |
136 | 136 |
137 } // namespace net | 137 } // namespace net |
OLD | NEW |