30 lines
716 B
Go
30 lines
716 B
Go
|
package proxy
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net"
|
||
|
)
|
||
|
|
||
|
type Proxy interface {
|
||
|
// Start forwarding traffic back and forth the front and back-end
|
||
|
// addresses.
|
||
|
Run()
|
||
|
// Stop forwarding traffic and close both ends of the Proxy.
|
||
|
Close()
|
||
|
// Return the address on which the proxy is listening.
|
||
|
FrontendAddr() net.Addr
|
||
|
// Return the proxied address.
|
||
|
BackendAddr() net.Addr
|
||
|
}
|
||
|
|
||
|
func NewProxy(frontendAddr, backendAddr net.Addr) (Proxy, error) {
|
||
|
switch frontendAddr.(type) {
|
||
|
case *net.UDPAddr:
|
||
|
return NewUDPProxy(frontendAddr.(*net.UDPAddr), backendAddr.(*net.UDPAddr))
|
||
|
case *net.TCPAddr:
|
||
|
return NewTCPProxy(frontendAddr.(*net.TCPAddr), backendAddr.(*net.TCPAddr))
|
||
|
default:
|
||
|
panic(fmt.Errorf("Unsupported protocol"))
|
||
|
}
|
||
|
}
|