// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROMEOS_BINDER_TRANSACTION_DATA_READER_H_ #define CHROMEOS_BINDER_TRANSACTION_DATA_READER_H_ #include #include #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/strings/string16.h" #include "chromeos/binder/buffer_reader.h" #include "chromeos/chromeos_export.h" namespace binder { class CommandBroker; class Object; class TransactionData; // Reads contents of a TransactionData. // Use this class to get parameters of incoming transactions, or to get values // from transaction replies. class CHROMEOS_EXPORT TransactionDataReader { public: explicit TransactionDataReader(const TransactionData& data); ~TransactionDataReader(); // Returns true when there is some data to read. bool HasMoreData() const; // Reads the specified number of bytes with appropriate padding. // Returns true on success. bool ReadData(void* buf, size_t n); // Reads an int32_t value. Returns true on success. bool ReadInt32(int32_t* value); // Reads an uint32_t value. Returns true on success. bool ReadUint32(uint32_t* value); // Reads an int64_t value. Returns true on success. bool ReadInt64(int64_t* value); // Reads an uint64_t value. Returns true on success. bool ReadUint64(uint64_t* value); // Reads a float value. Returns true on success. bool ReadFloat(float* value); // Reads a double value. Returns true on success. bool ReadDouble(double* value); // Reads a null-terminated C string. bool ReadCString(const char** value); // Reads a string. bool ReadString(std::string* value); // Reads a UTF-16 string. bool ReadString16(base::string16* value); // Reads an object. Returns null on failure. // |command_broker| will be used for object ref-count operations. scoped_refptr ReadObject(CommandBroker* command_broker); // Reads a file descriptor. // The file descriptor is owned by the TransactionData, and it will be closed // when the TransactionData gets destroyed. You should duplicate the FD (e.g. // by calling dup()) to keep owning it. bool ReadFileDescriptor(int* fd); private: const TransactionData& data_; BufferReader reader_; DISALLOW_COPY_AND_ASSIGN(TransactionDataReader); }; } // namespace binder #endif // CHROMEOS_BINDER_TRANSACTION_DATA_READER_H_