15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Parameter types for SRPC Invocation.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PARAMS_H
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PARAMS_H
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/nacl_macros.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/include/portability_string.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "native_client/src/shared/srpc/nacl_srpc.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace plugin {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A utility class that builds and deletes parameter vectors used in rpcs.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SrpcParams {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SrpcParams() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    memset(ins_, 0, sizeof(ins_));
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    memset(outs_, 0, sizeof(outs_));
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SrpcParams(const char* in_types, const char* out_types) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!Init(in_types, out_types)) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FreeAll();
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~SrpcParams() {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FreeAll();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Init(const char* in_types, const char* out_types);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClSrpcArg** ins() const { return const_cast<NaClSrpcArg**>(ins_); }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClSrpcArg** outs() const { return const_cast<NaClSrpcArg**>(outs_); }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NACL_DISALLOW_COPY_AND_ASSIGN(SrpcParams);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FreeAll();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The ins_ and outs_ arrays contain one more element, to hold a NULL pointer
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to indicate the end of the list.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClSrpcArg* ins_[NACL_SRPC_MAX_ARGS + 1];
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NaClSrpcArg* outs_[NACL_SRPC_MAX_ARGS + 1];
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace plugin
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NATIVE_CLIENT_SRC_TRUSTED_PLUGIN_SRPC_PARAMS_H
51