blob: c100924fc231d8f29e680da89102237c2852f417 [file] [log] [blame]
[email protected]669b2832012-02-21 23:37:121// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]fb575bc2011-11-16 07:06:242// 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/cpp/private/udp_socket_private.h"
6
7#include "ppapi/c/pp_bool.h"
8#include "ppapi/c/pp_errors.h"
9#include "ppapi/cpp/completion_callback.h"
[email protected]09af0f72012-02-27 20:23:1910#include "ppapi/cpp/instance_handle.h"
[email protected]fb575bc2011-11-16 07:06:2411#include "ppapi/cpp/module.h"
12#include "ppapi/cpp/module_impl.h"
[email protected]0addda92012-08-31 08:55:2813#include "ppapi/cpp/var.h"
[email protected]fb575bc2011-11-16 07:06:2414
15namespace pp {
16
17namespace {
18
[email protected]0addda92012-08-31 08:55:2819template <> const char* interface_name<PPB_UDPSocket_Private_0_4>() {
20 return PPB_UDPSOCKET_PRIVATE_INTERFACE_0_4;
21}
22
[email protected]d8b07352012-04-26 09:55:1823template <> const char* interface_name<PPB_UDPSocket_Private_0_3>() {
24 return PPB_UDPSOCKET_PRIVATE_INTERFACE_0_3;
[email protected]fb575bc2011-11-16 07:06:2425}
26
27} // namespace
28
[email protected]09af0f72012-02-27 20:23:1929UDPSocketPrivate::UDPSocketPrivate(const InstanceHandle& instance) {
[email protected]386020982013-03-29 19:11:1830 if (has_interface<PPB_UDPSocket_Private_0_4>()) {
[email protected]0addda92012-08-31 08:55:2831 PassRefFromConstructor(get_interface<PPB_UDPSocket_Private_0_4>()->Create(
32 instance.pp_instance()));
33 } else if (has_interface<PPB_UDPSocket_Private_0_3>()) {
[email protected]d8b07352012-04-26 09:55:1834 PassRefFromConstructor(get_interface<PPB_UDPSocket_Private_0_3>()->Create(
[email protected]0addda92012-08-31 08:55:2835 instance.pp_instance()));
[email protected]fb575bc2011-11-16 07:06:2436 }
37}
38
[email protected]d8b07352012-04-26 09:55:1839// static
40bool UDPSocketPrivate::IsAvailable() {
[email protected]386020982013-03-29 19:11:1841 return has_interface<PPB_UDPSocket_Private_0_4>() ||
[email protected]0addda92012-08-31 08:55:2842 has_interface<PPB_UDPSocket_Private_0_3>();
43}
44
45int32_t UDPSocketPrivate::SetSocketFeature(PP_UDPSocketFeature_Private name,
46 const Var& value) {
47 if (has_interface<PPB_UDPSocket_Private_0_4>()) {
48 return get_interface<PPB_UDPSocket_Private_0_4>()->SetSocketFeature(
49 pp_resource(), name, value.pp_var());
50 }
51 return PP_ERROR_NOINTERFACE;
[email protected]d8b07352012-04-26 09:55:1852}
53
[email protected]fb575bc2011-11-16 07:06:2454int32_t UDPSocketPrivate::Bind(const PP_NetAddress_Private* addr,
55 const CompletionCallback& callback) {
[email protected]0addda92012-08-31 08:55:2856 if (has_interface<PPB_UDPSocket_Private_0_4>()) {
57 return get_interface<PPB_UDPSocket_Private_0_4>()->Bind(
58 pp_resource(), addr, callback.pp_completion_callback());
59 }
60 if (has_interface<PPB_UDPSocket_Private_0_3>()) {
61 return get_interface<PPB_UDPSocket_Private_0_3>()->Bind(
62 pp_resource(), addr, callback.pp_completion_callback());
63 }
64 return callback.MayForce(PP_ERROR_NOINTERFACE);
[email protected]fb575bc2011-11-16 07:06:2465}
66
[email protected]669b2832012-02-21 23:37:1267bool UDPSocketPrivate::GetBoundAddress(PP_NetAddress_Private* addr) {
[email protected]0addda92012-08-31 08:55:2868 if (has_interface<PPB_UDPSocket_Private_0_4>()) {
69 PP_Bool result =
70 get_interface<PPB_UDPSocket_Private_0_4>()->GetBoundAddress(
71 pp_resource(), addr);
72 return PP_ToBool(result);
73 }
74 if (has_interface<PPB_UDPSocket_Private_0_3>()) {
75 PP_Bool result =
76 get_interface<PPB_UDPSocket_Private_0_3>()->GetBoundAddress(
77 pp_resource(), addr);
78 return PP_ToBool(result);
79 }
80 return false;
[email protected]669b2832012-02-21 23:37:1281}
82
[email protected]fb575bc2011-11-16 07:06:2483int32_t UDPSocketPrivate::RecvFrom(char* buffer,
84 int32_t num_bytes,
85 const CompletionCallback& callback) {
[email protected]0addda92012-08-31 08:55:2886 if (has_interface<PPB_UDPSocket_Private_0_4>()) {
87 return get_interface<PPB_UDPSocket_Private_0_4>()->RecvFrom(
88 pp_resource(), buffer, num_bytes, callback.pp_completion_callback());
89 }
90 if (has_interface<PPB_UDPSocket_Private_0_3>()) {
91 return get_interface<PPB_UDPSocket_Private_0_3>()->RecvFrom(
92 pp_resource(), buffer, num_bytes, callback.pp_completion_callback());
93 }
94 return callback.MayForce(PP_ERROR_NOINTERFACE);
[email protected]fb575bc2011-11-16 07:06:2495}
96
97bool UDPSocketPrivate::GetRecvFromAddress(PP_NetAddress_Private* addr) {
[email protected]0addda92012-08-31 08:55:2898 if (has_interface<PPB_UDPSocket_Private_0_4>()) {
99 PP_Bool result =
100 get_interface<PPB_UDPSocket_Private_0_4>()->GetRecvFromAddress(
101 pp_resource(), addr);
102 return PP_ToBool(result);
103 }
104 if (has_interface<PPB_UDPSocket_Private_0_3>()) {
105 PP_Bool result =
106 get_interface<PPB_UDPSocket_Private_0_3>()->GetRecvFromAddress(
107 pp_resource(), addr);
108 return PP_ToBool(result);
109 }
110 return false;
[email protected]fb575bc2011-11-16 07:06:24111}
112
113int32_t UDPSocketPrivate::SendTo(const char* buffer,
114 int32_t num_bytes,
115 const PP_NetAddress_Private* addr,
116 const CompletionCallback& callback) {
[email protected]0addda92012-08-31 08:55:28117 if (has_interface<PPB_UDPSocket_Private_0_4>()) {
118 return get_interface<PPB_UDPSocket_Private_0_4>()->SendTo(
119 pp_resource(), buffer, num_bytes, addr,
120 callback.pp_completion_callback());
121 }
122 if (has_interface<PPB_UDPSocket_Private_0_3>()) {
123 return get_interface<PPB_UDPSocket_Private_0_3>()->SendTo(
124 pp_resource(), buffer, num_bytes, addr,
125 callback.pp_completion_callback());
126 }
127 return callback.MayForce(PP_ERROR_NOINTERFACE);
[email protected]fb575bc2011-11-16 07:06:24128}
129
[email protected]669b2832012-02-21 23:37:12130void UDPSocketPrivate::Close() {
[email protected]0addda92012-08-31 08:55:28131 if (has_interface<PPB_UDPSocket_Private_0_4>())
132 return get_interface<PPB_UDPSocket_Private_0_4>()->Close(pp_resource());
133 if (has_interface<PPB_UDPSocket_Private_0_3>())
134 return get_interface<PPB_UDPSocket_Private_0_3>()->Close(pp_resource());
[email protected]669b2832012-02-21 23:37:12135}
[email protected]0addda92012-08-31 08:55:28136
[email protected]fb575bc2011-11-16 07:06:24137} // namespace pp