[Yunq] Return status from client calls.
This commit is contained in:
parent
700f3f94cb
commit
c209925a3c
|
@ -11,11 +11,11 @@ class Status {
|
|||
Status(ErrorCode code) : code_(code), message_() {}
|
||||
Status(ErrorCode code, StringView message) : code_(code), message_(message) {}
|
||||
|
||||
explicit operator bool() { return ok(); }
|
||||
bool ok() { return code_ == OK; }
|
||||
explicit operator bool() const { return ok(); }
|
||||
bool ok() const { return code_ == OK; }
|
||||
|
||||
ErrorCode code() { return code_; }
|
||||
StringView message() { return message_; }
|
||||
ErrorCode code() const { return code_; }
|
||||
StringView message() const { return message_; }
|
||||
|
||||
private:
|
||||
ErrorCode code_;
|
||||
|
|
|
@ -64,7 +64,11 @@ glcr::ErrorOr<glcr::Vector<glcr::String>> ListDirectory(glcr::StringView path) {
|
|||
GetDirectoryRequest req;
|
||||
req.set_path(path);
|
||||
Directory dir;
|
||||
RET_ERR(gVfsClient->GetDirectory(req, dir));
|
||||
auto status = gVfsClient->GetDirectory(req, dir);
|
||||
if (!status.ok()) {
|
||||
dbgln("Error in getting directory: {}", status.message());
|
||||
return status.code();
|
||||
}
|
||||
|
||||
auto file_views = glcr::StrSplit(dir.filenames(), ',');
|
||||
glcr::Vector<glcr::String> files;
|
||||
|
|
|
@ -15,6 +15,14 @@ void check(uint64_t code) {
|
|||
(void)ZProcessExit(code);
|
||||
}
|
||||
|
||||
void check(const glcr::Status& status) {
|
||||
if (status.ok()) {
|
||||
return;
|
||||
}
|
||||
dbgln("Crash: {}", status.message());
|
||||
(void)ZProcessExit(status.code());
|
||||
}
|
||||
|
||||
void crash(const char* str, uint64_t code) {
|
||||
dbgln(str);
|
||||
(void)ZProcessExit(code);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include <glacier/status/status.h>
|
||||
#include <glacier/string/str_format.h>
|
||||
#include <glacier/string/string_view.h>
|
||||
#include <stdint.h>
|
||||
|
@ -16,5 +17,6 @@ void dbgln(const glcr::StringView& fmt, Args... args) {
|
|||
// Checks that the code is ok.
|
||||
// if not exits the process.
|
||||
void check(uint64_t);
|
||||
void check(const glcr::Status&);
|
||||
|
||||
void crash(const char*, z_err_t);
|
||||
|
|
|
@ -16,7 +16,7 @@ uint64_t main(uint64_t init_port_cap) {
|
|||
|
||||
YellowstoneClient stub(gInitEndpointCap);
|
||||
AhciInfo ahci;
|
||||
RET_ERR(stub.GetAhciInfo(ahci));
|
||||
check(stub.GetAhciInfo(ahci));
|
||||
mmth::OwnedMemoryRegion ahci_region =
|
||||
mmth::OwnedMemoryRegion::FromCapability(ahci.ahci_region());
|
||||
ASSIGN_OR_RETURN(auto driver, AhciDriver::Init(glcr::Move(ahci_region)));
|
||||
|
|
|
@ -18,7 +18,7 @@ DenaliClient::~DenaliClient() {
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode DenaliClient::Read(const ReadRequest& request, ReadResponse& response) {
|
||||
glcr::Status DenaliClient::Read(const ReadRequest& request, ReadResponse& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -41,18 +41,14 @@ glcr::ErrorCode DenaliClient::Read(const ReadRequest& request, ReadResponse& res
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
@ -61,7 +57,7 @@ glcr::ErrorCode DenaliClient::Read(const ReadRequest& request, ReadResponse& res
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode DenaliClient::ReadMany(const ReadManyRequest& request, ReadResponse& response) {
|
||||
glcr::Status DenaliClient::ReadMany(const ReadManyRequest& request, ReadResponse& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -84,18 +80,14 @@ glcr::ErrorCode DenaliClient::ReadMany(const ReadManyRequest& request, ReadRespo
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
|
|
@ -20,11 +20,11 @@ class DenaliClient {
|
|||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode Read(const ReadRequest& request, ReadResponse& response);
|
||||
[[nodiscard]] glcr::Status Read(const ReadRequest& request, ReadResponse& response);
|
||||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode ReadMany(const ReadManyRequest& request, ReadResponse& response);
|
||||
[[nodiscard]] glcr::Status ReadMany(const ReadManyRequest& request, ReadResponse& response);
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
@ -104,7 +104,6 @@ glcr::Status DenaliServerBase::HandleRequest(const glcr::ByteBuffer& request,
|
|||
|
||||
|
||||
ReadRequest yunq_request;
|
||||
// TODO: Return status.
|
||||
RETURN_ERROR(yunq_request.ParseFromBytes(request, kHeaderSize, req_caps));
|
||||
|
||||
|
||||
|
@ -125,7 +124,6 @@ glcr::Status DenaliServerBase::HandleRequest(const glcr::ByteBuffer& request,
|
|||
|
||||
|
||||
ReadManyRequest yunq_request;
|
||||
// TODO: Return status.
|
||||
RETURN_ERROR(yunq_request.ParseFromBytes(request, kHeaderSize, req_caps));
|
||||
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ uint64_t main(uint64_t init_port) {
|
|||
YellowstoneClient client(gInitEndpointCap);
|
||||
|
||||
FramebufferInfo framebuffer;
|
||||
RET_ERR(client.GetFramebufferInfo(framebuffer));
|
||||
check(client.GetFramebufferInfo(framebuffer));
|
||||
dbgln("FB addr {x}, bpp {}, width {} , height {}, pitch {}",
|
||||
framebuffer.address_phys(), framebuffer.bpp(), framebuffer.width(),
|
||||
framebuffer.height(), framebuffer.pitch());
|
||||
|
|
|
@ -12,7 +12,11 @@ glcr::ErrorOr<glcr::SharedPtr<Ext2BlockReader>> Ext2BlockReader::Init(
|
|||
req.set_lba(denali_info.lba_offset() + 2);
|
||||
req.set_size(2);
|
||||
ReadResponse resp;
|
||||
RET_ERR(client.Read(req, resp));
|
||||
auto status = client.Read(req, resp);
|
||||
if (!status.ok()) {
|
||||
dbgln("Failed to read superblock: {}", status.message());
|
||||
return status.code();
|
||||
}
|
||||
mmth::OwnedMemoryRegion superblock =
|
||||
mmth::OwnedMemoryRegion::FromCapability(resp.memory());
|
||||
|
||||
|
@ -70,7 +74,11 @@ glcr::ErrorOr<mmth::OwnedMemoryRegion> Ext2BlockReader::ReadBlocks(
|
|||
req.set_lba(lba_offset_ + block_number * SectorsPerBlock());
|
||||
req.set_size(num_blocks * SectorsPerBlock());
|
||||
ReadResponse resp;
|
||||
RET_ERR(denali_.Read(req, resp));
|
||||
auto status = denali_.Read(req, resp);
|
||||
if (!status.ok()) {
|
||||
dbgln("Failed to read blocks: {}", status.message());
|
||||
return status.code();
|
||||
}
|
||||
return mmth::OwnedMemoryRegion::FromCapability(resp.memory());
|
||||
}
|
||||
|
||||
|
@ -92,7 +100,11 @@ glcr::ErrorOr<mmth::OwnedMemoryRegion> Ext2BlockReader::ReadBlocks(
|
|||
}
|
||||
dbgln("Read many: {x}", req.lba().size());
|
||||
ReadResponse resp;
|
||||
RET_ERR(denali_.ReadMany(req, resp));
|
||||
auto status = denali_.ReadMany(req, resp);
|
||||
if (!status.ok()) {
|
||||
dbgln("Failed to read blocks: {}", status.message());
|
||||
return status.code();
|
||||
}
|
||||
return mmth::OwnedMemoryRegion::FromCapability(resp.memory());
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ VFSClient::~VFSClient() {
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode VFSClient::OpenFile(const OpenFileRequest& request, OpenFileResponse& response) {
|
||||
glcr::Status VFSClient::OpenFile(const OpenFileRequest& request, OpenFileResponse& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -41,18 +41,14 @@ glcr::ErrorCode VFSClient::OpenFile(const OpenFileRequest& request, OpenFileResp
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
@ -61,7 +57,7 @@ glcr::ErrorCode VFSClient::OpenFile(const OpenFileRequest& request, OpenFileResp
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode VFSClient::GetDirectory(const GetDirectoryRequest& request, Directory& response) {
|
||||
glcr::Status VFSClient::GetDirectory(const GetDirectoryRequest& request, Directory& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -84,18 +80,14 @@ glcr::ErrorCode VFSClient::GetDirectory(const GetDirectoryRequest& request, Dire
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
|
|
@ -20,11 +20,11 @@ class VFSClient {
|
|||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode OpenFile(const OpenFileRequest& request, OpenFileResponse& response);
|
||||
[[nodiscard]] glcr::Status OpenFile(const OpenFileRequest& request, OpenFileResponse& response);
|
||||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode GetDirectory(const GetDirectoryRequest& request, Directory& response);
|
||||
[[nodiscard]] glcr::Status GetDirectory(const GetDirectoryRequest& request, Directory& response);
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
@ -76,6 +76,7 @@ void VFSServerBase::ServerThread() {
|
|||
glcr::Status err = HandleRequest(recv_buffer, recv_cap, resp_buffer, resp_length, resp_cap);
|
||||
if (!err) {
|
||||
WriteError(resp_buffer, err.code());
|
||||
dbgln("Responding Error {}", err.message());
|
||||
reply_err = static_cast<glcr::ErrorCode>(ZReplyPortSend(reply_port_cap, kHeaderSize, resp_buffer.RawPtr(), 0, nullptr));
|
||||
} else {
|
||||
WriteHeader(resp_buffer, resp_length);
|
||||
|
@ -103,7 +104,6 @@ glcr::Status VFSServerBase::HandleRequest(const glcr::ByteBuffer& request,
|
|||
|
||||
|
||||
OpenFileRequest yunq_request;
|
||||
// TODO: Return status.
|
||||
RETURN_ERROR(yunq_request.ParseFromBytes(request, kHeaderSize, req_caps));
|
||||
|
||||
|
||||
|
@ -124,7 +124,6 @@ glcr::Status VFSServerBase::HandleRequest(const glcr::ByteBuffer& request,
|
|||
|
||||
|
||||
GetDirectoryRequest yunq_request;
|
||||
// TODO: Return status.
|
||||
RETURN_ERROR(yunq_request.ParseFromBytes(request, kHeaderSize, req_caps));
|
||||
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ uint64_t main(uint64_t init_cap) {
|
|||
|
||||
YellowstoneClient yellowstone(gInitEndpointCap);
|
||||
DenaliInfo denali_info;
|
||||
RET_ERR(yellowstone.GetDenali(denali_info));
|
||||
check(yellowstone.GetDenali(denali_info));
|
||||
ASSIGN_OR_RETURN(Ext2Driver ext2, Ext2Driver::Init(denali_info));
|
||||
|
||||
ASSIGN_OR_RETURN(auto server, VFSServer::Create(ext2));
|
||||
|
|
|
@ -18,7 +18,7 @@ VoyageursClient::~VoyageursClient() {
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode VoyageursClient::RegisterKeyboardListener(const KeyboardListener& request) {
|
||||
glcr::Status VoyageursClient::RegisterKeyboardListener(const KeyboardListener& request) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -41,7 +41,7 @@ glcr::ErrorCode VoyageursClient::RegisterKeyboardListener(const KeyboardListener
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
|
|
|
@ -20,7 +20,7 @@ class VoyageursClient {
|
|||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode RegisterKeyboardListener(const KeyboardListener& request);
|
||||
[[nodiscard]] glcr::Status RegisterKeyboardListener(const KeyboardListener& request);
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
@ -76,6 +76,7 @@ void VoyageursServerBase::ServerThread() {
|
|||
glcr::Status err = HandleRequest(recv_buffer, recv_cap, resp_buffer, resp_length, resp_cap);
|
||||
if (!err) {
|
||||
WriteError(resp_buffer, err.code());
|
||||
dbgln("Responding Error {}", err.message());
|
||||
reply_err = static_cast<glcr::ErrorCode>(ZReplyPortSend(reply_port_cap, kHeaderSize, resp_buffer.RawPtr(), 0, nullptr));
|
||||
} else {
|
||||
WriteHeader(resp_buffer, resp_length);
|
||||
|
@ -103,7 +104,6 @@ glcr::Status VoyageursServerBase::HandleRequest(const glcr::ByteBuffer& request,
|
|||
|
||||
|
||||
KeyboardListener yunq_request;
|
||||
// TODO: Return status.
|
||||
RETURN_ERROR(yunq_request.ParseFromBytes(request, kHeaderSize, req_caps));
|
||||
|
||||
|
||||
|
|
|
@ -57,29 +57,29 @@ struct PartitionEntry {
|
|||
GptReader::GptReader(glcr::UniquePtr<DenaliClient> denali)
|
||||
: denali_(glcr::Move(denali)) {}
|
||||
|
||||
glcr::ErrorCode GptReader::ParsePartitionTables() {
|
||||
glcr::Status GptReader::ParsePartitionTables() {
|
||||
ReadRequest req;
|
||||
req.set_device_id(0);
|
||||
req.set_lba(0);
|
||||
req.set_size(2);
|
||||
ReadResponse resp;
|
||||
RET_ERR(denali_->Read(req, resp));
|
||||
RETURN_ERROR(denali_->Read(req, resp));
|
||||
mmth::OwnedMemoryRegion lba_1_and_2 =
|
||||
mmth::OwnedMemoryRegion::FromCapability(resp.memory());
|
||||
uint16_t* mbr_sig = reinterpret_cast<uint16_t*>(lba_1_and_2.vaddr() + 0x1FE);
|
||||
if (*mbr_sig != 0xAA55) {
|
||||
dbgln("Invalid MBR Sig: {x}", *mbr_sig);
|
||||
return glcr::FAILED_PRECONDITION;
|
||||
return glcr::FailedPrecondition(
|
||||
glcr::StrFormat("Invalid MBR Sig: {x}", *mbr_sig));
|
||||
}
|
||||
MbrPartition* first_partition =
|
||||
reinterpret_cast<MbrPartition*>(lba_1_and_2.vaddr() + 0x1BE);
|
||||
if (first_partition->boot_indicator != 0) {
|
||||
dbgln("Boot indicator set: {}", first_partition->boot_indicator);
|
||||
return glcr::FAILED_PRECONDITION;
|
||||
return glcr::FailedPrecondition(glcr::StrFormat(
|
||||
"Boot indicator set: {}", first_partition->boot_indicator));
|
||||
}
|
||||
if (first_partition->os_type != 0xEE) {
|
||||
dbgln("Incorrect OS type: {x}", first_partition->os_type);
|
||||
return glcr::FAILED_PRECONDITION;
|
||||
return glcr::FailedPrecondition(
|
||||
glcr::StrFormat("Incorrect OS type: {x}", first_partition->os_type));
|
||||
}
|
||||
#if GPT_DEBUG
|
||||
dbgln("LBAs: ({x}, {x})", first_partition->starting_lba,
|
||||
|
@ -105,7 +105,7 @@ glcr::ErrorCode GptReader::ParsePartitionTables() {
|
|||
req.set_device_id(0);
|
||||
req.set_lba(header->lba_partition_entries);
|
||||
req.set_size(num_blocks);
|
||||
RET_ERR(denali_->Read(req, resp));
|
||||
RETURN_ERROR(denali_->Read(req, resp));
|
||||
mmth::OwnedMemoryRegion part_table =
|
||||
mmth::OwnedMemoryRegion::FromCapability(resp.memory());
|
||||
for (uint64_t i = 0; i < num_partitions; i++) {
|
||||
|
@ -130,5 +130,5 @@ glcr::ErrorCode GptReader::ParsePartitionTables() {
|
|||
}
|
||||
}
|
||||
|
||||
return glcr::OK;
|
||||
return glcr::Status::Ok();
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ class GptReader {
|
|||
public:
|
||||
GptReader(glcr::UniquePtr<DenaliClient> denali);
|
||||
|
||||
glcr::ErrorCode ParsePartitionTables();
|
||||
glcr::Status ParsePartitionTables();
|
||||
|
||||
uint64_t GetPrimaryPartitionLba() { return primary_partition_lba_; }
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ YellowstoneClient::~YellowstoneClient() {
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode YellowstoneClient::RegisterEndpoint(const RegisterEndpointRequest& request) {
|
||||
glcr::Status YellowstoneClient::RegisterEndpoint(const RegisterEndpointRequest& request) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -43,7 +43,7 @@ glcr::ErrorCode YellowstoneClient::RegisterEndpoint(const RegisterEndpointReques
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
|
@ -57,7 +57,7 @@ glcr::ErrorCode YellowstoneClient::RegisterEndpoint(const RegisterEndpointReques
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode YellowstoneClient::GetEndpoint(const GetEndpointRequest& request, Endpoint& response) {
|
||||
glcr::Status YellowstoneClient::GetEndpoint(const GetEndpointRequest& request, Endpoint& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -80,18 +80,14 @@ glcr::ErrorCode YellowstoneClient::GetEndpoint(const GetEndpointRequest& request
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
@ -100,7 +96,7 @@ glcr::ErrorCode YellowstoneClient::GetEndpoint(const GetEndpointRequest& request
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode YellowstoneClient::GetAhciInfo(AhciInfo& response) {
|
||||
glcr::Status YellowstoneClient::GetAhciInfo(AhciInfo& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -123,18 +119,14 @@ glcr::ErrorCode YellowstoneClient::GetAhciInfo(AhciInfo& response) {
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
@ -143,7 +135,7 @@ glcr::ErrorCode YellowstoneClient::GetAhciInfo(AhciInfo& response) {
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode YellowstoneClient::GetFramebufferInfo(FramebufferInfo& response) {
|
||||
glcr::Status YellowstoneClient::GetFramebufferInfo(FramebufferInfo& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -166,18 +158,14 @@ glcr::ErrorCode YellowstoneClient::GetFramebufferInfo(FramebufferInfo& response)
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
@ -186,7 +174,7 @@ glcr::ErrorCode YellowstoneClient::GetFramebufferInfo(FramebufferInfo& response)
|
|||
|
||||
|
||||
|
||||
glcr::ErrorCode YellowstoneClient::GetDenali(DenaliInfo& response) {
|
||||
glcr::Status YellowstoneClient::GetDenali(DenaliInfo& response) {
|
||||
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -209,18 +197,14 @@ glcr::ErrorCode YellowstoneClient::GetDenali(DenaliInfo& response) {
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
|
||||
|
||||
return glcr::OK;
|
||||
|
|
|
@ -22,23 +22,23 @@ class YellowstoneClient {
|
|||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode RegisterEndpoint(const RegisterEndpointRequest& request);
|
||||
[[nodiscard]] glcr::Status RegisterEndpoint(const RegisterEndpointRequest& request);
|
||||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode GetEndpoint(const GetEndpointRequest& request, Endpoint& response);
|
||||
[[nodiscard]] glcr::Status GetEndpoint(const GetEndpointRequest& request, Endpoint& response);
|
||||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode GetAhciInfo(AhciInfo& response);
|
||||
[[nodiscard]] glcr::Status GetAhciInfo(AhciInfo& response);
|
||||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode GetFramebufferInfo(FramebufferInfo& response);
|
||||
[[nodiscard]] glcr::Status GetFramebufferInfo(FramebufferInfo& response);
|
||||
|
||||
|
||||
|
||||
[[nodiscard]] glcr::ErrorCode GetDenali(DenaliInfo& response);
|
||||
[[nodiscard]] glcr::Status GetDenali(DenaliInfo& response);
|
||||
|
||||
|
||||
private:
|
||||
|
|
|
@ -78,6 +78,7 @@ void YellowstoneServerBase::ServerThread() {
|
|||
glcr::Status err = HandleRequest(recv_buffer, recv_cap, resp_buffer, resp_length, resp_cap);
|
||||
if (!err) {
|
||||
WriteError(resp_buffer, err.code());
|
||||
dbgln("Responding Error {}", err.message());
|
||||
reply_err = static_cast<glcr::ErrorCode>(ZReplyPortSend(reply_port_cap, kHeaderSize, resp_buffer.RawPtr(), 0, nullptr));
|
||||
} else {
|
||||
WriteHeader(resp_buffer, resp_length);
|
||||
|
@ -105,7 +106,6 @@ glcr::Status YellowstoneServerBase::HandleRequest(const glcr::ByteBuffer& reques
|
|||
|
||||
|
||||
RegisterEndpointRequest yunq_request;
|
||||
// TODO: Return status.
|
||||
RETURN_ERROR(yunq_request.ParseFromBytes(request, kHeaderSize, req_caps));
|
||||
|
||||
|
||||
|
@ -124,7 +124,6 @@ glcr::Status YellowstoneServerBase::HandleRequest(const glcr::ByteBuffer& reques
|
|||
|
||||
|
||||
GetEndpointRequest yunq_request;
|
||||
// TODO: Return status.
|
||||
RETURN_ERROR(yunq_request.ParseFromBytes(request, kHeaderSize, req_caps));
|
||||
|
||||
|
||||
|
|
|
@ -23,7 +23,11 @@ glcr::ErrorOr<PartitionInfo> HandleDenaliRegistration(z_cap_t endpoint_cap) {
|
|||
GptReader reader(
|
||||
glcr::UniquePtr<DenaliClient>(new DenaliClient(endpoint_cap)));
|
||||
|
||||
RET_ERR(reader.ParsePartitionTables());
|
||||
auto status = reader.ParsePartitionTables();
|
||||
if (!status.ok()) {
|
||||
dbgln("GPT Reader: {}", status.message());
|
||||
return status.code();
|
||||
}
|
||||
|
||||
return PartitionInfo{.device_id = 0,
|
||||
.partition_lba = reader.GetPrimaryPartitionLba()};
|
||||
|
|
|
@ -20,11 +20,11 @@ namespace {{package.cpp_namespace()}} {
|
|||
{% for method in interface.methods %}
|
||||
|
||||
{% if method.request == None %}
|
||||
glcr::ErrorCode {{interface.name}}Client::{{method.name}}({{method.response}}& response) {
|
||||
glcr::Status {{interface.name}}Client::{{method.name}}({{method.response}}& response) {
|
||||
{% elif method.response == None %}
|
||||
glcr::ErrorCode {{interface.name}}Client::{{method.name}}(const {{method.request}}& request) {
|
||||
glcr::Status {{interface.name}}Client::{{method.name}}(const {{method.request}}& request) {
|
||||
{% else %}
|
||||
glcr::ErrorCode {{interface.name}}Client::{{method.name}}(const {{method.request}}& request, {{method.response}}& response) {
|
||||
glcr::Status {{interface.name}}Client::{{method.name}}(const {{method.request}}& request, {{method.response}}& response) {
|
||||
{% endif %}
|
||||
uint64_t buffer_size = kBufferSize;
|
||||
uint64_t cap_size = kCapBufferSize;
|
||||
|
@ -49,18 +49,14 @@ glcr::ErrorCode {{interface.name}}Client::{{method.name}}(const {{method.request
|
|||
RET_ERR(ZReplyPortRecv(reply_port_cap, &buffer_size, buffer_.RawPtr(), &cap_size, cap_buffer_.RawPtr()));
|
||||
|
||||
if (buffer_.At<uint32_t>(0) != kSentinel) {
|
||||
return glcr::INVALID_RESPONSE;
|
||||
return glcr::InvalidResponse("Got an invalid response from server.");
|
||||
}
|
||||
|
||||
// Check Response Code.
|
||||
RET_ERR(buffer_.At<uint64_t>(8));
|
||||
|
||||
{% if method.response != None %}
|
||||
// TODO: Return status.
|
||||
auto status = response.ParseFromBytes(buffer_, 16, cap_buffer_);
|
||||
if (!status) {
|
||||
return status.code();
|
||||
}
|
||||
RETURN_ERROR(response.ParseFromBytes(buffer_, 16, cap_buffer_));
|
||||
{% endif %}
|
||||
|
||||
return glcr::OK;
|
||||
|
|
|
@ -23,11 +23,11 @@ class {{interface.name}}Client {
|
|||
|
||||
{% for method in interface.methods %}
|
||||
{% if method.request == None %}
|
||||
[[nodiscard]] glcr::ErrorCode {{method.name}}({{method.response}}& response);
|
||||
[[nodiscard]] glcr::Status {{method.name}}({{method.response}}& response);
|
||||
{% elif method.response == None %}
|
||||
[[nodiscard]] glcr::ErrorCode {{method.name}}(const {{method.request}}& request);
|
||||
[[nodiscard]] glcr::Status {{method.name}}(const {{method.request}}& request);
|
||||
{% else %}
|
||||
[[nodiscard]] glcr::ErrorCode {{method.name}}(const {{method.request}}& request, {{method.response}}& response);
|
||||
[[nodiscard]] glcr::Status {{method.name}}(const {{method.request}}& request, {{method.response}}& response);
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
private:
|
||||
|
|
Loading…
Reference in New Issue