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

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

Issue 19005006: Switched proxy for TCPServerSocketPrivate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync, fix. Created 7 years, 4 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 | Annotate | Revision Log
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 #include <cstring>
9
10 #include "base/logging.h"
11 #include "ppapi/c/pp_errors.h"
12 #include "ppapi/shared_impl/private/net_address_private_impl.h"
13
14 namespace ppapi {
15
16 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(PP_Instance instance)
17 : Resource(OBJECT_IS_IMPL, instance),
18 socket_id_(0),
19 local_addr_(),
20 state_(BEFORE_LISTENING),
21 tcp_socket_buffer_(NULL) {
22 }
23
24 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(
25 const HostResource& resource)
26 : Resource(OBJECT_IS_PROXY, resource),
27 socket_id_(0),
28 local_addr_(),
29 state_(BEFORE_LISTENING),
30 tcp_socket_buffer_(NULL) {
31 }
32
33 PPB_TCPServerSocket_Shared::~PPB_TCPServerSocket_Shared() {
34 }
35
36 thunk::PPB_TCPServerSocket_Private_API*
37 PPB_TCPServerSocket_Shared::AsPPB_TCPServerSocket_Private_API() {
38 return this;
39 }
40
41 int32_t PPB_TCPServerSocket_Shared::Listen(
42 const PP_NetAddress_Private* addr,
43 int32_t backlog,
44 scoped_refptr<TrackedCallback> callback) {
45 if (!addr)
46 return PP_ERROR_BADARGUMENT;
47 if (state_ != BEFORE_LISTENING)
48 return PP_ERROR_FAILED;
49 if (TrackedCallback::IsPending(listen_callback_))
50 return PP_ERROR_INPROGRESS; // Can only have one pending request.
51
52 listen_callback_ = callback;
53 // Send the request, the browser will call us back via ListenACK
54 SendListen(*addr, backlog);
55 return PP_OK_COMPLETIONPENDING;
56 }
57
58 int32_t PPB_TCPServerSocket_Shared::Accept(
59 PP_Resource* tcp_socket,
60 scoped_refptr<TrackedCallback> callback) {
61 if (!tcp_socket)
62 return PP_ERROR_BADARGUMENT;
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_ = callback;
71
72 SendAccept();
73 return PP_OK_COMPLETIONPENDING;
74 }
75
76 int32_t PPB_TCPServerSocket_Shared::GetLocalAddress(
77 PP_NetAddress_Private* addr) {
78 if (!addr)
79 return PP_ERROR_BADARGUMENT;
80 if (state_ != LISTENING)
81 return PP_ERROR_FAILED;
82 *addr = local_addr_;
83 return PP_OK;
84 }
85
86 void PPB_TCPServerSocket_Shared::StopListening() {
87 if (state_ == CLOSED)
88 return;
89
90 state_ = CLOSED;
91
92 SendStopListening();
93 socket_id_ = 0;
94
95 if (TrackedCallback::IsPending(listen_callback_))
96 listen_callback_->PostAbort();
97 if (TrackedCallback::IsPending(accept_callback_))
98 accept_callback_->PostAbort();
99 tcp_socket_buffer_ = NULL;
100 }
101
102 void PPB_TCPServerSocket_Shared::OnListenCompleted(
103 uint32 socket_id,
104 const PP_NetAddress_Private& local_addr,
105 int32_t status) {
106 if (state_ != BEFORE_LISTENING ||
107 !TrackedCallback::IsPending(listen_callback_)) {
108 NOTREACHED();
109 return;
110 }
111
112 if (status == PP_OK) {
113 socket_id_ = socket_id;
114 local_addr_ = local_addr;
115 state_ = LISTENING;
116 }
117
118 listen_callback_->Run(status);
119 }
120
121 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/shared_impl/private/ppb_tcp_server_socket_shared.h ('k') | ppapi/thunk/interfaces_ppb_private_no_permissions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698