np

package module
v0.0.0-...-a62e1d4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 26, 2022 License: MIT Imports: 14 Imported by: 0

README

np

Go Reference

Go library for serving a 9P filesystem

Status

This library is currently v0. Things will break, use at your own risk.

License

np is licensed under the MIT license. See LICENSE for the full license text.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (

	// https://github.com/0intro/plan9/blob/7524062cfa4689019a4ed6fc22500ec209522ef0/sys/src/lib9p/srv.c#L10
	ErrBadAttach    = Error{/* contains filtered or unexported fields */}
	ErrBadOffset    = Error{/* contains filtered or unexported fields */}
	ErrBadCount     = Error{/* contains filtered or unexported fields */}
	ErrBotch        = Error{/* contains filtered or unexported fields */} // EPROTO
	ErrCreateNonDir = Error{/* contains filtered or unexported fields */}
	ErrDupFid       = Error{/* contains filtered or unexported fields */}
	ErrDupTag       = Error{/* contains filtered or unexported fields */}
	ErrNoCreate     = Error{/* contains filtered or unexported fields */}
	ErrNoRemove     = Error{/* contains filtered or unexported fields */}
	ErrNoStat       = Error{/* contains filtered or unexported fields */}
	ErrNotFound     = Error{/* contains filtered or unexported fields */} // ENOENT
	ErrNoWrite      = Error{/* contains filtered or unexported fields */}
	ErrNoWstat      = Error{/* contains filtered or unexported fields */} // EPERM
	ErrPerm         = Error{/* contains filtered or unexported fields */} // EACCES
	ErrUnknownFid   = Error{/* contains filtered or unexported fields */}
	ErrBadDir       = Error{/* contains filtered or unexported fields */}
	ErrWalkNoDir    = Error{/* contains filtered or unexported fields */}

	ErrBadFD    = Error{/* contains filtered or unexported fields */} // EBADFD
	ErrBadFid   = Error{/* contains filtered or unexported fields */} // EBADF
	ErrFidInUse = Error{/* contains filtered or unexported fields */} // EBADF

	ErrAuth = Error{/* contains filtered or unexported fields */} // ECONNREFUSED

	ErrCrossDevice = Error{/* contains filtered or unexported fields */} // EXDEV
	ErrDeadlock    = Error{/* contains filtered or unexported fields */} // EDEADLK
	ErrDirNotEmpty = Error{/* contains filtered or unexported fields */} // ENOTEMPTY

	ErrExists = Error{/* contains filtered or unexported fields */} // EEXIST
	ErrInUse  = Error{/* contains filtered or unexported fields */} // ETXTBSY
	ErrTooBig = Error{/* contains filtered or unexported fields */} // EFBIG

	ErrIllegalMode   = Error{/* contains filtered or unexported fields */} // EINVAL
	ErrIllegalName   = Error{/* contains filtered or unexported fields */} // ENAMETOOLONG
	ErrIllegalOffset = Error{/* contains filtered or unexported fields */} // EINVAL
	ErrIllegalSeek   = Error{/* contains filtered or unexported fields */} // ESPIPE

	ErrInProgress  = Error{/* contains filtered or unexported fields */} // EINPROGRESS
	ErrInterrupted = Error{/* contains filtered or unexported fields */} // EINTR
	ErrInvalidArg  = Error{/* contains filtered or unexported fields */} // EINVAL
	ErrIO          = Error{/* contains filtered or unexported fields */} // EIO

	ErrBadMessage     = Error{/* contains filtered or unexported fields */} // EBADMSG
	ErrMessageTooLong = Error{/* contains filtered or unexported fields */} // EMSGSIZE
	ErrNoMessage      = Error{/* contains filtered or unexported fields */} // ENOMSG

	ErrConnAbort      = Error{/* contains filtered or unexported fields */} // ECONNABORTED
	ErrConnected      = Error{/* contains filtered or unexported fields */} // EISCONN
	ErrConnRefused    = Error{/* contains filtered or unexported fields */} // ECONNREFUSED
	ErrConnReset      = Error{/* contains filtered or unexported fields */} // ECONNRESET
	ErrHostDown       = Error{/* contains filtered or unexported fields */} // EHOSTDOWN
	ErrNetDown        = Error{/* contains filtered or unexported fields */} // ENETDOWN
	ErrNetReset       = Error{/* contains filtered or unexported fields */} // ENETRESET
	ErrNetUnreachable = Error{/* contains filtered or unexported fields */} // ENETUNREACH
	ErrNoNet          = Error{/* contains filtered or unexported fields */} // ENONET
	ErrNoRoute        = Error{/* contains filtered or unexported fields */} // EHOSTUNREACH
	ErrNotConnected   = Error{/* contains filtered or unexported fields */} // ENOTCONN

	ErrNoDevice       = Error{/* contains filtered or unexported fields */} // ENODEV
	ErrNoDeviceOrAddr = Error{/* contains filtered or unexported fields */} // ENXIO
	ErrNoLink         = Error{/* contains filtered or unexported fields */} // ENOLINK
	ErrNoLock         = Error{/* contains filtered or unexported fields */} // ENOLCK
	ErrNoMem          = Error{/* contains filtered or unexported fields */} // ENOMEM
	ErrNoPackage      = Error{/* contains filtered or unexported fields */} // ENOPKG

	ErrBrokenPipe    = Error{/* contains filtered or unexported fields */} // EPIPE
	ErrBadAddr       = Error{/* contains filtered or unexported fields */} // EFAULT
	ErrBusy          = Error{/* contains filtered or unexported fields */} // EBUSY
	ErrComm          = Error{/* contains filtered or unexported fields */} // ECOMM
	ErrNoBufferSpace = Error{/* contains filtered or unexported fields */} // ENOBUFS
	ErrNoData        = Error{/* contains filtered or unexported fields */} // ENODATA
	ErrNoSpace       = Error{/* contains filtered or unexported fields */} // ENOSPC

	ErrAllreadyInProgress = Error{/* contains filtered or unexported fields */} // EALREADY
	ErrShutdown           = Error{/* contains filtered or unexported fields */} // ESHUTDOWN
	ErrTimeout            = Error{/* contains filtered or unexported fields */} // ETIMEDOUT

	ErrIsDir       = Error{/* contains filtered or unexported fields */} // EISDIR
	ErrIsNamed     = Error{/* contains filtered or unexported fields */} // EISNAM
	ErrNotBlockDev = Error{/* contains filtered or unexported fields */} // ENOTBLK
	ErrNotDir      = Error{/* contains filtered or unexported fields */} // ENOTDIR
	ErrNotSock     = Error{/* contains filtered or unexported fields */} // ENOTSOCK

	ErrNotImplemented = Error{/* contains filtered or unexported fields */} // ENOSYS
	ErrOpNoSupported  = Error{/* contains filtered or unexported fields */} // EOPNOTSUPP

	ErrOutOfRange = Error{/* contains filtered or unexported fields */} // EDOM
	ErrQuota      = Error{/* contains filtered or unexported fields */} // EDQUOT
	ErrRange      = Error{/* contains filtered or unexported fields */} // ERANGE
	ErrReadOnly   = Error{/* contains filtered or unexported fields */} // EROFS
	ErrReadOnlyFS = Error{/* contains filtered or unexported fields */} // EROFS
	ErrRemote     = Error{/* contains filtered or unexported fields */} // EREMOTE
	ErrRemoteIO   = Error{/* contains filtered or unexported fields */} // EREMOTEIO
	ErrRemoved    = Error{/* contains filtered or unexported fields */} // EIDRM
	ErrStreamPipe = Error{/* contains filtered or unexported fields */} // ESTRPIPE

	ErrNoProto              = Error{/* contains filtered or unexported fields */} // ENOPROTOOPT
	ErrProtoNoSupport       = Error{/* contains filtered or unexported fields */} // EPROTONOSUPPORT
	ErrProtoFamilyNoSupport = Error{/* contains filtered or unexported fields */} // EPFNOSUPPORT
	ErrSockNoSupported      = Error{/* contains filtered or unexported fields */} // ESOCKTNOSUPPORT

	ErrTooManyArgs      = Error{/* contains filtered or unexported fields */} // E2BIG
	ErrTooManyFiles     = Error{/* contains filtered or unexported fields */} // EMFILE
	ErrTooManyLevels    = Error{/* contains filtered or unexported fields */} // ELOOP
	ErrTooManyLinks     = Error{/* contains filtered or unexported fields */} // EMLINK
	ErrTooManyOpenFiles = Error{/* contains filtered or unexported fields */} // ENFILE
	ErrTooManyUsers     = Error{/* contains filtered or unexported fields */} // EUSERS

	ErrTempUnavailable = Error{/* contains filtered or unexported fields */} // EAGAIN

	ErrUnknownGroup    = Error{/* contains filtered or unexported fields */} // EINVAL
	ErrUnknownOrBadFid = Error{/* contains filtered or unexported fields */} // EBADF
	ErrUnknownUser     = Error{/* contains filtered or unexported fields */} // EINVAL
)
View Source
var ErrUnexpectedMessageType = errors.New("unexpected message type")

