Skip to content

Commit 761d8c0

Browse files
author
Andrea Cambieri
committed
test
0 parents  commit 761d8c0

3 files changed

Lines changed: 91 additions & 0 deletions

File tree

.idea/.gitignore

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module continuity
2+
3+
go 1.24

server/server.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package server
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"io"
7+
"net"
8+
"strings"
9+
)
10+
11+
func main() {
12+
listener, err := net.Listen("tcp", ":8080")
13+
if err != nil {
14+
fmt.Println(err)
15+
return
16+
}
17+
for {
18+
conn, err := listener.Accept()
19+
if err != nil {
20+
go handleConnection(conn)
21+
}
22+
}
23+
}
24+
25+
func handleConnection(conn net.Conn) {
26+
r := bufio.NewReader(conn)
27+
defer conn.Close()
28+
headers := make(map[string]string)
29+
//read until \n\n
30+
for {
31+
line, err := r.ReadString('\n')
32+
if (len(line) == 2) || err != nil {
33+
break
34+
}
35+
tokens := strings.Split(line, ":")
36+
if len(tokens) < 2 {
37+
continue
38+
}
39+
headers[tokens[0]] = strings.TrimSpace(tokens[1])
40+
}
41+
upstream := "8081"
42+
if headers["x-client-version"] == "1" {
43+
upstream = "8082"
44+
} else if headers["x-client-version"] == "2" {
45+
upstream = "8083"
46+
}
47+
48+
upstreamConn, err := net.Dial("tcp", "localhost:"+upstream)
49+
if err != nil {
50+
fmt.Printf("Error connecting to upstream: %s\n", err)
51+
return
52+
}
53+
defer upstreamConn.Close()
54+
for key, value := range headers {
55+
_, err := fmt.Fprintf(upstreamConn, "%s: %s\n", key, value)
56+
if err != nil {
57+
fmt.Printf("Error writing to upstream: %s\n", err)
58+
return
59+
}
60+
}
61+
_, err = fmt.Fprintf(upstreamConn, "\r\n")
62+
if err != nil {
63+
fmt.Printf("Error writing to upstream: %s\n", err)
64+
return
65+
}
66+
_, err = io.Copy(upstreamConn, conn)
67+
if err != nil {
68+
fmt.Printf("Error writing to upstream: %s\n", err)
69+
return
70+
}
71+
_, err = io.Copy(conn, upstreamConn)
72+
if err != nil {
73+
fmt.Printf("Error writing response from upstream: %s\n", err)
74+
return
75+
}
76+
77+
}

0 commit comments

Comments
 (0)