root/ppapi/cpp/extensions/dev/socket_dev.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef PPAPI_CPP_EXTENSIONS_DEV_SOCKET_DEV_H_
#define PPAPI_CPP_EXTENSIONS_DEV_SOCKET_DEV_H_

#include <string>
#include <vector>

#include "ppapi/c/extensions/dev/ppb_ext_socket_dev.h"
#include "ppapi/cpp/extensions/dict_field.h"
#include "ppapi/cpp/extensions/ext_output_traits.h"
#include "ppapi/cpp/instance_handle.h"
#include "ppapi/cpp/var.h"
#include "ppapi/cpp/var_array_buffer.h"
#include "ppapi/cpp/var_dictionary.h"

namespace pp {
namespace ext {

template <class T>
class ExtCompletionCallbackWithOutput;

template <class T>
class Optional;

namespace socket {

// Data types ------------------------------------------------------------------
class SocketType_Dev {
 public:
  enum ValueType {
    NONE,
    TCP,
    UDP
  };

  SocketType_Dev();
  SocketType_Dev(ValueType in_value);
  ~SocketType_Dev();

  bool Populate(const PP_Var& var_value);

  Var CreateVar() const;

  ValueType value;

  static const char* const kTcp;
  static const char* const kUdp;
};

typedef VarDictionary CreateOptions_Dev;

class CreateInfo_Dev {
 public:
  CreateInfo_Dev();
  ~CreateInfo_Dev();

  bool Populate(const PP_Ext_Socket_CreateInfo_Dev& value);

  Var CreateVar() const;

  static const char* const kSocketId;

  DictField<int32_t> socket_id;
};

class AcceptInfo_Dev {
 public:
  AcceptInfo_Dev();
  ~AcceptInfo_Dev();

  bool Populate(const PP_Ext_Socket_AcceptInfo_Dev& value);

  Var CreateVar() const;

  static const char* const kResultCode;
  static const char* const kSocketId;

  DictField<int32_t> result_code;
  OptionalDictField<int32_t> socket_id;
};

class ReadInfo_Dev {
 public:
  ReadInfo_Dev();
  ~ReadInfo_Dev();

  bool Populate(const PP_Ext_Socket_ReadInfo_Dev& value);

  Var CreateVar() const;

  static const char* const kResultCode;
  static const char* const kData;

  DictField<int32_t> result_code;
  DictField<VarArrayBuffer> data;
};

class WriteInfo_Dev {
 public:
  WriteInfo_Dev();
  ~WriteInfo_Dev();

  bool Populate(const PP_Ext_Socket_WriteInfo_Dev& value);

  Var CreateVar() const;

  static const char* const kBytesWritten;

  DictField<int32_t> bytes_written;
};

class RecvFromInfo_Dev {
 public:
  RecvFromInfo_Dev();
  ~RecvFromInfo_Dev();

  bool Populate(const PP_Ext_Socket_RecvFromInfo_Dev& value);

  Var CreateVar() const;

  static const char* const kResultCode;
  static const char* const kData;
  static const char* const kAddress;
  static const char* const kPort;

  DictField<int32_t> result_code;
  DictField<VarArrayBuffer> data;
  DictField<std::string> address;
  DictField<int32_t> port;
};

class SocketInfo_Dev {
 public:
  SocketInfo_Dev();
  ~SocketInfo_Dev();

  bool Populate(const PP_Ext_Socket_SocketInfo_Dev& value);

  Var CreateVar() const;

  static const char* const kSocketType;
  static const char* const kConnected;
  static const char* const kPeerAddress;
  static const char* const kPeerPort;
  static const char* const kLocalAddress;
  static const char* const kLocalPort;

  DictField<SocketType_Dev> socket_type;
  DictField<bool> connected;
  OptionalDictField<std::string> peer_address;
  OptionalDictField<int32_t> peer_port;
  OptionalDictField<std::string> local_address;
  OptionalDictField<int32_t> local_port;
};

class NetworkInterface_Dev {
 public:
  NetworkInterface_Dev();
  ~NetworkInterface_Dev();

  bool Populate(const PP_Ext_Socket_NetworkInterface_Dev& value);

  Var CreateVar() const;

  static const char* const kName;
  static const char* const kAddress;

  DictField<std::string> name;
  DictField<std::string> address;
};

// Functions -------------------------------------------------------------------
class Socket_Dev {
 public:
  explicit Socket_Dev(const InstanceHandle& instance);
  ~Socket_Dev();

