Skip to content

Commit 1207b4f

Browse files
committed
refactor
1 parent 0720ee9 commit 1207b4f

11 files changed

+96
-249
lines changed

.vscode/settings.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"cSpell.words": [
3+
"ggclient",
4+
"ggrok",
5+
"onyas",
6+
"upgrader"
7+
]
8+
}

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

2-
go run ggrok-gorilla-server.go
2+
go run main.go
33

4-
go run ggrok-gorilla-client.go
4+
go run main.go -client
55

66
request http://localhost:8080/ through postman
77

ggrok-client.go

-76
This file was deleted.

ggrok-server.go

-73
This file was deleted.

ggrok-gorilla-client.go ggrok/ggrok-gorilla-client.go

+12-31
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package main
1+
package ggrok
22

33
import (
44
"bufio"
@@ -8,7 +8,6 @@ import (
88
"io"
99
"log"
1010
"net/http"
11-
"net/http/httputil"
1211
"net/url"
1312
"os"
1413
"os/signal"
@@ -19,20 +18,14 @@ import (
1918

2019
var addr = flag.String("addr", "localhost:8080", "http service address")
2120

22-
func captureResponseData(resp *http.Response) (string, error) {
23-
rump, err := httputil.DumpResponse(resp, true)
24-
if err != nil {
25-
log.Printf("local response dump error ", err)
26-
return "", err
27-
}
28-
return string(rump), nil
21+
type GGrokClient struct {
2922
}
3023

31-
func main() {
32-
type RemoteRequest struct {
33-
Req string
34-
URL string
35-
}
24+
func NewClient() *GGrokClient {
25+
return &GGrokClient{}
26+
}
27+
28+
func (ggclient *GGrokClient) Start() {
3629

3730
flag.Parse()
3831
log.SetFlags(0)
@@ -61,7 +54,7 @@ func main() {
6154
}
6255
log.Printf("recv: %s", message)
6356

64-
var websocketReq RemoteRequest
57+
var websocketReq WebSocketRequest
6558
if err := json.Unmarshal(message, &websocketReq); err != nil {
6659
log.Println("json.Unmarshal error", err)
6760
continue
@@ -70,15 +63,15 @@ func main() {
7063
var localRequest *http.Request
7164
r := bufio.NewReader(bytes.NewReader([]byte(websocketReq.Req)))
7265
if localRequest, err = http.ReadRequest(r); err != nil { // deserialize request
73-
log.Printf("deserialize request error", err)
66+
log.Println("deserialize request error", err)
7467
continue
7568
}
7669

7770
//TODO: change to config
7871
localRequest.RequestURI = ""
7972
u, err := url.Parse("/ada08e16-2112-4720-8fcb-18f2f8e47c2d")
8073
if err != nil {
81-
log.Printf("parse url error", err)
74+
log.Println("parse url error", err)
8275
}
8376
localRequest.URL = u
8477
localRequest.URL.Scheme = "https"
@@ -89,27 +82,15 @@ func main() {
8982
continue
9083
}
9184

92-
respStr, err := captureResponseData(resp)
93-
if err != nil {
94-
continue
95-
}
96-
97-
type WebSocketResponse struct {
98-
Status string // e.g. "200 OK"
99-
StatusCode int // e.g. 200
100-
Proto string // e.g. "HTTP/1.0"
101-
Header map[string][]string
102-
Body []byte
103-
ContentType string
104-
}
10585
body, err := io.ReadAll(resp.Body)
10686
if err != nil {
10787
log.Println("read local response error ", err)
10888
}
89+
resp.Body.Close()
10990
wsRes := WebSocketResponse{Status: resp.Status, StatusCode: resp.StatusCode,
11091
Proto: resp.Proto, Header: resp.Header, Body: body, ContentType: resp.Header.Get("Content-Type")}
11192

112-
log.Println("client send response: %s", respStr)
93+
log.Printf("client send response: %s \n", wsRes.Body)
11394
c.WriteJSON(wsRes)
11495
}
11596
}()
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
package main
1+
package ggrok
22

33
import (
44
"bytes"
5-
"flag"
65
"io"
76
"log"
87
"net/http"
98

109
"github.com/gorilla/websocket"
1110
)
1211

13-
var addr = flag.String("addr", "localhost:8080", "http service address")
1412
var connections = make(map[string]*websocket.Conn)
1513

1614
var upgrader = websocket.Upgrader{
@@ -19,25 +17,35 @@ var upgrader = websocket.Upgrader{
1917
},
2018
} // use default options
2119

22-
func register(w http.ResponseWriter, r *http.Request) {
20+
type Server struct {
21+
}
22+
23+
func NewServer() *Server {
24+
return &Server{}
25+
}
26+
27+
func (s *Server) Register(w http.ResponseWriter, r *http.Request) {
2328
c, err := upgrader.Upgrade(w, r, nil)
2429
if err != nil {
2530
log.Print("upgrade:", err)
2631
return
2732
}
2833

2934
connections[r.Host] = c
30-
log.Println("current connections: %s", connections)
35+
log.Println("current connections: ", connections)
3136
}
3237

33-
func copyHeader(dst, src http.Header) {
34-
for k, vv := range src {
38+
func copyHeader(dst http.ResponseWriter, src WebSocketResponse) {
39+
for k, vv := range src.Header {
3540
for _, v := range vv {
36-
dst.Add(k, v)
41+
dst.Header().Add(k, v)
3742
}
3843
}
44+
dst.WriteHeader(src.StatusCode)
45+
dst.Header().Set("Content-Type", src.ContentType)
3946
}
40-
func proxy(w http.ResponseWriter, r *http.Request) {
47+
48+
func (s *Server) Proxy(w http.ResponseWriter, r *http.Request) {
4149
remoteConn := connections[r.Host]
4250
if remoteConn == nil {
4351
io.WriteString(w, "client not register")
@@ -48,35 +56,20 @@ func proxy(w http.ResponseWriter, r *http.Request) {
4856
if err != nil {
4957
log.Println("captureRequestData error:", err)
5058
}
51-
log.Println("req serialized: %s", reqStr)
59+
log.Println("req serialized: ", reqStr)
5260

53-
// remoteConn.WriteMessage(100, []byte(reqStr))
54-
type WebSocketRequest struct {
55-
Req string
56-
URL string
57-
}
5861
reqRemote := WebSocketRequest{Req: reqStr, URL: r.URL.String()}
5962

6063
remoteConn.WriteJSON(reqRemote)
6164

62-
type WebSocketResponse struct {
63-
Status string // e.g. "200 OK"
64-
StatusCode int // e.g. 200
65-
Proto string // e.g. "HTTP/1.0"
66-
Header map[string][]string
67-
Body []byte
68-
ContentType string
69-
}
7065
var wsRes WebSocketResponse
7166
err = remoteConn.ReadJSON(&wsRes)
7267
if err != nil {
7368
log.Println("read remote client response error", err)
7469
}
75-
log.Println("remote client response: %s", wsRes)
70+
log.Println("remote client response: ", wsRes)
7671

77-
copyHeader(w.Header(), wsRes.Header)
78-
w.WriteHeader(wsRes.StatusCode)
79-
w.Header().Set("Content-Type", wsRes.ContentType)
72+
copyHeader(w, wsRes)
8073
io.Copy(w, bytes.NewReader(wsRes.Body))
8174
}
8275

@@ -88,11 +81,3 @@ func captureRequestData(req *http.Request) (string, error) {
8881
}
8982
return b.String(), nil
9083
}
91-
92-
func main() {
93-
flag.Parse()
94-
log.SetFlags(0)
95-
http.HandleFunc("/$$ggrok", register)
96-
http.HandleFunc("/", proxy)
97-
log.Fatal(http.ListenAndServe(*addr, nil))
98-
}

ggrok/protocol.go

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package ggrok
2+
3+
type WebSocketRequest struct {
4+
Req string
5+
URL string
6+
}
7+
8+
type WebSocketResponse struct {
9+
Status string // e.g. "200 OK"
10+
StatusCode int // e.g. 200
11+
Proto string // e.g. "HTTP/1.0"
12+
Header map[string][]string
13+
Body []byte
14+
ContentType string
15+
}

0 commit comments

Comments
 (0)