Skip to content

Commit 6746f5b

Browse files
committed
Update network.m
1 parent 84f7541 commit 6746f5b

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/network.m

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,9 @@ bool network_compute_endpoints (sqlite3_context *context, network_data *data, co
6060
char *site_id = network_data_get_siteid(data);
6161
char *port_or_default = (port && strcmp(port.UTF8String, "8860") != 0) ? (char *)port.UTF8String : CLOUDSYNC_DEFAULT_ENDPOINT_PORT;
6262

63-
NSString *check_endpoint = [NSString stringWithFormat:@"%s://%s:%s/%s%s/%s", scheme.UTF8String, host.UTF8String, port_or_default, CLOUDSYNC_ENDPOINT_PREFIX, database.UTF8String, site_id];
64-
NSString *upload_endpoint = [NSString stringWithFormat: @"%s://%s:%s/%s%s/%s/%s", scheme.UTF8String, host.UTF8String, port_or_default, CLOUDSYNC_ENDPOINT_PREFIX, database.UTF8String, site_id, CLOUDSYNC_ENDPOINT_UPLOAD];
65-
NSString *apply_endpoint = [NSString stringWithFormat: @"%s://%s:%s/%s%s/%s/%s", scheme.UTF8String, host.UTF8String, port_or_default, CLOUDSYNC_ENDPOINT_PREFIX, database.UTF8String, site_id, CLOUDSYNC_ENDPOINT_UPLOAD];
63+
NSString *check_endpoint = [NSString stringWithFormat:@"%s://%s:%s/%s%s/%s/%s", scheme.UTF8String, host.UTF8String, port_or_default, CLOUDSYNC_ENDPOINT_PREFIX, database.UTF8String, site_id, CLOUDSYNC_ENDPOINT_CHECK];
64+
NSString *upload_endpoint = [NSString stringWithFormat:@"%s://%s:%s/%s%s/%s/%s", scheme.UTF8String, host.UTF8String, port_or_default, CLOUDSYNC_ENDPOINT_PREFIX, database.UTF8String, site_id, CLOUDSYNC_ENDPOINT_UPLOAD];
65+
NSString *apply_endpoint = [NSString stringWithFormat:@"%s://%s:%s/%s%s/%s/%s", scheme.UTF8String, host.UTF8String, port_or_default, CLOUDSYNC_ENDPOINT_PREFIX, database.UTF8String, site_id, CLOUDSYNC_ENDPOINT_APPLY];
6666

6767
return network_data_set_endpoints(data, (char *)authentication.UTF8String, (char *)check_endpoint.UTF8String, (char *)upload_endpoint.UTF8String, (char *)apply_endpoint.UTF8String);
6868
}
@@ -92,7 +92,7 @@ bool network_send_buffer(network_data *data, const char *endpoint, const char *a
9292
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
9393

9494
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
95-
completionHandler:^(NSData * _Nullable data,
95+
completionHandler:^(NSData * _Nullable responseBody,
9696
NSURLResponse * _Nullable response,
9797
NSError * _Nullable error) {
9898
if (!error && [response isKindOfClass:[NSHTTPURLResponse class]]) {
@@ -104,6 +104,7 @@ bool network_send_buffer(network_data *data, const char *endpoint, const char *a
104104

105105
[task resume];
106106
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
107+
[session finishTasksAndInvalidate];
107108

108109
return success;
109110
}
@@ -154,9 +155,10 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
154155

155156
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
156157

157-
NSURLSession *session = [NSURLSession sharedSession];
158-
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
159-
responseData = data;
158+
NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration];
159+
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
160+
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *responseBody, NSURLResponse *response, NSError *error) {
161+
responseData = responseBody;
160162
if (error) {
161163
responseError = [error localizedDescription];
162164
errorCode = [error code];
@@ -169,6 +171,7 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
169171

170172
[task resume];
171173
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
174+
[session finishTasksAndInvalidate];
172175

173176
if (!responseError && (statusCode >= 200 && statusCode < 300)) {
174177
// check if OK should be returned
@@ -181,6 +184,10 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
181184
result.code = CLOUDSYNC_NETWORK_BUFFER;
182185
if (zero_terminated) {
183186
NSString *utf8String = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
187+
if (!utf8String) {
188+
NSString *msg = @"Response is not valid UTF-8";
189+
return (NETWORK_RESULT){CLOUDSYNC_NETWORK_ERROR, (char *)msg.UTF8String, 0, (void *)CFBridgingRetain(msg), network_buffer_cleanup};
190+
}
184191
result.buffer = (char *)utf8String.UTF8String;
185192
result.xdata = (void *)CFBridgingRetain(utf8String);
186193
} else {

0 commit comments

Comments
 (0)