Initial import

This commit is contained in:
2020-11-26 20:02:41 -06:00
commit fc59005da3
16 changed files with 481 additions and 0 deletions

25
ops/create.js Normal file
View File

@@ -0,0 +1,25 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, mode, cb) {
connector.send(
Message.route('fs.create')
.data({ path, mode })
.expect_response(msg => {
if ( msg.error() ) {
return Errors.toCallback(cb, msg.error())
}
const { node, descriptor } = msg.data()
delete node.pied_name
node.mtime = new Date(node.mtime)
node.atime = new Date(node.atime)
node.ctime = new Date(node.ctime)
return process.nextTick(cb, 0, descriptor, node)
})
)
}

29
ops/getattr.js Normal file
View File

@@ -0,0 +1,29 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, cb) {
connector.send(
Message.route('fs.getattr')
.data({ path })
.expect_response(msg => {
if ( msg.error() ) {
if ( msg.error() === Errors.NodeDoesNotExist ) {
return process.nextTick(cb, Fuse.ENOENT)
} else {
return process.nextTick(cb, Fuse.ENODATA)
}
}
const { node } = msg.data()
delete node.pied_name
node.mtime = new Date(node.mtime)
node.atime = new Date(node.atime)
node.ctime = new Date(node.ctime)
return process.nextTick(cb, 0, node)
})
)
}

25
ops/mkdir.js Normal file
View File

@@ -0,0 +1,25 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, mode, cb) {
connector.send(
Message.route('fs.mkdir')
.data({ path, mode })
.expect_response(msg => {
if ( msg.error() ) {
return Errors.toCallback(cb, msg.error())
}
const { node } = msg.data()
delete node.pied_name
node.mtime = new Date(node.mtime)
node.atime = new Date(node.atime)
node.ctime = new Date(node.ctime)
return process.nextTick(cb, 0, node)
})
)
}

19
ops/open.js Normal file
View File

@@ -0,0 +1,19 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, flags, cb) {
connector.send(
Message.route('fs.open')
.data({ path, flags })
.expect_response(msg => {
if ( msg.error() ) {
return Errors.toCallback(cb, msg.error())
}
const { descriptor } = msg.data()
return process.nextTick(cb, 0, descriptor)
})
)
}

20
ops/read.js Normal file
View File

@@ -0,0 +1,20 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
const Streamer = require('../Streamer')
module.exports = exports = async function (path, fd, buffer, length, position, cb) {
try {
const { socket_uuid, node_uuid } = await connector.simple_request('stream.getfd', { descriptor: fd })
const streamer = new Streamer(socket_uuid, node_uuid, length, position)
const stream_buffer = await streamer.buffer()
if ( stream_buffer.length < 1 ) return process.nextTick(cb, 0)
stream_buffer.copy(buffer)
return process.nextTick(cb, stream_buffer.length)
} catch (e) {
console.error(e)
}
}

36
ops/readdir.js Normal file
View File

@@ -0,0 +1,36 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, cb) {
connector.send(
Message.route('fs.readdir')
.data({ path })
.expect_response(msg => {
if ( msg.error() ) {
if ( msg.error() === Errors.NodeDoesNotExist ) {
return process.nextTick(cb, Fuse.ENOENT)
} else {
return process.nextTick(cb, Fuse.ENODATA)
}
}
const { nodes } = msg.data()
const names = nodes.map(x => {
const name = x.pied_name
x.mtime = new Date(x.mtime)
x.atime = new Date(x.atime)
x.ctime = new Date(x.ctime)
delete x.pied_name
return name
})
return process.nextTick(cb, 0, names, nodes)
})
)
}

18
ops/release.js Normal file
View File

@@ -0,0 +1,18 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, fd, cb) {
connector.send(
Message.route('fs.release')
.data({ path, descriptor: fd })
.expect_response(msg => {
if ( msg.error() ) {
return Errors.toCallback(cb, msg.error())
}
return process.nextTick(cb, 0)
})
)
}

18
ops/rename.js Normal file
View File

@@ -0,0 +1,18 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (source, destination, cb) {
connector.send(
Message.route('fs.rename')
.data({ source, destination })
.expect_response(msg => {
if ( msg.error() ) {
return Errors.toCallback(cb, msg.error())
}
return process.nextTick(cb, 0)
})
)
}

18
ops/rmdir.js Normal file
View File

@@ -0,0 +1,18 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, cb) {
connector.send(
Message.route('fs.rmdir')
.data({ path })
.expect_response(msg => {
if ( msg.error() ) {
return Errors.toCallback(cb, msg.error())
}
return process.nextTick(cb, 0)
})
)
}

18
ops/unlink.js Normal file
View File

@@ -0,0 +1,18 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
module.exports = exports = function (path, cb) {
connector.send(
Message.route('fs.unlink')
.data({ path })
.expect_response(msg => {
if ( msg.error() ) {
return Errors.toCallback(cb, msg.error())
}
return process.nextTick(cb, 0)
})
)
}

19
ops/write.js Normal file
View File

@@ -0,0 +1,19 @@
const Fuse = require('fuse-native')
const Errors = require('../../shared/Errors')
const Message = require('../../shared/Message')
const connector = require('../connector')
const Streamer = require('../Streamer')
module.exports = exports = async function (path, fd, buffer, length, position, cb) {
try {
const { socket_uuid, node_uuid } = await connector.simple_request('stream.getfd', { descriptor: fd })
console.log({socket_uuid, node_uuid})
const streamer = new Streamer(socket_uuid, node_uuid, length, position)
streamer.write(buffer)
return process.nextTick(cb, length)
} catch (e) {
console.error(e)
}
}