fake_net_address_interface.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2014 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 "fake_ppapi/fake_net_address_interface.h"
6
7#include <netinet/in.h>
8
9#include "fake_ppapi/fake_pepper_interface.h"
10#include "fake_ppapi/fake_resource_manager.h"
11#include "fake_ppapi/fake_var_manager.h"
12#include "gtest/gtest.h"
13
14namespace {
15
16class FakeNetAddressResource : public FakeResource {
17 public:
18  explicit FakeNetAddressResource(PP_NetAddress_IPv4 addr)
19      : is_v6(false), address(addr) {}
20  explicit FakeNetAddressResource(PP_NetAddress_IPv6 addr)
21      : is_v6(true), address_v6(addr) {}
22
23  static const char* classname() { return "FakeNetAddressResource"; }
24
25  bool is_v6;
26  PP_NetAddress_IPv4 address;
27  PP_NetAddress_IPv6 address_v6;
28};
29
30}  // namespace
31
32FakeNetAddressInterface::FakeNetAddressInterface(FakePepperInterface* ppapi)
33    : ppapi_(ppapi) {}
34
35PP_Resource FakeNetAddressInterface::CreateFromIPv4Address(
36    PP_Instance instance,
37    PP_NetAddress_IPv4* address) {
38  if (instance != ppapi_->GetInstance())
39    return 0;
40
41  FakeNetAddressResource* addr_resource = new FakeNetAddressResource(*address);
42
43  PP_Resource rtn = CREATE_RESOURCE(ppapi_->resource_manager(),
44                                    FakeNetAddressResource,
45                                    addr_resource);
46  return rtn;
47}
48
49PP_Resource FakeNetAddressInterface::CreateFromIPv6Address(
50    PP_Instance instance,
51    PP_NetAddress_IPv6* address) {
52  if (instance != ppapi_->GetInstance())
53    return 0;
54
55  FakeNetAddressResource* addr_resource = new FakeNetAddressResource(*address);
56  PP_Resource rtn = CREATE_RESOURCE(ppapi_->resource_manager(),
57                                    FakeNetAddressResource,
58                                    addr_resource);
59  return rtn;
60}
61
62PP_Bool FakeNetAddressInterface::IsNetAddress(PP_Resource address) {
63  FakeNetAddressResource* address_resource =
64      ppapi_->resource_manager()->Get<FakeNetAddressResource>(address);
65  if (address_resource == NULL)
66    return PP_FALSE;
67  return PP_TRUE;
68}
69
70PP_NetAddress_Family FakeNetAddressInterface::GetFamily(PP_Resource address) {
71  FakeNetAddressResource* address_resource =
72      ppapi_->resource_manager()->Get<FakeNetAddressResource>(address);
73  if (address_resource == NULL)
74    return PP_NETADDRESS_FAMILY_UNSPECIFIED;
75
76  if (address_resource->is_v6)
77    return PP_NETADDRESS_FAMILY_IPV6;
78
79  return PP_NETADDRESS_FAMILY_IPV4;
80}
81
82PP_Bool FakeNetAddressInterface::DescribeAsIPv4Address(
83    PP_Resource address, PP_NetAddress_IPv4* target) {
84  FakeNetAddressResource* address_resource =
85      ppapi_->resource_manager()->Get<FakeNetAddressResource>(address);
86  if (address_resource == NULL)
87    return PP_FALSE;
88
89  if (address_resource->is_v6)
90    return PP_FALSE;
91
92  *target = address_resource->address;
93  return PP_TRUE;
94}
95
96PP_Bool FakeNetAddressInterface::DescribeAsIPv6Address(
97    PP_Resource address, PP_NetAddress_IPv6* target) {
98  FakeNetAddressResource* address_resource =
99      ppapi_->resource_manager()->Get<FakeNetAddressResource>(address);
100  if (address_resource == NULL)
101    return PP_FALSE;
102
103  if (!address_resource->is_v6)
104    return PP_FALSE;
105
106  *target = address_resource->address_v6;
107  return PP_TRUE;
108}
109
110PP_Var FakeNetAddressInterface::DescribeAsString(PP_Resource, PP_Bool) {
111  // TODO(sbc): implement
112  assert(false);
113  return PP_Var();
114}
115