1 /*
2  * Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef STANDALONE_SERVICE_CONTEXT_H
8 #define STANDALONE_SERVICE_CONTEXT_H
9 
10 #include <cstddef>
11 #include <service_locator.h>
12 #include "rpc/common/caller/rpc_caller_session.h"
13 #include "rpc/common/endpoint/rpc_service_interface.h"
14 #include "rpc/direct/direct_caller.h"
15 #include <string>
16 
17 class standalone_service_context
18 {
19 public:
20     standalone_service_context(const char *sn);
21     standalone_service_context(const char *sn, size_t rpc_buffer_size_override);
22     virtual ~standalone_service_context();
23 
24     void init();
25     void deinit();
26 
27     struct rpc_caller_session *open();
28     void close(struct rpc_caller_session *session);
29 
30     const std::string &get_service_name() const;
31     struct service_context *get_service_context();
32 
33 protected:
34     void set_rpc_interface(rpc_service_interface *iface);
35 
do_init()36     virtual void do_init() {}
do_deinit()37     virtual void do_deinit() {}
38 
39 private:
40     std::string m_sn;
41     int m_ref_count;
42     size_t m_rpc_buffer_size_override;
43     struct service_context m_service_context;
44     struct rpc_service_interface *m_rpc_interface;
45 };
46 
47 #endif /* STANDALONE_SERVICE_CONTEXT_H */
48