msg.go 5.6 KB
Newer Older
F
fatedier 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// Copyright 2016 fatedier, fatedier@gmail.com
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package msg

F
fatedier 已提交
17
import "net"
F
fatedier 已提交
18 19

const (
F
fatedier 已提交
20 21 22 23 24 25 26 27 28 29 30 31
	TypeLogin                 = 'o'
	TypeLoginResp             = '1'
	TypeNewProxy              = 'p'
	TypeNewProxyResp          = '2'
	TypeCloseProxy            = 'c'
	TypeNewWorkConn           = 'w'
	TypeReqWorkConn           = 'r'
	TypeStartWorkConn         = 's'
	TypeNewVisitorConn        = 'v'
	TypeNewVisitorConnResp    = '3'
	TypePing                  = 'h'
	TypePong                  = '4'
F
fatedier 已提交
32
	TypeUDPPacket             = 'u'
F
fatedier 已提交
33 34 35 36 37
	TypeNatHoleVisitor        = 'i'
	TypeNatHoleClient         = 'n'
	TypeNatHoleResp           = 'm'
	TypeNatHoleClientDetectOK = 'd'
	TypeNatHoleSid            = '5'
F
fatedier 已提交
38 39 40
)

var (
F
fatedier 已提交
41
	msgTypeMap = map[byte]interface{}{
F
fatedier 已提交
42 43 44 45 46 47 48 49 50 51 52 53
		TypeLogin:                 Login{},
		TypeLoginResp:             LoginResp{},
		TypeNewProxy:              NewProxy{},
		TypeNewProxyResp:          NewProxyResp{},
		TypeCloseProxy:            CloseProxy{},
		TypeNewWorkConn:           NewWorkConn{},
		TypeReqWorkConn:           ReqWorkConn{},
		TypeStartWorkConn:         StartWorkConn{},
		TypeNewVisitorConn:        NewVisitorConn{},
		TypeNewVisitorConnResp:    NewVisitorConnResp{},
		TypePing:                  Ping{},
		TypePong:                  Pong{},
F
fatedier 已提交
54
		TypeUDPPacket:             UDPPacket{},
F
fatedier 已提交
55 56 57 58 59
		TypeNatHoleVisitor:        NatHoleVisitor{},
		TypeNatHoleClient:         NatHoleClient{},
		TypeNatHoleResp:           NatHoleResp{},
		TypeNatHoleClientDetectOK: NatHoleClientDetectOK{},
		TypeNatHoleSid:            NatHoleSid{},
F
fatedier 已提交
60
	}
F
fatedier 已提交
61
)
F
fatedier 已提交
62 63 64

