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" 237dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen 247dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensenclass NetworkController; 254e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 264e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickclass DnsProxyListener : public FrameworkListener { 274e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickpublic: 28f4f6c8de3f091be4b91a5a9d7f14e8882ec6d502Sreeram Ramachandran explicit DnsProxyListener(const NetworkController* netCtrl); 294e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick virtual ~DnsProxyListener() {} 304e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 314e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrickprivate: 32a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak const NetworkController *mNetCtrl; 334e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick class GetAddrInfoCmd : public NetdCommand { 344e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick public: 357dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen GetAddrInfoCmd(const DnsProxyListener* dnsProxyListener); 364e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick virtual ~GetAddrInfoCmd() {} 374e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick int runCommand(SocketClient *c, int argc, char** argv); 38d2617936acc15567fc5111bbdb4dde20845c3cbaChad Brubaker private: 397dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen const DnsProxyListener* mDnsProxyListener; 404e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick }; 414e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 424e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick class GetAddrInfoHandler { 434e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick public: 444e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick // Note: All of host, service, and hints may be NULL 454e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick GetAddrInfoHandler(SocketClient *c, 464e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* host, 474e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* service, 482d4610ec34cc78799a3353638fa05ee53276892aMattias Falk struct addrinfo* hints, 497dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen unsigned netId, 507dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen uint32_t mark); 514e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick ~GetAddrInfoHandler(); 524e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 534e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick static void* threadStart(void* handler); 544e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick void start(); 554e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 564e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick private: 574e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick void run(); 5834ffd85aed3838d53bd1136c751a7825de1940e0Brad Fitzpatrick SocketClient* mClient; // ref counted 594e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* mHost; // owned 604e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick char* mService; // owned 614e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick struct addrinfo* mHints; // owned 62a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak unsigned mNetId; 637dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen uint32_t mMark; 642d4610ec34cc78799a3353638fa05ee53276892aMattias Falk }; 652d4610ec34cc78799a3353638fa05ee53276892aMattias Falk 662d4610ec34cc78799a3353638fa05ee53276892aMattias Falk /* ------ gethostbyname ------*/ 672d4610ec34cc78799a3353638fa05ee53276892aMattias Falk class GetHostByNameCmd : public NetdCommand { 682d4610ec34cc78799a3353638fa05ee53276892aMattias Falk public: 697dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen GetHostByNameCmd(const DnsProxyListener* dnsProxyListener); 702d4610ec34cc78799a3353638fa05ee53276892aMattias Falk virtual ~GetHostByNameCmd() {} 712d4610ec34cc78799a3353638fa05ee53276892aMattias Falk int runCommand(SocketClient *c, int argc, char** argv); 72d2617936acc15567fc5111bbdb4dde20845c3cbaChad Brubaker private: 737dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen const DnsProxyListener* mDnsProxyListener; 742d4610ec34cc78799a3353638fa05ee53276892aMattias Falk }; 752d4610ec34cc78799a3353638fa05ee53276892aMattias Falk 762d4610ec34cc78799a3353638fa05ee53276892aMattias Falk class GetHostByNameHandler { 772d4610ec34cc78799a3353638fa05ee53276892aMattias Falk public: 782d4610ec34cc78799a3353638fa05ee53276892aMattias Falk GetHostByNameHandler(SocketClient *c, 792d4610ec34cc78799a3353638fa05ee53276892aMattias Falk char *name, 80d2617936acc15567fc5111bbdb4dde20845c3cbaChad Brubaker int af, 817dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen unsigned netId, 827dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen uint32_t mark); 832d4610ec34cc78799a3353638fa05ee53276892aMattias Falk ~GetHostByNameHandler(); 842d4610ec34cc78799a3353638fa05ee53276892aMattias Falk static void* threadStart(void* handler); 852d4610ec34cc78799a3353638fa05ee53276892aMattias Falk void start(); 862d4610ec34cc78799a3353638fa05ee53276892aMattias Falk private: 872d4610ec34cc78799a3353638fa05ee53276892aMattias Falk void run(); 882d4610ec34cc78799a3353638fa05ee53276892aMattias Falk SocketClient* mClient; //ref counted 892d4610ec34cc78799a3353638fa05ee53276892aMattias Falk char* mName; // owned 902d4610ec34cc78799a3353638fa05ee53276892aMattias Falk int mAf; 91a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak unsigned mNetId; 927dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen uint32_t mMark; 934e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick }; 941dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 951dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk /* ------ gethostbyaddr ------*/ 961dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk class GetHostByAddrCmd : public NetdCommand { 971dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk public: 987dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen GetHostByAddrCmd(const DnsProxyListener* dnsProxyListener); 991dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk virtual ~GetHostByAddrCmd() {} 1001dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk int runCommand(SocketClient *c, int argc, char** argv); 101d2617936acc15567fc5111bbdb4dde20845c3cbaChad Brubaker private: 1027dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen const DnsProxyListener* mDnsProxyListener; 1031dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk }; 1041dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 1051dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk class GetHostByAddrHandler { 1061dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk public: 1071dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk GetHostByAddrHandler(SocketClient *c, 1080475ae98cd8f45de815d67d1966edaf5997be9a9Brian Carlstrom void* address, 109a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak int addressLen, 110a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak int addressFamily, 1117dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen unsigned netId, 1127dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen uint32_t mark); 1131dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk ~GetHostByAddrHandler(); 1141dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 1151dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk static void* threadStart(void* handler); 1161dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk void start(); 1171dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk 1181dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk private: 1191dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk void run(); 12034ffd85aed3838d53bd1136c751a7825de1940e0Brad Fitzpatrick SocketClient* mClient; // ref counted 1210475ae98cd8f45de815d67d1966edaf5997be9a9Brian Carlstrom void* mAddress; // address to lookup; owned 122a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak int mAddressLen; // length of address to look up 123a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak int mAddressFamily; // address family 124a0efaece8c05370f201efe099a537ceb014c6fdfSzymon Jakubczak unsigned mNetId; 1257dd69a1b0b95e67c8b939884476f2cf888026eb7Paul Jensen uint32_t mMark; 1261dbd6cf148ea3fab57ec0644c336e94c78a488beMattias Falk }; 1274e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick}; 1284e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick 1294e248e5a7a542067fd3f0467680eef2f92b1e195Brad Fitzpatrick#endif 130