Files
go-i2ptunnel/lib/tcp/server/new.go
2025-02-02 23:28:52 -05:00

35 lines
838 B
Go

package tcpserver
import (
"net"
"strings"
i2pconv "github.com/go-i2p/go-i2ptunnel-config/lib"
"github.com/go-i2p/onramp"
)
// NewTCPServer creates a new TCP Server tunnel with the given configuration
func NewTCPServer(config i2pconv.TunnelConfig, samAddr string) (*TCPServer, error) {
keys, options, err := config.SAMTunnel()
if err != nil {
return nil, err
}
name := strings.ReplaceAll(config.Name, " ", "_")
garlic, err := onramp.NewGarlic(name, samAddr, options)
if err != nil {
return nil, err
}
garlic.ServiceKeys = keys
localPort, _ := strconv.Atoi(config.Port)
localAddr := net.JoinHostPort(config.Interface, localPort)
addr, err := net.ResolveTCPAddr("tcp", localAddr)
if err != nil {
return nil, err
}
return &TCPServer{
TunnelConfig: config,
Garlic: garlic,
Addr: addr,
}, nil
}