38 lines
1.3 KiB
Go
38 lines
1.3 KiB
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
// Package drive provides a filesystem that allows sharing folders between
|
|
// Tailscale nodes using WebDAV. The actual implementation of the core Taildrive
|
|
// functionality lives in package driveimpl. These packages are separated to
|
|
// allow users of Taildrive to refer to the interfaces without having a hard
|
|
// dependency on Taildrive, so that programs which don't actually use Taildrive can
|
|
// avoid its transitive dependencies.
|
|
package drive
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
)
|
|
|
|
// Remote represents a remote Taildrive node.
|
|
type Remote struct {
|
|
Name string
|
|
URL string
|
|
Available func() bool
|
|
}
|
|
|
|
// FileSystemForLocal is the Taildrive filesystem exposed to local clients. It
|
|
// provides a unified WebDAV interface to remote Taildrive shares on other nodes.
|
|
type FileSystemForLocal interface {
|
|
// HandleConn handles connections from local WebDAV clients
|
|
HandleConn(conn net.Conn, remoteAddr net.Addr) error
|
|
|
|
// SetRemotes sets the complete set of remotes on the given tailnet domain
|
|
// using a map of name -> url. If transport is specified, that transport
|
|
// will be used to connect to these remotes.
|
|
SetRemotes(domain string, remotes []*Remote, transport http.RoundTripper)
|
|
|
|
// Close() stops serving the WebDAV content
|
|
Close() error
|
|
}
|