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

Side by Side Diff: content/renderer/p2p/socket_client.h

Issue 45183002: Expose the p2p client in content/public (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix gyp file Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/p2p/ipc_socket_factory.cc ('k') | content/renderer/p2p/socket_client.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CONTENT_RENDERER_P2P_SOCKET_CLIENT_H_
6 #define CONTENT_RENDERER_P2P_SOCKET_CLIENT_H_
7
8 #include <vector>
9
10 #include "base/memory/ref_counted.h"
11 #include "content/common/p2p_sockets.h"
12 #include "net/base/ip_endpoint.h"
13
14 namespace base {
15 class MessageLoopProxy;
16 } // namespace base
17
18 namespace content {
19
20 class P2PSocketDispatcher;
21
22 // P2P socket that rountes all calls over IPC.
23 //
24 // The object runs on two threads: IPC thread and delegate thread. The
25 // IPC thread is used to interact with P2PSocketDispatcher. All
26 // callbacks to the user of this class are called on the delegate
27 // thread which is specified in Init().
28 class P2PSocketClient : public base::RefCountedThreadSafe<P2PSocketClient> {
29 public:
30 // Delegate is called on the the same thread on which P2PSocketCLient is
31 // created.
32 class Delegate {
33 public:
34 virtual ~Delegate() { }
35
36 virtual void OnOpen(const net::IPEndPoint& address) = 0;
37 virtual void OnIncomingTcpConnection(const net::IPEndPoint& address,
38 P2PSocketClient* client) = 0;
39 virtual void OnSendComplete() = 0;
40 virtual void OnError() = 0;
41 virtual void OnDataReceived(const net::IPEndPoint& address,
42 const std::vector<char>& data) = 0;
43 };
44
45 explicit P2PSocketClient(P2PSocketDispatcher* dispatcher);
46
47 // Initialize socket of the specified |type| and connected to the
48 // specified |address|. |address| matters only when |type| is set to
49 // P2P_SOCKET_TCP_CLIENT.
50 void Init(P2PSocketType type,
51 const net::IPEndPoint& local_address,
52 const net::IPEndPoint& remote_address,
53 Delegate* delegate);
54
55 // Send the |data| to the |address|.
56 void Send(const net::IPEndPoint& address, const std::vector<char>& data);
57
58 // Send the |data| to the |address| using Differentiated Services Code Point
59 // |dscp|.
60 void SendWithDscp(const net::IPEndPoint& address,
61 const std::vector<char>& data,
62 net::DiffServCodePoint dscp);
63
64 // Must be called before the socket is destroyed. The delegate may
65 // not be called after |closed_task| is executed.
66 void Close();
67
68 int socket_id() const { return socket_id_; }
69
70 void set_delegate(Delegate* delegate);
71
72 private:
73 enum State {
74 STATE_UNINITIALIZED,
75 STATE_OPENING,
76 STATE_OPEN,
77 STATE_CLOSED,
78 STATE_ERROR,
79 };
80
81 friend class P2PSocketDispatcher;
82
83 // Calls destructor.
84 friend class base::RefCountedThreadSafe<P2PSocketClient>;
85
86 virtual ~P2PSocketClient();
87
88 // Message handlers that run on IPC thread.
89 void OnSocketCreated(const net::IPEndPoint& address);
90 void OnIncomingTcpConnection(const net::IPEndPoint& address);
91 void OnSendComplete(int packet_id);
92 void OnSendComplete();
93 void OnError();
94 void OnDataReceived(const net::IPEndPoint& address,
95 const std::vector<char>& data);
96
97 // Proxy methods that deliver messages to the delegate thread.
98 void DeliverOnSocketCreated(const net::IPEndPoint& address);
99 void DeliverOnIncomingTcpConnection(
100 const net::IPEndPoint& address,
101 scoped_refptr<P2PSocketClient> new_client);
102 void DeliverOnSendComplete();
103 void DeliverOnError();
104 void DeliverOnDataReceived(const net::IPEndPoint& address,
105 const std::vector<char>& data);
106
107 // Scheduled on the IPC thread to finish initialization.
108 void DoInit(P2PSocketType type,
109 const net::IPEndPoint& local_address,
110 const net::IPEndPoint& remote_address);
111
112 // Scheduled on the IPC thread to finish closing the connection.
113 void DoClose();
114
115 // Called by the dispatcher when it is destroyed.
116 void Detach();
117
118 P2PSocketDispatcher* dispatcher_;
119 scoped_refptr<base::MessageLoopProxy> ipc_message_loop_;
120 scoped_refptr<base::MessageLoopProxy> delegate_message_loop_;
121 int socket_id_;
122 Delegate* delegate_;
123 State state_;
124
125 // These two fields are used to identify packets for tracing.
126 uint32 random_socket_id_;
127 uint32 next_packet_id_;
128
129 DISALLOW_COPY_AND_ASSIGN(P2PSocketClient);
130 };
131
132 } // namespace content
133
134 #endif // CONTENT_RENDERER_P2P_SOCKET_CLIENT_H_
OLDNEW
« no previous file with comments | « content/renderer/p2p/ipc_socket_factory.cc ('k') | content/renderer/p2p/socket_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698