123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package nfsserv
- import (
- "fmt"
- "net"
- "strconv"
- "github.com/smallfz/libnfs-go/backend"
- "github.com/smallfz/libnfs-go/memfs"
- server "github.com/smallfz/libnfs-go/server"
- "imuslab.com/arozos/mod/fileservers"
- "imuslab.com/arozos/mod/info/logger"
- "imuslab.com/arozos/mod/permission"
- "imuslab.com/arozos/mod/user"
- )
- type Option struct {
- UserManager *user.UserHandler
- ListeningPort int
- AllowAccessGroup []*permission.PermissionGroup
- Logger *logger.Logger
- }
- type Manager struct {
- server *server.Server //NFS server
- tcpListener net.Listener //Underlaying TCP connection lisener
- isRunning bool
- Option *Option
- }
- // Create a new NFS Server
- func NewNfsServer(option Option) *Manager {
- if option.Logger == nil {
- //Create a new one
- option.Logger, _ = logger.NewTmpLogger()
- }
- return &Manager{
- server: nil,
- isRunning: false,
- Option: &option,
- }
- }
- // Interfaces required for registering File Server in ArozOS
- func (s *Manager) IsRunning() bool {
- return s.isRunning
- }
- func (s *Manager) GetEndpoints(userinfo *user.User) []*fileservers.Endpoint {
- eps := []*fileservers.Endpoint{}
- eps = append(eps, &fileservers.Endpoint{
- ProtocolName: "\\\\",
- Port: s.Option.ListeningPort,
- Subpath: "",
- })
- return eps
- }
- func (s *Manager) ServerToggle(enabled bool) error {
- if s.isRunning {
- return s.Stop()
- } else {
- return s.Start()
- }
- }
- // Wrapper for logger PrintAndLog
- func (s *Manager) Log(message string, err error) {
- s.Option.Logger.PrintAndLog("NFS", message, err)
- }
- // TODO: Link this to arozfs
- func (s *Manager) Start() error {
- mfs := memfs.NewMemFS()
- backend := backend.New(mfs)
- svr, err := server.NewServerTCP(":"+strconv.Itoa(s.Option.ListeningPort), backend)
- if err != nil {
- s.Log("failed to start NFS Server", err)
- return err
- }
- s.Log("Server started listening on "+":"+strconv.Itoa(s.Option.ListeningPort), nil)
- s.server = svr
- s.isRunning = true
- go func() {
- if err := svr.Serve(); err != nil {
- fmt.Printf("svr.Serve: %v\n", err)
- }
- }()
- return nil
- }
- func (s *Manager) Stop() error {
- return nil
- }
|