1/*
2 * Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7// A representation of an SRPC connection.  These can be either to the
8// service runtime or to untrusted NaCl threads.
9
10#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_CLIENT_H_
11#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_CLIENT_H_
12
13#include <map>
14#include "native_client/src/include/nacl_macros.h"
15#include "native_client/src/include/nacl_string.h"
16#include "native_client/src/shared/srpc/nacl_srpc.h"
17#include "ppapi/native_client/src/trusted/plugin/utility.h"
18
19namespace nacl {
20class DescWrapper;
21}  // namespace nacl
22
23namespace plugin {
24
25class ErrorInfo;
26class MethodInfo;
27class Plugin;
28class SrpcParams;
29
30//  SrpcClient represents an SRPC connection to a client.
31class SrpcClient {
32 public:
33  // Factory method for creating SrpcClients.
34  static SrpcClient* New(nacl::DescWrapper* wrapper);
35
36  //  Init is passed a DescWrapper.  The SrpcClient performs service
37  //  discovery and provides the interface for future rpcs.
38  bool Init(nacl::DescWrapper* socket);
39
40  //  The destructor closes the connection to sel_ldr.
41  ~SrpcClient();
42
43  //  Test whether the SRPC service has a given method.
44  bool HasMethod(const nacl::string& method_name);
45  //  Invoke an SRPC method.
46  bool Invoke(const nacl::string& method_name, SrpcParams* params);
47  // Get the error status from that last method invocation
48  NaClSrpcError GetLastError() { return last_error_; }
49  bool InitParams(const nacl::string& method_name, SrpcParams* params);
50
51  // Attach a service for reverse-direction (from .nexe) RPCs.
52  void AttachService(NaClSrpcService* service, void* instance_data);
53
54 private:
55  NACL_DISALLOW_COPY_AND_ASSIGN(SrpcClient);
56  SrpcClient();
57  void GetMethods();
58  typedef std::map<nacl::string, MethodInfo*> Methods;
59  Methods methods_;
60  NaClSrpcChannel srpc_channel_;
61  bool srpc_channel_initialised_;
62  NaClSrpcError last_error_;
63};
64
65}  // namespace plugin
66
67#endif  // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_CLIENT_H_
68