[Yunq] Return status from client calls.
This commit is contained in:
parent
700f3f94cb
commit
c209925a3c
25 changed files with 102 additions and 112 deletions
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue