d9e4217ffe14e20d716ea899a8a9044f9b4479dc
[platform/core/security/vasum.git] / common / libvirt / domain.cpp
1 /*
2  *  Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *  Contact: Lukasz Pawelczyk <l.pawelczyk@partner.samsung.com>
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 /**
20  * @file
21  * @author  Lukasz Pawelczyk (l.pawelczyk@partner.samsung.com)
22  * @brief   Implementation of the class wrapping libvirt domain
23  */
24
25 #include "config.hpp"
26 #include "logger/logger.hpp"
27 #include "libvirt/domain.hpp"
28 #include "libvirt/helpers.hpp"
29 #include "libvirt/exception.hpp"
30
31
32 namespace security_containers {
33 namespace libvirt {
34
35
36 LibvirtDomain::LibvirtDomain(const std::string& configXML)
37     : mCon(LIBVIRT_LXC_ADDRESS), mDom(nullptr)
38 {
39     mDom = virDomainDefineXML(mCon.get(), configXML.c_str());
40
41     if (mDom == nullptr) {
42         LOGE("Error while defining a domain:\n"
43              << libvirtFormatError());
44         throw LibvirtOperationException();
45     }
46 }
47
48 LibvirtDomain::~LibvirtDomain()
49 {
50     if (virDomainUndefine(mDom) < 0) {
51         LOGE("Error while undefining the domain:\n"
52              << libvirtFormatError());
53     }
54
55     if (virDomainFree(mDom) < 0) {
56         LOGE("Error while destroying the domain object:\n"
57              << libvirtFormatError());
58     }
59 }
60
61 virDomainPtr LibvirtDomain::get()
62 {
63     return mDom;
64 }
65
66 LibvirtDomain::operator bool() const
67 {
68     return mDom != nullptr;
69 }
70
71 } // namespace libvirt
72 } // namespace security_containers