blob: 197866c8c895f53d5db1d08f63cd559e0ded18e5 [file] [log] [blame]
// Copyright 2014 The Chromium OS 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 REQUEST_H_
#define REQUEST_H_
#include "ppapi/cpp/var_array_buffer.h"
#include "ppapi/cpp/var_dictionary.h"
// Defines the protocol messsage used to communicate between JS and NaCL.
// This should be consistent with js/request.h.
namespace request {
// Defines requests keys. Every key should be unique and the same as the keys
// on the JS side.
namespace key {
// Mandatory keys for all unpacking requests.
const char kOperation[] = "operation"; // Should be a request::Operation.
const char kFileSystemId[] = "file_system_id"; // Should be a string.
const char kRequestId[] = "request_id"; // Should be a string.
// Optional keys unique to unpacking operations.
const char kMetadata[] = "metadata"; // Should be a pp:VarDictionary.
const char kArchiveSize[] =
"archive_size"; // Should be a string as int64_t is not support by pp::Var.
const char kIndex[] = "index"; // Should be a string as int64_t is not
// supported by pp::Var.
const char kEncoding[] = "encoding"; // Should be a string.
const char kOpenRequestId[] = "open_request_id"; // Should be a string, just
// like kRequestId.
const char kReadFileData[] = "read_file_data"; // Should be a
// pp::VarArrayBuffer.
const char kHasMoreData[] = "has_more_data"; // Should be a bool.
const char kPassphrase[] = "passphrase"; // Should be a string.
// Mandatory keys for all packing requests.
const char kCompressorId[] = "compressor_id"; // Should be an int.
// Optional keys unique to packing operations.
const char kEntryId[] = "entry_id"; // Should be an int.
const char kPathname[] = "pathname"; // Should be a string.
const char kFileSize[] = "file_size"; // Should be a string.
const char kIsDirectory[] = "is_directory"; // Should be a bool.
const char kModificationTime[] = "modification_time"; // Should be a string
// (mm/dd/yy h:m:s).
const char kHasError[] = "has_error"; // Should be a bool.
// Optional keys used for both packing and unpacking operations.
const char kError[] = "error"; // Should be a string.
const char kChunkBuffer[] = "chunk_buffer"; // Should be a pp::VarArrayBuffer.
const char kOffset[] = "offset"; // Should be a string as int64_t is not
// supported by pp::Var.
const char kLength[] = "length"; // Should be a string as int64_t is not
// supported by pp::Var.
const char kSrcFile[] = "src_file"; // Should be a string.
const char kSrcLine[] = "src_line"; // Should be a string.
const char kSrcFunc[] = "src_func"; // Should be a string.
const char kMessage[] = "message"; // Should be a string.
} // namespace key
// Defines request operations. These operations should be the same as the
// operations on the JavaScript side.
enum Operation {
READ_METADATA = 0,
READ_METADATA_DONE = 1,
READ_CHUNK = 2,
READ_CHUNK_DONE = 3,
READ_CHUNK_ERROR = 4,
READ_PASSPHRASE = 5,
READ_PASSPHRASE_DONE = 6,
READ_PASSPHRASE_ERROR = 7,
CLOSE_VOLUME = 8,
OPEN_FILE = 9,
OPEN_FILE_DONE = 10,
CLOSE_FILE = 11,
CLOSE_FILE_DONE = 12,
READ_FILE = 13,
READ_FILE_DONE = 14,
CONSOLE_LOG = 15,
CONSOLE_DEBUG = 16,
CREATE_ARCHIVE = 17,
CREATE_ARCHIVE_DONE = 18,
ADD_TO_ARCHIVE = 19,
ADD_TO_ARCHIVE_DONE = 20,
READ_FILE_CHUNK = 21,
READ_FILE_CHUNK_DONE = 22,
WRITE_CHUNK = 23,
WRITE_CHUNK_DONE = 24,
CLOSE_ARCHIVE = 25,
CLOSE_ARCHIVE_DONE = 26,
FILE_SYSTEM_ERROR = -1, // Errors specific to a file system.
COMPRESSOR_ERROR = -2 // Errors specific to a compressor.
};
// Operations greater than or equal to this value are for packing.
const int MINIMUM_PACK_REQUEST_VALUE = 17;
// Return true if the given operation is related to packing.
bool IsPackRequest(int operation);
// Creates a response to READ_METADATA request.
pp::VarDictionary CreateReadMetadataDoneResponse(
const std::string& file_system_id,
const std::string& request_id,
const pp::VarDictionary& metadata);
// Creates a request for a file chunk from JavaScript.
pp::VarDictionary CreateReadChunkRequest(const std::string& file_system_id,
const std::string& request_id,
int64_t offset,
int64_t length);
// Creates a request for a passphrase for a file from JavaScript.
pp::VarDictionary CreateReadPassphraseRequest(const std::string& file_system_id,
const std::string& request_id);
// Creates a response to OPEN_FILE request.
pp::VarDictionary CreateOpenFileDoneResponse(const std::string& file_system_id,
const std::string& request_id);
// Creates a response to CLOSE_FILE request.
pp::VarDictionary CreateCloseFileDoneResponse(
const std::string& file_system_id,
const std::string& request_id,
const std::string& open_request_id);
// Creates a response to READ_FILE request.
pp::VarDictionary CreateReadFileDoneResponse(
const std::string& file_system_id,
const std::string& request_id,
const pp::VarArrayBuffer& array_buffer,
bool has_more_data);
pp::VarDictionary CreateCreateArchiveDoneResponse(int compressor_id);
pp::VarDictionary CreateReadFileChunkRequest(int compressor_id,
int64_t length);
pp::VarDictionary CreateWriteChunkRequest(int compressor_id,
const pp::VarArrayBuffer& array_buffer,
int64_t length);
pp::VarDictionary CreateAddToArchiveDoneResponse(int compressor_id);
pp::VarDictionary CreateCloseArchiveDoneResponse(int compressor_id);
// Creates a file system error.
pp::VarDictionary CreateFileSystemError(const std::string& file_system_id,
const std::string& request_id,
const std::string& error);
pp::VarDictionary CreateConsoleLog(
const std::string& file_system_id,
const std::string& request_id,
const std::string& src_file,
int src_line,
const std::string& src_func,
const std::string& message);
// Creates a compressor error.
pp::VarDictionary CreateCompressorError(int compressor_id,
const std::string& error);
// Obtains a int64_t from a string value inside dictionary based on a
// request::Key.
int64_t GetInt64FromString(const pp::VarDictionary& dictionary,
const std::string& request_key);
} // namespace request
#endif // REQUEST_H_