clash/adapters/outbound/direct.go

58 lines
1.0 KiB
Go
Raw Normal View History

2018-06-10 22:50:03 +08:00
package adapters
import (
2018-11-21 13:47:46 +08:00
"encoding/json"
2018-06-10 22:50:03 +08:00
"net"
C "github.com/Dreamacro/clash/constant"
)
// DirectAdapter is a directly connected adapter
type DirectAdapter struct {
conn net.Conn
}
// Close is used to close connection
func (d *DirectAdapter) Close() {
d.conn.Close()
}
2018-06-17 22:41:32 +08:00
// Conn is used to http request
2018-06-14 01:00:58 +08:00
func (d *DirectAdapter) Conn() net.Conn {
return d.conn
}
type Direct struct{}
2018-06-10 22:50:03 +08:00
2018-06-16 21:34:13 +08:00
func (d *Direct) Name() string {
2018-10-19 20:28:19 +08:00
return "DIRECT"
2018-06-16 21:34:13 +08:00
}
func (d *Direct) Type() C.AdapterType {
return C.Direct
}
2018-09-30 12:25:52 +08:00
func (d *Direct) Generator(metadata *C.Metadata) (adapter C.ProxyAdapter, err error) {
2018-12-05 21:13:29 +08:00
address := net.JoinHostPort(metadata.Host, metadata.Port)
if metadata.IP != nil {
address = net.JoinHostPort(metadata.IP.String(), metadata.Port)
}
c, err := net.DialTimeout("tcp", address, tcpTimeout)
2018-06-10 22:50:03 +08:00
if err != nil {
return
}
tcpKeepAlive(c)
return &DirectAdapter{conn: c}, nil
2018-06-10 22:50:03 +08:00
}
2018-11-21 13:47:46 +08:00
func (d *Direct) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]string{
"type": d.Type().String(),
})
}
func NewDirect() *Direct {
return &Direct{}
2018-06-10 22:50:03 +08:00
}