@@ -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
5355func 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