DnsProxyListener.h revision 34ffd85aed3838d53bd1136c751a7825de1940e0
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 <pthread.h>
214e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#include <sysutils/FrameworkListener.h>
224e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
234e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#include "NetdCommand.h"
244e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
254e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickclass DnsProxyListener : public FrameworkListener {
264e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickpublic:
274e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    DnsProxyListener();
284e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    virtual ~DnsProxyListener() {}
294e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
304e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickprivate:
314e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    class GetAddrInfoCmd : public NetdCommand {
324e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    public:
334e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        GetAddrInfoCmd();
344e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        virtual ~GetAddrInfoCmd() {}
354e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        int runCommand(SocketClient *c, int argc, char** argv);
364e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    };
374e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
384e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    class GetAddrInfoHandler {
394e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    public:
404e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        // Note: All of host, service, and hints may be NULL
414e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        GetAddrInfoHandler(SocketClient *c,
424e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick                           char* host,
434e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick                           char* service,
444e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick                           struct addrinfo* hints)
454e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick            : mClient(c),
464e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick              mHost(host),
474e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick              mService(service),
484e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick              mHints(hints) {}
494e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        ~GetAddrInfoHandler();
504e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
514e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        static void* threadStart(void* handler);
524e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        void start();
534e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
544e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    private:
554e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        void run();
564e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        pthread_t mThread;
5734ffd85aed3838d53bd1136c751a7825de1940e0Brad Fitzpatrick        SocketClient* mClient;  // ref counted
584e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        char* mHost;    // owned
594e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        char* mService; // owned
604e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        struct addrinfo* mHints;  // owned
614e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    };
621dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk
631dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    /* ------ gethostbyaddr ------*/
641dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    class GetHostByAddrCmd : public NetdCommand {
651dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    public:
661dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        GetHostByAddrCmd();
671dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        virtual ~GetHostByAddrCmd() {}
681dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        int runCommand(SocketClient *c, int argc, char** argv);
691dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    };
701dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk
711dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    class GetHostByAddrHandler {
721dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    public:
731dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        GetHostByAddrHandler(SocketClient *c,
741dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk                            char* address,
751dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk                            int   addressLen,
761dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk                            int   addressFamily)
771dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk            : mClient(c),
781dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk              mAddress(address),
791dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk              mAddressLen(addressLen),
801dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk              mAddressFamily(addressFamily) {}
811dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        ~GetHostByAddrHandler();
821dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk
831dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        static void* threadStart(void* handler);
841dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        void start();
851dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk
861dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    private:
871dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        void run();
881dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        pthread_t mThread;
8934ffd85aed3838d53bd1136c751a7825de1940e0Brad Fitzpatrick        SocketClient* mClient;  // ref counted
9034ffd85aed3838d53bd1136c751a7825de1940e0Brad Fitzpatrick        char* mAddress;    // address to lookup; owned
911dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        int   mAddressLen; // length of address to look up
921dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk        int   mAddressFamily;  // address family
931dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk    };
944e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick};
954e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
964e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#endif
97