1bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// found in the LICENSE file.
4bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
5bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#ifndef LIBRARIES_NACL_IO_HOST_RESOLVER_H_
6bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#define LIBRARIES_NACL_IO_HOST_RESOLVER_H_
7bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "nacl_io/ossocket.h"
9bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "nacl_io/pepper_interface.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sdk_util/simple_lock.h"
11bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
12bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#ifdef PROVIDES_SOCKET_API
13bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochnamespace nacl_io {
15bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass HostResolver {
17bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch public:
18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  HostResolver();
19bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  ~HostResolver();
20bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
21bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  void Init(PepperInterface* ppapi);
22bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void freeaddrinfo(struct addrinfo* res);
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int getnameinfo(const struct sockaddr *sa,
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  socklen_t salen,
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  char *host,
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  size_t hostlen,
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  char *serv,
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  size_t servlen,
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                  int flags);
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  int getaddrinfo(const char* node,
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                  const char* service,
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                  const struct addrinfo* hints,
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                  struct addrinfo** res);
35bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  struct hostent* gethostbyname(const char* name);
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
37bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch private:
38bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  void hostent_initialize();
39bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  void hostent_cleanup();
40bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
41bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  struct hostent hostent_;
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PepperInterface* ppapi_;
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sdk_util::SimpleLock gethostbyname_lock_;
44bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch};
45bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
46bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}  // namespace nacl_io
47bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
48bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif  // PROVIDES_SOCKET_API
49bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#endif  // LIBRARIES_NACL_IO_HOST_RESOLVER_H_
50