| // Copyright 2015 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PSYCHE_PSYCHED_GERM_CONNECTION_H_ |
| #define PSYCHE_PSYCHED_GERM_CONNECTION_H_ |
| |
| #include <base/macros.h> |
| |
| #include "psyche/proto_bindings/soma_container_spec.pb.h" |
| #include "psyche/psyched/service.h" |
| #include "psyche/psyched/service_observer.h" |
| |
| namespace germ { |
| class IGerm; |
| } // namespace germ |
| |
| namespace psyche { |
| |
| // Used to communicate with germd to launch and terminate cells. |
| class GermConnection : public ServiceObserver { |
| public: |
| enum class Result { |
| // The request was successful. |
| SUCCESS, |
| // psyched doesn't have an active binder connection to germd. |
| NO_CONNECTION, |
| // The request resulted in a binder-level error. |
| RPC_ERROR, |
| // germd responded with a failure status. |
| FAILED_REQUEST, |
| }; |
| |
| // Returns a human-readable translation of |result|. |
| static const char* ResultToString(Result result); |
| |
| GermConnection(); |
| ~GermConnection() override; |
| |
| // Sets the proxy that should be used for communication with germd. |
| void SetProxy(std::unique_ptr<protobinder::BinderProxy> proxy); |
| |
| // Makes a request to germ to launch a cell. Sets |pid| to the PID of the |
| // germ-provided init process in the launched cell. |
| Result Launch(const soma::ContainerSpec& spec, int* pid); |
| |
| // Makes a request to germ to terminate a cell. |pid| is the germ-provided |
| // init process in the cell. |
| Result Terminate(int pid); |
| |
| // ServiceObserver: |
| void OnServiceProxyChange(ServiceInterface* service) override; |
| |
| private: |
| Service service_; |
| std::unique_ptr<germ::IGerm> interface_; |
| |
| DISALLOW_COPY_AND_ASSIGN(GermConnection); |
| }; |
| |
| } // namespace psyche |
| |
| #endif // PSYCHE_PSYCHED_GERM_CONNECTION_H_ |