device

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Aug 30, 2023 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const (
	QueueOutboundSize       = 1024
	QueueInboundSize        = 1024
	QueueHandshakeBoundSize = 1024
)

Variables

View Source
var (
	AllIPs = "0.0.0.0/0"
)
View Source
var (
	PREFIX = "/api/v1/"
)

Functions

func AuthCheck

func AuthCheck() func(handler Handler) Handler

AuthCheck Middleware auth handler to check user login, if not, return an error tell user to login first.

func Chain

func Chain(middlewares ...Middleware) func(Handler) Handler

Chain wrap middleware in order execute

func Decode

func Decode() func(Handler) Handler

func Encode

func Encode() func(Handler) Handler

Encode Middleware encrypt use exchangeKey

func Login

func Login(username, password string, cfg *util.NodeCfg) error

func NewClient

func NewClient(base string) *client

func RunJoinNetwork

func RunJoinNetwork(cfg *util.Config, networkId string) error

func RunLeaveNetwork

func RunLeaveNetwork(cfg *util.Config, networkId string) error

func Start

func Start(cfg *util.Config) error

func Status

func Status(cfg *util.NodeCfg) error

func Stop

func Stop(cfg *util.NodeCfg) error

Types

type ClientManager

type ClientManager struct {
	ConsoleClient *client
	LocalClient   *client
}

func NewManager

func NewManager(cfg *util.NodeCfg) *ClientManager

func (*ClientManager) JoinLocalFvpn

func (c *ClientManager) JoinLocalFvpn(req JoinRequest) (*JoinResponse, error)

JoinLocalFvpn call fvpn to create device handle traffic

func (*ClientManager) JoinNetwork

func (c *ClientManager) JoinNetwork(networkId string) (*JoinResponse, error)

func (*ClientManager) LeaveFvpnLocal

func (c *ClientManager) LeaveFvpnLocal(req LeaveRequest) (*LeaveResponse, error)

func (*ClientManager) LeaveNetwork

func (c *ClientManager) LeaveNetwork(networkId string) (*LeaveResponse, error)

type Frame

type Frame struct {
	Ctx context.Context
	ST  time.Time
	sync.Mutex
	Buff       []byte
	Packet     []byte
	Size       int
	NetworkId  string
	UserId     [8]byte
	RemoteAddr *net.UDPAddr //remote socket endpoint
	SrcIP      net.IP
	DstIP      net.IP
	FrameType  uint16
	Peer       *Peer
	Encrypt    bool
}

func NewFrame

func NewFrame() *Frame

func (*Frame) Clear

func (f *Frame) Clear()

func (*Frame) Context

func (f *Frame) Context() context.Context

func (*Frame) GetPeer

func (f *Frame) GetPeer() *Peer

func (*Frame) UidString

func (f *Frame) UidString() string

type Handler

type Handler interface {
	Handle(ctx context.Context, frame *Frame) error
}

func WithMiddlewares

func WithMiddlewares(handler Handler, middlewares ...Middleware) Handler

type HandlerFunc

type HandlerFunc func(context.Context, *Frame) error

func (HandlerFunc) Handle

func (f HandlerFunc) Handle(ctx context.Context, frame *Frame) error

type InBoundQueue

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

func NewInBoundQueue

func NewInBoundQueue() *InBoundQueue

func (*InBoundQueue) GetPktFromInbound

func (o *InBoundQueue) GetPktFromInbound() chan *Frame

func (*InBoundQueue) PutPktToInbound

func (o *InBoundQueue) PutPktToInbound(pkt *Frame)

type InitResponse

type InitResponse struct {
	IP    string `json:"ip"`
	Mask  string `json:"mask"`
	AppId string `json:"appId"`
}

type Instance

type Instance struct {
	UserId string `json:"userId"`
	Addr   string `json:"addr"`
	Status string `json:""` //live/died
}

type Interface

type Interface interface {
	Set(userId, ip string, peer *Peer) error
	Get(userId, ip string) (*Peer, error)
	Lists(userId string) PeerMap
}

func NewCache

func NewCache(driver string) Interface

type JoinRequest

type JoinRequest struct {
	NetWorkId string `json:"networkId"`
	CIDR      string `json:"Cidr"`
}

type JoinResponse

