@@ -14,9 +14,17 @@ void network_buffer_cleanup (void *xdata) {
1414}
1515
1616bool network_send_buffer (network_data *data, const char *endpoint, const char *authentication, const void *blob, int blob_size) {
17+ #ifdef CLOUDSYNC_NETWORK_TRACE
18+ double trace_start_ms = network_trace_now_ms ();
19+ #endif
1720 NSString *urlString = [NSString stringWithUTF8String: endpoint];
1821 NSURL *url = [NSURL URLWithString: urlString];
19- if (!url) return false ;
22+ if (!url) {
23+ #ifdef CLOUDSYNC_NETWORK_TRACE
24+ network_trace_log (data, " PUT" , endpoint, 0 , CLOUDSYNC_NETWORK_ERROR, 0 , network_trace_now_ms () - trace_start_ms);
25+ #endif
26+ return false ;
27+ }
2028
2129 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url];
2230 [request setHTTPMethod: @" PUT" ];
@@ -37,6 +45,7 @@ bool network_send_buffer(network_data *data, const char *endpoint, const char *a
3745 [request setHTTPBody: bodyData];
3846
3947 __block bool success = false ;
48+ __block NSInteger statusCode = 0 ;
4049 dispatch_semaphore_t sema = dispatch_semaphore_create (0 );
4150
4251 NSURLSessionConfiguration *config = [NSURLSessionConfiguration ephemeralSessionConfiguration ];
@@ -47,7 +56,7 @@ bool network_send_buffer(network_data *data, const char *endpoint, const char *a
4756 NSURLResponse * _Nullable response,
4857 NSError * _Nullable error) {
4958 if (!error && [response isKindOfClass: [NSHTTPURLResponse class ]]) {
50- NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode ];
59+ statusCode = [(NSHTTPURLResponse *)response statusCode ];
5160 success = (statusCode >= 200 && statusCode < 300 );
5261 }
5362 dispatch_semaphore_signal (sema);
@@ -57,11 +66,22 @@ bool network_send_buffer(network_data *data, const char *endpoint, const char *a
5766 dispatch_semaphore_wait (sema, DISPATCH_TIME_FOREVER);
5867 [session finishTasksAndInvalidate ];
5968
69+ #ifdef CLOUDSYNC_NETWORK_TRACE
70+ network_trace_log (data, " PUT" , endpoint, (long )statusCode,
71+ success ? CLOUDSYNC_NETWORK_OK : CLOUDSYNC_NETWORK_ERROR,
72+ success ? (size_t )blob_size : 0 ,
73+ network_trace_now_ms () - trace_start_ms);
74+ #endif
75+
6076 return success;
6177}
6278
6379
6480NETWORK_RESULT network_receive_buffer (network_data *data, const char *endpoint, const char *authentication, bool zero_terminated, bool is_post_request, char *json_payload, const char **extra_headers, int nextra_headers) {
81+ #ifdef CLOUDSYNC_NETWORK_TRACE
82+ double trace_start_ms = network_trace_now_ms ();
83+ #endif
84+ const char *method = (json_payload || is_post_request) ? " POST" : " GET" ;
6585
6686 NSString *urlString = [NSString stringWithUTF8String: endpoint];
6787 NSURL *url = [NSURL URLWithString: urlString];
@@ -72,6 +92,9 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
7292 result.buffer = (char *)msg.UTF8String ;
7393 result.xdata = (void *)CFBridgingRetain (msg);
7494 result.xfree = network_buffer_cleanup;
95+ #ifdef CLOUDSYNC_NETWORK_TRACE
96+ network_trace_log (data, method, endpoint, 0 , result.code , 0 , network_trace_now_ms () - trace_start_ms);
97+ #endif
7598 return result;
7699 }
77100
@@ -134,7 +157,11 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
134157 if (!responseError && (statusCode >= 200 && statusCode < 300 )) {
135158 // check if OK should be returned
136159 if (responseData == nil || [responseData length ] == 0 ) {
137- return (NETWORK_RESULT){CLOUDSYNC_NETWORK_OK, NULL , 0 , NULL , NULL };
160+ NETWORK_RESULT result = {CLOUDSYNC_NETWORK_OK, NULL , 0 , NULL , NULL };
161+ #ifdef CLOUDSYNC_NETWORK_TRACE
162+ network_trace_log (data, method, endpoint, (long )statusCode, result.code , 0 , network_trace_now_ms () - trace_start_ms);
163+ #endif
164+ return result;
138165 }
139166
140167 // otherwise return a buffer
@@ -144,7 +171,11 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
144171 NSString *utf8String = [[NSString alloc ] initWithData: responseData encoding: NSUTF8StringEncoding];
145172 if (!utf8String) {
146173 NSString *msg = @" Response is not valid UTF-8" ;
147- return (NETWORK_RESULT){CLOUDSYNC_NETWORK_ERROR, (char *)msg.UTF8String , 0 , (void *)CFBridgingRetain (msg), network_buffer_cleanup};
174+ NETWORK_RESULT error_result = {CLOUDSYNC_NETWORK_ERROR, (char *)msg.UTF8String , 0 , (void *)CFBridgingRetain (msg), network_buffer_cleanup};
175+ #ifdef CLOUDSYNC_NETWORK_TRACE
176+ network_trace_log (data, method, endpoint, (long )statusCode, error_result.code , 0 , network_trace_now_ms () - trace_start_ms);
177+ #endif
178+ return error_result;
148179 }
149180 result.buffer = (char *)utf8String.UTF8String ;
150181 result.xdata = (void *)CFBridgingRetain (utf8String);
@@ -155,6 +186,9 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
155186 result.blen = [responseData length ];
156187 result.xfree = network_buffer_cleanup;
157188
189+ #ifdef CLOUDSYNC_NETWORK_TRACE
190+ network_trace_log (data, method, endpoint, (long )statusCode, result.code , result.blen , network_trace_now_ms () - trace_start_ms);
191+ #endif
158192 return result;
159193 }
160194
@@ -178,5 +212,8 @@ NETWORK_RESULT network_receive_buffer(network_data *data, const char *endpoint,
178212 result.xfree = network_buffer_cleanup;
179213 result.blen = responseError ? (size_t )errorCode : (size_t )statusCode;
180214
215+ #ifdef CLOUDSYNC_NETWORK_TRACE
216+ network_trace_log (data, method, endpoint, (long )statusCode, result.code , 0 , network_trace_now_ms () - trace_start_ms);
217+ #endif
181218 return result;
182219}
0 commit comments