// When frpc start, client send this message to login to server.
type Login struct {
F
fatedier 已提交
65 66 67 68 69 70 71
	Version      string            `json:"version"`
	Hostname     string            `json:"hostname"`
	Os           string            `json:"os"`
	Arch         string            `json:"arch"`
	User         string            `json:"user"`
	PrivilegeKey string            `json:"privilege_key"`
	Timestamp    int64             `json:"timestamp"`
F
fatedier 已提交
72
	RunID        string            `json:"run_id"`
F
fatedier 已提交
73
	Metas        map[string]string `json:"metas"`
F
fatedier 已提交
74 75 76 77 78 79

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

type LoginResp struct {
F
fatedier 已提交
80
	Version       string `json:"version"`
F
fatedier 已提交
81 82
	RunID         string `json:"run_id"`
	ServerUDPPort int    `json:"server_udp_port"`
F
fatedier 已提交
83
	Error         string `json:"error"`
F
fatedier 已提交
84 85 86 87
}

// When frpc login success, send this message to frps for running a new proxy.
type NewProxy struct {
F
fatedier 已提交
88 89 90 91 92 93 94
	ProxyName      string            `json:"proxy_name"`
	ProxyType      string            `json:"proxy_type"`
	UseEncryption  bool              `json:"use_encryption"`
	UseCompression bool              `json:"use_compression"`
	Group          string            `json:"group"`
	GroupKey       string            `json:"group_key"`
	Metas          map[string]string `json:"metas"`
F
fatedier 已提交
95 96

	// tcp and udp only
97
	RemotePort int `json:"remote_port"`
F
fatedier 已提交
98 99

	// http and https only
F
fatedier 已提交
100 101 102
	CustomDomains     []string          `json:"custom_domains"`
	SubDomain         string            `json:"subdomain"`
	Locations         []string          `json:"locations"`
F
fatedier 已提交
103 104
	HTTPUser          string            `json:"http_user"`
	HTTPPwd           string            `json:"http_pwd"`
F
fatedier 已提交
105 106
	HostHeaderRewrite string            `json:"host_header_rewrite"`
	Headers           map[string]string `json:"headers"`
F
fatedier 已提交
107 108 109

	// stcp
	Sk string `json:"sk"`
110 111 112

	// tcpmux
	Multiplexer string `json:"multiplexer"`
F
fatedier 已提交
113 114 115
}

type NewProxyResp struct {
116 117 118
	ProxyName  string `json:"proxy_name"`
	RemoteAddr string `json:"remote_addr"`
	Error      string `json:"error"`
F
fatedier 已提交
119 120
}

F
fatedier 已提交
121 122 123 124
type CloseProxy struct {
	ProxyName string `json:"proxy_name"`
}

F
fatedier 已提交
125
type NewWorkConn struct {
F
fatedier 已提交
126
	RunID        string `json:"run_id"`
127 128
	PrivilegeKey string `json:"privilege_key"`
	Timestamp    int64  `json:"timestamp"`
F
fatedier 已提交
129 130 131 132 133 134 135
}

type ReqWorkConn struct {
}

type StartWorkConn struct {
	ProxyName string `json:"proxy_name"`
F
fatedier 已提交
136 137 138 139
	SrcAddr   string `json:"src_addr"`
	DstAddr   string `json:"dst_addr"`
	SrcPort   uint16 `json:"src_port"`
	DstPort   uint16 `json:"dst_port"`
140
	Error     string `json:"error"`
F
fatedier 已提交
141 142
}

F
fatedier 已提交
143
type NewVisitorConn struct {
F
fatedier 已提交
144 145 146 147 148 149 150
	ProxyName      string `json:"proxy_name"`
	SignKey        string `json:"sign_key"`
	Timestamp      int64  `json:"timestamp"`
	UseEncryption  bool   `json:"use_encryption"`
	UseCompression bool   `json:"use_compression"`
}

F
fatedier 已提交
151
type NewVisitorConnResp struct {
F
fatedier 已提交
152 153 154 155
	ProxyName string `json:"proxy_name"`
	Error     string `json:"error"`
}

F
fatedier 已提交
156
type Ping struct {
157 158
	PrivilegeKey string `json:"privilege_key"`
	Timestamp    int64  `json:"timestamp"`
F
fatedier 已提交
159 160 161
}

type Pong struct {
162
	Error string `json:"error"`
F
fatedier 已提交
163
}
F
fatedier 已提交
164

F
fatedier 已提交
165
type UDPPacket struct {
F
fatedier 已提交
166 167 168 169
	Content    string       `json:"c"`
	LocalAddr  *net.UDPAddr `json:"l"`
	RemoteAddr *net.UDPAddr `json:"r"`
}
F
fatedier 已提交
170

F
fatedier 已提交
171
type NatHoleVisitor struct {
F
fatedier 已提交
172 173 174 175 176 177 178 179 180 181 182
	ProxyName string `json:"proxy_name"`
	SignKey   string `json:"sign_key"`
	Timestamp int64  `json:"timestamp"`
}

type NatHoleClient struct {
	ProxyName string `json:"proxy_name"`
	Sid       string `json:"sid"`
}

type NatHoleResp struct {
F
fatedier 已提交
183 184 185
	Sid         string `json:"sid"`
	VisitorAddr string `json:"visitor_addr"`
	ClientAddr  string `json:"client_addr"`
186
	Error       string `json:"error"`
F
fatedier 已提交
187 188
}

F
fatedier 已提交
189 190 191
type NatHoleClientDetectOK struct {
}

F
fatedier 已提交
192
type NatHoleSid struct {
F
fatedier 已提交
193
	Sid string `json:"sid"`
F
fatedier 已提交
194
}