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