• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _DNSPROXYLISTENER_H__
18 #define _DNSPROXYLISTENER_H__
19 
20 #include <sysutils/FrameworkListener.h>
21 
22 #include "NetdCommand.h"
23 #include "UidMarkMap.h"
24 
25 class DnsProxyListener : public FrameworkListener {
26 public:
27     DnsProxyListener(UidMarkMap *map);
~DnsProxyListener()28     virtual ~DnsProxyListener() {}
29 
30 private:
31     UidMarkMap *mUidMarkMap;
32     class GetAddrInfoCmd : public NetdCommand {
33     public:
34         GetAddrInfoCmd(UidMarkMap *uidMarkMap);
~GetAddrInfoCmd()35         virtual ~GetAddrInfoCmd() {}
36         int runCommand(SocketClient *c, int argc, char** argv);
37     private:
38         UidMarkMap *mUidMarkMap;
39     };
40 
41     class GetAddrInfoHandler {
42     public:
43         // Note: All of host, service, and hints may be NULL
44         GetAddrInfoHandler(SocketClient *c,
45                            char* host,
46                            char* service,
47                            struct addrinfo* hints,
48                            char* iface,
49                            pid_t pid,
50                            uid_t uid,
51                            int mark);
52         ~GetAddrInfoHandler();
53 
54         static void* threadStart(void* handler);
55         void start();
56 
57     private:
58         void run();
59         SocketClient* mClient;  // ref counted
60         char* mHost;    // owned
61         char* mService; // owned
62         struct addrinfo* mHints;  // owned
63         char* mIface; // owned
64         pid_t mPid;
65         uid_t mUid;
66         int mMark;
67     };
68 
69     /* ------ gethostbyname ------*/
70     class GetHostByNameCmd : public NetdCommand {
71     public:
72         GetHostByNameCmd(UidMarkMap *uidMarkMap);
~GetHostByNameCmd()73         virtual ~GetHostByNameCmd() {}
74         int runCommand(SocketClient *c, int argc, char** argv);
75     private:
76         UidMarkMap *mUidMarkMap;
77     };
78 
79     class GetHostByNameHandler {
80     public:
81         GetHostByNameHandler(SocketClient *c,
82                             pid_t pid,
83                             uid_t uid,
84                             char *iface,
85                             char *name,
86                             int af,
87                             int mark);
88         ~GetHostByNameHandler();
89         static void* threadStart(void* handler);
90         void start();
91     private:
92         void run();
93         SocketClient* mClient; //ref counted
94         pid_t mPid;
95         uid_t mUid;
96         char* mIface; // owned
97         char* mName; // owned
98         int mAf;
99         int mMark;
100     };
101 
102     /* ------ gethostbyaddr ------*/
103     class GetHostByAddrCmd : public NetdCommand {
104     public:
105         GetHostByAddrCmd(UidMarkMap *uidMarkMap);
~GetHostByAddrCmd()106         virtual ~GetHostByAddrCmd() {}
107         int runCommand(SocketClient *c, int argc, char** argv);
108     private:
109         UidMarkMap *mUidMarkMap;
110     };
111 
112     class GetHostByAddrHandler {
113     public:
114         GetHostByAddrHandler(SocketClient *c,
115                             void* address,
116                             int   addressLen,
117                             int   addressFamily,
118                             char* iface,
119                             pid_t pid,
120                             uid_t uid,
121                             int mark);
122         ~GetHostByAddrHandler();
123 
124         static void* threadStart(void* handler);
125         void start();
126 
127     private:
128         void run();
129         SocketClient* mClient;  // ref counted
130         void* mAddress;    // address to lookup; owned
131         int   mAddressLen; // length of address to look up
132         int   mAddressFamily;  // address family
133         char* mIface; // owned
134         pid_t mPid;
135         uid_t mUid;
136         int   mMark;
137     };
138 };
139 
140 #endif
141