Skip to content

Commit 40ad7ed

Browse files
author
Tuan
committed
Fixed Stringee call from Firefox to iOS
1 parent a4cd9eb commit 40ad7ed

2 files changed

Lines changed: 55 additions & 1 deletion

File tree

ios/RNStringeeCall.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
@interface RNStringeeCall : RCTEventEmitter <RCTBridgeModule, StringeeCallDelegate>
2020

21+
@property(strong, nonatomic) StringeeCall *stringeeCall;
22+
2123
- (void)addRenderToView:(UIView *)view callId:(NSString *)callId isLocal:(BOOL)isLocal;
2224

2325
@end

ios/RNStringeeCall.m

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#import "RNStringeeCall.h"
33
#import "RNStringeeInstanceManager.h"
44
#import <React/RCTLog.h>
5+
#import <objc/runtime.h>
56

67
static NSString *didChangeSignalingState = @"didChangeSignalingState";
78
static NSString *didChangeMediaState = @"didChangeMediaState";
@@ -12,6 +13,12 @@
1213
static NSString *didReceiveCallInfo = @"didReceiveCallInfo";
1314
static NSString *didHandleOnAnotherDevice = @"didHandleOnAnotherDevice";
1415

16+
@implementation NSString (Helpers)
17+
18+
+(BOOL)stringIsNilOrEmpty:(NSString*)aString {
19+
return !aString || ![aString length] || [aString length] == 0;
20+
}
21+
@end
1522

1623
@implementation RNStringeeCall {
1724
NSMutableArray<NSString *> *jsEvents;
@@ -45,6 +52,49 @@ + (BOOL)requiresMainQueueSetup {
4552
return YES;
4653
}
4754

55+
void updateStringeeClzz() {
56+
SEL selectorOrigin = NSSelectorFromString(@"originalAddAllCandidate:");
57+
if (![StringeeCall respondsToSelector: selectorOrigin]) {
58+
SEL selector = @selector(addAllCandidate:);
59+
Class clzStringeeCall = [StringeeCall class];
60+
Class clzSelf = [RNStringeeCall class];
61+
62+
Method overrideAddAllCandidate = class_getInstanceMethod(clzSelf, selector);
63+
Method originalAddAllCandidate = class_getInstanceMethod(clzStringeeCall, selector);
64+
65+
BOOL success = class_addMethod(clzStringeeCall, selectorOrigin, method_getImplementation(originalAddAllCandidate), method_getTypeEncoding(originalAddAllCandidate));
66+
67+
if (success) {
68+
class_replaceMethod(clzStringeeCall, @selector(addAllCandidate:), method_getImplementation(overrideAddAllCandidate), method_getTypeEncoding(overrideAddAllCandidate));
69+
}
70+
}
71+
}
72+
73+
- (void)addAllCandidate: (NSMutableArray*) candidates {
74+
BOOL isNullorEmpty = candidates == nil || [candidates count] == 0;
75+
if (!isNullorEmpty) {
76+
NSUInteger total = [candidates count] - 1;
77+
for (NSUInteger i = total; i > NSIntegerMax; i--) {
78+
NSString* sdp = (NSString*) [[candidates objectAtIndex: i] valueForKey:@"_sdp"];
79+
NSLog(@"count i %tu sdp: %@", i, sdp);
80+
if ([NSString stringIsNilOrEmpty: sdp]) {
81+
[candidates removeObjectAtIndex: i];
82+
}
83+
}
84+
}
85+
SEL originalAddAllCandidate = NSSelectorFromString(@"originalAddAllCandidate:");
86+
StringeeCall* call = _stringeeCall;
87+
if (call != nil && [call respondsToSelector: originalAddAllCandidate])
88+
{
89+
NSMethodSignature * methodSignature = [[call class] instanceMethodSignatureForSelector: originalAddAllCandidate];
90+
NSInvocation * delegateInvocation = [NSInvocation invocationWithMethodSignature:methodSignature];
91+
[delegateInvocation setSelector: originalAddAllCandidate];
92+
[delegateInvocation setTarget:call];
93+
[delegateInvocation setArgument:&candidates atIndex:2];
94+
[delegateInvocation invoke];
95+
}
96+
}
97+
4898
// TODO: - Publish Functions
4999

50100
RCT_EXPORT_METHOD(setNativeEvent:(NSString *)event) {
@@ -127,6 +177,8 @@ + (BOOL)requiresMainQueueSetup {
127177
RCT_EXPORT_METHOD(answer:(NSString *)callId callback:(RCTResponseSenderBlock)callback) {
128178
if (callId.length) {
129179
StringeeCall *call = [[RNStringeeInstanceManager instance].calls objectForKey:callId];
180+
_stringeeCall = call;
181+
updateStringeeClzz();
130182
if (call) {
131183
[call answerCallWithCompletionHandler:^(BOOL status, int code, NSString *message) {
132184
callback(@[@(status), @(code), message]);
@@ -308,7 +360,7 @@ + (BOOL)requiresMainQueueSetup {
308360

309361
[call mute:mute];
310362
callback(@[@(YES), @(0), @"Success"]);
311-
363+
312364
}
313365

314366
RCT_EXPORT_METHOD(setSpeakerphoneOn:(NSString *)callId speaker:(BOOL)speaker callback:(RCTResponseSenderBlock)callback) {

0 commit comments

Comments
 (0)