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