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

Side by Side Diff: ppapi/shared_impl/private/ppb_tcp_server_socket_shared.cc

Issue 9283022: Exposed Listen and Accept methods to plugin. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Sync. Created 8 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
« no previous file with comments | « ppapi/shared_impl/private/ppb_tcp_server_socket_shared.h ('k') | ppapi/shared_impl/resource.h » ('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) 2012 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 #include "ppapi/shared_impl/private/ppb_tcp_server_socket_shared.h"
6
7 #include <cstddef>
8
9 #include "base/logging.h"
10 #include "ppapi/c/pp_errors.h"
11
12 namespace ppapi {
13
14 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(PP_Instance instance)
15 : Resource(OBJECT_IS_IMPL, instance),
16 real_socket_id_(0),
17 temp_socket_id_(GenerateTempSocketID()),
18 state_(BEFORE_LISTENING),
19 tcp_socket_buffer_(NULL) {
20 }
21
22 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(
23 const HostResource& resource)
24 : Resource(OBJECT_IS_PROXY, resource),
25 real_socket_id_(0),
26 temp_socket_id_(GenerateTempSocketID()),
27 state_(BEFORE_LISTENING),
28 tcp_socket_buffer_(NULL) {
29 }
30
31 PPB_TCPServerSocket_Shared::~PPB_TCPServerSocket_Shared() {
32 }
33
34 thunk::PPB_TCPServerSocket_Private_API*
35 PPB_TCPServerSocket_Shared::AsPPB_TCPServerSocket_Private_API() {
36 return this;
37 }
38
39 int32_t PPB_TCPServerSocket_Shared::Listen(const PP_NetAddress_Private* addr,
40 int32_t backlog,
41 PP_CompletionCallback callback) {
42 if (!addr)
43 return PP_ERROR_BADARGUMENT;
44 if (!callback.func)
45 return PP_ERROR_BLOCKS_MAIN_THREAD;
46 if (state_ != BEFORE_LISTENING)
47 return PP_ERROR_FAILED;
48 if (TrackedCallback::IsPending(listen_callback_))
49 return PP_ERROR_INPROGRESS; // Can only have one pending request.
50
51 listen_callback_ = new TrackedCallback(this, callback);
52 // Send the request, the browser will call us back via ListenACK
53 SendListen(temp_socket_id_, *addr, backlog);
54 return PP_OK_COMPLETIONPENDING;
55 }
56
57 int32_t PPB_TCPServerSocket_Shared::Accept(PP_Resource* tcp_socket,
58 PP_CompletionCallback callback) {
59 if (!tcp_socket)
60 return PP_ERROR_BADARGUMENT;
61 if (!callback.func)
62 return PP_ERROR_BLOCKS_MAIN_THREAD;
63
64 if (state_ != LISTENING)
65 return PP_ERROR_FAILED;
66 if (TrackedCallback::IsPending(accept_callback_))
67 return PP_ERROR_INPROGRESS;
68
69 tcp_socket_buffer_ = tcp_socket;
70 accept_callback_ = new TrackedCallback(this, callback);
71
72 SendAccept();
73 return PP_OK_COMPLETIONPENDING;
74 }
75
76 void PPB_TCPServerSocket_Shared::StopListening() {
77 if (state_ == CLOSED)
78 return;
79
80 state_ = CLOSED;
81
82 SendStopListening();
83 real_socket_id_ = 0;
84
85 if (listen_callback_.get())
86 listen_callback_->PostAbort();
87 if (accept_callback_.get())
88 accept_callback_->PostAbort();
89 tcp_socket_buffer_ = NULL;
90 }
91
92 void PPB_TCPServerSocket_Shared::OnListenCompleted(uint32 real_socket_id,
93 int32_t status) {
94 if (state_ != BEFORE_LISTENING ||
95 !TrackedCallback::IsPending(listen_callback_)) {
96 NOTREACHED();
97 return;
98 }
99
100 if (status == PP_OK) {
101 real_socket_id_ = real_socket_id;
102 state_ = LISTENING;
103 }
104
105 TrackedCallback::ClearAndRun(&listen_callback_, status);
106 }
107
108 uint32 PPB_TCPServerSocket_Shared::GenerateTempSocketID() {
109 static uint32 socket_id = 0;
110 return socket_id++;
111 }
112
113 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/shared_impl/private/ppb_tcp_server_socket_shared.h ('k') | ppapi/shared_impl/resource.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698