Home | History | Annotate | Download | only in plugin
      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 
     19 namespace nacl {
     20 class DescWrapper;
     21 }  // namespace nacl
     22 
     23 namespace plugin {
     24 
     25 class ErrorInfo;
     26 class MethodInfo;
     27 class Plugin;
     28 class SrpcParams;
     29 
     30 //  SrpcClient represents an SRPC connection to a client.
     31 class 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