[Yunq] Create libyunq and move parsing code to it.

This commit is contained in:
Drew Galbraith 2023-12-01 09:30:52 -08:00
parent 91f3f8ee43
commit 7d9f9a7ae9
16 changed files with 310 additions and 260 deletions

View File

@ -1,2 +1,3 @@
add_subdirectory(glacier) add_subdirectory(glacier)
add_subdirectory(mammoth) add_subdirectory(mammoth)
add_subdirectory(yunq)

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#include "status/error.h" #include "glacier/status/error.h"
#include "string/string.h" #include "glacier/string/string.h"
namespace glcr { namespace glcr {
@ -21,43 +21,57 @@ class Status {
ErrorCode code_; ErrorCode code_;
String message_; String message_;
Status(); Status() : code_(OK) {}
}; };
Status InvalidArgument(StringView message) { inline Status InvalidArgument(StringView message) {
return Status(INVALID_ARGUMENT, 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); 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); 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); 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); 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); return Status(INVALID_RESPONSE, message);
} }
#define RETURN_ERROR(expr) \
{ \
glcr::Status _tmp_err = expr; \
if (!_tmp_err) { \
return _tmp_err; \
} \
}
} // namespace glcr } // namespace glcr

17
lib/yunq/CMakeLists.txt Normal file
View File

@ -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}")

23
lib/yunq/serialize.cpp Normal file
View File

@ -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<uint32_t>(
offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence.
bytes.WriteAt<uint32_t>(offset + 4, core_size);
bytes.WriteAt<uint32_t>(offset + 8, extension_size);
bytes.WriteAt<uint32_t>(offset + 12, 0); // TODO: Calculate CRC32.
}
} // namespace yunq

13
lib/yunq/serialize.h Normal file
View File

@ -0,0 +1,13 @@
#pragma once
#include <glacier/buffer/byte_buffer.h>
#include <glacier/status/status.h>
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

View File

@ -1,6 +1,8 @@
// Generated file -- DO NOT MODIFY. // Generated file -- DO NOT MODIFY.
#include "denali.yunq.h" #include "denali.yunq.h"
#include <yunq/serialize.h>
namespace { namespace {
@ -11,33 +13,19 @@ struct ExtPointer {
uint32_t length; 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<uint32_t>(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence.
bytes.WriteAt<uint32_t>(offset + 4, core_size);
bytes.WriteAt<uint32_t>(offset + 8, extension_size);
bytes.WriteAt<uint32_t>(offset + 12, 0); // TODO: Calculate CRC32.
bytes.WriteAt<uint64_t>(offset + 16, 0); // TODO: Add options.
}
} // namespace } // namespace
void ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status ReadRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void ReadRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status ReadRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse device_id. // Parse device_id.
set_device_id(bytes.At<uint64_t>(offset + header_size + (8 * 0))); set_device_id(bytes.At<uint64_t>(offset + header_size + (8 * 0)));
// Parse lba. // Parse lba.
@ -45,6 +33,7 @@ void ReadRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t
// Parse size. // Parse size.
set_size(bytes.At<uint64_t>(offset + header_size + (8 * 2))); set_size(bytes.At<uint64_t>(offset + header_size + (8 * 2)));
return glcr::Status::Ok();
} }
uint64_t ReadRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 2), size()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), size());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -75,20 +64,22 @@ uint64_t ReadRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset,
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), size()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), size());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status ReadManyRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void ReadManyRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status ReadManyRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse device_id. // Parse device_id.
set_device_id(bytes.At<uint64_t>(offset + header_size + (8 * 0))); set_device_id(bytes.At<uint64_t>(offset + header_size + (8 * 0)));
// Parse lba. // 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 { 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. // 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; 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. // 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; return next_extension;
} }
void ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse memory. // Parse memory.
// FIXME: Implement in-buffer capabilities for inprocess serialization. // FIXME: Implement in-buffer capabilities for inprocess serialization.
set_memory(0); set_memory(0);
return glcr::Status::Ok();
} }
void ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status ReadResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse memory. // Parse memory.
uint64_t memory_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 2)); uint64_t memory_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 2));
set_memory(caps.At(memory_ptr)); set_memory(caps.At(memory_ptr));
return glcr::Status::Ok();
} }
void ReadResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status ReadResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse device_id. // Parse device_id.
set_device_id(bytes.At<uint64_t>(offset + header_size + (8 * 0))); set_device_id(bytes.At<uint64_t>(offset + header_size + (8 * 0)));
// Parse size. // Parse size.
@ -214,6 +208,7 @@ void ReadResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_
// Parse memory. // Parse memory.
// Skip Cap. // Skip Cap.
return glcr::Status::Ok();
} }
uint64_t ReadResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 2), 0); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), 0);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -246,7 +241,7 @@ uint64_t ReadResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), next_cap++); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), next_cap++);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }

