mirror of
https://github.com/lwch/natpass.git
synced 2024-04-21 12:41:54 +00:00
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"natpass/code/client/global"
|
|
"natpass/code/network"
|
|
|
|
"github.com/lwch/runtime"
|
|
)
|
|
|
|
const cidLength = 32
|
|
|
|
func createTunnel(ctx context.Context, cfg global.Tunnel, cli network.Natpass_ControlClient, id string) string {
|
|
cid, err := runtime.UUID(cidLength)
|
|
runtime.Assert(err)
|
|
sendConnect(cli, cid, cfg, id, cfg.Target)
|
|
return cid
|
|
}
|
|
|
|
func sendConnect(cli network.Natpass_ControlClient, cid string, cfg global.Tunnel,
|
|
from, to string) {
|
|
tpy := network.ConnectRequest_tcp
|
|
if cfg.Type != "tcp" {
|
|
tpy = network.ConnectRequest_udp
|
|
}
|
|
err := cli.Send(&network.ControlData{
|
|
XType: network.ControlData_connect_req,
|
|
From: from,
|
|
To: to,
|
|
Payload: &network.ControlData_Creq{
|
|
Creq: &network.ConnectRequest{
|
|
Name: cfg.Name,
|
|
Cid: cid,
|
|
XType: tpy,
|
|
Addr: cfg.RemoteAddr,
|
|
Port: uint32(cfg.RemotePort),
|
|
},
|
|
},
|
|
})
|
|
runtime.Assert(err)
|
|
}
|
|
|
|
func connectResponse(cli network.Natpass_ControlClient, payload *network.ConnectResponse, from, to string) {
|
|
cli.Send(&network.ControlData{
|
|
XType: network.ControlData_connect_rep,
|
|
From: from,
|
|
To: to,
|
|
Payload: &network.ControlData_Crep{
|
|
Crep: payload,
|
|
},
|
|
})
|
|
}
|