softwarecontainer  0.18.0-739e8d7 2017-05-04
dbusgatewayinstance.h
1 /*
2  * Copyright (C) 2016-2017 Pelagicore AB
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
9  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
10  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
11  * BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
12  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
13  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
14  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
15  * SOFTWARE.
16  *
17  * For further information see LICENSE
18  */
19 
20 #pragma once
21 
22 #include "gateway/gateway.h"
23 
24 namespace softwarecontainer {
25 
33  public Gateway
34 {
35  LOG_DECLARE_CLASS_CONTEXT("DBSI", "DBus gateway instance");
36 
37 public:
38  enum ProxyType { SessionProxy, SystemProxy };
39 
40  static constexpr const char *ID = "dbus-bus-instance";
41 
42  static constexpr const char *SESSION_CONFIG = "dbus-gateway-config-session";
43  static constexpr const char *SYSTEM_CONFIG = "dbus-gateway-config-system";
44 
50  DBusGatewayInstance(ProxyType type,
51  const std::string &gatewayDir,
52  std::shared_ptr<ContainerAbstractInterface> container);
53  virtual ~DBusGatewayInstance();
54 
55  virtual bool readConfigElement(const json_t *element) override;
56 
74  virtual bool activateGateway();
75 
88  virtual bool teardownGateway() override;
89 
90 private:
91 
92  // JSON stuff. These are members to allow continous appends to the config
93  json_t *m_entireConfig;
94  json_t *m_busConfig;
95  const char* typeStr;
96 
97  std::string socketName();
98  bool isSocketCreated() const;
99 
100  // Socket used for exposing D-Bus in container
101  std::string m_socket;
102 
103  // Session or system, depending on the type of gateway being started
104  ProxyType m_type;
105 
106  // pid of dbus-proxy instance
107  pid_t m_pid = INVALID_PID;
108 
109  // STDIN for dbus-proxy instance
110  int m_proxyStdin = INVALID_FD;
111 
112  virtual bool startDBusProxy(const std::vector<std::string> &commandVec, const std::vector<std::string> &envVec);
113 
125  virtual bool testDBusConnection(const std::string &config);
126 };
127 
128 } // namespace softwarecontainer
virtual bool readConfigElement(const json_t *element) override
Gateway specific parsing of config elements.
virtual bool teardownGateway() override
Implements Gateway::teardownGateway.
DBus Gateway takes care of spawning and killing the DBus proxies.
Gateway base class for SoftwareContainer.
Definition: gateway.h:61
Developers guide to adding a config item:
DBusGatewayInstance(ProxyType type, const std::string &gatewayDir, std::shared_ptr< ContainerAbstractInterface > container)
Spawn the proxy and use the supplied path for the socket.
virtual bool activateGateway()
Implements Gateway::activateGateway.