1 /*
2  * Copyright (C) 2014 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 _LOGD_LOG_WHITE_BLACK_LIST_H__
18 #define _LOGD_LOG_WHITE_BLACK_LIST_H__
19 
20 #include <sys/types.h>
21 
22 #include <string.h>
23 #include <list>
24 
25 #include "LogBufferElement.h"
26 
27 // White and Blacklist
28 
29 class Prune {
30     friend class PruneList;
31 
32     const uid_t mUid;
33     const pid_t mPid;
34     int cmp(uid_t uid, pid_t pid) const;
35 
36    public:
37     static const uid_t uid_all = (uid_t)-1;
38     static const pid_t pid_all = (pid_t)-1;
39 
40     Prune(uid_t uid, pid_t pid);
41 
getUid()42     uid_t getUid() const {
43         return mUid;
44     }
getPid()45     pid_t getPid() const {
46         return mPid;
47     }
48 
cmp(LogBufferElement * e)49     int cmp(LogBufferElement* e) const {
50         return cmp(e->getUid(), e->getPid());
51     }
52 
53     std::string format();
54 };
55 
56 typedef std::list<Prune> PruneCollection;
57 
58 class PruneList {
59     PruneCollection mNaughty;
60     PruneCollection mNice;
61     bool mWorstUidEnabled;
62     bool mWorstPidOfSystemEnabled;
63 
64    public:
65     PruneList();
66     ~PruneList();
67 
68     int init(const char* str);
69 
70     bool naughty(LogBufferElement* element);
naughty(void)71     bool naughty(void) {
72         return !mNaughty.empty();
73     }
74     bool nice(LogBufferElement* element);
nice(void)75     bool nice(void) {
76         return !mNice.empty();
77     }
worstUidEnabled()78     bool worstUidEnabled() const {
79         return mWorstUidEnabled;
80     }
worstPidOfSystemEnabled()81     bool worstPidOfSystemEnabled() const {
82         return mWorstPidOfSystemEnabled;
83     }
84 
85     std::string format();
86 };
87 
88 #endif  // _LOGD_LOG_WHITE_BLACK_LIST_H__
89