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 |