| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "network/public/cpp/udp_socket_wrapper.h" | 5 #include "mojo/services/network/udp_socket_wrapper.h" |
| 6 | 6 |
| 7 #include <assert.h> | 7 #include "base/logging.h" |
| 8 | |
| 9 #include "third_party/mojo/src/mojo/public/cpp/environment/logging.h" | |
| 10 | 8 |
| 11 namespace mojo { | 9 namespace mojo { |
| 12 namespace { | 10 namespace { |
| 13 | 11 |
| 14 const uint32_t kDefaultReceiveQueueSlots = 32; | 12 const uint32_t kDefaultReceiveQueueSlots = 32; |
| 15 | 13 |
| 16 } // namespace | 14 } // namespace |
| 17 | 15 |
| 18 UDPSocketWrapper::NegotiateCallbackHandler::NegotiateCallbackHandler( | 16 UDPSocketWrapper::NegotiateCallbackHandler::NegotiateCallbackHandler( |
| 19 UDPSocketWrapper* delegate) | 17 UDPSocketWrapper* delegate) |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 const ErrorCallback& callback) { | 143 const ErrorCallback& callback) { |
| 146 if (current_pending_sends_ >= max_pending_sends_) { | 144 if (current_pending_sends_ >= max_pending_sends_) { |
| 147 SendRequest* request = new SendRequest(); | 145 SendRequest* request = new SendRequest(); |
| 148 request->dest_addr = dest_addr.Pass(); | 146 request->dest_addr = dest_addr.Pass(); |
| 149 request->data = data.Pass(); | 147 request->data = data.Pass(); |
| 150 request->callback = callback; | 148 request->callback = callback; |
| 151 send_requests_.push(request); | 149 send_requests_.push(request); |
| 152 return; | 150 return; |
| 153 } | 151 } |
| 154 | 152 |
| 155 MOJO_DCHECK(send_requests_.empty()); | 153 DCHECK(send_requests_.empty()); |
| 156 current_pending_sends_++; | 154 current_pending_sends_++; |
| 157 socket_->SendTo(dest_addr.Pass(), data.Pass(), | 155 socket_->SendTo(dest_addr.Pass(), data.Pass(), |
| 158 ErrorCallback(static_cast<ErrorCallback::Runnable*>( | 156 ErrorCallback(static_cast<ErrorCallback::Runnable*>( |
| 159 new SendCallbackHandler(this, callback)))); | 157 new SendCallbackHandler(this, callback)))); |
| 160 } | 158 } |
| 161 | 159 |
| 162 void UDPSocketWrapper::OnReceived(NetworkErrorPtr result, | 160 void UDPSocketWrapper::OnReceived(NetworkErrorPtr result, |
| 163 NetAddressPtr src_addr, | 161 NetAddressPtr src_addr, |
| 164 Array<uint8_t> data) { | 162 Array<uint8_t> data) { |
| 165 if (!receive_requests_.empty()) { | 163 if (!receive_requests_.empty()) { |
| 166 // The cache should be empty if there are user requests waiting for data. | 164 // The cache should be empty if there are user requests waiting for data. |
| 167 MOJO_DCHECK(receive_queue_.empty()); | 165 DCHECK(receive_queue_.empty()); |
| 168 | 166 |
| 169 socket_->ReceiveMore(1); | 167 socket_->ReceiveMore(1); |
| 170 | 168 |
| 171 ReceiveCallback callback = receive_requests_.front(); | 169 ReceiveCallback callback = receive_requests_.front(); |
| 172 receive_requests_.pop(); | 170 receive_requests_.pop(); |
| 173 | 171 |
| 174 callback.Run(result.Pass(), src_addr.Pass(), data.Pass()); | 172 callback.Run(result.Pass(), src_addr.Pass(), data.Pass()); |
| 175 return; | 173 return; |
| 176 } | 174 } |
| 177 | 175 |
| 178 MOJO_DCHECK(receive_queue_.size() < max_receive_queue_size_); | 176 DCHECK_LT(receive_queue_.size(), max_receive_queue_size_); |
| 179 ReceivedData* received_data = new ReceivedData(); | 177 ReceivedData* received_data = new ReceivedData(); |
| 180 received_data->result = result.Pass(); | 178 received_data->result = result.Pass(); |
| 181 received_data->src_addr = src_addr.Pass(); | 179 received_data->src_addr = src_addr.Pass(); |
| 182 received_data->data = data.Pass(); | 180 received_data->data = data.Pass(); |
| 183 receive_queue_.push(received_data); | 181 receive_queue_.push(received_data); |
| 184 } | 182 } |
| 185 | 183 |
| 186 void UDPSocketWrapper::Initialize(uint32_t requested_max_pending_sends) { | 184 void UDPSocketWrapper::Initialize(uint32_t requested_max_pending_sends) { |
| 187 socket_->NegotiateMaxPendingSendRequests( | 185 socket_->NegotiateMaxPendingSendRequests( |
| 188 requested_max_pending_sends, | 186 requested_max_pending_sends, |
| 189 Callback<void(uint32_t)>( | 187 Callback<void(uint32_t)>( |
| 190 static_cast< Callback<void(uint32_t)>::Runnable*>( | 188 static_cast< Callback<void(uint32_t)>::Runnable*>( |
| 191 new NegotiateCallbackHandler(this)))); | 189 new NegotiateCallbackHandler(this)))); |
| 192 } | 190 } |
| 193 | 191 |
| 194 void UDPSocketWrapper::OnNegotiateMaxPendingSendRequestsCompleted( | 192 void UDPSocketWrapper::OnNegotiateMaxPendingSendRequestsCompleted( |
| 195 uint32_t actual_size) { | 193 uint32_t actual_size) { |
| 196 MOJO_DCHECK(max_pending_sends_ == 1); | 194 DCHECK_EQ(max_pending_sends_, 1u); |
| 197 | 195 |
| 198 if (actual_size == 0) { | 196 if (actual_size == 0) { |
| 199 assert(false); | 197 NOTREACHED(); |
| 200 return; | 198 return; |
| 201 } | 199 } |
| 202 | 200 |
| 203 max_pending_sends_ = actual_size; | 201 max_pending_sends_ = actual_size; |
| 204 | 202 |
| 205 while (ProcessNextSendRequest()); | 203 while (ProcessNextSendRequest()); |
| 206 } | 204 } |
| 207 | 205 |
| 208 void UDPSocketWrapper::OnSendToCompleted( | 206 void UDPSocketWrapper::OnSendToCompleted( |
| 209 NetworkErrorPtr result, | 207 NetworkErrorPtr result, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 233 return true; | 231 return true; |
| 234 } | 232 } |
| 235 | 233 |
| 236 void UDPSocketWrapper::StartReceivingData( | 234 void UDPSocketWrapper::StartReceivingData( |
| 237 InterfaceRequest<UDPSocketReceiver> request) { | 235 InterfaceRequest<UDPSocketReceiver> request) { |
| 238 binding_.Bind(request.Pass()); | 236 binding_.Bind(request.Pass()); |
| 239 socket_->ReceiveMore(max_receive_queue_size_); | 237 socket_->ReceiveMore(max_receive_queue_size_); |
| 240 } | 238 } |
| 241 | 239 |
| 242 } // namespace mojo | 240 } // namespace mojo |
| OLD | NEW |