Support reading files in server.

geesefs-0-30-9
Aaron Jacobs 2015-02-27 15:51:44 +11:00
parent 1d1fb83281
commit 4ef670f8b7
1 changed files with 47 additions and 27 deletions

View File

@ -147,7 +147,7 @@ func (s *server) handleFuseRequest(fuseReq bazilfuse.Request) {
typed.Respond(fuseResp) typed.Respond(fuseResp)
case *bazilfuse.OpenRequest: case *bazilfuse.OpenRequest:
// File or directory? // Directory or file?
if typed.Dir { if typed.Dir {
// Convert the request. // Convert the request.
req := &OpenDirRequest{ req := &OpenDirRequest{
@ -195,36 +195,56 @@ func (s *server) handleFuseRequest(fuseReq bazilfuse.Request) {
} }
case *bazilfuse.ReadRequest: case *bazilfuse.ReadRequest:
// We support only directories at this point. // Directory or file?
if !typed.Dir { if typed.Dir {
s.logger.Println("We don't yet support files. Returning ENOSYS.") // Convert the request.
typed.RespondError(ENOSYS) req := &ReadDirRequest{
return Inode: InodeID(typed.Header.Node),
} Handle: HandleID(typed.Handle),
Offset: DirOffset(typed.Offset),
Size: typed.Size,
}
// Convert the request. // Call the file system.
req := &ReadDirRequest{ resp, err := s.fs.ReadDir(ctx, req)
Inode: InodeID(typed.Header.Node), if err != nil {
Handle: HandleID(typed.Handle), s.logger.Print("Responding:", err)
Offset: DirOffset(typed.Offset), typed.RespondError(err)
Size: typed.Size, return
} }
// Call the file system. // Convert the response.
resp, err := s.fs.ReadDir(ctx, req) fuseResp := &bazilfuse.ReadResponse{
if err != nil { Data: resp.Data,
s.logger.Print("Responding:", err) }
typed.RespondError(err)
return
}
// Convert the response. s.logger.Print("Responding:", fuseResp)
fuseResp := &bazilfuse.ReadResponse{ typed.Respond(fuseResp)
Data: resp.Data, } else {
} // Convert the request.
req := &ReadFileRequest{
Inode: InodeID(typed.Header.Node),
Handle: HandleID(typed.Handle),
Offset: typed.Offset,
Size: typed.Size,
}
s.logger.Print("Responding:", fuseResp) // Call the file system.
typed.Respond(fuseResp) resp, err := s.fs.ReadFile(ctx, req)
if err != nil {
s.logger.Print("Responding:", err)
typed.RespondError(err)
return
}
// Convert the response.
fuseResp := &bazilfuse.ReadResponse{
Data: resp.Data,
}
s.logger.Print("Responding:", fuseResp)
typed.Respond(fuseResp)
}
default: default:
s.logger.Println("Unhandled type. Returning ENOSYS.") s.logger.Println("Unhandled type. Returning ENOSYS.")