Skip to content

Commit

Permalink
use logger
Browse files Browse the repository at this point in the history
  • Loading branch information
jm33-m0 committed Dec 19, 2020
1 parent 4dcc402 commit 6a6a1f8
Showing 1 changed file with 28 additions and 24 deletions.
52 changes: 28 additions & 24 deletions cdn2proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"log"
"net"
"net/http"
"os"
"time"

"golang.org/x/net/websocket"
Expand All @@ -18,6 +19,9 @@ var (
DestAddr = "127.0.0.1:8000"
)

// use this logger
var Logger = log.New(os.Stderr, "cdn2proxy server: ", log.Ldate)

// StartServer start websocket server
// port: listen on 127.0.0.1:port
// destAddr: send everything here, we only want a single purpose proxy
Expand All @@ -26,21 +30,21 @@ func StartServer(port, destAddr string, logOutput io.Writer) (err error) {
DestAddr = destAddr

// set log output
log.SetOutput(logOutput)
Logger = log.New(logOutput, "cdn2proxy server: ", log.Ldate)

// HTTP server
log.Printf("websocket server listening on 127.0.0.1:%s", port)
Logger.Printf("websocket server listening on 127.0.0.1:%s", port)
http.Handle("/ws", websocket.Handler(serveWS))
err = http.ListenAndServe("127.0.0.1:"+port, nil)
if err != nil {
log.Fatal(err)
Logger.Fatal(err)
}
return
}

func serveWS(ws *websocket.Conn) {
ctx, cancel := context.WithCancel(context.Background())
log.Printf("Got a connection to websocket server: %s", ws.RemoteAddr())
Logger.Printf("Got a connection to websocket server: %s", ws.RemoteAddr())
defer func() {
cancel()
ws.Close()
Expand All @@ -49,7 +53,7 @@ func serveWS(ws *websocket.Conn) {
// connect to destination
conn, err := net.Dial("tcp", DestAddr)
if err != nil {
log.Printf("Cannot dial destination %s: %v", DestAddr, err)
Logger.Printf("Cannot dial destination %s: %v", DestAddr, err)
return
}
defer conn.Close()
Expand All @@ -58,15 +62,15 @@ func serveWS(ws *websocket.Conn) {
defer cancel()
_, err := io.Copy(conn, ws)
if err != nil {
log.Printf("serveWS ioCopy ws->dest: %v", err)
Logger.Printf("serveWS ioCopy ws->dest: %v", err)
return
}
}()
go func() {
defer cancel()
_, err := io.Copy(ws, conn)
if err != nil {
log.Printf("serveWS ioCopy dest->ws: %v", err)
Logger.Printf("serveWS ioCopy dest->ws: %v", err)
return
}
}()
Expand All @@ -84,11 +88,11 @@ func StartProxy(addr, url string) error {
ctx, cancel := context.WithCancel(context.Background())
listener, err := net.Listen("tcp", addr)
if err != nil {
log.Printf("Cannot listen on %s: %v", addr, err)
Logger.Printf("Cannot listen on %s: %v", addr, err)
cancel()
return err
}
log.Printf("socks proxy listening on %s", addr)
Logger.Printf("socks proxy listening on %s", addr)
defer func() {
cancel()
listener.Close()
Expand All @@ -97,14 +101,14 @@ func StartProxy(addr, url string) error {
for ctx.Err() == nil {
ws, err := websocket.Dial(url, "", "http://localhost/")
if err != nil {
log.Printf("websocket connection to %s failed: %v", url, err)
Logger.Printf("websocket connection to %s failed: %v", url, err)
cancel()
return err
}

conn, err := listener.Accept()
if err != nil {
log.Print(err)
Logger.Print(err)
cancel()
return err
}
Expand All @@ -115,7 +119,7 @@ func StartProxy(addr, url string) error {
}

func handleConn(conn net.Conn, ws *websocket.Conn) {
log.Printf("Got a connection to our proxy: %s", conn.RemoteAddr())
Logger.Printf("Got a connection to our proxy: %s", conn.RemoteAddr())
ctx, cancel := context.WithCancel(context.Background())
defer func() {
conn.Close()
Expand All @@ -134,13 +138,13 @@ func handleConn(conn net.Conn, ws *websocket.Conn) {

n, err := io.ReadFull(conn, buf[:4])
if n != 4 {
log.Print("read header: " + err.Error())
Logger.Print("read header: " + err.Error())
return
}

ver, cmd, _, atyp := buf[0], buf[1], buf[2], buf[3]
if ver != 5 || cmd != 1 {
log.Print("invalid ver/cmd")
Logger.Print("invalid ver/cmd")
return
}

Expand All @@ -149,50 +153,50 @@ func handleConn(conn net.Conn, ws *websocket.Conn) {
case 1:
n, err = io.ReadFull(conn, buf[:4])
if n != 4 {
log.Print("invalid IPv4: " + err.Error())
Logger.Print("invalid IPv4: " + err.Error())
return
}
addr = fmt.Sprintf("%d.%d.%d.%d", buf[0], buf[1], buf[2], buf[3])

case 3:
n, err = io.ReadFull(conn, buf[:1])
if n != 1 {
log.Print("invalid hostname: " + err.Error())
Logger.Print("invalid hostname: " + err.Error())
return
}
addrLen := int(buf[0])

n, err = io.ReadFull(conn, buf[:addrLen])
if n != addrLen {
log.Print("invalid hostname: " + err.Error())
Logger.Print("invalid hostname: " + err.Error())
return
}
addr = string(buf[:addrLen])

case 4:
log.Print("IPv6: no supported yet")
Logger.Print("IPv6: no supported yet")
return

default:
log.Print("invalid atyp")
Logger.Print("invalid atyp")
return
}

n, err = io.ReadFull(conn, buf[:2])
if n != 2 {
log.Print("read port: " + err.Error())
Logger.Print("read port: " + err.Error())
return
}
port := binary.BigEndian.Uint16(buf[:2])

// destination
destAddrPort := fmt.Sprintf("%s:%d", addr, port)
log.Printf("Client wants to connect to %s", destAddrPort)
Logger.Printf("Client wants to connect to %s", destAddrPort)

// response
_, err = conn.Write([]byte{0x05, 0x00, 0x00, 0x01, 0, 0, 0, 0, 0, 0})
if err != nil {
log.Print("write rsp: " + err.Error())
Logger.Print("write rsp: " + err.Error())
return
}

Expand All @@ -201,15 +205,15 @@ func handleConn(conn net.Conn, ws *websocket.Conn) {
defer cancel()
_, err := io.Copy(ws, conn)
if err != nil {
log.Printf("proxy handleConn ioCopy proxy->websocket: %v", err)
Logger.Printf("proxy handleConn ioCopy proxy->websocket: %v", err)
return
}
}()
go func() {
defer cancel()
_, err := io.Copy(conn, ws)
if err != nil {
log.Printf("proxy handleConn ioCopy websocket->proxy: %v", err)
Logger.Printf("proxy handleConn ioCopy websocket->proxy: %v", err)
return
}
}()
Expand Down

0 comments on commit 6a6a1f8

Please sign in to comment.