11//
22// network.m
3- // cloudsync_network_test
3+ // cloudsync
44//
55// Created by Marco Bambini on 23/05/25.
66//
@@ -58,7 +58,7 @@ bool network_compute_endpoints (sqlite3_context *context, network_data *data, co
5858 }
5959
6060 char *site_id = network_data_get_siteid (data);
61- char *port_or_default = (port) ? (char *)port.UTF8String : CLOUDSYNC_DEFAULT_ENDPOINT_PORT;
61+ char *port_or_default = (port && strcmp (port. UTF8String , " 8860 " ) != 0 ) ? (char *)port.UTF8String : CLOUDSYNC_DEFAULT_ENDPOINT_PORT;
6262
6363 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];
6464 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];
@@ -147,15 +147,19 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
147147 }
148148
149149 __block NSData *responseData = nil ;
150- __block NSError *responseError = nil ;
150+ __block NSString *responseError = nil ;
151151 __block NSInteger statusCode = 0 ;
152+ __block NSInteger errorCode = 0 ;
152153
153154 dispatch_semaphore_t sema = dispatch_semaphore_create (0 );
154155
155156 NSURLSession *session = [NSURLSession sharedSession ];
156157 NSURLSessionDataTask *task = [session dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
157158 responseData = data;
158- responseError = error;
159+ if (error) {
160+ responseError = [error localizedDescription ];
161+ errorCode = [error code ];
162+ }
159163 if ([response isKindOfClass: [NSHTTPURLResponse class ]]) {
160164 statusCode = [(NSHTTPURLResponse *)response statusCode ];
161165 }
@@ -166,9 +170,10 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
166170 dispatch_semaphore_wait (sema, DISPATCH_TIME_FOREVER);
167171
168172 if (!responseError && (statusCode >= 200 && statusCode < 300 )) {
169- size_t len = [responseData length ];
170173 // check if OK should be returned
171- if (len == 0 ) return (NETWORK_RESULT){CLOUDSYNC_NETWORK_OK, NULL , 0 , NULL , NULL };
174+ if (responseData == nil || [responseData length ] == 0 ) {
175+ return (NETWORK_RESULT){CLOUDSYNC_NETWORK_OK, NULL , 0 , NULL , NULL };
176+ }
172177
173178 // otherwise return a buffer
174179 NETWORK_RESULT result = {};
@@ -181,18 +186,31 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
181186 result.buffer = (char *)responseData.bytes ;
182187 result.xdata = (void *)CFBridgingRetain (responseData);
183188 }
184- result.blen = len ;
189+ result.blen = [responseData length ] ;
185190 result.xfree = network_buffer_cleanup;
191+
186192 return result;
187193 }
188194
189195 // return error
190196 NETWORK_RESULT result = {};
191- NSString *msg = (responseError) ? [responseError localizedDescription ] : [NSString stringWithCString: " Unknown network URL" encoding: NSUTF8StringEncoding];
197+ NSString *msg = nil ;
198+ if (responseError) {
199+ msg = responseError;
200+ } else if (responseData && [responseData length ] > 0 ) {
201+ // Use the actual response body as the error message
202+ msg = [[NSString alloc ] initWithData: responseData encoding: NSUTF8StringEncoding];
203+ if (!msg) {
204+ msg = [NSString stringWithFormat: @" HTTP %ld error" , (long )statusCode];
205+ }
206+ } else {
207+ msg = [NSString stringWithFormat: @" HTTP %ld error" , (long )statusCode];
208+ }
192209 result.code = CLOUDSYNC_NETWORK_ERROR;
193210 result.buffer = (char *)msg.UTF8String ;
194211 result.xdata = (void *)CFBridgingRetain (msg);
195212 result.xfree = network_buffer_cleanup;
196- result.blen = (responseError) ? (size_t )responseError.code : (size_t )statusCode;
213+ result.blen = responseError ? (size_t )errorCode : (size_t )statusCode;
214+
197215 return result;
198216}
0 commit comments