View File

@ -3,6 +3,7 @@
#include <glacier/buffer/byte_buffer.h> #include <glacier/buffer/byte_buffer.h>
#include <glacier/buffer/cap_buffer.h> #include <glacier/buffer/cap_buffer.h>
#include <glacier/status/status.h>
#include <glacier/container/vector.h> #include <glacier/container/vector.h>
#include <glacier/string/string.h> #include <glacier/string/string.h>
#include <ztypes.h> #include <ztypes.h>
@ -15,8 +16,8 @@ class ReadRequest {
ReadRequest(const ReadRequest&) = delete; ReadRequest(const ReadRequest&) = delete;
ReadRequest(ReadRequest&&) = delete; ReadRequest(ReadRequest&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const uint64_t& device_id() const { return device_id_; } const uint64_t& device_id() const { return device_id_; }
@ -32,7 +33,7 @@ class ReadRequest {
uint64_t size_; uint64_t size_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class ReadManyRequest { class ReadManyRequest {
public: public:
@ -41,8 +42,8 @@ class ReadManyRequest {
ReadManyRequest(const ReadManyRequest&) = delete; ReadManyRequest(const ReadManyRequest&) = delete;
ReadManyRequest(ReadManyRequest&&) = delete; ReadManyRequest(ReadManyRequest&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const uint64_t& device_id() const { return device_id_; } const uint64_t& device_id() const { return device_id_; }
@ -58,7 +59,7 @@ class ReadManyRequest {
glcr::Vector<uint64_t> sector_cnt_; glcr::Vector<uint64_t> sector_cnt_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class ReadResponse { class ReadResponse {
public: public:
@ -67,8 +68,8 @@ class ReadResponse {
ReadResponse(const ReadResponse&) = delete; ReadResponse(const ReadResponse&) = delete;
ReadResponse(ReadResponse&&) = delete; ReadResponse(ReadResponse&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const uint64_t& device_id() const { return device_id_; } const uint64_t& device_id() const { return device_id_; }
@ -84,6 +85,6 @@ class ReadResponse {
z_cap_t memory_; z_cap_t memory_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };

View File

@ -1,6 +1,8 @@
// Generated file -- DO NOT MODIFY. // Generated file -- DO NOT MODIFY.
#include "victoriafalls.yunq.h" #include "victoriafalls.yunq.h"
#include <yunq/serialize.h>
namespace { namespace {
@ -11,38 +13,25 @@ struct ExtPointer {
uint32_t length; 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<uint32_t>(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence.
bytes.WriteAt<uint32_t>(offset + 4, core_size);
bytes.WriteAt<uint32_t>(offset + 8, extension_size);
bytes.WriteAt<uint32_t>(offset + 12, 0); // TODO: Calculate CRC32.
bytes.WriteAt<uint64_t>(offset + 16, 0); // TODO: Add options.
}
} // namespace } // namespace
void OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status OpenFileRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void OpenFileRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status OpenFileRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse path. // Parse path.
auto path_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0)); auto path_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0));
set_path(bytes.StringAt(offset + path_pointer.offset, path_pointer.length)); 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 { 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<ExtPointer>(offset + header_size + (8 * 0), path_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), path_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -83,27 +72,29 @@ uint64_t OpenFileRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off
bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), path_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), path_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse memory. // Parse memory.
// FIXME: Implement in-buffer capabilities for inprocess serialization. // FIXME: Implement in-buffer capabilities for inprocess serialization.
set_memory(0); set_memory(0);
return glcr::Status::Ok();
} }
void OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status OpenFileResponse::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse memory. // Parse memory.
uint64_t memory_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 2)); uint64_t memory_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 2));
set_memory(caps.At(memory_ptr)); set_memory(caps.At(memory_ptr));
return glcr::Status::Ok();
} }
void OpenFileResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status OpenFileResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse path. // Parse path.
auto path_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0)); auto path_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0));
@ -113,6 +104,7 @@ void OpenFileResponse::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uin
// Parse memory. // Parse memory.
// Skip Cap. // Skip Cap.
return glcr::Status::Ok();
} }
uint64_t OpenFileResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 2), 0); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), 0);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -163,25 +155,28 @@ uint64_t OpenFileResponse::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), next_cap++); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), next_cap++);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status GetDirectoryRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void GetDirectoryRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status GetDirectoryRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse path. // Parse path.
auto path_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0)); auto path_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0));
set_path(bytes.StringAt(offset + path_pointer.offset, path_pointer.length)); 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 { 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<ExtPointer>(offset + header_size + (8 * 0), path_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), path_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -222,25 +217,28 @@ uint64_t GetDirectoryRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t
bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), path_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), path_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status Directory::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void Directory::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status Directory::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse filenames. // Parse filenames.
auto filenames_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0)); auto filenames_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0));
set_filenames(bytes.StringAt(offset + filenames_pointer.offset, filenames_pointer.length)); 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 { 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<ExtPointer>(offset + header_size + (8 * 0), filenames_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), filenames_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -281,7 +279,7 @@ uint64_t Directory::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, g
bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), filenames_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), filenames_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }

