From 7d9f9a7ae9f8c730b32366ab7ea8d9b392d10036 Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Fri, 1 Dec 2023 09:30:52 -0800 Subject: [PATCH] [Yunq] Create libyunq and move parsing code to it. --- lib/CMakeLists.txt | 1 + lib/glacier/status/status.h | 44 ++++-- lib/yunq/CMakeLists.txt | 17 +++ lib/yunq/serialize.cpp | 23 +++ lib/yunq/serialize.h | 13 ++ sys/denali/lib/denali/denali.yunq.cpp | 75 +++++----- sys/denali/lib/denali/denali.yunq.h | 19 +-- .../lib/victoriafalls/victoriafalls.yunq.cpp | 94 ++++++------- .../lib/victoriafalls/victoriafalls.yunq.h | 25 ++-- .../lib/voyageurs/voyageurs.yunq.cpp | 37 ++--- sys/voyageurs/lib/voyageurs/voyageurs.yunq.h | 7 +- .../lib/yellowstone/yellowstone.yunq.cpp | 132 +++++++++--------- .../lib/yellowstone/yellowstone.yunq.h | 37 ++--- yunq/CMakeLists.txt | 2 + yunq/message.cpp.jinja | 37 ++--- yunq/message.h.jinja | 7 +- 16 files changed, 310 insertions(+), 260 deletions(-) create mode 100644 lib/yunq/CMakeLists.txt create mode 100644 lib/yunq/serialize.cpp create mode 100644 lib/yunq/serialize.h diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index dd05d07..ce8b01d 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(glacier) add_subdirectory(mammoth) +add_subdirectory(yunq) diff --git a/lib/glacier/status/status.h b/lib/glacier/status/status.h index 790729a..3cd9b6a 100644 --- a/lib/glacier/status/status.h +++ b/lib/glacier/status/status.h @@ -1,7 +1,7 @@ #pragma once -#include "status/error.h" -#include "string/string.h" +#include "glacier/status/error.h" +#include "glacier/string/string.h" namespace glcr { @@ -21,43 +21,57 @@ class Status { ErrorCode code_; String message_; - Status(); + Status() : code_(OK) {} }; -Status InvalidArgument(StringView message) { +inline Status InvalidArgument(StringView message) { return Status(INVALID_ARGUMENT, message); } -Status NotFound(StringView message) { return Status(NOT_FOUND, message); } +inline Status NotFound(StringView message) { + return Status(NOT_FOUND, message); +} -Status PermissionDenied(StringView message) { +inline Status PermissionDenied(StringView message) { return Status(PERMISSION_DENIED, message); } -Status NullPtr(StringView message) { return Status(NULL_PTR, message); } +inline Status NullPtr(StringView message) { return Status(NULL_PTR, message); } -Status Empty(StringView message) { return Status(EMPTY, message); } +inline Status Empty(StringView message) { return Status(EMPTY, message); } -Status AlreadyExists(StringView message) { +inline Status AlreadyExists(StringView message) { return Status(ALREADY_EXISTS, message); } -Status BufferSize(StringView message) { return Status(BUFFER_SIZE, message); } +inline Status BufferSize(StringView message) { + return Status(BUFFER_SIZE, message); +} -Status FailedPrecondition(StringView message) { +inline Status FailedPrecondition(StringView message) { return Status(FAILED_PRECONDITION, message); } -Status Internal(StringView message) { return Status(INTERNAL, message); } +inline Status Internal(StringView message) { return Status(INTERNAL, message); } -Status Unimplemented(StringView message) { +inline Status Unimplemented(StringView message) { return Status(UNIMPLEMENTED, message); } -Status Exhausted(StringView message) { return Status(EXHAUSTED, message); } +inline Status Exhausted(StringView message) { + return Status(EXHAUSTED, message); +} -Status InvalidResponse(StringView message) { +inline Status InvalidResponse(StringView message) { return Status(INVALID_RESPONSE, message); } +#define RETURN_ERROR(expr) \ + { \ + glcr::Status _tmp_err = expr; \ + if (!_tmp_err) { \ + return _tmp_err; \ + } \ + } + } // namespace glcr diff --git a/lib/yunq/CMakeLists.txt b/lib/yunq/CMakeLists.txt new file mode 100644 index 0000000..dea897d --- /dev/null +++ b/lib/yunq/CMakeLists.txt @@ -0,0 +1,17 @@ +set(yunq_files + serialize.cpp + ) + +add_library(yunq STATIC + ${yunq_files} + ) + +target_link_libraries(yunq + glacier) + +target_include_directories(yunq + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..") + +set_target_properties(yunq PROPERTIES + COMPILE_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILE_FLAGS}") diff --git a/lib/yunq/serialize.cpp b/lib/yunq/serialize.cpp new file mode 100644 index 0000000..f8025a0 --- /dev/null +++ b/lib/yunq/serialize.cpp @@ -0,0 +1,23 @@ +#include "serialize.h" + +namespace yunq { + +glcr::Status CheckHeader(const glcr::ByteBuffer& buffer) { + // TODO: Check ident. + // TODO: Parse core size. + // TODO: Parse extension size. + // TODO: Check CRC32 + // TODO: Parse options. + return glcr::Status::Ok(); +} + +void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, + uint32_t extension_size) { + bytes.WriteAt( + offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence. + bytes.WriteAt(offset + 4, core_size); + bytes.WriteAt(offset + 8, extension_size); + bytes.WriteAt(offset + 12, 0); // TODO: Calculate CRC32. +} + +} // namespace yunq diff --git a/lib/yunq/serialize.h b/lib/yunq/serialize.h new file mode 100644 index 0000000..3a2f229 --- /dev/null +++ b/lib/yunq/serialize.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +namespace yunq { + +[[nodiscard]] glcr::Status CheckHeader(const glcr::ByteBuffer& buffer); + +void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, + uint32_t extension_size); + +} // namespace yunq diff --git a/sys/denali/lib/denali/denali.yunq.cpp b/sys/denali/lib/denali/denali.yunq.cpp index e039d9e..c390abc 100644 --- a/sys/denali/lib/denali/denali.yunq.cpp +++ b/sys/denali/lib/denali/denali.yunq.cpp @@ -1,6 +1,8 @@ // Generated file -- DO NOT MODIFY. #include "denali.yunq.h" +#include + namespace { @@ -11,33 +13,19 @@ struct ExtPointer { uint32_t length; }; -void CheckHeader(const glcr::ByteBuffer& bytes) { - // TODO: Check ident. - // TODO: Parse core size. - // TODO: Parse extension size. - // TODO: Check CRC32 - // TODO: Parse options. -} - -void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, uint32_t extension_size) { - bytes.WriteAt(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence. - bytes.WriteAt(offset + 4, core_size); - bytes.WriteAt(offset + 8, extension_size); - bytes.WriteAt(offset + 12, 0); // TODO: Calculate CRC32. - bytes.WriteAt(offset + 16, 0); // TODO: Add options. -} - } // namespace -void ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void ReadRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status ReadRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse device_id. set_device_id(bytes.At(offset + header_size + (8 * 0))); // Parse lba. @@ -45,6 +33,7 @@ void ReadRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t // Parse size. set_size(bytes.At(offset + header_size + (8 * 2))); + return glcr::Status::Ok(); } uint64_t ReadRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -58,7 +47,7 @@ uint64_t ReadRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) bytes.WriteAt(offset + header_size + (8 * 2), size()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -75,20 +64,22 @@ uint64_t ReadRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, bytes.WriteAt(offset + header_size + (8 * 2), size()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void ReadManyRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status ReadManyRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse device_id. set_device_id(bytes.At(offset + header_size + (8 * 0))); // Parse lba. @@ -112,6 +103,7 @@ void ReadManyRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint } + return glcr::Status::Ok(); } uint64_t ReadManyRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -147,7 +139,7 @@ uint64_t ReadManyRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off } // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -186,27 +178,29 @@ uint64_t ReadManyRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off } // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse memory. // FIXME: Implement in-buffer capabilities for inprocess serialization. set_memory(0); + return glcr::Status::Ok(); } -void ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse memory. uint64_t memory_ptr = bytes.At(offset + header_size + (8 * 2)); set_memory(caps.At(memory_ptr)); + return glcr::Status::Ok(); } -void ReadResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status ReadResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse device_id. set_device_id(bytes.At(offset + header_size + (8 * 0))); // Parse size. @@ -214,6 +208,7 @@ void ReadResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_ // Parse memory. // Skip Cap. + return glcr::Status::Ok(); } uint64_t ReadResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -228,7 +223,7 @@ uint64_t ReadResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset bytes.WriteAt(offset + header_size + (8 * 2), 0); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -246,7 +241,7 @@ uint64_t ReadResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset bytes.WriteAt(offset + header_size + (8 * 2), next_cap++); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } diff --git a/sys/denali/lib/denali/denali.yunq.h b/sys/denali/lib/denali/denali.yunq.h index 57e3601..71a4e9c 100644 --- a/sys/denali/lib/denali/denali.yunq.h +++ b/sys/denali/lib/denali/denali.yunq.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -15,8 +16,8 @@ class ReadRequest { ReadRequest(const ReadRequest&) = delete; ReadRequest(ReadRequest&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const uint64_t& device_id() const { return device_id_; } @@ -32,7 +33,7 @@ class ReadRequest { uint64_t size_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class ReadManyRequest { public: @@ -41,8 +42,8 @@ class ReadManyRequest { ReadManyRequest(const ReadManyRequest&) = delete; ReadManyRequest(ReadManyRequest&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const uint64_t& device_id() const { return device_id_; } @@ -58,7 +59,7 @@ class ReadManyRequest { glcr::Vector sector_cnt_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class ReadResponse { public: @@ -67,8 +68,8 @@ class ReadResponse { ReadResponse(const ReadResponse&) = delete; ReadResponse(ReadResponse&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const uint64_t& device_id() const { return device_id_; } @@ -84,6 +85,6 @@ class ReadResponse { z_cap_t memory_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; diff --git a/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.cpp b/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.cpp index ca1dbd7..56249a4 100644 --- a/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.cpp +++ b/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.cpp @@ -1,6 +1,8 @@ // Generated file -- DO NOT MODIFY. #include "victoriafalls.yunq.h" +#include + namespace { @@ -11,38 +13,25 @@ struct ExtPointer { uint32_t length; }; -void CheckHeader(const glcr::ByteBuffer& bytes) { - // TODO: Check ident. - // TODO: Parse core size. - // TODO: Parse extension size. - // TODO: Check CRC32 - // TODO: Parse options. -} - -void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, uint32_t extension_size) { - bytes.WriteAt(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence. - bytes.WriteAt(offset + 4, core_size); - bytes.WriteAt(offset + 8, extension_size); - bytes.WriteAt(offset + 12, 0); // TODO: Calculate CRC32. - bytes.WriteAt(offset + 16, 0); // TODO: Add options. -} - } // namespace -void OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void OpenFileRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status OpenFileRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse path. auto path_pointer = bytes.At(offset + header_size + (8 * 0)); set_path(bytes.StringAt(offset + path_pointer.offset, path_pointer.length)); + return glcr::Status::Ok(); } uint64_t OpenFileRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -61,7 +50,7 @@ uint64_t OpenFileRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off bytes.WriteAt(offset + header_size + (8 * 0), path_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -83,27 +72,29 @@ uint64_t OpenFileRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off bytes.WriteAt(offset + header_size + (8 * 0), path_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse memory. // FIXME: Implement in-buffer capabilities for inprocess serialization. set_memory(0); + return glcr::Status::Ok(); } -void OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse memory. uint64_t memory_ptr = bytes.At(offset + header_size + (8 * 2)); set_memory(caps.At(memory_ptr)); + return glcr::Status::Ok(); } -void OpenFileResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status OpenFileResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse path. auto path_pointer = bytes.At(offset + header_size + (8 * 0)); @@ -113,6 +104,7 @@ void OpenFileResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uin // Parse memory. // Skip Cap. + return glcr::Status::Ok(); } uint64_t OpenFileResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -136,7 +128,7 @@ uint64_t OpenFileResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of bytes.WriteAt(offset + header_size + (8 * 2), 0); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -163,25 +155,28 @@ uint64_t OpenFileResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of bytes.WriteAt(offset + header_size + (8 * 2), next_cap++); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void GetDirectoryRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status GetDirectoryRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse path. auto path_pointer = bytes.At(offset + header_size + (8 * 0)); set_path(bytes.StringAt(offset + path_pointer.offset, path_pointer.length)); + return glcr::Status::Ok(); } uint64_t GetDirectoryRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -200,7 +195,7 @@ uint64_t GetDirectoryRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t bytes.WriteAt(offset + header_size + (8 * 0), path_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -222,25 +217,28 @@ uint64_t GetDirectoryRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t bytes.WriteAt(offset + header_size + (8 * 0), path_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void Directory::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status Directory::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse filenames. auto filenames_pointer = bytes.At(offset + header_size + (8 * 0)); set_filenames(bytes.StringAt(offset + filenames_pointer.offset, filenames_pointer.length)); + return glcr::Status::Ok(); } uint64_t Directory::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -259,7 +257,7 @@ uint64_t Directory::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) c bytes.WriteAt(offset + header_size + (8 * 0), filenames_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -281,7 +279,7 @@ uint64_t Directory::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, g bytes.WriteAt(offset + header_size + (8 * 0), filenames_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } diff --git a/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.h b/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.h index f4d9b8d..9c51ebd 100644 --- a/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.h +++ b/sys/victoriafalls/lib/victoriafalls/victoriafalls.yunq.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -15,8 +16,8 @@ class OpenFileRequest { OpenFileRequest(const OpenFileRequest&) = delete; OpenFileRequest(OpenFileRequest&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const glcr::String& path() const { return path_; } @@ -26,7 +27,7 @@ class OpenFileRequest { glcr::String path_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class OpenFileResponse { public: @@ -35,8 +36,8 @@ class OpenFileResponse { OpenFileResponse(const OpenFileResponse&) = delete; OpenFileResponse(OpenFileResponse&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const glcr::String& path() const { return path_; } @@ -52,7 +53,7 @@ class OpenFileResponse { z_cap_t memory_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class GetDirectoryRequest { public: @@ -61,8 +62,8 @@ class GetDirectoryRequest { GetDirectoryRequest(const GetDirectoryRequest&) = delete; GetDirectoryRequest(GetDirectoryRequest&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const glcr::String& path() const { return path_; } @@ -72,7 +73,7 @@ class GetDirectoryRequest { glcr::String path_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class Directory { public: @@ -81,8 +82,8 @@ class Directory { Directory(const Directory&) = delete; Directory(Directory&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const glcr::String& filenames() const { return filenames_; } @@ -92,6 +93,6 @@ class Directory { glcr::String filenames_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; diff --git a/sys/voyageurs/lib/voyageurs/voyageurs.yunq.cpp b/sys/voyageurs/lib/voyageurs/voyageurs.yunq.cpp index 47bb980..7a9607a 100644 --- a/sys/voyageurs/lib/voyageurs/voyageurs.yunq.cpp +++ b/sys/voyageurs/lib/voyageurs/voyageurs.yunq.cpp @@ -1,6 +1,8 @@ // Generated file -- DO NOT MODIFY. #include "voyageurs.yunq.h" +#include + namespace { @@ -11,43 +13,30 @@ struct ExtPointer { uint32_t length; }; -void CheckHeader(const glcr::ByteBuffer& bytes) { - // TODO: Check ident. - // TODO: Parse core size. - // TODO: Parse extension size. - // TODO: Check CRC32 - // TODO: Parse options. -} - -void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, uint32_t extension_size) { - bytes.WriteAt(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence. - bytes.WriteAt(offset + 4, core_size); - bytes.WriteAt(offset + 8, extension_size); - bytes.WriteAt(offset + 12, 0); // TODO: Calculate CRC32. - bytes.WriteAt(offset + 16, 0); // TODO: Add options. -} - } // namespace -void KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse port_capability. // FIXME: Implement in-buffer capabilities for inprocess serialization. set_port_capability(0); + return glcr::Status::Ok(); } -void KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse port_capability. uint64_t port_capability_ptr = bytes.At(offset + header_size + (8 * 0)); set_port_capability(caps.At(port_capability_ptr)); + return glcr::Status::Ok(); } -void KeyboardListener::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status KeyboardListener::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse port_capability. // Skip Cap. + return glcr::Status::Ok(); } uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -58,7 +47,7 @@ uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of bytes.WriteAt(offset + header_size + (8 * 0), 0); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -72,7 +61,7 @@ uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of bytes.WriteAt(offset + header_size + (8 * 0), next_cap++); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } diff --git a/sys/voyageurs/lib/voyageurs/voyageurs.yunq.h b/sys/voyageurs/lib/voyageurs/voyageurs.yunq.h index 9ba009c..40d044d 100644 --- a/sys/voyageurs/lib/voyageurs/voyageurs.yunq.h +++ b/sys/voyageurs/lib/voyageurs/voyageurs.yunq.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -15,8 +16,8 @@ class KeyboardListener { KeyboardListener(const KeyboardListener&) = delete; KeyboardListener(KeyboardListener&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const z_cap_t& port_capability() const { return port_capability_; } @@ -26,6 +27,6 @@ class KeyboardListener { z_cap_t port_capability_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; diff --git a/sys/yellowstone/lib/yellowstone/yellowstone.yunq.cpp b/sys/yellowstone/lib/yellowstone/yellowstone.yunq.cpp index 9972aa9..a498c96 100644 --- a/sys/yellowstone/lib/yellowstone/yellowstone.yunq.cpp +++ b/sys/yellowstone/lib/yellowstone/yellowstone.yunq.cpp @@ -1,6 +1,8 @@ // Generated file -- DO NOT MODIFY. #include "yellowstone.yunq.h" +#include + namespace yellowstone { @@ -13,40 +15,26 @@ struct ExtPointer { uint32_t length; }; -void CheckHeader(const glcr::ByteBuffer& bytes) { - // TODO: Check ident. - // TODO: Parse core size. - // TODO: Parse extension size. - // TODO: Check CRC32 - // TODO: Parse options. -} - -void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, uint32_t extension_size) { - bytes.WriteAt(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence. - bytes.WriteAt(offset + 4, core_size); - bytes.WriteAt(offset + 8, extension_size); - bytes.WriteAt(offset + 12, 0); // TODO: Calculate CRC32. - bytes.WriteAt(offset + 16, 0); // TODO: Add options. -} - } // namespace -void RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse endpoint_capability. // FIXME: Implement in-buffer capabilities for inprocess serialization. set_endpoint_capability(0); + return glcr::Status::Ok(); } -void RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse endpoint_capability. uint64_t endpoint_capability_ptr = bytes.At(offset + header_size + (8 * 1)); set_endpoint_capability(caps.At(endpoint_capability_ptr)); + return glcr::Status::Ok(); } -void RegisterEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status RegisterEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse endpoint_name. auto endpoint_name_pointer = bytes.At(offset + header_size + (8 * 0)); @@ -54,6 +42,7 @@ void RegisterEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& byt // Parse endpoint_capability. // Skip Cap. + return glcr::Status::Ok(); } uint64_t RegisterEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -75,7 +64,7 @@ uint64_t RegisterEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint bytes.WriteAt(offset + header_size + (8 * 1), 0); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -100,25 +89,28 @@ uint64_t RegisterEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint bytes.WriteAt(offset + header_size + (8 * 1), next_cap++); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void GetEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status GetEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse endpoint_name. auto endpoint_name_pointer = bytes.At(offset + header_size + (8 * 0)); set_endpoint_name(bytes.StringAt(offset + endpoint_name_pointer.offset, endpoint_name_pointer.length)); + return glcr::Status::Ok(); } uint64_t GetEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -137,7 +129,7 @@ uint64_t GetEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t bytes.WriteAt(offset + header_size + (8 * 0), endpoint_name_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -159,30 +151,33 @@ uint64_t GetEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t bytes.WriteAt(offset + header_size + (8 * 0), endpoint_name_ptr); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse endpoint. // FIXME: Implement in-buffer capabilities for inprocess serialization. set_endpoint(0); + return glcr::Status::Ok(); } -void Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse endpoint. uint64_t endpoint_ptr = bytes.At(offset + header_size + (8 * 0)); set_endpoint(caps.At(endpoint_ptr)); + return glcr::Status::Ok(); } -void Endpoint::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status Endpoint::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse endpoint. // Skip Cap. + return glcr::Status::Ok(); } uint64_t Endpoint::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -193,7 +188,7 @@ uint64_t Endpoint::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) co bytes.WriteAt(offset + header_size + (8 * 0), 0); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -207,32 +202,35 @@ uint64_t Endpoint::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, gl bytes.WriteAt(offset + header_size + (8 * 0), next_cap++); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse ahci_region. // FIXME: Implement in-buffer capabilities for inprocess serialization. set_ahci_region(0); + return glcr::Status::Ok(); } -void AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse ahci_region. uint64_t ahci_region_ptr = bytes.At(offset + header_size + (8 * 0)); set_ahci_region(caps.At(ahci_region_ptr)); + return glcr::Status::Ok(); } -void AhciInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status AhciInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse ahci_region. // Skip Cap. // Parse region_length. set_region_length(bytes.At(offset + header_size + (8 * 1))); + return glcr::Status::Ok(); } uint64_t AhciInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -245,7 +243,7 @@ uint64_t AhciInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) co bytes.WriteAt(offset + header_size + (8 * 1), region_length()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -261,20 +259,22 @@ uint64_t AhciInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, gl bytes.WriteAt(offset + header_size + (8 * 1), region_length()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); + return glcr::Status::Ok(); } -void FramebufferInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status FramebufferInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse address_phys. set_address_phys(bytes.At(offset + header_size + (8 * 0))); // Parse width. @@ -300,6 +300,7 @@ void FramebufferInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint // Parse blue_mask_shift. set_blue_mask_shift(bytes.At(offset + header_size + (8 * 11))); + return glcr::Status::Ok(); } uint64_t FramebufferInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -331,7 +332,7 @@ uint64_t FramebufferInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off bytes.WriteAt(offset + header_size + (8 * 11), blue_mask_shift()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -366,27 +367,29 @@ uint64_t FramebufferInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off bytes.WriteAt(offset + header_size + (8 * 11), blue_mask_shift()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } -void DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse denali_endpoint. // FIXME: Implement in-buffer capabilities for inprocess serialization. set_denali_endpoint(0); + return glcr::Status::Ok(); } -void DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); // Parse denali_endpoint. uint64_t denali_endpoint_ptr = bytes.At(offset + header_size + (8 * 0)); set_denali_endpoint(caps.At(denali_endpoint_ptr)); + return glcr::Status::Ok(); } -void DenaliInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status DenaliInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); // Parse denali_endpoint. // Skip Cap. // Parse device_id. @@ -394,6 +397,7 @@ void DenaliInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t // Parse lba_offset. set_lba_offset(bytes.At(offset + header_size + (8 * 2))); + return glcr::Status::Ok(); } uint64_t DenaliInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -408,7 +412,7 @@ uint64_t DenaliInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) bytes.WriteAt(offset + header_size + (8 * 2), lba_offset()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -426,7 +430,7 @@ uint64_t DenaliInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, bytes.WriteAt(offset + header_size + (8 * 2), lba_offset()); // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } diff --git a/sys/yellowstone/lib/yellowstone/yellowstone.yunq.h b/sys/yellowstone/lib/yellowstone/yellowstone.yunq.h index c74c987..7046a7f 100644 --- a/sys/yellowstone/lib/yellowstone/yellowstone.yunq.h +++ b/sys/yellowstone/lib/yellowstone/yellowstone.yunq.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -17,8 +18,8 @@ class RegisterEndpointRequest { RegisterEndpointRequest(const RegisterEndpointRequest&) = delete; RegisterEndpointRequest(RegisterEndpointRequest&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const glcr::String& endpoint_name() const { return endpoint_name_; } @@ -31,7 +32,7 @@ class RegisterEndpointRequest { z_cap_t endpoint_capability_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class GetEndpointRequest { public: @@ -40,8 +41,8 @@ class GetEndpointRequest { GetEndpointRequest(const GetEndpointRequest&) = delete; GetEndpointRequest(GetEndpointRequest&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const glcr::String& endpoint_name() const { return endpoint_name_; } @@ -51,7 +52,7 @@ class GetEndpointRequest { glcr::String endpoint_name_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class Endpoint { public: @@ -60,8 +61,8 @@ class Endpoint { Endpoint(const Endpoint&) = delete; Endpoint(Endpoint&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const z_cap_t& endpoint() const { return endpoint_; } @@ -71,7 +72,7 @@ class Endpoint { z_cap_t endpoint_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class AhciInfo { public: @@ -80,8 +81,8 @@ class AhciInfo { AhciInfo(const AhciInfo&) = delete; AhciInfo(AhciInfo&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const z_cap_t& ahci_region() const { return ahci_region_; } @@ -94,7 +95,7 @@ class AhciInfo { uint64_t region_length_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class FramebufferInfo { public: @@ -103,8 +104,8 @@ class FramebufferInfo { FramebufferInfo(const FramebufferInfo&) = delete; FramebufferInfo(FramebufferInfo&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const uint64_t& address_phys() const { return address_phys_; } @@ -147,7 +148,7 @@ class FramebufferInfo { uint64_t blue_mask_shift_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; class DenaliInfo { public: @@ -156,8 +157,8 @@ class DenaliInfo { DenaliInfo(const DenaliInfo&) = delete; DenaliInfo(DenaliInfo&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; const z_cap_t& denali_endpoint() const { return denali_endpoint_; } @@ -173,7 +174,7 @@ class DenaliInfo { uint64_t lba_offset_; // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; diff --git a/yunq/CMakeLists.txt b/yunq/CMakeLists.txt index 057d9ab..271476d 100644 --- a/yunq/CMakeLists.txt +++ b/yunq/CMakeLists.txt @@ -17,6 +17,8 @@ macro(yunq_gen dir include_dir name) target_link_libraries(${target} mammoth + glacier + yunq ) set_target_properties(${target} PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILE_FLAGS}" diff --git a/yunq/message.cpp.jinja b/yunq/message.cpp.jinja index de4f6e5..47e0c78 100644 --- a/yunq/message.cpp.jinja +++ b/yunq/message.cpp.jinja @@ -1,6 +1,8 @@ // Generated file -- DO NOT MODIFY. #include "{{file}}.h" +#include + {% if package != None %} namespace {{package.cpp_namespace()}} { {% endif %} @@ -13,27 +15,11 @@ struct ExtPointer { uint32_t length; }; -void CheckHeader(const glcr::ByteBuffer& bytes) { - // TODO: Check ident. - // TODO: Parse core size. - // TODO: Parse extension size. - // TODO: Check CRC32 - // TODO: Parse options. -} - -void WriteHeader(glcr::ByteBuffer& bytes, uint64_t offset, uint32_t core_size, uint32_t extension_size) { - bytes.WriteAt(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence. - bytes.WriteAt(offset + 4, core_size); - bytes.WriteAt(offset + 8, extension_size); - bytes.WriteAt(offset + 12, 0); // TODO: Calculate CRC32. - bytes.WriteAt(offset + 16, 0); // TODO: Add options. -} - } // namespace {%- for message in messages %} -void {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { - ParseFromBytesInternal(bytes, offset); +glcr::Status {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); {%- for field in message.fields %} {%- if field.type == Type.CAPABILITY %} @@ -42,10 +28,11 @@ void {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t of set_{{field.name}}(0); {%- endif %} {%- endfor %} + return glcr::Status::Ok(); } -void {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { - ParseFromBytesInternal(bytes, offset); +glcr::Status {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { + RETURN_ERROR(ParseFromBytesInternal(bytes, offset)); {%- for field in message.fields %} {%- if field.type == Type.CAPABILITY %} @@ -55,10 +42,11 @@ void {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t of set_{{field.name}}(caps.At({{field.name}}_ptr)); {%- endif %} {%- endfor %} + return glcr::Status::Ok(); } -void {{message.name}}::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { - CheckHeader(bytes); +glcr::Status {{message.name}}::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { + RETURN_ERROR(yunq::CheckHeader(bytes)); {%- for field in message.fields %} // Parse {{field.name}}. @@ -88,6 +76,7 @@ void {{message.name}}::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uin {% endif %} {%- endfor %} + return glcr::Status::Ok(); } uint64_t {{message.name}}::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { @@ -135,7 +124,7 @@ uint64_t {{message.name}}::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of {%- endfor %} // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } @@ -186,7 +175,7 @@ uint64_t {{message.name}}::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of {%- endfor %} // The next extension pointer is the length of the message. - WriteHeader(bytes, offset, core_size, next_extension); + yunq::WriteHeader(bytes, offset, core_size, next_extension); return next_extension; } diff --git a/yunq/message.h.jinja b/yunq/message.h.jinja index 5f00497..69eb8b3 100644 --- a/yunq/message.h.jinja +++ b/yunq/message.h.jinja @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -19,8 +20,8 @@ class {{message.name}} { {{message.name}}(const {{message.name}}&) = delete; {{message.name}}({{message.name}}&&) = delete; - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); - void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset, const glcr::CapBuffer&); uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; @@ -44,7 +45,7 @@ class {{message.name}} { {%- endfor %} // Parses everything except for caps. - void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); + glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); }; {%- endfor %}