Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: mojo/services/network/public/cpp/udp_socket_wrapper.h

Issue 880613005: De-Clientize UDPSocket service (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@rollin
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #ifndef MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_ 5 #ifndef MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_
6 #define MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_ 6 #define MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_
7 7
8 #include <queue> 8 #include <queue>
9 9
10 #include "network/public/interfaces/udp_socket.mojom.h" 10 #include "network/public/interfaces/udp_socket.mojom.h"
11 #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
11 12
12 namespace mojo { 13 namespace mojo {
13 14
14 // This class is a wrapper around the UDPSocket interface. It provides local 15 // This class is a wrapper around the UDPSocket interface. It provides local
15 // cache for received datagrams as well as for (excessive) send requests: 16 // cache for received datagrams as well as for (excessive) send requests:
16 // - You call ReceiveFrom() to retrieve one datagram. If there is already cached 17 // - You call ReceiveFrom() to retrieve one datagram. If there is already cached
17 // data, the operation completes synchronously. 18 // data, the operation completes synchronously.
18 // - You don't need to worry about the max-pending-send-requests restriction 19 // - You don't need to worry about the max-pending-send-requests restriction
19 // imposed by the service side. If you make many SendTo() calls in a short 20 // imposed by the service side. If you make many SendTo() calls in a short
20 // period of time, it caches excessive requests and sends them later. 21 // period of time, it caches excessive requests and sends them later.
21 class UDPSocketWrapper : public UDPSocketClient { 22 class UDPSocketWrapper : public UDPSocketReceiver {
22 public: 23 public:
23 typedef Callback<void(NetworkErrorPtr, NetAddressPtr, Array<uint8_t>)> 24 using ReceiveCallback =
24 ReceiveCallback; 25 Callback<void(NetworkErrorPtr, NetAddressPtr, Array<uint8_t>)>;
25 typedef Callback<void(NetworkErrorPtr)> ErrorCallback; 26 using ErrorCallback = Callback<void(NetworkErrorPtr)>;
27 using BindOrConnectCallback =
28 Callback<void(NetworkErrorPtr,
29 NetAddressPtr,
30 InterfaceRequest<UDPSocketReceiver>)>;
26 31
27 explicit UDPSocketWrapper(UDPSocketPtr socket); 32 explicit UDPSocketWrapper(UDPSocketPtr socket);
28 33
29 // |receive_queue_slots| determines the size (in datagrams) of the local 34 // |receive_queue_slots| determines the size (in datagrams) of the local
30 // receive queue, which caches incoming datagrams. 35 // receive queue, which caches incoming datagrams.
31 // |requested_max_pending_sends| is used to call 36 // |requested_max_pending_sends| is used to call
32 // NegotiateMaxPendingSendRequests() on |socket|. 37 // NegotiateMaxPendingSendRequests() on |socket|.
33 // The two numbers should be greater than 0. If you would like to use default 38 // The two numbers should be greater than 0. If you would like to use default
34 // values, please use the other constructor. 39 // values, please use the other constructor.
35 UDPSocketWrapper(UDPSocketPtr socket, 40 UDPSocketWrapper(UDPSocketPtr socket,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 void Run(NetworkErrorPtr result) const override; 96 void Run(NetworkErrorPtr result) const override;
92 97
93 private: 98 private:
94 // Because this callback is passed to a method of |socket_|, and |socket_| 99 // Because this callback is passed to a method of |socket_|, and |socket_|
95 // is owned by |delegate_|, it should be safe to assume that |delegate_| is 100 // is owned by |delegate_|, it should be safe to assume that |delegate_| is
96 // valid if/when Run() is called. 101 // valid if/when Run() is called.
97 UDPSocketWrapper* delegate_; 102 UDPSocketWrapper* delegate_;
98 ErrorCallback forward_callback_; 103 ErrorCallback forward_callback_;
99 }; 104 };
100 105
106 class ReceiverBindingCallback : public BindOrConnectCallback::Runnable {
107 public:
108 ReceiverBindingCallback(
109 UDPSocketWrapper* delegate,
110 const Callback<void(NetworkErrorPtr, NetAddressPtr)>& wrapper_callback);
111 ~ReceiverBindingCallback() override;
112
113 // BindOrConnectCallback::Runnable implementation:
114 void Run(NetworkErrorPtr result,
115 NetAddressPtr addr,
116 InterfaceRequest<UDPSocketReceiver> request) const override;
117
118 private:
119 // Because this callback is passed to a method of |socket_|, and |socket_|
120 // is owned by |delegate_|, it should be safe to assume that |delegate_| is
121 // valid if/when Run() is called.
122 UDPSocketWrapper* delegate_;
123 const Callback<void(NetworkErrorPtr, NetAddressPtr)> wrapper_callback_;
124 };
125
101 struct ReceivedData { 126 struct ReceivedData {
102 ReceivedData(); 127 ReceivedData();
103 ~ReceivedData(); 128 ~ReceivedData();
104 129
105 NetworkErrorPtr result; 130 NetworkErrorPtr result;
106 NetAddressPtr src_addr; 131 NetAddressPtr src_addr;
107 Array<uint8_t> data; 132 Array<uint8_t> data;
108 }; 133 };
109 134
110 struct SendRequest { 135 struct SendRequest {
111 SendRequest(); 136 SendRequest();
112 ~SendRequest(); 137 ~SendRequest();
113 138
114 NetAddressPtr dest_addr; 139 NetAddressPtr dest_addr;
115 Array<uint8_t> data; 140 Array<uint8_t> data;
116 ErrorCallback callback; 141 ErrorCallback callback;
117 }; 142 };
118 143
119 // UDPSocketClient implementation: 144 // UDPSocketReceiver implementation:
120 void OnReceived(NetworkErrorPtr result, 145 void OnReceived(NetworkErrorPtr result,
121 NetAddressPtr src_addr, 146 NetAddressPtr src_addr,
122 Array<uint8_t> data) override; 147 Array<uint8_t> data) override;
123 148
124 void Initialize(uint32_t requested_max_pending_sends); 149 void Initialize(uint32_t requested_max_pending_sends);
125 void OnNegotiateMaxPendingSendRequestsCompleted(uint32_t actual_size); 150 void OnNegotiateMaxPendingSendRequestsCompleted(uint32_t actual_size);
126 151
127 void OnSendToCompleted(NetworkErrorPtr result, 152 void OnSendToCompleted(NetworkErrorPtr result,
128 const ErrorCallback& forward_callback); 153 const ErrorCallback& forward_callback);
129 154
130 // Returns true if a send request in |send_requests_| has been processed. 155 // Returns true if a send request in |send_requests_| has been processed.
131 bool ProcessNextSendRequest(); 156 bool ProcessNextSendRequest();
132 157
158 // Binds to a UDPSocketReceiver request and notifies |socket_| that we're
159 // ready to start receiving data.
160 void StartReceivingData(InterfaceRequest<UDPSocketReceiver> request);
161
162 Binding<UDPSocketReceiver> binding_;
163
133 UDPSocketPtr socket_; 164 UDPSocketPtr socket_;
134 165
135 uint32_t max_receive_queue_size_; 166 uint32_t max_receive_queue_size_;
136 167
137 // Owns all the objects that its elements point to. 168 // Owns all the objects that its elements point to.
138 std::queue<ReceivedData*> receive_queue_; 169 std::queue<ReceivedData*> receive_queue_;
139 170
140 std::queue<ReceiveCallback> receive_requests_; 171 std::queue<ReceiveCallback> receive_requests_;
141 172
142 uint32_t max_pending_sends_; 173 uint32_t max_pending_sends_;
143 uint32_t current_pending_sends_; 174 uint32_t current_pending_sends_;
144 175
145 // Owns all the objects that its elements point to. 176 // Owns all the objects that its elements point to.
146 std::queue<SendRequest*> send_requests_; 177 std::queue<SendRequest*> send_requests_;
147 }; 178 };
148 179
149 } // namespace mojo 180 } // namespace mojo
150 181
151 #endif // MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_ 182 #endif // MOJO_SERVICES_NETWORK_PUBLIC_CPP_UDP_SOCKET_WRAPPER_H_
OLDNEW
« no previous file with comments | « mojo/services/network/network_service_impl.cc ('k') | mojo/services/network/public/cpp/udp_socket_wrapper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698