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 23 matching lines...) Expand all Loading... |
34 | 34 |
35 UDPSocketPrivateImpl::~UDPSocketPrivateImpl() { | 35 UDPSocketPrivateImpl::~UDPSocketPrivateImpl() { |
36 } | 36 } |
37 | 37 |
38 thunk::PPB_UDPSocket_Private_API* | 38 thunk::PPB_UDPSocket_Private_API* |
39 UDPSocketPrivateImpl::AsPPB_UDPSocket_Private_API() { | 39 UDPSocketPrivateImpl::AsPPB_UDPSocket_Private_API() { |
40 return this; | 40 return this; |
41 } | 41 } |
42 | 42 |
43 int32_t UDPSocketPrivateImpl::Bind(const PP_NetAddress_Private* addr, | 43 int32_t UDPSocketPrivateImpl::Bind(const PP_NetAddress_Private* addr, |
44 PP_CompletionCallback callback) { | 44 scoped_refptr<TrackedCallback> callback) { |
45 if (!addr || !callback.func) | 45 if (!addr) |
46 return PP_ERROR_BADARGUMENT; | 46 return PP_ERROR_BADARGUMENT; |
47 if (bound_ || closed_) | 47 if (bound_ || closed_) |
48 return PP_ERROR_FAILED; | 48 return PP_ERROR_FAILED; |
49 if (TrackedCallback::IsPending(bind_callback_)) | 49 if (TrackedCallback::IsPending(bind_callback_)) |
50 return PP_ERROR_INPROGRESS; | 50 return PP_ERROR_INPROGRESS; |
51 // TODO(dmichael): use some other strategy for determining if an | |
52 // operation is in progress | |
53 | 51 |
54 bind_callback_ = new TrackedCallback(this, callback); | 52 bind_callback_ = callback; |
55 | 53 |
56 // Send the request, the browser will call us back via BindACK. | 54 // Send the request, the browser will call us back via BindACK. |
57 SendBind(*addr); | 55 SendBind(*addr); |
58 return PP_OK_COMPLETIONPENDING; | 56 return PP_OK_COMPLETIONPENDING; |
59 } | 57 } |
60 | 58 |
61 PP_Bool UDPSocketPrivateImpl::GetBoundAddress(PP_NetAddress_Private* addr) { | 59 PP_Bool UDPSocketPrivateImpl::GetBoundAddress(PP_NetAddress_Private* addr) { |
62 if (!addr || !bound_ || closed_) | 60 if (!addr || !bound_ || closed_) |
63 return PP_FALSE; | 61 return PP_FALSE; |
64 | 62 |
65 *addr = bound_addr_; | 63 *addr = bound_addr_; |
66 return PP_TRUE; | 64 return PP_TRUE; |
67 } | 65 } |
68 | 66 |
69 int32_t UDPSocketPrivateImpl::RecvFrom(char* buffer, | 67 int32_t UDPSocketPrivateImpl::RecvFrom( |
70 int32_t num_bytes, | 68 char* buffer, |
71 PP_CompletionCallback callback) { | 69 int32_t num_bytes, |
72 if (!buffer || num_bytes <= 0 || !callback.func) | 70 scoped_refptr<TrackedCallback> callback) { |
| 71 if (!buffer || num_bytes <= 0) |
73 return PP_ERROR_BADARGUMENT; | 72 return PP_ERROR_BADARGUMENT; |
74 if (!bound_) | 73 if (!bound_) |
75 return PP_ERROR_FAILED; | 74 return PP_ERROR_FAILED; |
76 if (TrackedCallback::IsPending(recvfrom_callback_)) | 75 if (TrackedCallback::IsPending(recvfrom_callback_)) |
77 return PP_ERROR_INPROGRESS; | 76 return PP_ERROR_INPROGRESS; |
78 | 77 |
79 read_buffer_ = buffer; | 78 read_buffer_ = buffer; |
80 bytes_to_read_ = std::min(num_bytes, kMaxReadSize); | 79 bytes_to_read_ = std::min(num_bytes, kMaxReadSize); |
81 recvfrom_callback_ = new TrackedCallback(this, callback); | 80 recvfrom_callback_ = callback; |
82 | 81 |
83 // Send the request, the browser will call us back via RecvFromACK. | 82 // Send the request, the browser will call us back via RecvFromACK. |
84 SendRecvFrom(bytes_to_read_); | 83 SendRecvFrom(bytes_to_read_); |
85 return PP_OK_COMPLETIONPENDING; | 84 return PP_OK_COMPLETIONPENDING; |
86 } | 85 } |
87 | 86 |
88 PP_Bool UDPSocketPrivateImpl::GetRecvFromAddress(PP_NetAddress_Private* addr) { | 87 PP_Bool UDPSocketPrivateImpl::GetRecvFromAddress(PP_NetAddress_Private* addr) { |
89 if (!addr) | 88 if (!addr) |
90 return PP_FALSE; | 89 return PP_FALSE; |
91 | 90 |
92 *addr = recvfrom_addr_; | 91 *addr = recvfrom_addr_; |
93 return PP_TRUE; | 92 return PP_TRUE; |
94 } | 93 } |
95 | 94 |
96 int32_t UDPSocketPrivateImpl::SendTo(const char* buffer, | 95 int32_t UDPSocketPrivateImpl::SendTo(const char* buffer, |
97 int32_t num_bytes, | 96 int32_t num_bytes, |
98 const PP_NetAddress_Private* addr, | 97 const PP_NetAddress_Private* addr, |
99 PP_CompletionCallback callback) { | 98 scoped_refptr<TrackedCallback> callback) { |
100 if (!buffer || num_bytes <= 0 || !addr || !callback.func) | 99 if (!buffer || num_bytes <= 0 || !addr) |
101 return PP_ERROR_BADARGUMENT; | 100 return PP_ERROR_BADARGUMENT; |
102 if (!bound_) | 101 if (!bound_) |
103 return PP_ERROR_FAILED; | 102 return PP_ERROR_FAILED; |
104 if (TrackedCallback::IsPending(sendto_callback_)) | 103 if (TrackedCallback::IsPending(sendto_callback_)) |
105 return PP_ERROR_INPROGRESS; | 104 return PP_ERROR_INPROGRESS; |
106 | 105 |
107 if (num_bytes > kMaxWriteSize) | 106 if (num_bytes > kMaxWriteSize) |
108 num_bytes = kMaxWriteSize; | 107 num_bytes = kMaxWriteSize; |
109 | 108 |
110 sendto_callback_ = new TrackedCallback(this, callback); | 109 sendto_callback_ = callback; |
111 | 110 |
112 // Send the request, the browser will call us back via SendToACK. | 111 // Send the request, the browser will call us back via SendToACK. |
113 SendSendTo(std::string(buffer, num_bytes), *addr); | 112 SendSendTo(std::string(buffer, num_bytes), *addr); |
114 return PP_OK_COMPLETIONPENDING; | 113 return PP_OK_COMPLETIONPENDING; |
115 } | 114 } |
116 | 115 |
117 void UDPSocketPrivateImpl::Close() { | 116 void UDPSocketPrivateImpl::Close() { |
118 if(closed_) | 117 if(closed_) |
119 return; | 118 return; |
120 | 119 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 arraysize(bound_addr_.data) * sizeof(*bound_addr_.data)); | 196 arraysize(bound_addr_.data) * sizeof(*bound_addr_.data)); |
198 } | 197 } |
199 | 198 |
200 void UDPSocketPrivateImpl::PostAbortIfNecessary( | 199 void UDPSocketPrivateImpl::PostAbortIfNecessary( |
201 scoped_refptr<TrackedCallback>* callback) { | 200 scoped_refptr<TrackedCallback>* callback) { |
202 if (callback->get()) | 201 if (callback->get()) |
203 (*callback)->PostAbort(); | 202 (*callback)->PostAbort(); |
204 } | 203 } |
205 | 204 |
206 } // namespace ppapi | 205 } // namespace ppapi |
OLD | NEW |