| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ppapi/shared_impl/private/udp_socket_private_impl.h" | 5 #include "ppapi/shared_impl/private/udp_socket_private_impl.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 if (!TrackedCallback::IsPending(bind_callback_)) { | 155 if (!TrackedCallback::IsPending(bind_callback_)) { |
| 156 NOTREACHED(); | 156 NOTREACHED(); |
| 157 return; | 157 return; |
| 158 } | 158 } |
| 159 | 159 |
| 160 if (succeeded) | 160 if (succeeded) |
| 161 bound_ = true; | 161 bound_ = true; |
| 162 | 162 |
| 163 bound_addr_ = addr; | 163 bound_addr_ = addr; |
| 164 | 164 |
| 165 TrackedCallback::ClearAndRun(&bind_callback_, | 165 bind_callback_->Run(succeeded ? PP_OK : PP_ERROR_FAILED); |
| 166 succeeded ? PP_OK : PP_ERROR_FAILED); | |
| 167 } | 166 } |
| 168 | 167 |
| 169 void UDPSocketPrivateImpl::OnRecvFromCompleted( | 168 void UDPSocketPrivateImpl::OnRecvFromCompleted( |
| 170 bool succeeded, | 169 bool succeeded, |
| 171 const std::string& data, | 170 const std::string& data, |
| 172 const PP_NetAddress_Private& addr) { | 171 const PP_NetAddress_Private& addr) { |
| 173 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) { | 172 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) { |
| 174 NOTREACHED(); | 173 NOTREACHED(); |
| 175 return; | 174 return; |
| 176 } | 175 } |
| 177 | 176 |
| 178 if (succeeded) { | 177 if (succeeded) { |
| 179 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); | 178 CHECK_LE(static_cast<int32_t>(data.size()), bytes_to_read_); |
| 180 if (!data.empty()) | 179 if (!data.empty()) |
| 181 memcpy(read_buffer_, data.c_str(), data.size()); | 180 memcpy(read_buffer_, data.c_str(), data.size()); |
| 182 } | 181 } |
| 183 read_buffer_ = NULL; | 182 read_buffer_ = NULL; |
| 184 bytes_to_read_ = -1; | 183 bytes_to_read_ = -1; |
| 185 recvfrom_addr_ = addr; | 184 recvfrom_addr_ = addr; |
| 186 | 185 |
| 187 TrackedCallback::ClearAndRun(&recvfrom_callback_, | 186 recvfrom_callback_->Run(succeeded ? static_cast<int32_t>(data.size()) : |
| 188 succeeded ? static_cast<int32_t>(data.size()) : | |
| 189 static_cast<int32_t>(PP_ERROR_FAILED)); | 187 static_cast<int32_t>(PP_ERROR_FAILED)); |
| 190 } | 188 } |
| 191 | 189 |
| 192 void UDPSocketPrivateImpl::OnSendToCompleted(bool succeeded, | 190 void UDPSocketPrivateImpl::OnSendToCompleted(bool succeeded, |
| 193 int32_t bytes_written) { | 191 int32_t bytes_written) { |
| 194 if (!TrackedCallback::IsPending(sendto_callback_)) { | 192 if (!TrackedCallback::IsPending(sendto_callback_)) { |
| 195 NOTREACHED(); | 193 NOTREACHED(); |
| 196 return; | 194 return; |
| 197 } | 195 } |
| 198 | 196 |
| 199 TrackedCallback::ClearAndRun(&sendto_callback_, | 197 sendto_callback_->Run( |
| 200 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); | 198 succeeded ? bytes_written : static_cast<int32_t>(PP_ERROR_FAILED)); |
| 201 } | 199 } |
| 202 | 200 |
| 203 void UDPSocketPrivateImpl::Init(uint32 socket_id) { | 201 void UDPSocketPrivateImpl::Init(uint32 socket_id) { |
| 204 DCHECK(socket_id != 0); | 202 DCHECK(socket_id != 0); |
| 205 socket_id_ = socket_id; | 203 socket_id_ = socket_id; |
| 206 bound_ = false; | 204 bound_ = false; |
| 207 closed_ = false; | 205 closed_ = false; |
| 208 read_buffer_ = NULL; | 206 read_buffer_ = NULL; |
| 209 bytes_to_read_ = -1; | 207 bytes_to_read_ = -1; |
| 210 | 208 |
| 211 recvfrom_addr_.size = 0; | 209 recvfrom_addr_.size = 0; |
| 212 memset(recvfrom_addr_.data, 0, | 210 memset(recvfrom_addr_.data, 0, |
| 213 arraysize(recvfrom_addr_.data) * sizeof(*recvfrom_addr_.data)); | 211 arraysize(recvfrom_addr_.data) * sizeof(*recvfrom_addr_.data)); |
| 214 bound_addr_.size = 0; | 212 bound_addr_.size = 0; |
| 215 memset(bound_addr_.data, 0, | 213 memset(bound_addr_.data, 0, |
| 216 arraysize(bound_addr_.data) * sizeof(*bound_addr_.data)); | 214 arraysize(bound_addr_.data) * sizeof(*bound_addr_.data)); |
| 217 } | 215 } |
| 218 | 216 |
| 219 void UDPSocketPrivateImpl::PostAbortIfNecessary( | 217 void UDPSocketPrivateImpl::PostAbortIfNecessary( |
| 220 scoped_refptr<TrackedCallback>* callback) { | 218 scoped_refptr<TrackedCallback>* callback) { |
| 221 if (callback->get()) | 219 if (TrackedCallback::IsPending(*callback)) |
| 222 (*callback)->PostAbort(); | 220 (*callback)->PostAbort(); |
| 223 } | 221 } |
| 224 | 222 |
| 225 } // namespace ppapi | 223 } // namespace ppapi |
| OLD | NEW |