Functions

func Serve

func Serve(ctx context.Context, rwc io.ReadWriteCloser, root Node, opts ...Option) error

Serve starts a 9p server over the provided io.ReadWriter that serves the root Node. The root Node should be a Dir.

func UnwrapValue

func UnwrapValue[T any](v any) (T, bool)

UnwrapValue is used on values to unwrap them until the requested type is found or until there is nothing else to unwrap (in which case, the second return value will be false).

Types

type DebugFlags

type DebugFlags uint32
const (
	DebugReceived DebugFlags = 0x01
	DebugSent     DebugFlags = 0x02
	DebugFlush    DebugFlags = 0x04
	DebugMessages DebugFlags = DebugReceived | DebugSent | DebugFlush
	DebugData     DebugFlags = 0x08

	DebugKnownErrors   DebugFlags = 0x10
	DebugUnknownErrors DebugFlags = 0x20
	DebugErrors        DebugFlags = DebugKnownErrors | DebugUnknownErrors

	DebugAll DebugFlags = DebugMessages | DebugErrors
)

type Dir

type Dir interface {
	Children() ([]Stat, error)
	Walk(name string) (Node, error)
}

Dir allows listing and walking to children.

type Error

type Error struct {
	// contains filtered or unexported fields
}

func (Error) Error

