msg

package
v0.69.1 Latest Latest
Warning

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

Go to latest
Published: Jun 1, 2026 License: Apache-2.0 Imports: 9 Imported by: 62

Documentation

Index

Constants

View Source
const (
	TypeLogin              byte = 'o'
	TypeLoginResp          byte = '1'
	TypeNewProxy           byte = 'p'
	TypeNewProxyResp       byte = '2'
	TypeCloseProxy         byte = 'c'
	TypeNewWorkConn        byte = 'w'
	TypeReqWorkConn        byte = 'r'
	TypeStartWorkConn      byte = 's'
	TypeNewVisitorConn     byte = 'v'
	TypeNewVisitorConnResp byte = '3'
	TypePing               byte = 'h'
	TypePong               byte = '4'
	TypeUDPPacket          byte = 'u'
	TypeNatHoleVisitor     byte = 'i'
	TypeNatHoleClient      byte = 'n'
	TypeNatHoleResp        byte = 'm'
	TypeNatHoleSid         byte = '5'
	TypeNatHoleReport      byte = '6'
)
View Source
const (
	V2TypeLogin              uint16 = 1
	V2TypeLoginResp          uint16 = 2
	V2TypeNewProxy           uint16 = 3
	V2TypeNewProxyResp       uint16 = 4
	V2TypeCloseProxy         uint16 = 5
	V2TypeNewWorkConn        uint16 = 6
	V2TypeReqWorkConn        uint16 = 7
	V2TypeStartWorkConn      uint16 = 8
	V2TypeNewVisitorConn     uint16 = 9
	V2TypeNewVisitorConnResp uint16 = 10
	V2TypePing               uint16 = 11
	V2TypePong               uint16 = 12
	V2TypeUDPPacket          uint16 = 13
	V2TypeNatHoleVisitor     uint16 = 14
	V2TypeNatHoleClient      uint16 = 15
	V2TypeNatHoleResp        uint16 = 16
	V2TypeNatHoleSid         uint16 = 17
	V2TypeNatHoleReport      uint16 = 18
)

Variables

View Source
var TypeNameNatHoleResp = reflect.TypeFor[NatHoleResp]().Name()

Functions

func AsyncHandler added in v0.53.0

func AsyncHandler(f func(Message)) func(Message)

func DecodeV2MessageFrameInto added in v0.69.0

func DecodeV2MessageFrameInto(f *wire.Frame, out Message) error

func EncodeV2MessageFrame added in v0.69.0

func EncodeV2MessageFrame(m Message) (*wire.Frame, error)

func ReadMsgInto

func ReadMsgInto(c io.Reader, msg Message) (err error)

func WriteMsg

func WriteMsg(c io.Writer, msg any) (err error)

Types

type ClientSpec added in v0.53.0

type ClientSpec struct {
	// Due to the support of VirtualClient, frps needs to know the client type in order to
	// differentiate the processing logic.
	// Optional values: ssh-tunnel
	Type string `json:"type,omitempty"`
	// If the value is true, the client will not require authentication.
	AlwaysAuthPass bool `json:"always_auth_pass,omitempty"`
}

type CloseProxy

type CloseProxy struct {
	ProxyName string `json:"proxy_name,omitempty"`
}

type Conn added in v0.69.0

type Conn struct {
	net.Conn
	// contains filtered or unexported fields
}

func NewConn added in v0.69.0

func NewConn(conn net.Conn, rw ReadWriter) *Conn

func (*Conn) Context added in v0.69.0

func (c *Conn) Context() context.Context

func (*Conn) ReadMsg added in v0.69.0

func (c *Conn) ReadMsg() (Message, error)

func (*Conn) ReadMsgInto added in v0.69.0

func (c *Conn) ReadMsgInto(m Message) error

func (*Conn) WithContext added in v0.69.0

func (c *Conn) WithContext(ctx context.Context)

func (*Conn) WriteMsg added in v0.69.0

func (c *Conn) WriteMsg(m Message) error

type Dispatcher added in v0.53.0

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

Dispatcher is used to send messages to net.Conn or register handlers for messages read from net.Conn.

func NewDispatcher added in v0.53.0

func NewDispatcher(rw ReadWriter) *Dispatcher

func (*Dispatcher) Done added in v0.53.0

func (d *Dispatcher) Done() chan struct{}

func (*Dispatcher) RegisterHandler added in v0.53.0

func (d *Dispatcher) RegisterHandler(msg Message, handler func(Message))

func (*Dispatcher) Run added in v0.53.0

func (d *Dispatcher) Run()

Run will block until io.EOF or some error occurs.

func (*Dispatcher) Send added in v0.53.0

func (d *Dispatcher) Send(m Message) error

type Login

