15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A representation of an SRPC connection.  These can be either to the
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// service runtime or to untrusted NaCl threads.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_CLIENT_H_
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_CLIENT_H_
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string>
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/nacl_macros.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/shared/srpc/nacl_srpc.h"
18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ppapi/native_client/src/trusted/plugin/utility.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace nacl {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DescWrapper;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace nacl
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace plugin {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ErrorInfo;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MethodInfo;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Plugin;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SrpcParams;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  SrpcClient represents an SRPC connection to a client.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SrpcClient {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Factory method for creating SrpcClients.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static SrpcClient* New(nacl::DescWrapper* wrapper);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  Init is passed a DescWrapper.  The SrpcClient performs service
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  discovery and provides the interface for future rpcs.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Init(nacl::DescWrapper* socket);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  The destructor closes the connection to sel_ldr.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~SrpcClient();
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  Test whether the SRPC service has a given method.
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool HasMethod(const std::string& method_name);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //  Invoke an SRPC method.
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool Invoke(const std::string& method_name, SrpcParams* params);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get the error status from that last method invocation
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClSrpcError GetLastError() { return last_error_; }
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool InitParams(const std::string& method_name, SrpcParams* params);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Attach a service for reverse-direction (from .nexe) RPCs.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AttachService(NaClSrpcService* service, void* instance_data);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NACL_DISALLOW_COPY_AND_ASSIGN(SrpcClient);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SrpcClient();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetMethods();
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef std::map<std::string, MethodInfo*> Methods;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Methods methods_;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClSrpcChannel srpc_channel_;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool srpc_channel_initialised_;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClSrpcError last_error_;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace plugin
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_CLIENT_H_
69