mirror of https://github.com/ginuerzh/gost
3 changed files with 63 additions and 78 deletions
@ -1,69 +1,71 @@ |
|||||
package main |
package main |
||||
|
|
||||
import ( |
import ( |
||||
"github.com/gorilla/websocket" |
"github.com/ginuerzh/gosocks5" |
||||
"net/http" |
"github.com/gorilla/websocket" |
||||
"log" |
"log" |
||||
"time" |
"net/http" |
||||
"github.com/ginuerzh/gosocks5" |
"time" |
||||
) |
) |
||||
|
|
||||
type WSConn struct { |
type WSConn struct { |
||||
*websocket.Conn |
*websocket.Conn |
||||
} |
} |
||||
|
|
||||
func NewWSConn(conn *websocket.Conn) *WSConn { |
func NewWSConn(conn *websocket.Conn) *WSConn { |
||||
c := &WSConn{} |
c := &WSConn{} |
||||
c.Conn = conn |
c.Conn = conn |
||||
|
|
||||
return c |
return c |
||||
} |
} |
||||
|
|
||||
func (conn *WSConn) Read(b []byte) (n int, err error) { |
func (conn *WSConn) Read(b []byte) (n int, err error) { |
||||
_, b, err = conn.ReadMessage() |
_, r, err := conn.NextReader() |
||||
n = len(b) |
if err != nil { |
||||
|
return |
||||
return |
} |
||||
|
return r.Read(b) |
||||
} |
} |
||||
|
|
||||
func (conn *WSConn) Write(b []byte) (n int, err error) { |
func (conn *WSConn) Write(b []byte) (n int, err error) { |
||||
n = len(b) |
w, err := conn.NextWriter(websocket.BinaryMessage) |
||||
err = conn.WriteMessage(websocket.BinaryMessage, b) |
if err != nil { |
||||
return |
return |
||||
|
} |
||||
|
defer w.Close() |
||||
|
return w.Write(b) |
||||
} |
} |
||||
|
|
||||
func (conn *WSConn) SetDeadline(t time.Time) error { |
func (conn *WSConn) SetDeadline(t time.Time) error { |
||||
if err := conn.SetReadDeadline(t); err != nil { |
if err := conn.SetReadDeadline(t); err != nil { |
||||
return err |
return err |
||||
} |
} |
||||
return conn.SetWriteDeadline(t) |
return conn.SetWriteDeadline(t) |
||||
} |
} |
||||
|
|
||||
type WSServer struct { |
type WSServer struct { |
||||
Addr string |
Addr string |
||||
} |
} |
||||
|
|
||||
var upgrader = websocket.Upgrader{ |
var upgrader = websocket.Upgrader{ |
||||
ReadBufferSize: 8192, |
ReadBufferSize: 8192, |
||||
WriteBufferSize: 8192, |
WriteBufferSize: 8192, |
||||
CheckOrigin: func(r *http.Request) bool{ return true;}, |
CheckOrigin: func(r *http.Request) bool { return true }, |
||||
} |
} |
||||
|
|
||||
|
|
||||
func (s *WSServer) handle(w http.ResponseWriter, r *http.Request) { |
func (s *WSServer) handle(w http.ResponseWriter, r *http.Request) { |
||||
conn, err := upgrader.Upgrade(w, r, nil) |
conn, err := upgrader.Upgrade(w, r, nil) |
||||
if err != nil { |
if err != nil { |
||||
log.Println(err) |
log.Println(err) |
||||
return |
return |
||||
} |
} |
||||
defer conn.Close() |
defer conn.Close() |
||||
|
|
||||
c := NewWSConn(conn) |
c := gosocks5.ServerConn(NewWSConn(conn), serverConfig) |
||||
|
socks5Handle(c) |
||||
socks5Handle(gosocks5.ServerConn(c, serverConfig)) |
|
||||
} |
} |
||||
|
|
||||
func (s *WSServer) ListenAndServe() error { |
func (s *WSServer) ListenAndServe() error { |
||||
http.HandleFunc("/", s.handle) |
http.HandleFunc("/", s.handle) |
||||
return http.ListenAndServe(s.Addr, nil) |
return http.ListenAndServe(s.Addr, nil) |
||||
} |
} |
||||
|
|||||
Loading…
Reference in new issue