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