Skip to content

Commit f450455

Browse files
authored
Merge pull request novastone-media#554 from robnadin/disallow-cellular-access
Update socket transport
2 parents 25a53a1 + 4b3763a commit f450455

File tree

4 files changed

+77
-0
lines changed

4 files changed

+77
-0
lines changed

MQTTClient/MQTTClient.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@
7474
84E2C45B1EC34E9900BC02CE /* MQTTProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E2C4561EC34E8500BC02CE /* MQTTProperties.m */; };
7575
84E2C45C1EC34E9A00BC02CE /* MQTTProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E2C4561EC34E8500BC02CE /* MQTTProperties.m */; };
7676
84E2C45D1EC34E9B00BC02CE /* MQTTProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E2C4561EC34E8500BC02CE /* MQTTProperties.m */; };
77+
AB83810F23F4013000081DD0 /* MQTTCFSocketTransportTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB83810E23F4013000081DD0 /* MQTTCFSocketTransportTests.m */; };
78+
AB83811023F401A800081DD0 /* MQTTCFSocketTransportTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB83810E23F4013000081DD0 /* MQTTCFSocketTransportTests.m */; };
79+
AB83811123F401A800081DD0 /* MQTTCFSocketTransportTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB83810E23F4013000081DD0 /* MQTTCFSocketTransportTests.m */; };
7780
C701E33B1FB0A70600B0CEB5 /* GCDTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = C701E3371FB0A70600B0CEB5 /* GCDTimer.m */; };
7881
C701E33C1FB0A70600B0CEB5 /* GCDTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = C701E3371FB0A70600B0CEB5 /* GCDTimer.m */; };
7982
C701E33D1FB0A70600B0CEB5 /* GCDTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = C701E3371FB0A70600B0CEB5 /* GCDTimer.m */; };
@@ -382,6 +385,7 @@
382385
996F616077646ED8B69D0FA6 /* Pods-MQTTClientmacOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MQTTClientmacOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MQTTClientmacOSTests/Pods-MQTTClientmacOSTests.release.xcconfig"; sourceTree = "<group>"; };
383386
9CCB29D63B591010757C4A88 /* Pods-MQTTClientmacOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MQTTClientmacOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MQTTClientmacOS/Pods-MQTTClientmacOS.release.xcconfig"; sourceTree = "<group>"; };
384387
9EE2DD9985F3B03D71C59448 /* Pods-MQTTClienttvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MQTTClienttvOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MQTTClienttvOSTests/Pods-MQTTClienttvOSTests.release.xcconfig"; sourceTree = "<group>"; };
388+
AB83810E23F4013000081DD0 /* MQTTCFSocketTransportTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MQTTCFSocketTransportTests.m; sourceTree = "<group>"; };
385389
C21D3C6E1B1EBB0E0012DD2F /* MQTTClientSubscriptionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MQTTClientSubscriptionTests.m; sourceTree = "<group>"; };
386390
C21D3C701B1EBD730012DD2F /* MQTTSSLSecurityPolicyTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MQTTSSLSecurityPolicyTests.m; sourceTree = "<group>"; };
387391
C21D3CA71B1ED2F40012DD2F /* server.der */ = {isa = PBXFileReference; lastKnownFileType = file; path = server.der; sourceTree = "<group>"; };
@@ -685,6 +689,7 @@
685689
C7C24D37208F13BF00DFF5F9 /* MQTTCoreDataPersistenceTests.m */,
686690
840785A818A2AA26009158D5 /* MQTTClientPublishTests.m */,
687691
84B6A1881C133A9F00618573 /* MQTTTestWebsockets.m */,
692+
AB83810E23F4013000081DD0 /* MQTTCFSocketTransportTests.m */,
688693
8442BEE81A97B15100D00E55 /* SwiftTests.swift */,
689694
84B739B11A66F07900B103F4 /* MQTTClientTests-Bridging-Header.h */,
690695
846191441883E56800101409 /* Supporting Files */,
@@ -1394,6 +1399,7 @@
13941399
files = (
13951400
C7AA17F11FB6F07900098AA9 /* MQTTSessionTests.m in Sources */,
13961401
C76019D52191E9B700B72C63 /* MQTTTestWebsockets.m in Sources */,
1402+
AB83810F23F4013000081DD0 /* MQTTCFSocketTransportTests.m in Sources */,
13971403
C7C064171FBB4976000B65C7 /* MQTTSessionManagerTests.m in Sources */,
13981404
C7C24D38208F13BF00DFF5F9 /* MQTTCoreDataPersistenceTests.m in Sources */,
13991405
C7095E7C1FBDD1E900D73DD9 /* MQTTSSLSecurityPolicyTests.m in Sources */,
@@ -1418,6 +1424,7 @@
14181424
840716551BBEF19E00FBB3CB /* MQTTACLTests.m in Sources */,
14191425
840716561BBEF19E00FBB3CB /* MQTTClientOnlyTests.m in Sources */,
14201426
C7515EB91F4C51A60071CFFE /* ReconnectTimerTests.m in Sources */,
1427+
AB83811123F401A800081DD0 /* MQTTCFSocketTransportTests.m in Sources */,
14211428
C7B262E3219191490054AA6F /* MQTTClientTests.m in Sources */,
14221429
C74489981FA74D58002751B2 /* MQTTSessionTests.m in Sources */,
14231430
840716591BBEF19E00FBB3CB /* MQTTSessionManagerTests.m in Sources */,
@@ -1437,6 +1444,7 @@
14371444
8425D70D1BBE8D68005AD733 /* MQTTSSLSecurityPolicyTests.m in Sources */,
14381445
C7515EBA1F4C51A70071CFFE /* ReconnectTimerTests.m in Sources */,
14391446
C7B262E2219191480054AA6F /* MQTTClientTests.m in Sources */,
1447+
AB83811023F401A800081DD0 /* MQTTCFSocketTransportTests.m in Sources */,
14401448
C74489971FA74D58002751B2 /* MQTTSessionTests.m in Sources */,
14411449
8425D7111BBE8D68005AD733 /* MQTTACLTests.m in Sources */,
14421450
84517CF51C182F06006FE09B /* MQTTTestHelpers.m in Sources */,

MQTTClient/MQTTClient/MQTTCFSocketTransport.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
*/
4040
@property (nonatomic) BOOL tls;
4141

42+
/// A Boolean value indicating whether the transport should send data over the cell network. Defaults to `YES`.
43+
@property (nonatomic) BOOL allowsCellularAccess;
44+
4245
/** Require for VoIP background service
4346
* defaults to NO
4447
*/

MQTTClient/MQTTClient/MQTTCFSocketTransport.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ - (instancetype)init {
3333
self.host = @"localhost";
3434
self.port = 1883;
3535
self.tls = false;
36+
self.allowsCellularAccess = YES;
3637
self.voip = false;
3738
self.certificates = nil;
3839
self.queue = dispatch_get_main_queue();
@@ -96,6 +97,11 @@ - (void)open {
9697
}
9798
}
9899

100+
if (!self.allowsCellularAccess) {
101+
CFReadStreamSetProperty(readStream, kCFStreamPropertyNoCellular, kCFBooleanTrue);
102+
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyNoCellular, kCFBooleanTrue);
103+
}
104+
99105
if (!connectError) {
100106
self.encoder.delegate = nil;
101107
self.encoder = [[MQTTCFSocketEncoder alloc] init];
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
//
2+
// MQTTCFSocketTransportTests.m
3+
// MQTTClientTests
4+
//
5+
// Created by Rob Nadin on 12/02/2020.
6+
// Copyright © 2020 Christoph Krey. All rights reserved.
7+
//
8+
9+
#import <XCTest/XCTest.h>
10+
11+
#import "MQTTCFSocketTransport.h"
12+
#import "MQTTTestHelpers.h"
13+
14+
@interface MQTTCFSocketTransportTests : MQTTTestHelpers
15+
@property (strong, nonatomic) MQTTCFSocketTransport *transport;
16+
@end
17+
18+
@implementation MQTTCFSocketTransportTests
19+
20+
- (void)setUp {
21+
[super setUp];
22+
self.transport = [MQTTCFSocketTransport new];
23+
}
24+
25+
- (void)tearDown {
26+
[self.session closeWithReturnCode:MQTTSuccess
27+
sessionExpiryInterval:nil
28+
reasonString:nil
29+
userProperty:nil
30+
disconnectHandler:nil];
31+
self.session.delegate = nil;
32+
self.session = nil;
33+
self.transport = nil;
34+
35+
[super tearDown];
36+
}
37+
38+
- (void)testAllowsCellularAccessDefaultIsTrue {
39+
XCTAssertTrue(self.transport.allowsCellularAccess);
40+
}
41+
42+
- (void)testConnectSessionDoesNotError {
43+
NSDictionary *parameters = MQTTTestHelpers.broker;
44+
self.transport.allowsCellularAccess = NO;
45+
self.transport.host = parameters[@"host"];
46+
self.transport.port = [parameters[@"port"] intValue];
47+
self.transport.tls = [parameters[@"tls"] boolValue];
48+
49+
self.session = [[MQTTSession alloc] init];
50+
self.session.transport = self.transport;
51+
52+
XCTestExpectation *expectation = [self expectationWithDescription:@""];
53+
[self.session connectWithConnectHandler:^(NSError *error) {
54+
XCTAssertNil(error);
55+
[expectation fulfill];
56+
}];
57+
[self waitForExpectationsWithTimeout:[parameters[@"timeout"] intValue] handler:nil];
58+
}
59+
60+
@end

0 commit comments

Comments
 (0)