Add feed utility
[platform/core/security/nice-lad.git] / src / Utils / Feed.h
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
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  * @file        src/Utils/Feed.h
18  * @author      Aleksander Zdyb <a.zdyb@samsung.com>
19  * @version     1.0
20  */
21
22 #ifndef SRC_UTILS_FEED_H
23 #define SRC_UTILS_FEED_H
24
25 #include <cstdint>
26
27 #include <boost/signals2.hpp>
28
29 namespace Utils {
30
31 class Feed {
32 public:
33     Feed(int inputFd, size_t readSize, int signalFd);
34     virtual ~Feed() = default;
35
36     // TODO: Consider using std::function as member, if the application stays single-threaded
37     boost::signals2::signal<void(const char *, std::size_t)> onData;
38     boost::signals2::signal<void(void)> onEod;
39     boost::signals2::signal<void(int)> onSignal;
40     boost::signals2::signal<void(void)> onTimeout;
41
42     void start();
43     void stop();
44
45 private:
46     enum class InputType : int8_t {
47         Error = -1,
48         Timeout = 0,
49         Input,
50         Signal = 127
51     };
52
53     InputType waitForInput();
54
55     bool m_terminate;
56     int m_inputFd;
57     size_t m_readSize;
58     int m_signalFd;
59     bool m_waitForever;
60     int m_maxFd;
61 };
62
63 } /* namespace Utils */
64
65 #endif /* SRC_UTILS_FEED_H */