View File

@ -3,6 +3,7 @@
#include <glacier/buffer/byte_buffer.h> #include <glacier/buffer/byte_buffer.h>
#include <glacier/buffer/cap_buffer.h> #include <glacier/buffer/cap_buffer.h>
#include <glacier/status/status.h>
#include <glacier/container/vector.h> #include <glacier/container/vector.h>
#include <glacier/string/string.h> #include <glacier/string/string.h>
#include <ztypes.h> #include <ztypes.h>
@ -15,8 +16,8 @@ class OpenFileRequest {
OpenFileRequest(const OpenFileRequest&) = delete; OpenFileRequest(const OpenFileRequest&) = delete;
OpenFileRequest(OpenFileRequest&&) = delete; OpenFileRequest(OpenFileRequest&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const glcr::String& path() const { return path_; } const glcr::String& path() const { return path_; }
@ -26,7 +27,7 @@ class OpenFileRequest {
glcr::String path_; glcr::String path_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class OpenFileResponse { class OpenFileResponse {
public: public:
@ -35,8 +36,8 @@ class OpenFileResponse {
OpenFileResponse(const OpenFileResponse&) = delete; OpenFileResponse(const OpenFileResponse&) = delete;
OpenFileResponse(OpenFileResponse&&) = delete; OpenFileResponse(OpenFileResponse&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const glcr::String& path() const { return path_; } const glcr::String& path() const { return path_; }
@ -52,7 +53,7 @@ class OpenFileResponse {
z_cap_t memory_; z_cap_t memory_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class GetDirectoryRequest { class GetDirectoryRequest {
public: public:
@ -61,8 +62,8 @@ class GetDirectoryRequest {
GetDirectoryRequest(const GetDirectoryRequest&) = delete; GetDirectoryRequest(const GetDirectoryRequest&) = delete;
GetDirectoryRequest(GetDirectoryRequest&&) = delete; GetDirectoryRequest(GetDirectoryRequest&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const glcr::String& path() const { return path_; } const glcr::String& path() const { return path_; }
@ -72,7 +73,7 @@ class GetDirectoryRequest {
glcr::String path_; glcr::String path_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class Directory { class Directory {
public: public:
@ -81,8 +82,8 @@ class Directory {
Directory(const Directory&) = delete; Directory(const Directory&) = delete;
Directory(Directory&&) = delete; Directory(Directory&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const glcr::String& filenames() const { return filenames_; } const glcr::String& filenames() const { return filenames_; }
@ -92,6 +93,6 @@ class Directory {
glcr::String filenames_; glcr::String filenames_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };

View File

@ -1,6 +1,8 @@
// Generated file -- DO NOT MODIFY. // Generated file -- DO NOT MODIFY.
#include "voyageurs.yunq.h" #include "voyageurs.yunq.h"
#include <yunq/serialize.h>
namespace { namespace {
@ -11,43 +13,30 @@ struct ExtPointer {
uint32_t length; 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<uint32_t>(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence.
bytes.WriteAt<uint32_t>(offset + 4, core_size);
bytes.WriteAt<uint32_t>(offset + 8, extension_size);
bytes.WriteAt<uint32_t>(offset + 12, 0); // TODO: Calculate CRC32.
bytes.WriteAt<uint64_t>(offset + 16, 0); // TODO: Add options.
}
} // namespace } // namespace
void KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse port_capability. // Parse port_capability.
// FIXME: Implement in-buffer capabilities for inprocess serialization. // FIXME: Implement in-buffer capabilities for inprocess serialization.
set_port_capability(0); set_port_capability(0);
return glcr::Status::Ok();
} }
void KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status KeyboardListener::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse port_capability. // Parse port_capability.
uint64_t port_capability_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0)); uint64_t port_capability_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0));
set_port_capability(caps.At(port_capability_ptr)); set_port_capability(caps.At(port_capability_ptr));
return glcr::Status::Ok();
} }
void KeyboardListener::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status KeyboardListener::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse port_capability. // Parse port_capability.
// Skip Cap. // Skip Cap.
return glcr::Status::Ok();
} }
uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 0), 0); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), 0);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -72,7 +61,7 @@ uint64_t KeyboardListener::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), next_cap++); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), next_cap++);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }

