Refactor: autonomize core package

This commit is contained in:
xjasonlyu
2021-02-08 20:04:51 +08:00
parent 203e545241
commit ae77a8a009
18 changed files with 94 additions and 99 deletions

View File

@@ -1,10 +0,0 @@
package stack
import (
"github.com/xjasonlyu/tun2socks/common/adapter"
)
type Handler interface {
Add(adapter.TCPConn)
AddPacket(adapter.UDPPacket)
}

View File

@@ -2,6 +2,8 @@
package stack
import (
"github.com/xjasonlyu/tun2socks/core"
"gvisor.dev/gvisor/pkg/tcpip"
"gvisor.dev/gvisor/pkg/tcpip/network/ipv4"
"gvisor.dev/gvisor/pkg/tcpip/network/ipv6"
@@ -14,12 +16,12 @@ import (
type Stack struct {
*stack.Stack
handler Handler
handler core.Handler
nicID tcpip.NICID
}
// New allocates a new *Stack with given options.
func New(ep stack.LinkEndpoint, handler Handler, opts ...Option) (*Stack, error) {
func New(ep stack.LinkEndpoint, handler core.Handler, opts ...Option) (*Stack, error) {
s := &Stack{
Stack: stack.New(stack.Options{
NetworkProtocols: []stack.NetworkProtocolFactory{

View File

@@ -5,10 +5,9 @@ import (
"net"
"time"
"github.com/xjasonlyu/tun2socks/common/adapter"
"gvisor.dev/gvisor/pkg/tcpip"
"gvisor.dev/gvisor/pkg/tcpip/adapters/gonet"
"gvisor.dev/gvisor/pkg/tcpip/stack"
"gvisor.dev/gvisor/pkg/tcpip/transport/tcp"
"gvisor.dev/gvisor/pkg/waiter"
)
@@ -50,15 +49,8 @@ func withTCPHandler() Option {
conn := &tcpConn{
Conn: gonet.NewTCPConn(&wq, ep),
metadata: &adapter.Metadata{
Net: adapter.TCP,
SrcIP: net.IP(id.RemoteAddress),
SrcPort: id.RemotePort,
DstIP: net.IP(id.LocalAddress),
DstPort: id.LocalPort,
},
id: &id,
}
s.handler.Add(conn)
})
s.SetTransportProtocolHandler(tcp.ProtocolNumber, tcpForwarder.HandlePacket)
@@ -83,9 +75,9 @@ func setKeepalive(ep tcpip.Endpoint) error {
type tcpConn struct {
net.Conn
metadata *adapter.Metadata
id *stack.TransportEndpointID
}
func (c *tcpConn) Metadata() *adapter.Metadata {
return c.metadata
func (c *tcpConn) ID() *stack.TransportEndpointID {
return c.id
}

View File

@@ -4,8 +4,6 @@ import (
"fmt"
"net"
"github.com/xjasonlyu/tun2socks/common/adapter"
"gvisor.dev/gvisor/pkg/tcpip"
"gvisor.dev/gvisor/pkg/tcpip/buffer"
"gvisor.dev/gvisor/pkg/tcpip/header"
@@ -39,18 +37,11 @@ func withUDPHandler() Option {
packet := &udpPacket{
s: s,
id: id,
id: &id,
nicID: pkt.NICID,
netHdr: pkt.Network(),
netProto: pkt.NetworkProtocolNumber,
payload: pkt.Data.ToView(),
metadata: &adapter.Metadata{
Net: adapter.UDP,
SrcIP: net.IP(id.RemoteAddress),
SrcPort: id.RemotePort,
DstIP: net.IP(id.LocalAddress),
DstPort: id.LocalPort,
},
}
s.handler.AddPacket(packet)
@@ -63,12 +54,11 @@ func withUDPHandler() Option {
type udpPacket struct {
s *Stack
id stack.TransportEndpointID
id *stack.TransportEndpointID
nicID tcpip.NICID
netHdr header.Network
netProto tcpip.NetworkProtocolNumber
payload []byte
metadata *adapter.Metadata
}
func (p *udpPacket) Data() []byte {
@@ -79,12 +69,12 @@ func (p *udpPacket) Drop() {
/* Release */
}
func (p *udpPacket) LocalAddr() net.Addr {
return &net.UDPAddr{IP: net.IP(p.id.LocalAddress), Port: int(p.id.LocalPort)}
func (p *udpPacket) ID() *stack.TransportEndpointID {
return p.id
}
func (p *udpPacket) Metadata() *adapter.Metadata {
return p.metadata
func (p *udpPacket) LocalAddr() net.Addr {
return &net.UDPAddr{IP: net.IP(p.id.LocalAddress), Port: int(p.id.LocalPort)}
}
func (p *udpPacket) RemoteAddr() net.Addr {