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 <string>
     15 
     16 #include "native_client/src/include/nacl_macros.h"
     17 #include "native_client/src/shared/srpc/nacl_srpc.h"
     18 #include "ppapi/native_client/src/trusted/plugin/utility.h"
     19 
     20 namespace nacl {
     21 class DescWrapper;
     22 }  // namespace nacl
     23 
     24 namespace plugin {
     25 
     26 class ErrorInfo;
     27 class MethodInfo;
     28 class Plugin;
     29 class SrpcParams;
     30 
     31 //  SrpcClient represents an SRPC connection to a client.
     32 class SrpcClient {
     33  public:
     34   // Factory method for creating SrpcClients.
     35   static SrpcClient* New(nacl::DescWrapper* wrapper);
     36 
     37   //  Init is passed a DescWrapper.  The SrpcClient performs service
     38   //  discovery and provides the interface for future rpcs.
     39   bool Init(nacl::DescWrapper* socket);
     40 
     41   //  The destructor closes the connection to sel_ldr.
     42   ~SrpcClient();
     43 
     44   //  Test whether the SRPC service has a given method.
     45   bool HasMethod(const std::string& method_name);
     46   //  Invoke an SRPC method.
     47   bool Invoke(const std::string& method_name, SrpcParams* params);
     48   // Get the error status from that last method invocation
     49   NaClSrpcError GetLastError() { return last_error_; }
     50   bool InitParams(const std::string& method_name, SrpcParams* params);
     51 
     52   // Attach a service for reverse-direction (from .nexe) RPCs.
     53   void AttachService(NaClSrpcService* service, void* instance_data);
     54 
     55  private:
     56   NACL_DISALLOW_COPY_AND_ASSIGN(SrpcClient);
     57   SrpcClient();
     58   void GetMethods();
     59   typedef std::map<std::string, MethodInfo*> Methods;
     60   Methods methods_;
     61   NaClSrpcChannel srpc_channel_;
     62   bool srpc_channel_initialised_;
     63   NaClSrpcError last_error_;
     64 };
     65 
     66 }  // namespace plugin
     67 
     68 #endif  // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_CLIENT_H_
     69