View File

@ -3,6 +3,7 @@
#include <glacier/buffer/byte_buffer.h> #include <glacier/buffer/byte_buffer.h>
#include <glacier/buffer/cap_buffer.h> #include <glacier/buffer/cap_buffer.h>
#include <glacier/status/status.h>
#include <glacier/container/vector.h> #include <glacier/container/vector.h>
#include <glacier/string/string.h> #include <glacier/string/string.h>
#include <ztypes.h> #include <ztypes.h>
@ -15,8 +16,8 @@ class KeyboardListener {
KeyboardListener(const KeyboardListener&) = delete; KeyboardListener(const KeyboardListener&) = delete;
KeyboardListener(KeyboardListener&&) = delete; KeyboardListener(KeyboardListener&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const z_cap_t& port_capability() const { return port_capability_; } const z_cap_t& port_capability() const { return port_capability_; }
@ -26,6 +27,6 @@ class KeyboardListener {
z_cap_t port_capability_; z_cap_t port_capability_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };

View File

@ -1,6 +1,8 @@
// Generated file -- DO NOT MODIFY. // Generated file -- DO NOT MODIFY.
#include "yellowstone.yunq.h" #include "yellowstone.yunq.h"
#include <yunq/serialize.h>
namespace yellowstone { namespace yellowstone {
@ -13,40 +15,26 @@ struct ExtPointer {
uint32_t length; 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<uint32_t>(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence.
bytes.WriteAt<uint32_t>(offset + 4, core_size);
bytes.WriteAt<uint32_t>(offset + 8, extension_size);
bytes.WriteAt<uint32_t>(offset + 12, 0); // TODO: Calculate CRC32.
bytes.WriteAt<uint64_t>(offset + 16, 0); // TODO: Add options.
}
} // namespace } // namespace
void RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse endpoint_capability. // Parse endpoint_capability.
// FIXME: Implement in-buffer capabilities for inprocess serialization. // FIXME: Implement in-buffer capabilities for inprocess serialization.
set_endpoint_capability(0); set_endpoint_capability(0);
return glcr::Status::Ok();
} }
void RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status RegisterEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse endpoint_capability. // Parse endpoint_capability.
uint64_t endpoint_capability_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 1)); uint64_t endpoint_capability_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 1));
set_endpoint_capability(caps.At(endpoint_capability_ptr)); set_endpoint_capability(caps.At(endpoint_capability_ptr));
return glcr::Status::Ok();
} }
void RegisterEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status RegisterEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse endpoint_name. // Parse endpoint_name.
auto endpoint_name_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0)); auto endpoint_name_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0));
@ -54,6 +42,7 @@ void RegisterEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& byt
// Parse endpoint_capability. // Parse endpoint_capability.
// Skip Cap. // Skip Cap.
return glcr::Status::Ok();
} }
uint64_t RegisterEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 1), 0); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 1), 0);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -100,25 +89,28 @@ uint64_t RegisterEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 1), next_cap++); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 1), next_cap++);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status GetEndpointRequest::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void GetEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status GetEndpointRequest::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse endpoint_name. // Parse endpoint_name.
auto endpoint_name_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0)); auto endpoint_name_pointer = bytes.At<ExtPointer>(offset + header_size + (8 * 0));
set_endpoint_name(bytes.StringAt(offset + endpoint_name_pointer.offset, endpoint_name_pointer.length)); 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 { 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<ExtPointer>(offset + header_size + (8 * 0), endpoint_name_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), endpoint_name_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -159,30 +151,33 @@ uint64_t GetEndpointRequest::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t
bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), endpoint_name_ptr); bytes.WriteAt<ExtPointer>(offset + header_size + (8 * 0), endpoint_name_ptr);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse endpoint. // Parse endpoint.
// FIXME: Implement in-buffer capabilities for inprocess serialization. // FIXME: Implement in-buffer capabilities for inprocess serialization.
set_endpoint(0); set_endpoint(0);
return glcr::Status::Ok();
} }
void Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status Endpoint::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse endpoint. // Parse endpoint.
uint64_t endpoint_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0)); uint64_t endpoint_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0));
set_endpoint(caps.At(endpoint_ptr)); set_endpoint(caps.At(endpoint_ptr));
return glcr::Status::Ok();
} }
void Endpoint::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status Endpoint::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse endpoint. // Parse endpoint.
// Skip Cap. // Skip Cap.
return glcr::Status::Ok();
} }
uint64_t Endpoint::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 0), 0); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), 0);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -207,32 +202,35 @@ uint64_t Endpoint::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, gl
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), next_cap++); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 0), next_cap++);
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse ahci_region. // Parse ahci_region.
// FIXME: Implement in-buffer capabilities for inprocess serialization. // FIXME: Implement in-buffer capabilities for inprocess serialization.
set_ahci_region(0); set_ahci_region(0);
return glcr::Status::Ok();
} }
void AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status AhciInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse ahci_region. // Parse ahci_region.
uint64_t ahci_region_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0)); uint64_t ahci_region_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0));
set_ahci_region(caps.At(ahci_region_ptr)); set_ahci_region(caps.At(ahci_region_ptr));
return glcr::Status::Ok();
} }
void AhciInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status AhciInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse ahci_region. // Parse ahci_region.
// Skip Cap. // Skip Cap.
// Parse region_length. // Parse region_length.
set_region_length(bytes.At<uint64_t>(offset + header_size + (8 * 1))); set_region_length(bytes.At<uint64_t>(offset + header_size + (8 * 1)));
return glcr::Status::Ok();
} }
uint64_t AhciInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 1), region_length()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 1), region_length());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -261,20 +259,22 @@ uint64_t AhciInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset, gl
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 1), region_length()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 1), region_length());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status FramebufferInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
return glcr::Status::Ok();
} }
void FramebufferInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status FramebufferInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse address_phys. // Parse address_phys.
set_address_phys(bytes.At<uint64_t>(offset + header_size + (8 * 0))); set_address_phys(bytes.At<uint64_t>(offset + header_size + (8 * 0)));
// Parse width. // Parse width.
@ -300,6 +300,7 @@ void FramebufferInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint
// Parse blue_mask_shift. // Parse blue_mask_shift.
set_blue_mask_shift(bytes.At<uint64_t>(offset + header_size + (8 * 11))); set_blue_mask_shift(bytes.At<uint64_t>(offset + header_size + (8 * 11)));
return glcr::Status::Ok();
} }
uint64_t FramebufferInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 11), blue_mask_shift()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 11), blue_mask_shift());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -366,27 +367,29 @@ uint64_t FramebufferInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t off
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 11), blue_mask_shift()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 11), blue_mask_shift());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
void DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse denali_endpoint. // Parse denali_endpoint.
// FIXME: Implement in-buffer capabilities for inprocess serialization. // FIXME: Implement in-buffer capabilities for inprocess serialization.
set_denali_endpoint(0); set_denali_endpoint(0);
return glcr::Status::Ok();
} }
void DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status DenaliInfo::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
// Parse denali_endpoint. // Parse denali_endpoint.
uint64_t denali_endpoint_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0)); uint64_t denali_endpoint_ptr = bytes.At<uint64_t>(offset + header_size + (8 * 0));
set_denali_endpoint(caps.At(denali_endpoint_ptr)); set_denali_endpoint(caps.At(denali_endpoint_ptr));
return glcr::Status::Ok();
} }
void DenaliInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status DenaliInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
// Parse denali_endpoint. // Parse denali_endpoint.
// Skip Cap. // Skip Cap.
// Parse device_id. // Parse device_id.
@ -394,6 +397,7 @@ void DenaliInfo::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t
// Parse lba_offset. // Parse lba_offset.
set_lba_offset(bytes.At<uint64_t>(offset + header_size + (8 * 2))); set_lba_offset(bytes.At<uint64_t>(offset + header_size + (8 * 2)));
return glcr::Status::Ok();
} }
uint64_t DenaliInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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<uint64_t>(offset + header_size + (8 * 2), lba_offset()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), lba_offset());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -426,7 +430,7 @@ uint64_t DenaliInfo::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset,
bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), lba_offset()); bytes.WriteAt<uint64_t>(offset + header_size + (8 * 2), lba_offset());
// The next extension pointer is the length of the message. // 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; return next_extension;
} }

