conduit/tunnel/forwarder.go
Evan Reichard 0722e5f032
All checks were successful
continuous-integration/drone/push Build is passing
chore: tunnel recorder & slight refactor
2025-09-27 17:49:59 -04:00

44 lines
750 B
Go

package tunnel
import (
"context"
"net/url"
"reichard.io/conduit/store"
)
type ForwarderType int
const (
ForwarderTCP ForwarderType = iota
ForwarderHTTP
)
type Forwarder interface {
Type() ForwarderType
Initialize() (Stream, error)
Start(context.Context) error
}
func NewForwarder(target string, tunnelStore store.TunnelStore) (Forwarder, error) {
// Get Target URL
targetURL, err := url.Parse(target)
if err != nil {
return nil, err
}
// Get Connection Builder
var forwarder Forwarder
switch targetURL.Scheme {
case "http", "https":
forwarder, err = newHTTPForwarder(targetURL, tunnelStore)
if err != nil {
return nil, err
}
default:
forwarder = newTCPForwarder(target, tunnelStore)
}
return forwarder, nil
}