mirror of https://github.com/ginuerzh/gost
8 changed files with 76 additions and 94 deletions
@ -1,80 +0,0 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"bytes" |
|||
"fmt" |
|||
"io" |
|||
"os" |
|||
) |
|||
|
|||
var ( |
|||
Debug bool |
|||
) |
|||
|
|||
type BufferedLog struct { |
|||
buffer *bytes.Buffer |
|||
w io.WriteCloser |
|||
} |
|||
|
|||
func NewLog(buffered bool) *BufferedLog { |
|||
log := &BufferedLog{ |
|||
w: os.Stdout, |
|||
} |
|||
if buffered { |
|||
log.buffer = &bytes.Buffer{} |
|||
} |
|||
|
|||
return log |
|||
} |
|||
|
|||
func NewFileLog(file *os.File) *BufferedLog { |
|||
return &BufferedLog{ |
|||
buffer: &bytes.Buffer{}, |
|||
w: file, |
|||
} |
|||
} |
|||
|
|||
func (log *BufferedLog) Log(a ...interface{}) (int, error) { |
|||
if !Debug { |
|||
return 0, nil |
|||
} |
|||
if log.buffer != nil { |
|||
return fmt.Fprint(log.buffer, a...) |
|||
} |
|||
return fmt.Fprint(log.w, a...) |
|||
} |
|||
|
|||
func (log *BufferedLog) Logln(a ...interface{}) (int, error) { |
|||
if !Debug { |
|||
return 0, nil |
|||
} |
|||
if log.buffer != nil { |
|||
return fmt.Fprintln(log.buffer, a...) |
|||
} |
|||
return fmt.Fprintln(log.w, a...) |
|||
} |
|||
|
|||
func (log *BufferedLog) Logf(format string, a ...interface{}) (int, error) { |
|||
if !Debug { |
|||
return 0, nil |
|||
} |
|||
if log.buffer != nil { |
|||
return fmt.Fprintf(log.buffer, format, a...) |
|||
} |
|||
return fmt.Fprintf(log.w, format, a...) |
|||
} |
|||
|
|||
func (log *BufferedLog) Flush() error { |
|||
defer func() { |
|||
if log.w != os.Stdout { |
|||
log.w.Close() |
|||
} |
|||
}() |
|||
|
|||
if !Debug || log.buffer == nil { |
|||
return nil |
|||
} |
|||
|
|||
_, err := log.buffer.WriteTo(log.w) |
|||
return err |
|||
} |
|||
@ -0,0 +1,51 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"crypto/tls" |
|||
"github.com/ginuerzh/gosocks5" |
|||
"net" |
|||
) |
|||
|
|||
type TlsServer struct { |
|||
Addr string |
|||
CertFile, KeyFile string |
|||
} |
|||
|
|||
func (s *TlsServer) ListenAndServe() error { |
|||
return s.listenAndServeTLS() |
|||
} |
|||
|
|||
func (s *TlsServer) listenAndServeTLS() error { |
|||
var cert tls.Certificate |
|||
var err error |
|||
|
|||
if len(s.CertFile) == 0 || len(s.KeyFile) == 0 { |
|||
cert, err = tls.X509KeyPair([]byte(rawCert), []byte(rawKey)) |
|||
} else { |
|||
cert, err = tls.LoadX509KeyPair(s.CertFile, s.KeyFile) |
|||
} |
|||
if err != nil { |
|||
return err |
|||
} |
|||
|
|||
config := &tls.Config{Certificates: []tls.Certificate{cert}} |
|||
l, err := tls.Listen("tcp", s.Addr, config) |
|||
if err != nil { |
|||
return err |
|||
} |
|||
defer l.Close() |
|||
|
|||
for { |
|||
conn, err := l.Accept() |
|||
if err != nil { |
|||
return err |
|||
} |
|||
|
|||
go func(c net.Conn) { |
|||
c = gosocks5.ServerConn(c, serverConfig) |
|||
serveSocks5(c) |
|||
}(conn) |
|||
} |
|||
|
|||
return nil |
|||
} |
|||
Loading…
Reference in new issue