func (e Error) Error() string

type LineCmdRecv

type LineCmdRecv struct {
	Handler func(string) error
}

func (*LineCmdRecv) Open

func (lcr *LineCmdRecv) Open(mode message.OpenMode) (any, uint32, error)

type Mode

type Mode = stat.Mode

type Node

type Node interface {
	Stat() (Stat, error)
}

Node represents a simple filesystem node, that can return a stat

Types that implement this interface, can implement other interfaces to provide functionality:

  • Reading: io.ReaderAt, io.ReadSeeker, io.Reader (only sequential reads are allowed)
  • Writing: io.WriterAt, io.WriteSeeker, io.Writer (only sequential writes are allowed)
  • Closing: io.Closer
  • Opening: Opener
  • Directories: Dir

type OpenMode

type OpenMode = message.OpenMode

type Opener

type Opener interface {
	Open(OpenMode) (val any, iounit uint32, err error)
}

Opener allows Nodes to return new opened instances.

If the returned val is not Node, it is Wrapped with the current Node.

type Option

type Option func(*server)

func Debug

func Debug(flags DebugFlags) Option

func DefaultNow

func DefaultNow() Option

func DefaultOwner

func DefaultOwner(user, group string) Option

func Msize

func Msize(msize uint32) Option

func StatModifier

func StatModifier(sm StatModifierFn) Option

func Umask

func Umask(umask Mode) Option

type Qid

type Qid = qid.Qid

type Stat

type Stat = stat.Stat

type StatModifierFn

type StatModifierFn func(path []string, st *Stat, qidonly bool) error

type Unwrapper

type Unwrapper interface {
	// Unwraps a Node to maybe expose another interface
	//
	// The returned value might be an Unwrapper itself
	Unwrap() any
}

Unwrapper, when impleemnted by a Node, will have Unwrap() called on it before checking if it implements any interfaces the server requires (i.e Open, io.ReaderAt, etc).

type Wrapped

type Wrapped struct {
	Node
	Val any
}

Wrapped provides simple wrapping of a value with a Node.

func (*Wrapped) Unwrap

func (w *Wrapped) Unwrap() any

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL