Skip to content

Commit ca3967f

Browse files
committed
fix(ios): websocket module support extra headers (#4069) (#4081)
1 parent fcaa1cb commit ca3967f

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

framework/ios/debug/websocket/HippySRWebSocket.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ extern NSString *const HippySRHTTPResponseErrorKey;
6666

6767
// Some helper constructors.
6868
- (instancetype)initWithURL:(NSURL *)url protocols:(NSArray<NSString *> *)protocols;
69+
- (instancetype)initWithURL:(NSURL *)url
70+
extraHeaders:(NSDictionary *)extraHeaders
71+
protocols:(NSArray<NSString *> *)protocols;
6972
- (instancetype)initWithURL:(NSURL *)url;
7073

7174
// Delegate queue will be dispatch_main_queue by default.

framework/ios/debug/websocket/HippySRWebSocket.m

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,9 @@ - (instancetype)initWithURLRequest:(NSURLRequest *)request
276276
- (instancetype)initWithURL:(NSURL *)URL
277277
{ return [self initWithURL:URL protocols:nil]; }
278278

279-
- (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray<NSString *> *)protocols
280-
{
279+
- (instancetype)initWithURL:(NSURL *)URL
280+
extraHeaders:(NSDictionary *)extraHeaders
281+
protocols:(NSArray<NSString *> *)protocols {
281282
NSMutableURLRequest *request;
282283
if (URL) {
283284
// Build a mutable request so we can fill the cookie header.
@@ -293,11 +294,22 @@ - (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray<NSString *> *)protoc
293294

294295
// Load and set the cookie header.
295296
NSArray<NSHTTPCookie *> *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:components.URL];
296-
[request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:cookies]];
297+
NSDictionary *cookieHeaders = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];
298+
299+
// Set extraHeaders passed from the js
300+
NSMutableDictionary *allHeaders = cookieHeaders.mutableCopy ?: [NSMutableDictionary dictionary];
301+
if (extraHeaders) {
302+
[allHeaders addEntriesFromDictionary:extraHeaders];
303+
}
304+
[request setAllHTTPHeaderFields:allHeaders];
297305
}
298306
return [self initWithURLRequest:request protocols:protocols];
299307
}
300308

309+
- (instancetype)initWithURL:(NSURL *)URL protocols:(NSArray<NSString *> *)protocols {
310+
return [self initWithURL:URL extraHeaders:nil protocols:protocols];
311+
}
312+
301313
- (void)_HippySR_commonInit
302314
{
303315
NSString *scheme = _url.scheme.lowercaseString;

framework/ios/debug/websocket/HippyWebSocketManager.m

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
#import "HippyDefines.h"
2929

3030
static NSUInteger socketIndex = 0;
31+
static NSString *const kHippyWebSocketUrlParamKey = @"url";
32+
static NSString *const kHippyWebSocketHeaderParamKey = @"headers";
33+
static NSString *const kHippySecWebSocketProtocolKey = @"Sec-WebSocket-Protocol";
3134

3235
#pragma mark - HippyWebSocketManager
3336

@@ -62,11 +65,16 @@ - (void)invalidate {
6265
}
6366

6467
HIPPY_EXPORT_METHOD(connect:(NSDictionary *)params resolver:(HippyPromiseResolveBlock)resolve rejecter:(HippyPromiseRejectBlock)reject) {
65-
NSDictionary *headers = params[@"headers"];
66-
NSString *url = params[@"url"];
67-
NSString *protocols = headers[@"Sec-WebSocket-Protocol"];
68+
NSDictionary *headers = params[kHippyWebSocketHeaderParamKey];
69+
NSString *url = params[kHippyWebSocketUrlParamKey];
70+
NSString *protocols = headers[kHippySecWebSocketProtocolKey];
71+
// prepare extra headers
72+
NSMutableDictionary *extraHeaders = headers.mutableCopy;
73+
[extraHeaders removeObjectForKey:kHippySecWebSocketProtocolKey];
6874
NSArray<NSString *> *protocolArray = [protocols componentsSeparatedByString:@","];
69-
HippySRWebSocket *socket = [[HippySRWebSocket alloc] initWithURL:[NSURL URLWithString:url] protocols:protocolArray];
75+
HippySRWebSocket *socket = [[HippySRWebSocket alloc] initWithURL:[NSURL URLWithString:url]
76+
extraHeaders:extraHeaders
77+
protocols:protocolArray];
7078
socket.delegate = self;
7179
socket.socketID = socketIndex++;
7280
NSNumber *socketId = @(socket.socketID);

0 commit comments

Comments
 (0)