type JoinResponse struct {
	CIDR    string `json:"Cidr"`
	IP      string `json:"ip"`
	Name    string `json:"name"`
	Network string `json:"network"`
}

type LeaveRequest

type LeaveRequest struct {
	JoinRequest
}

type LeaveResponse

type LeaveResponse struct {
	JoinResponse
}

type LoginRequest

type LoginRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

type LoginResponse

type LoginResponse struct {
	Token  string `json:"token"`
	UserId string `json:"userId"`
}

type Middleware

type Middleware func(Handler) Handler

type NetworkManager

type NetworkManager interface {
	JoinNet(userId, cidr string) error
	Leave(userId, cidr string) error
	LeaveNet(userId, cidr string) error
	Access(userId, cidr string) bool
}

NetworkManager Join a network like : 192.168.0.1/24 if you give 192.168.0.1, default is 24

func NewNetworkManager

func NewNetworkManager(userId string) NetworkManager

type Node

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

Node is a dev in any os.

func NewNode

func NewNode(iface tun.Device, conn conn.Interface, cfg *util.NodeCfg) (*Node, error)

func (*Node) AllowNetwork

func (n *Node) AllowNetwork() func(Handler) Handler

AllowNetwork valid user can join a network or a node, so here will check

func (*Node) Close

func (n *Node) Close() error

func (*Node) HttpServer

func (n *Node) HttpServer() error

func (*Node) NewPeer

func (n *Node) NewPeer(uid, ip string, pk security.NoisePublicKey, cache Interface) *Peer

func (*Node) PutPktToInbound

func (n *Node) PutPktToInbound(pkt *Frame)

func (*Node) PutPktToOutbound

func (n *Node) PutPktToOutbound(pkt *Frame)

func (*Node) ReadFromTun

func (n *Node) ReadFromTun()

func (*Node) ReadFromUdp

func (n *Node) ReadFromUdp()

func (*Node) WriteToDevice

func (n *Node) WriteToDevice()

func (*Node) WriteToUDP

func (n *Node) WriteToUDP()

type OutBoundQueue

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

func NewOutBoundQueue

func NewOutBoundQueue() *OutBoundQueue

func (*OutBoundQueue) GetPktFromOutbound

func (o *OutBoundQueue) GetPktFromOutbound() chan *Frame

func (*OutBoundQueue) PutPktToOutbound

func (o *OutBoundQueue) PutPktToOutbound(pkt *Frame)

type Peer

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

func (*Peer) GetCodec

func (p *Peer) GetCodec() security.Codec

func (*Peer) GetEndpoint

func (p *Peer) GetEndpoint() conn.Endpoint

func (*Peer) GetIP

func (p *Peer) GetIP() string

func (*Peer) GetP2P

func (p *Peer) GetP2P() bool

func (*Peer) GetStatus

func (p *Peer) GetStatus() bool

func (*Peer) PutPktToOutbound

func (p *Peer) PutPktToOutbound(pkt *Frame)

func (*Peer) SetCodec

func (p *Peer) SetCodec(cipherFunc security.Codec)

func (*Peer) SetEndpoint

func (p *Peer) SetEndpoint(ep conn.Endpoint)

func (*Peer) SetMode

func (p *Peer) SetMode(mode int)

func (*Peer) SetP2P

func (p *Peer) SetP2P(p2p bool)

func (*Peer) SetStatus

func (p *Peer) SetStatus(status bool)

func (*Peer) Start

func (p *Peer) Start()

type PeerMap

type PeerMap map[string]*Value

type Response

type Response struct {
	Code    int         `json:"code"`
	Result  interface{} `json:"data"`
	Message string      `json:"msg"`
}

func HttpError

func HttpError(message string) Response

func HttpOK

func HttpOK(data interface{}) Response

type RouterManager

type RouterManager interface {
	AddRouter(cidr string) error
	RemoveRouter(cidr string) error
}

func NewRouter

func NewRouter(cidr, name, deviceIP string) RouterManager

type StatusResponse

type StatusResponse struct {
	Status  string `json:"status"`
	Version string `json:"version"`
}

type StopResponse

type StopResponse struct {
	Result string `json:"result"`
}

type Value

type Value struct {
	Cidr string
	Peer *Peer
	Time time.Time
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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