15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_CPP_PRIVATE_TCP_SERVER_SOCKET_PRIVATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_CPP_PRIVATE_TCP_SERVER_SOCKET_PRIVATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_stdint.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/private/ppb_tcp_server_socket_private.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/resource.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CompletionCallback;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InstanceHandle;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TCPServerSocketPrivate : public Resource {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit TCPServerSocketPrivate(const InstanceHandle& instance);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the required interface is available.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool IsAvailable();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t Listen(const PP_NetAddress_Private* addr,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 int32_t backlog,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const CompletionCallback& callback);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accepts incoming connection and stores resource of accepted
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // socket into |socket|. If Accept returns PP_OK_COMPLETIONPENDING,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the memory pointed by |socket| should stay valid until the
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called or StopListening method is called.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t Accept(PP_Resource* socket,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 const CompletionCallback& callback);
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  int32_t GetLocalAddress(PP_NetAddress_Private* addr);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void StopListening();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // PPAPI_CPP_PRIVATE_TCP_SERVER_SOCKET_PRIVATE_H_
40