Commit summary:
[platform/core/security/suspicious-activity-monitor.git] / communication / inc / securityoptions.h
1 /**
2  * Samsung Ukraine R&D Center (SRK under a contract between)
3  * LLC "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
4  * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License
17  */
18 /**
19  * @file   securityoptions.h
20  * @brief  Container for the CURL options.
21  * @date   Created May 10, 2017
22  * @author Mail to: <A HREF="mailto:d.lomtev@samsung.com">Dmytro Lomtev, d.lomtev@samsung.com</A>
23  */
24 #ifndef SECURITYOPTIONS_H
25 #define SECURITYOPTIONS_H
26
27 #include <curl/curl.h>
28 #include <functional>
29 #include <list>
30
31 namespace communication
32 {
33
34 /**
35  * @brief The SecurityOptions class container for CURL options
36  */
37 class SecurityOptions final : public std::list<std::function<void(CURL*)>>
38 {
39 public:
40     /**
41      * @brief   Adds option.
42      * @param   opt curl option
43      * @param   val option value
44      */
45     template<typename T>
46     void add(CURLoption opt, T val)
47     {
48         auto wrap = [opt, val](CURL* handle) {
49             curl_easy_setopt(handle, opt, val);
50         };
51
52         push_back(wrap);
53     }
54
55     /**
56      * @brief Applies options for supplied CURL handle.
57      * @param handle pointer to the CURL instance.
58      */
59     void apply(CURL* handle)
60     {
61         for (auto& opt: *this) {
62             opt(handle);
63         }
64     }
65
66     /**
67      * @brief Returns reference to the SecurityOptions instance.
68      * @return reference to the SecurityOptions instance.
69      */
70     static SecurityOptions& instance()
71     {
72         static SecurityOptions inst;
73         return inst;
74     }
75 private:
76     SecurityOptions()
77     {
78     }
79 };
80
81 } // namespace communication
82
83
84 #endif // SECURITYOPTIONS_H