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