View File

@ -3,6 +3,7 @@
#include <glacier/buffer/byte_buffer.h> #include <glacier/buffer/byte_buffer.h>
#include <glacier/buffer/cap_buffer.h> #include <glacier/buffer/cap_buffer.h>
#include <glacier/status/status.h>
#include <glacier/container/vector.h> #include <glacier/container/vector.h>
#include <glacier/string/string.h> #include <glacier/string/string.h>
#include <ztypes.h> #include <ztypes.h>
@ -17,8 +18,8 @@ class RegisterEndpointRequest {
RegisterEndpointRequest(const RegisterEndpointRequest&) = delete; RegisterEndpointRequest(const RegisterEndpointRequest&) = delete;
RegisterEndpointRequest(RegisterEndpointRequest&&) = delete; RegisterEndpointRequest(RegisterEndpointRequest&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const glcr::String& endpoint_name() const { return endpoint_name_; } const glcr::String& endpoint_name() const { return endpoint_name_; }
@ -31,7 +32,7 @@ class RegisterEndpointRequest {
z_cap_t endpoint_capability_; z_cap_t endpoint_capability_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class GetEndpointRequest { class GetEndpointRequest {
public: public:
@ -40,8 +41,8 @@ class GetEndpointRequest {
GetEndpointRequest(const GetEndpointRequest&) = delete; GetEndpointRequest(const GetEndpointRequest&) = delete;
GetEndpointRequest(GetEndpointRequest&&) = delete; GetEndpointRequest(GetEndpointRequest&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const glcr::String& endpoint_name() const { return endpoint_name_; } const glcr::String& endpoint_name() const { return endpoint_name_; }
@ -51,7 +52,7 @@ class GetEndpointRequest {
glcr::String endpoint_name_; glcr::String endpoint_name_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class Endpoint { class Endpoint {
public: public:
@ -60,8 +61,8 @@ class Endpoint {
Endpoint(const Endpoint&) = delete; Endpoint(const Endpoint&) = delete;
Endpoint(Endpoint&&) = delete; Endpoint(Endpoint&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const z_cap_t& endpoint() const { return endpoint_; } const z_cap_t& endpoint() const { return endpoint_; }
@ -71,7 +72,7 @@ class Endpoint {
z_cap_t endpoint_; z_cap_t endpoint_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class AhciInfo { class AhciInfo {
public: public:
@ -80,8 +81,8 @@ class AhciInfo {
AhciInfo(const AhciInfo&) = delete; AhciInfo(const AhciInfo&) = delete;
AhciInfo(AhciInfo&&) = delete; AhciInfo(AhciInfo&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const z_cap_t& ahci_region() const { return ahci_region_; } const z_cap_t& ahci_region() const { return ahci_region_; }
@ -94,7 +95,7 @@ class AhciInfo {
uint64_t region_length_; uint64_t region_length_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class FramebufferInfo { class FramebufferInfo {
public: public:
@ -103,8 +104,8 @@ class FramebufferInfo {
FramebufferInfo(const FramebufferInfo&) = delete; FramebufferInfo(const FramebufferInfo&) = delete;
FramebufferInfo(FramebufferInfo&&) = delete; FramebufferInfo(FramebufferInfo&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const uint64_t& address_phys() const { return address_phys_; } const uint64_t& address_phys() const { return address_phys_; }
@ -147,7 +148,7 @@ class FramebufferInfo {
uint64_t blue_mask_shift_; uint64_t blue_mask_shift_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
class DenaliInfo { class DenaliInfo {
public: public:
@ -156,8 +157,8 @@ class DenaliInfo {
DenaliInfo(const DenaliInfo&) = delete; DenaliInfo(const DenaliInfo&) = delete;
DenaliInfo(DenaliInfo&&) = delete; DenaliInfo(DenaliInfo&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
const z_cap_t& denali_endpoint() const { return denali_endpoint_; } const z_cap_t& denali_endpoint() const { return denali_endpoint_; }
@ -173,7 +174,7 @@ class DenaliInfo {
uint64_t lba_offset_; uint64_t lba_offset_;
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };

View File

@ -17,6 +17,8 @@ macro(yunq_gen dir include_dir name)
target_link_libraries(${target} target_link_libraries(${target}
mammoth mammoth
glacier
yunq
) )
set_target_properties(${target} PROPERTIES set_target_properties(${target} PROPERTIES
COMPILE_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILE_FLAGS}" COMPILE_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILE_FLAGS}"

View File

@ -1,6 +1,8 @@
// Generated file -- DO NOT MODIFY. // Generated file -- DO NOT MODIFY.
#include "{{file}}.h" #include "{{file}}.h"
#include <yunq/serialize.h>
{% if package != None %} {% if package != None %}
namespace {{package.cpp_namespace()}} { namespace {{package.cpp_namespace()}} {
{% endif %} {% endif %}
@ -13,27 +15,11 @@ struct ExtPointer {
uint32_t length; 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<uint32_t>(offset + 0, 0xDEADBEEF); // TODO: Chose a more unique ident sequence.
bytes.WriteAt<uint32_t>(offset + 4, core_size);
bytes.WriteAt<uint32_t>(offset + 8, extension_size);
bytes.WriteAt<uint32_t>(offset + 12, 0); // TODO: Calculate CRC32.
bytes.WriteAt<uint64_t>(offset + 16, 0); // TODO: Add options.
}
} // namespace } // namespace
{%- for message in messages %} {%- for message in messages %}
void {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
{%- for field in message.fields %} {%- for field in message.fields %}
{%- if field.type == Type.CAPABILITY %} {%- if field.type == Type.CAPABILITY %}
@ -42,10 +28,11 @@ void {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t of
set_{{field.name}}(0); set_{{field.name}}(0);
{%- endif %} {%- endif %}
{%- endfor %} {%- endfor %}
return glcr::Status::Ok();
} }
void {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) { glcr::Status {{message.name}}::ParseFromBytes(const glcr::ByteBuffer& bytes, uint64_t offset, const glcr::CapBuffer& caps) {
ParseFromBytesInternal(bytes, offset); RETURN_ERROR(ParseFromBytesInternal(bytes, offset));
{%- for field in message.fields %} {%- for field in message.fields %}
{%- if field.type == Type.CAPABILITY %} {%- 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)); set_{{field.name}}(caps.At({{field.name}}_ptr));
{%- endif %} {%- endif %}
{%- endfor %} {%- endfor %}
return glcr::Status::Ok();
} }
void {{message.name}}::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) { glcr::Status {{message.name}}::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uint64_t offset) {
CheckHeader(bytes); RETURN_ERROR(yunq::CheckHeader(bytes));
{%- for field in message.fields %} {%- for field in message.fields %}
// Parse {{field.name}}. // Parse {{field.name}}.
@ -88,6 +76,7 @@ void {{message.name}}::ParseFromBytesInternal(const glcr::ByteBuffer& bytes, uin
{% endif %} {% endif %}
{%- endfor %} {%- endfor %}
return glcr::Status::Ok();
} }
uint64_t {{message.name}}::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t offset) const { 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 %} {%- endfor %}
// The next extension pointer is the length of the message. // 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; return next_extension;
} }
@ -186,7 +175,7 @@ uint64_t {{message.name}}::SerializeToBytes(glcr::ByteBuffer& bytes, uint64_t of
{%- endfor %} {%- endfor %}
// The next extension pointer is the length of the message. // 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; return next_extension;
} }

View File

@ -3,6 +3,7 @@
#include <glacier/buffer/byte_buffer.h> #include <glacier/buffer/byte_buffer.h>
#include <glacier/buffer/cap_buffer.h> #include <glacier/buffer/cap_buffer.h>
#include <glacier/status/status.h>
#include <glacier/container/vector.h> #include <glacier/container/vector.h>
#include <glacier/string/string.h> #include <glacier/string/string.h>
#include <ztypes.h> #include <ztypes.h>
@ -19,8 +20,8 @@ class {{message.name}} {
{{message.name}}(const {{message.name}}&) = delete; {{message.name}}(const {{message.name}}&) = delete;
{{message.name}}({{message.name}}&&) = delete; {{message.name}}({{message.name}}&&) = delete;
void ParseFromBytes(const glcr::ByteBuffer&, uint64_t offset); glcr::Status 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, const glcr::CapBuffer&);
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset) const;
uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const; uint64_t SerializeToBytes(glcr::ByteBuffer&, uint64_t offset, glcr::CapBuffer&) const;
@ -44,7 +45,7 @@ class {{message.name}} {
{%- endfor %} {%- endfor %}
// Parses everything except for caps. // Parses everything except for caps.
void ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset); glcr::Status ParseFromBytesInternal(const glcr::ByteBuffer&, uint64_t offset);
}; };
{%- endfor %} {%- endfor %}