17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// From ppb_host_resolver.idl modified Tue Aug 20 08:13:36 2013.
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_completion_callback.h"
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/ppb_host_resolver.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/shared_impl/tracked_callback.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/thunk/enter.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ppapi/thunk/ppapi_thunk_export.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ppapi/thunk/ppb_host_resolver_api.h"
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace ppapi {
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace thunk {
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace {
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)PP_Resource Create(PP_Instance instance) {
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VLOG(4) << "PPB_HostResolver::Create()";
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EnterResourceCreation enter(instance);
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (enter.failed())
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return 0;
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return enter.functions()->CreateHostResolver(instance);
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)PP_Bool IsHostResolver(PP_Resource resource) {
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VLOG(4) << "PPB_HostResolver::IsHostResolver()";
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EnterResource<PPB_HostResolver_API> enter(resource, false);
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return PP_FromBool(enter.succeeded());
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)int32_t Resolve(PP_Resource host_resolver,
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                const char* host,
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                uint16_t port,
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                const struct PP_HostResolver_Hint* hint,
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                struct PP_CompletionCallback callback) {
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VLOG(4) << "PPB_HostResolver::Resolve()";
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EnterResource<PPB_HostResolver_API> enter(host_resolver, callback, true);
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (enter.failed())
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return enter.retval();
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return enter.SetResult(enter.object()->Resolve(host,
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                                 port,
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                                 hint,
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                                 enter.callback()));
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)struct PP_Var GetCanonicalName(PP_Resource host_resolver) {
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VLOG(4) << "PPB_HostResolver::GetCanonicalName()";
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EnterResource<PPB_HostResolver_API> enter(host_resolver, true);
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (enter.failed())
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return PP_MakeUndefined();
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return enter.object()->GetCanonicalName();
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)uint32_t GetNetAddressCount(PP_Resource host_resolver) {
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VLOG(4) << "PPB_HostResolver::GetNetAddressCount()";
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EnterResource<PPB_HostResolver_API> enter(host_resolver, true);
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (enter.failed())
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return 0;
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return enter.object()->GetNetAddressCount();
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)PP_Resource GetNetAddress(PP_Resource host_resolver, uint32_t index) {
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  VLOG(4) << "PPB_HostResolver::GetNetAddress()";
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  EnterResource<PPB_HostResolver_API> enter(host_resolver, true);
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (enter.failed())
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    return 0;
707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return enter.object()->GetNetAddress(index);
717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst PPB_HostResolver_1_0 g_ppb_hostresolver_thunk_1_0 = {
747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  &Create,
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  &IsHostResolver,
767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  &Resolve,
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  &GetCanonicalName,
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  &GetNetAddressCount,
797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  &GetNetAddress
807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace
837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PPAPI_THUNK_EXPORT const PPB_HostResolver_1_0*
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    GetPPB_HostResolver_1_0_Thunk() {
86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return &g_ppb_hostresolver_thunk_1_0;
877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace thunk
907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}  // namespace ppapi
91