1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Parameter types for SRPC Invocation. 6 7#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PARAMS_H 8#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PARAMS_H 9 10#include "native_client/src/include/nacl_macros.h" 11#include "native_client/src/include/portability_string.h" 12#include "native_client/src/shared/srpc/nacl_srpc.h" 13 14namespace plugin { 15 16// A utility class that builds and deletes parameter vectors used in rpcs. 17class SrpcParams { 18 public: 19 SrpcParams() { 20 memset(ins_, 0, sizeof(ins_)); 21 memset(outs_, 0, sizeof(outs_)); 22 } 23 24 SrpcParams(const char* in_types, const char* out_types) { 25 if (!Init(in_types, out_types)) { 26 FreeAll(); 27 } 28 } 29 30 ~SrpcParams() { 31 FreeAll(); 32 } 33 34 bool Init(const char* in_types, const char* out_types); 35 36 NaClSrpcArg** ins() const { return const_cast<NaClSrpcArg**>(ins_); } 37 NaClSrpcArg** outs() const { return const_cast<NaClSrpcArg**>(outs_); } 38 39 private: 40 NACL_DISALLOW_COPY_AND_ASSIGN(SrpcParams); 41 void FreeAll(); 42 // The ins_ and outs_ arrays contain one more element, to hold a NULL pointer 43 // to indicate the end of the list. 44 NaClSrpcArg* ins_[NACL_SRPC_MAX_ARGS + 1]; 45 NaClSrpcArg* outs_[NACL_SRPC_MAX_ARGS + 1]; 46}; 47 48} // namespace plugin 49 50#endif // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PARAMS_H 51