@@ -2,44 +2,28 @@ package main
2
2
3
3
import (
4
4
"flag"
5
- "github.com/klauspost/compress/zstd"
6
5
"log"
7
6
"net"
8
- "sync"
9
7
)
10
8
11
9
const (
12
10
BUFFER_MAXSIZE = 64 * 1024
13
11
)
14
12
15
-
16
13
func main () {
17
14
addrListen := flag .String ("s" , "" , "listen to ip:port" )
18
15
addrConn := flag .String ("c" , "" , "connect to ip:port" )
19
- role := flag .String ("role" , "flip" , "as: server, client" )
20
-
21
- // parse arguments
22
16
flag .Parse ()
23
17
24
- if len (* addrListen ) <= 0 || len (* addrConn ) < = 0 {
18
+ if len (* addrListen ) == 0 || len (* addrConn ) = = 0 {
25
19
flag .PrintDefaults ()
26
20
return
27
21
}
28
22
29
- Serve (* addrListen , * addrConn , * role )
23
+ Serve (* addrListen , * addrConn )
30
24
}
31
25
32
- func Serve (addrListen , addrConn string , role string ) {
33
- var comp Scrambler
34
- switch role {
35
- case "server" :
36
- comp = NewCompresser ()
37
- case "client" :
38
- comp = & ClientCompressor {NewCompresser ()}
39
- default :
40
- comp = & Flipper {}
41
- }
42
-
26
+ func Serve (addrListen , addrConn string ) {
43
27
l , err := net .Listen ("tcp" , addrListen )
44
28
if err != nil {
45
29
log .Fatalln (err )
@@ -55,15 +39,11 @@ func Serve(addrListen, addrConn string, role string) {
55
39
go func () {
56
40
connToServer , err := net .Dial ("tcp" , addrConn )
57
41
if err != nil {
58
- // handle error
59
42
log .Println ("connect error:" , err )
43
+ return
60
44
}
61
- var wg sync.WaitGroup
62
45
63
46
go func () {
64
- wg .Add (1 )
65
- defer wg .Done ()
66
-
67
47
defer connToServer .Close ()
68
48
defer connFromClient .Close ()
69
49
@@ -77,15 +57,9 @@ func Serve(addrListen, addrConn string, role string) {
77
57
return
78
58
}
79
59
80
- // encode if this is server
81
- dbuf , err := comp .Encode (buff [:n ])
82
- // decode if this is client
83
- if err != nil {
84
- log .Println ("scramble error from server:" , err )
85
- return
86
- }
60
+ Flip (buff [:n ])
87
61
88
- _ , err = connFromClient .Write (dbuf )
62
+ _ , err = connFromClient .Write (buff [: n ] )
89
63
if err != nil {
90
64
log .Println ("write to client error:" , err )
91
65
return
@@ -94,9 +68,6 @@ func Serve(addrListen, addrConn string, role string) {
94
68
}()
95
69
96
70
go func () {
97
- wg .Add (1 )
98
- defer wg .Done ()
99
-
100
71
defer connToServer .Close ()
101
72
defer connFromClient .Close ()
102
73
@@ -110,93 +81,19 @@ func Serve(addrListen, addrConn string, role string) {
110
81
return
111
82
}
112
83
113
- // encode if this is client
84
+ Flip ( buff [: n ])
114
85
115
- // decode if this is sever
116
- dbuf , err := comp .Decode (buff [:n ])
86
+ _ , err = connToServer .Write (buff [:n ])
117
87
if err != nil {
118
- log .Println ("scramble error to client:" , err )
119
- return
120
- }
121
-
122
- _ , err = connToServer .Write (dbuf )
123
- if err != nil {
124
- log .Println ("write to client error:" , err )
88
+ log .Println ("write to server error:" , err )
125
89
return
126
90
}
127
91
}
128
92
}()
129
-
130
- wg .Wait ()
131
93
}()
132
94
}
133
95
}
134
96
135
- type Scrambler interface {
136
- Encode ([]byte ) ([]byte , error )
137
- Decode ([]byte ) ([]byte , error )
138
- }
139
-
140
- type Flipper struct {}
141
-
142
- func (f Flipper ) Encode (buff []byte ) ([]byte , error ) {
143
- Flip (buff )
144
- return buff , nil
145
- }
146
-
147
- func (f Flipper ) Decode (buff []byte ) ([]byte , error ) {
148
- Flip (buff )
149
- return buff , nil
150
- }
151
-
152
- type Compressor struct {
153
- enc * zstd.Encoder
154
- dec * zstd.Decoder
155
- dstBuf []byte
156
- }
157
-
158
- /*
159
- should use
160
- // Compress input to output.
161
- func Compress(in io.Reader, out io.Writer) error {
162
- enc, err := zstd.NewWriter(out)
163
- if err != nil {
164
- return err
165
- }
166
- _, err = io.Copy(enc, in)
167
- if err != nil {
168
- enc.Close()
169
- return err
170
- }
171
- return enc.Close()
172
- }
173
- */
174
- func NewCompresser () * Compressor {
175
- dec , _ := zstd .NewReader (nil )
176
- enc , _ := zstd .NewWriter (nil )
177
- return & Compressor {enc , dec , make ([]byte , BUFFER_MAXSIZE )}
178
- }
179
-
180
- func (e * Compressor ) Encode (buff []byte ) ([]byte , error ) {
181
- return e .enc .EncodeAll (buff , e .dstBuf ), nil
182
- }
183
-
184
- func (e * Compressor ) Decode (buff []byte ) ([]byte , error ) {
185
- return e .dec .DecodeAll (buff , e .dstBuf )
186
- }
187
-
188
- type ClientCompressor struct {
189
- * Compressor
190
- }
191
-
192
- func (e * ClientCompressor ) Encode (buff []byte ) ([]byte , error ) {
193
- return e .dec .DecodeAll (buff , e .dstBuf )
194
- }
195
-
196
- func (e * ClientCompressor ) Decode (buff []byte ) ([]byte , error ) {
197
- return e .enc .EncodeAll (buff , e .dstBuf ), nil
198
- }
199
-
200
97
func Flip (buff []byte ) {
201
98
for k , v := range buff {
202
99
buff [k ] = ^ v
0 commit comments