-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add unix/serial dialer and connector
- Loading branch information
Showing
9 changed files
with
288 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package serial | ||
|
||
import ( | ||
"context" | ||
"net" | ||
|
||
"github.com/go-gost/core/connector" | ||
md "github.com/go-gost/core/metadata" | ||
"github.com/go-gost/x/registry" | ||
) | ||
|
||
func init() { | ||
registry.ConnectorRegistry().Register("serial", NewConnector) | ||
} | ||
|
||
type serialConnector struct { | ||
options connector.Options | ||
} | ||
|
||
func NewConnector(opts ...connector.Option) connector.Connector { | ||
options := connector.Options{} | ||
for _, opt := range opts { | ||
opt(&options) | ||
} | ||
|
||
return &serialConnector{ | ||
options: options, | ||
} | ||
} | ||
|
||
func (c *serialConnector) Init(md md.Metadata) (err error) { | ||
return nil | ||
} | ||
|
||
func (c *serialConnector) Connect(ctx context.Context, conn net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) { | ||
log := c.options.Logger.WithFields(map[string]any{ | ||
"remote": conn.RemoteAddr().String(), | ||
"local": conn.LocalAddr().String(), | ||
"network": network, | ||
"address": address, | ||
}) | ||
log.Debugf("connect %s/%s", address, network) | ||
|
||
return conn, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package tcp | ||
|
||
import ( | ||
"context" | ||
"net" | ||
|
||
"github.com/go-gost/core/connector" | ||
md "github.com/go-gost/core/metadata" | ||
"github.com/go-gost/x/registry" | ||
) | ||
|
||
func init() { | ||
registry.ConnectorRegistry().Register("tcp", NewConnector) | ||
} | ||
|
||
type tcpConnector struct { | ||
options connector.Options | ||
} | ||
|
||
func NewConnector(opts ...connector.Option) connector.Connector { | ||
options := connector.Options{} | ||
for _, opt := range opts { | ||
opt(&options) | ||
} | ||
|
||
return &tcpConnector{ | ||
options: options, | ||
} | ||
} | ||
|
||
func (c *tcpConnector) Init(md md.Metadata) (err error) { | ||
return nil | ||
} | ||
|
||
func (c *tcpConnector) Connect(ctx context.Context, conn net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) { | ||
log := c.options.Logger.WithFields(map[string]any{ | ||
"remote": conn.RemoteAddr().String(), | ||
"local": conn.LocalAddr().String(), | ||
"network": network, | ||
"address": address, | ||
}) | ||
log.Debugf("connect %s/%s", address, network) | ||
|
||
return conn, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package unix | ||
|
||
import ( | ||
"context" | ||
"net" | ||
|
||
"github.com/go-gost/core/connector" | ||
md "github.com/go-gost/core/metadata" | ||
"github.com/go-gost/x/registry" | ||
) | ||
|
||
func init() { | ||
registry.ConnectorRegistry().Register("unix", NewConnector) | ||
} | ||
|
||
type unixConnector struct { | ||
options connector.Options | ||
} | ||
|
||
func NewConnector(opts ...connector.Option) connector.Connector { | ||
options := connector.Options{} | ||
for _, opt := range opts { | ||
opt(&options) | ||
} | ||
|
||
return &unixConnector{ | ||
options: options, | ||
} | ||
} | ||
|
||
func (c *unixConnector) Init(md md.Metadata) (err error) { | ||
return nil | ||
} | ||
|
||
func (c *unixConnector) Connect(ctx context.Context, conn net.Conn, network, address string, opts ...connector.ConnectOption) (net.Conn, error) { | ||
log := c.options.Logger.WithFields(map[string]any{ | ||
"remote": conn.RemoteAddr().String(), | ||
"local": conn.LocalAddr().String(), | ||
"network": network, | ||
"address": address, | ||
}) | ||
log.Debugf("connect %s/%s", address, network) | ||
|
||
return conn, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package serial | ||
|
||
import ( | ||
"context" | ||
"net" | ||
|
||
"github.com/go-gost/core/dialer" | ||
"github.com/go-gost/core/logger" | ||
md "github.com/go-gost/core/metadata" | ||
serial_util "github.com/go-gost/x/internal/util/serial" | ||
"github.com/go-gost/x/registry" | ||
goserial "github.com/tarm/serial" | ||
) | ||
|
||
func init() { | ||
registry.DialerRegistry().Register("serial", NewDialer) | ||
} | ||
|
||
type serialDialer struct { | ||
md metadata | ||
logger logger.Logger | ||
} | ||
|
||
func NewDialer(opts ...dialer.Option) dialer.Dialer { | ||
options := &dialer.Options{} | ||
for _, opt := range opts { | ||
opt(options) | ||
} | ||
|
||
return &serialDialer{ | ||
logger: options.Logger, | ||
} | ||
} | ||
|
||
func (d *serialDialer) Init(md md.Metadata) (err error) { | ||
return d.parseMetadata(md) | ||
} | ||
|
||
func (d *serialDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOption) (net.Conn, error) { | ||
var options dialer.DialOptions | ||
for _, opt := range opts { | ||
opt(&options) | ||
} | ||
|
||
cfg := serial_util.ParseConfigFromAddr(addr) | ||
port, err := goserial.OpenPort(cfg) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
return serial_util.NewConn(port, &serial_util.Addr{Port: cfg.Name}, nil), nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package serial | ||
|
||
import ( | ||
md "github.com/go-gost/core/metadata" | ||
) | ||
|
||
type metadata struct { | ||
} | ||
|
||
func (d *serialDialer) parseMetadata(md md.Metadata) (err error) { | ||
return | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package unix | ||
|
||
import ( | ||
"context" | ||
"net" | ||
|
||
"github.com/go-gost/core/dialer" | ||
"github.com/go-gost/core/logger" | ||
md "github.com/go-gost/core/metadata" | ||
"github.com/go-gost/x/registry" | ||
) | ||
|
||
func init() { | ||
registry.DialerRegistry().Register("unix", NewDialer) | ||
} | ||
|
||
type unixDialer struct { | ||
md metadata | ||
logger logger.Logger | ||
} | ||
|
||
func NewDialer(opts ...dialer.Option) dialer.Dialer { | ||
options := &dialer.Options{} | ||
for _, opt := range opts { | ||
opt(options) | ||
} | ||
|
||
return &unixDialer{ | ||
logger: options.Logger, | ||
} | ||
} | ||
|
||
func (d *unixDialer) Init(md md.Metadata) (err error) { | ||
return d.parseMetadata(md) | ||
} | ||
|
||
func (d *unixDialer) Dial(ctx context.Context, addr string, opts ...dialer.DialOption) (net.Conn, error) { | ||
var options dialer.DialOptions | ||
for _, opt := range opts { | ||
opt(&options) | ||
} | ||
|
||
conn, err := (&net.Dialer{}).DialContext(ctx, "unix", addr) | ||
if err != nil { | ||
d.logger.Error(err) | ||
} | ||
return conn, err | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package unix | ||
|
||
import ( | ||
md "github.com/go-gost/core/metadata" | ||
) | ||
|
||
type metadata struct { | ||
} | ||
|
||
func (d *unixDialer) parseMetadata(md md.Metadata) (err error) { | ||
return | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.