type Login struct {
	Version      string            `json:"version,omitempty"`
	Hostname     string            `json:"hostname,omitempty"`
	Os           string            `json:"os,omitempty"`
	Arch         string            `json:"arch,omitempty"`
	User         string            `json:"user,omitempty"`
	PrivilegeKey string            `json:"privilege_key,omitempty"`
	Timestamp    int64             `json:"timestamp,omitempty"`
	RunID        string            `json:"run_id,omitempty"`
	ClientID     string            `json:"client_id,omitempty"`
	Metas        map[string]string `json:"metas,omitempty"`

	// Currently only effective for VirtualClient.
	ClientSpec ClientSpec `json:"client_spec,omitempty"`

	// Some global configures.
	PoolCount int `json:"pool_count,omitempty"`
}

When frpc start, client send this message to login to server.

type LoginResp

type LoginResp struct {
	Version string `json:"version,omitempty"`
	RunID   string `json:"run_id,omitempty"`
	Error   string `json:"error,omitempty"`
}

type Message

type Message = jsonMsg.Message

func DecodeV2MessageFrame added in v0.69.0

func DecodeV2MessageFrame(f *wire.Frame) (Message, error)

func ReadMsg

func ReadMsg(c io.Reader) (msg Message, err error)

type NatHoleClient

type NatHoleClient struct {
	TransactionID string   `json:"transaction_id,omitempty"`
	ProxyName     string   `json:"proxy_name,omitempty"`
	Sid           string   `json:"sid,omitempty"`
	MappedAddrs   []string `json:"mapped_addrs,omitempty"`
	AssistedAddrs []string `json:"assisted_addrs,omitempty"`
}

type NatHoleDetectBehavior added in v0.49.0

type NatHoleDetectBehavior struct {
	Role              string       `json:"role,omitempty"` // sender or receiver
	Mode              int          `json:"mode,omitempty"` // 0, 1, 2...
	TTL               int          `json:"ttl,omitempty"`
	SendDelayMs       int          `json:"send_delay_ms,omitempty"`
	ReadTimeoutMs     int          `json:"read_timeout,omitempty"`
	CandidatePorts    []PortsRange `json:"candidate_ports,omitempty"`
	SendRandomPorts   int          `json:"send_random_ports,omitempty"`
	ListenRandomPorts int          `json:"listen_random_ports,omitempty"`
}

type NatHoleReport added in v0.49.0

type NatHoleReport struct {
	Sid     string `json:"sid,omitempty"`
	Success bool   `json:"success,omitempty"`
}

type NatHoleResp

type NatHoleResp struct {
	TransactionID  string                `json:"transaction_id,omitempty"`
	Sid            string                `json:"sid,omitempty"`
	Protocol       string                `json:"protocol,omitempty"`
	CandidateAddrs []string              `json:"candidate_addrs,omitempty"`
	AssistedAddrs  []string              `json:"assisted_addrs,omitempty"`
	DetectBehavior NatHoleDetectBehavior `json:"detect_behavior,omitempty"`
	Error          string                `json:"error,omitempty"`
}

type NatHoleSid

type NatHoleSid struct {
	TransactionID string `json:"transaction_id,omitempty"`
	Sid           string `json:"sid,omitempty"`
	Response      bool   `json:"response,omitempty"`
	Nonce         string `json:"nonce,omitempty"`
}

type NatHoleVisitor

type NatHoleVisitor struct {
	TransactionID string   `json:"transaction_id,omitempty"`
	ProxyName     string   `json:"proxy_name,omitempty"`
	PreCheck      bool     `json:"pre_check,omitempty"`
	Protocol      string   `json:"protocol,omitempty"`
	SignKey       string   `json:"sign_key,omitempty"`
	Timestamp     int64    `json:"timestamp,omitempty"`
	MappedAddrs   []string `json:"mapped_addrs,omitempty"`
	AssistedAddrs []string `json:"assisted_addrs,omitempty"`
}

type NewProxy

type NewProxy struct {
	ProxyName          string            `json:"proxy_name,omitempty"`
	ProxyType          string            `json:"proxy_type,omitempty"`
	UseEncryption      bool              `json:"use_encryption,omitempty"`
	UseCompression     bool              `json:"use_compression,omitempty"`
	BandwidthLimit     string            `json:"bandwidth_limit,omitempty"`
	BandwidthLimitMode string            `json:"bandwidth_limit_mode,omitempty"`
	Group              string            `json:"group,omitempty"`
	GroupKey           string            `json:"group_key,omitempty"`
	Metas              map[string]string `json:"metas,omitempty"`
	Annotations        map[string]string `json:"annotations,omitempty"`

	// tcp and udp only
	RemotePort int `json:"remote_port,omitempty"`

	// http and https only
	CustomDomains     []string          `json:"custom_domains,omitempty"`
	SubDomain         string            `json:"subdomain,omitempty"`
	Locations         []string          `json:"locations,omitempty"`
	HTTPUser          string            `json:"http_user,omitempty"`
	HTTPPwd           string            `json:"http_pwd,omitempty"`
	HostHeaderRewrite string            `json:"host_header_rewrite,omitempty"`
	Headers           map[string]string `json:"headers,omitempty"`
	ResponseHeaders   map[string]string `json:"response_headers,omitempty"`
	RouteByHTTPUser   string            `json:"route_by_http_user,omitempty"`

	// stcp, sudp, xtcp
	Sk         string   `json:"sk,omitempty"`
	AllowUsers []string `json:"allow_users,omitempty"`

	// tcpmux
	Multiplexer string `json:"multiplexer,omitempty"`
}