  typedef ExtCompletionCallbackWithOutput<CreateInfo_Dev> CreateCallback;
  int32_t Create(const SocketType_Dev& type,
                 const Optional<CreateOptions_Dev>& options,
                 const CreateCallback& callback);

  void Destroy(int32_t socket_id);

  typedef ExtCompletionCallbackWithOutput<int32_t> ConnectCallback;
  int32_t Connect(int32_t socket_id,
                  const std::string& hostname,
                  int32_t port,
                  const ConnectCallback& callback);

  typedef ExtCompletionCallbackWithOutput<int32_t> BindCallback;
  int32_t Bind(int32_t socket_id,
               const std::string& address,
               int32_t port,
               const BindCallback& callback);

  void Disconnect(int32_t socket_id);

  typedef ExtCompletionCallbackWithOutput<ReadInfo_Dev> ReadCallback;
  int32_t Read(int32_t socket_id,
               const Optional<int32_t>& buffer_size,
               const ReadCallback& callback);

  typedef ExtCompletionCallbackWithOutput<WriteInfo_Dev> WriteCallback;
  int32_t Write(int32_t socket_id,
                const VarArrayBuffer& data,
                const WriteCallback& callback);

  typedef ExtCompletionCallbackWithOutput<RecvFromInfo_Dev> RecvFromCallback;
  int32_t RecvFrom(int32_t socket_id,
                   const Optional<int32_t>& buffer_size,
                   const RecvFromCallback& callback);

  typedef ExtCompletionCallbackWithOutput<WriteInfo_Dev> SendToCallback;
  int32_t SendTo(int32_t socket_id,
                 const VarArrayBuffer& data,
                 const std::string& address,
                 int32_t port,
                 const SendToCallback& callback);

  typedef ExtCompletionCallbackWithOutput<int32_t> ListenCallback;
  int32_t Listen(int32_t socket_id,
                 const std::string& address,
                 int32_t port,
                 const Optional<int32_t>& backlog,
                 const ListenCallback& callback);

  typedef ExtCompletionCallbackWithOutput<AcceptInfo_Dev> AcceptCallback;
  int32_t Accept(int32_t socket_id, const AcceptCallback& callback);

  typedef ExtCompletionCallbackWithOutput<bool> SetKeepAliveCallback;
  int32_t SetKeepAlive(int32_t socket_id,
                       bool enable,
                       const Optional<int32_t>& delay,
                       const SetKeepAliveCallback& callback);

  typedef ExtCompletionCallbackWithOutput<bool> SetNoDelayCallback;
  int32_t SetNoDelay(int32_t socket_id,
                     bool no_delay,
                     const SetNoDelayCallback& callback);

  typedef ExtCompletionCallbackWithOutput<SocketInfo_Dev> GetInfoCallback;
  int32_t GetInfo(int32_t socket_id,
                  const GetInfoCallback& callback);

  typedef ExtCompletionCallbackWithOutput<std::vector<NetworkInterface_Dev> >
      GetNetworkListCallback;
  int32_t GetNetworkList(const GetNetworkListCallback& callback);

  typedef ExtCompletionCallbackWithOutput<int32_t> JoinGroupCallback;
  int32_t JoinGroup(int32_t socket_id,
                    const std::string& address,
                    const JoinGroupCallback& callback);

  typedef ExtCompletionCallbackWithOutput<int32_t> LeaveGroupCallback;
  int32_t LeaveGroup(int32_t socket_id,
                     const std::string& address,
                     const LeaveGroupCallback& callback);

  typedef ExtCompletionCallbackWithOutput<int32_t>
      SetMulticastTimeToLiveCallback;
  int32_t SetMulticastTimeToLive(
      int32_t socket_id,
      int32_t ttl,
      const SetMulticastTimeToLiveCallback& callback);

  typedef ExtCompletionCallbackWithOutput<int32_t>
      SetMulticastLoopbackModeCallback;
  int32_t SetMulticastLoopbackMode(
      int32_t socket_id,
      bool enabled,
      const SetMulticastLoopbackModeCallback& callback);

  typedef ExtCompletionCallbackWithOutput<std::vector<std::string> >
      GetJoinedGroupsCallback;
  int32_t GetJoinedGroups(int32_t socket_id,
                          const GetJoinedGroupsCallback& callback);

 private:
  InstanceHandle instance_;
};

}  // namespace socket
}  // namespace ext
}  // namespace pp

#endif  // PPAPI_CPP_EXTENSIONS_DEV_SOCKET_DEV_H_

/* [<][>][^][v][top][bottom][index][help] */