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