Skip to content

Commit 74930ba

Browse files
authored
Merge pull request #6 from go-netty/feat-handshake-headers
feat: Add additional headers to the handshake
2 parents cd56b87 + 19ad33f commit 74930ba

File tree

5 files changed

+50
-7
lines changed

5 files changed

+50
-7
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,19 @@ type Option
3030
func WithBinary() Option
3131
func WithBufferSize(readBufferSize, writeBufferSize int) Option
3232
func WithCompress(compressLevel int, compressThreshold int64) Option
33+
func WithClientHeader(header http.Header) Option
3334
func WithMaxFrameSize(maxFrameSize int64) Option
3435
func WithNoDelay(noDelay bool) Option
36+
func WithServerHeader(header http.Header) Option
3537
func WithServeMux(serveMux *http.ServeMux) Option
3638
func WithServeTLS(tls *tls.Config) Option
3739
func WithValidUTF8() Option
3840
```
3941

4042
## Easy to use
4143

44+
> Note: `nettyws` does not support mixed text messages and binary messages, use the `WithBinary` option to switch to binary message mode.
45+
4246
### server :
4347
```go
4448
// create websocket instance

example/client.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,23 @@ package main
1818

1919
import (
2020
"fmt"
21+
"net/http"
22+
"time"
2123

2224
nettyws "github.com/go-netty/go-netty-ws"
2325
)
2426

2527
func main() {
2628

29+
header := http.Header{}
30+
header.Add("client-time", time.Now().String())
31+
2732
// create websocket instance
28-
var ws = nettyws.NewWebsocket()
33+
var ws = nettyws.NewWebsocket(nettyws.WithClientHeader(header))
2934

3035
// setup OnOpen handler
3136
ws.OnOpen = func(conn nettyws.Conn) {
32-
fmt.Println("OnOpen: ", conn.RemoteAddr())
37+
fmt.Println("OnOpen: ", conn.RemoteAddr(), ", header: ", conn.Header())
3338
conn.Write([]byte("hello world"))
3439
}
3540

example/http-server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func main() {
3535

3636
// setup OnData handler
3737
ws.OnData = func(conn nettyws.Conn, data []byte) {
38-
fmt.Println("OnData: ", conn.RemoteAddr(), ", message: ", string(data))
38+
fmt.Println("OnData: ", conn.RemoteAddr(), ", message: ", string(data), ", header: ", conn.Header())
3939
conn.Write(data)
4040
}
4141

example/server.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,22 @@ package main
1818

1919
import (
2020
"fmt"
21+
"net/http"
22+
"time"
2123

2224
nettyws "github.com/go-netty/go-netty-ws"
2325
)
2426

2527
func main() {
28+
header := http.Header{}
29+
header.Add("server-time", time.Now().String())
30+
2631
// create websocket instance
27-
var ws = nettyws.NewWebsocket()
32+
var ws = nettyws.NewWebsocket(nettyws.WithServerHeader(header))
2833

2934
// setup OnOpen handler
3035
ws.OnOpen = func(conn nettyws.Conn) {
31-
fmt.Println("OnOpen: ", conn.RemoteAddr())
36+
fmt.Println("OnOpen: ", conn.RemoteAddr(), ", header: ", conn.Header())
3237
}
3338

3439
// setup OnData handler

options.go

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ type options struct {
4848
compressEnabled bool
4949
compressLevel int
5050
compressThreshold int64
51+
requestHeader http.Header
52+
responseHeader http.Header
5153
}
5254

5355
func parseOptions(opt ...Option) *options {
@@ -70,6 +72,17 @@ func (wso *options) wsOptions() *websocket.Options {
7072
if MsgBinary == wso.messageType {
7173
opCode = ws.OpBinary
7274
}
75+
76+
var dialer = ws.DefaultDialer
77+
if wso.requestHeader != nil {
78+
dialer.Header = ws.HandshakeHeaderHTTP(wso.requestHeader)
79+
}
80+
81+
var upgrader = ws.DefaultHTTPUpgrader
82+
if wso.responseHeader != nil {
83+
upgrader.Header = wso.responseHeader
84+
}
85+
7386
return &websocket.Options{
7487
TLS: wso.tls,
7588
OpCode: opCode,
@@ -82,8 +95,8 @@ func (wso *options) wsOptions() *websocket.Options {
8295
CompressEnabled: wso.compressEnabled,
8396
CompressLevel: wso.compressLevel,
8497
CompressThreshold: wso.compressThreshold,
85-
Dialer: ws.DefaultDialer,
86-
Upgrader: ws.DefaultHTTPUpgrader,
98+
Dialer: dialer,
99+
Upgrader: upgrader,
87100
ServeMux: wso.serveMux,
88101
}
89102
}
@@ -163,3 +176,19 @@ func WithCompress(compressLevel int, compressThreshold int64) Option {
163176
options.compressThreshold = compressThreshold
164177
}
165178
}
179+
180+
// WithClientHeader is an optional http.Header mapping that could be used to
181+
// write additional headers to the handshake request.
182+
func WithClientHeader(header http.Header) Option {
183+
return func(options *options) {
184+
options.requestHeader = header
185+
}
186+
}
187+
188+
// WithServerHeader is an optional http.Header mapping that could be used to
189+
// write additional headers to the handshake response.
190+
func WithServerHeader(header http.Header) Option {
191+
return func(options *options) {
192+
options.responseHeader = header
193+
}
194+
}

0 commit comments

Comments
 (0)