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

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: Init and Accept calls are combined 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
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>
yzshen1 2012/02/14 00:42:04 why do we need cstring?
ygorshenin1 2012/02/14 09:34:44 Thanks, You're right. <cstring> isn't needed here.
9
10 #include "base/logging.h"
11 #include "base/message_loop.h"
12 #include "ppapi/c/pp_errors.h"
13
14 namespace ppapi {
15
16 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(PP_Instance instance)
17 : Resource(instance),
18 real_socket_id_(0),
19 temp_socket_id_(GenerateTempSocketID()),
20 state_(BEFORE_LISTENING),
21 tcp_socket_buffer_(NULL) {
22 }
23
24 PPB_TCPServerSocket_Shared::PPB_TCPServerSocket_Shared(
25 const HostResource& resource)
26 : Resource(resource),
27 real_socket_id_(0),
28 temp_socket_id_(GenerateTempSocketID()),
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(const PP_NetAddress_Private* addr,
42 int32_t backlog,
43 PP_CompletionCallback callback) {
44 if (!addr)
45 return PP_ERROR_BADARGUMENT;
46 if (!callback.func)
47 return PP_ERROR_BLOCKS_MAIN_THREAD;
48 if (state_ != BEFORE_LISTENING)
49 return PP_ERROR_FAILED;
50 if (TrackedCallback::IsPending(listen_callback_))
51 return PP_ERROR_INPROGRESS; // Can only have one pending request.
52
53 listen_callback_ = new TrackedCallback(this, callback);
54 // Send the request, the browser will call us back via ListenACK
55 SendListen(temp_socket_id_, *addr, backlog);
56 return PP_OK_COMPLETIONPENDING;
57 }
58
59 int32_t PPB_TCPServerSocket_Shared::Accept(PP_Resource* tcp_socket,
60 PP_CompletionCallback callback) {
61 if (!tcp_socket)
62 return PP_ERROR_BADARGUMENT;
63 if (!callback.func)
64 return PP_ERROR_BLOCKS_MAIN_THREAD;
65
66 if (state_ != LISTENING)
67 return PP_ERROR_FAILED;
68 if (TrackedCallback::IsPending(accept_callback_))
69 return PP_ERROR_INPROGRESS;
70
71 tcp_socket_buffer_ = tcp_socket;
72 accept_callback_ = new TrackedCallback(this, callback);
73
74 SendAccept();
75 return PP_OK_COMPLETIONPENDING;
76 }
77
78 void PPB_TCPServerSocket_Shared::StopListening() {
79 if (state_ != LISTENING)
yzshen1 2012/02/14 00:42:04 (1) This is incorrect according to the API spec. C
80 return;
81 state_ = CLOSED;
82
83 SendStopListening();
84 real_socket_id_ = 0;
85
86 if (listen_callback_.get())
87 listen_callback_->PostAbort();
88 if (accept_callback_.get())
89 accept_callback_->PostAbort();
90 tcp_socket_buffer_ = NULL;
91 }
92
93 void PPB_TCPServerSocket_Shared::OnListenCompleted(uint32 real_socket_id,
94 int32_t status) {
95 if (state_ != BEFORE_LISTENING ||
96 !TrackedCallback::IsPending(listen_callback_)) {
97 NOTREACHED();
98 return;
99 }
100
101 if (status == PP_OK) {
102 real_socket_id_ = real_socket_id;
103 state_ = LISTENING;
104 }
105
106 TrackedCallback::ClearAndRun(&listen_callback_, status);
107 }
108
109 uint32 PPB_TCPServerSocket_Shared::GenerateTempSocketID() {
110 static uint32 socket_id = 0;
111 return socket_id++;
112 }
113
114 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698