Chromium Code Reviews| Index: ppapi/shared_impl/private/network_list.cc |
| diff --git a/ppapi/shared_impl/private/network_list.cc b/ppapi/shared_impl/private/network_list.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e5c313657a080d0ce7f96a25f4d8948b83459c88 |
| --- /dev/null |
| +++ b/ppapi/shared_impl/private/network_list.cc |
| @@ -0,0 +1,73 @@ |
| +// Copyright (c) 2012 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. |
| + |
| +#include "ppapi/shared_impl/private/network_list.h" |
| + |
| +#include <cstring> |
| + |
| +#include "base/memory/scoped_ptr.h" |
| +#include "net/base/sys_addrinfo.h" |
| +#include "ppapi/shared_impl/private/net_address_private_impl.h" |
| + |
| +namespace ppapi { |
| + |
| +NetworkList::NetworkList() { |
| +} |
| + |
| +NetworkList::~NetworkList() { |
| +} |
| + |
| +NetworkList* NetworkList::CreateFromAddrInfo(const addrinfo* ai) { |
| + scoped_ptr<NetworkList> network_list(new NetworkList()); |
| + |
| + std::string canonical_name; |
| + PP_NetAddress_Private address; |
| + |
| + while (ai != NULL) { |
| + if (ai->ai_canonname != NULL) |
| + canonical_name = ai->ai_canonname; |
| + else |
| + canonical_name = ""; |
| + |
| + if (!NetAddressPrivateImpl::SockaddrToNetAddress(ai->ai_addr, |
| + ai->ai_addrlen, |
| + &address)) { |
| + return NULL; |
| + } |
| + |
| + network_list->Append(canonical_name, address); |
| + ai = ai->ai_next; |
| + } |
| + return network_list.release(); |
| +} |
| + |
| +void NetworkList::Clear() { |
| + canonical_name_list_.clear(); |
| + address_list_.clear(); |
| +} |
| + |
| +void NetworkList::Append(const std::string& canonical_name, |
| + const PP_NetAddress_Private& address) { |
| + canonical_name_list_.push_back(canonical_name); |
| + address_list_.push_back(address); |
| +} |
| + |
| +size_t NetworkList::GetSize() const { |
| + return canonical_name_list_.size(); |
| +} |
| + |
| +bool NetworkList::GetItem(size_t index, |
| + std::string* canonical_name, |
| + PP_NetAddress_Private* address) const { |
| + if (index >= GetSize()) |
| + return false; |
| + |
| + if (canonical_name) |
| + *canonical_name = canonical_name_list_[index]; |
| + if (address) |
| + memmove(address, &address_list_[index], sizeof(*address)); |
|
yzshen1
2012/02/28 08:29:00
You could assign directly.
ygorshenin1
2012/02/28 12:09:47
Done.
|
| + return true; |
| +} |
| + |
| +} // namespace ppapi |