14e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick/* 24e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * Copyright (C) 2010 The Android Open Source Project 34e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * 44e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * Licensed under the Apache License, Version 2.0 (the "License"); 54e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * you may not use this file except in compliance with the License. 64e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * You may obtain a copy of the License at 74e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * 84e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * http://www.apache.org/licenses/LICENSE-2.0 94e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * 104e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * Unless required by applicable law or agreed to in writing, software 114e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * distributed under the License is distributed on an "AS IS" BASIS, 124e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * See the License for the specific language governing permissions and 144e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick * limitations under the License. 154e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick */ 164e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 174e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#ifndef _DNSPROXYLISTENER_H__ 184e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#define _DNSPROXYLISTENER_H__ 194e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 204e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#include <sysutils/FrameworkListener.h> 214e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 224e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#include "NetdCommand.h" 234e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 244e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickclass DnsProxyListener : public FrameworkListener { 254e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickpublic: 264e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick DnsProxyListener(); 274e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick virtual ~DnsProxyListener() {} 284e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 294e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickprivate: 304e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick class GetAddrInfoCmd : public NetdCommand { 314e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick public: 324e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick GetAddrInfoCmd(); 334e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick virtual ~GetAddrInfoCmd() {} 344e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick int runCommand(SocketClient *c, int argc, char** argv); 354e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick }; 364e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 374e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick class GetAddrInfoHandler { 384e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick public: 394e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick // Note: All of host, service, and hints may be NULL 404e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick GetAddrInfoHandler(SocketClient *c, 414e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* host, 424e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* service, 434e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick struct addrinfo* hints) 444e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick : mClient(c), 454e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick mHost(host), 464e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick mService(service), 474e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick mHints(hints) {} 484e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick ~GetAddrInfoHandler(); 494e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 504e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick static void* threadStart(void* handler); 514e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick void start(); 524e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 534e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick private: 544e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick void run(); 5534ffd85aed3838d53bd1136c751a7825de1940e0Brad Fitzpatrick SocketClient* mClient; // ref counted 564e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* mHost; // owned 574e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* mService; // owned 584e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick struct addrinfo* mHints; // owned 594e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick }; 601dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 611dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk /* ------ gethostbyaddr ------*/ 621dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk class GetHostByAddrCmd : public NetdCommand { 631dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk public: 641dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk GetHostByAddrCmd(); 651dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk virtual ~GetHostByAddrCmd() {} 661dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk int runCommand(SocketClient *c, int argc, char** argv); 671dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk }; 681dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 691dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk class GetHostByAddrHandler { 701dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk public: 711dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk GetHostByAddrHandler(SocketClient *c, 720475ae98cd8f45de815d67d1966edaf5997be9a9Brian Carlstrom void* address, 731dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk int addressLen, 741dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk int addressFamily) 751dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk : mClient(c), 761dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk mAddress(address), 771dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk mAddressLen(addressLen), 781dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk mAddressFamily(addressFamily) {} 791dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk ~GetHostByAddrHandler(); 801dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 811dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk static void* threadStart(void* handler); 821dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk void start(); 831dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 841dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk private: 851dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk void run(); 8634ffd85aed3838d53bd1136c751a7825de1940e0Brad Fitzpatrick SocketClient* mClient; // ref counted 870475ae98cd8f45de815d67d1966edaf5997be9a9Brian Carlstrom void* mAddress; // address to lookup; owned 881dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk int mAddressLen; // length of address to look up 891dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk int mAddressFamily; // address family 901dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk }; 914e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick}; 924e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 934e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#endif 94