When frpc login success, send this message to frps for running a new proxy.

type NewProxyResp

type NewProxyResp struct {
	ProxyName  string `json:"proxy_name,omitempty"`
	RemoteAddr string `json:"remote_addr,omitempty"`
	Error      string `json:"error,omitempty"`
}

type NewVisitorConn

type NewVisitorConn struct {
	RunID          string `json:"run_id,omitempty"`
	ProxyName      string `json:"proxy_name,omitempty"`
	SignKey        string `json:"sign_key,omitempty"`
	Timestamp      int64  `json:"timestamp,omitempty"`
	UseEncryption  bool   `json:"use_encryption,omitempty"`
	UseCompression bool   `json:"use_compression,omitempty"`
}

type NewVisitorConnResp

type NewVisitorConnResp struct {
	ProxyName string `json:"proxy_name,omitempty"`
	Error     string `json:"error,omitempty"`
}

type NewWorkConn

type NewWorkConn struct {
	RunID        string `json:"run_id,omitempty"`
	PrivilegeKey string `json:"privilege_key,omitempty"`
	Timestamp    int64  `json:"timestamp,omitempty"`
}

type Ping

type Ping struct {
	PrivilegeKey string `json:"privilege_key,omitempty"`
	Timestamp    int64  `json:"timestamp,omitempty"`
}

type Pong

type Pong struct {
	Error string `json:"error,omitempty"`
}

type PortsRange added in v0.49.0

type PortsRange struct {
	From int `json:"from,omitempty"`
	To   int `json:"to,omitempty"`
}

type ReadWriter added in v0.69.0

type ReadWriter interface {
	ReadMsg() (Message, error)
	ReadMsgInto(Message) error
	WriteMsg(Message) error
}

func NewReadWriter added in v0.69.0

func NewReadWriter(rw io.ReadWriter, wireProtocol string) ReadWriter

NewReadWriter wraps rw with the message codec for the selected wire protocol. An empty protocol keeps the historical v1 behavior for tests and older call sites.

func NewV1ReadWriter added in v0.69.0

func NewV1ReadWriter(rw io.ReadWriter) ReadWriter

type ReqWorkConn

type ReqWorkConn struct{}

type StartWorkConn

type StartWorkConn struct {
	ProxyName string `json:"proxy_name,omitempty"`
	SrcAddr   string `json:"src_addr,omitempty"`
	DstAddr   string `json:"dst_addr,omitempty"`
	SrcPort   uint16 `json:"src_port,omitempty"`
	DstPort   uint16 `json:"dst_port,omitempty"`
	Error     string `json:"error,omitempty"`
}

type UDPPacket

type UDPPacket struct {
	Content    []byte       `json:"c,omitempty"`
	LocalAddr  *net.UDPAddr `json:"l,omitempty"`
	RemoteAddr *net.UDPAddr `json:"r,omitempty"`
}

type V1ReadWriter added in v0.69.0

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

func (*V1ReadWriter) ReadMsg added in v0.69.0

func (rw *V1ReadWriter) ReadMsg() (Message, error)

func (*V1ReadWriter) ReadMsgInto added in v0.69.0

func (rw *V1ReadWriter) ReadMsgInto(m Message) error

func (*V1ReadWriter) WriteMsg added in v0.69.0

func (rw *V1ReadWriter) WriteMsg(m Message) error

type V2ReadWriter added in v0.69.0

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

func NewV2ReadWriter added in v0.69.0

func NewV2ReadWriter(rw io.ReadWriter) *V2ReadWriter

func NewV2ReadWriterWithConn added in v0.69.0

func NewV2ReadWriterWithConn(conn *wire.Conn) *V2ReadWriter

func (*V2ReadWriter) ReadMsg added in v0.69.0

func (rw *V2ReadWriter) ReadMsg() (Message, error)

func (*V2ReadWriter) ReadMsgInto added in v0.69.0

func (rw *V2ReadWriter) ReadMsgInto(m Message) error

func (*V2ReadWriter) WireConn added in v0.69.0

func (rw *V2ReadWriter) WireConn() *wire.Conn

func (*V2ReadWriter) WriteMsg added in v0.69.0

func (rw *V2ReadWriter) WriteMsg(m Message) error

Jump to

Keyboard shortcuts

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