DnsProxyListener.h revision 4e248e5a7a542067fd3f0467680eef2f92b1e195
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;
574e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        SocketClient* mClient;  // not owned
584e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        char* mHost;    // owned
594e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        char* mService; // owned
604e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick        struct addrinfo* mHints;  // owned
614e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick    };
624e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick};
634e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick
644e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#endif
65