@@ -151,22 +151,21 @@ static int http_get_request_send(struct downloader *dl)
151151 /* nRF91 series has a limitation of decoding ~2k of data at once when using TLS */
152152 tls_force_range = (http -> sock .proto == IPPROTO_TLS_1_2 && !dl -> host_cfg .set_native_tls &&
153153 IS_ENABLED (CONFIG_SOC_SERIES_NRF91X ));
154-
155- if (dl -> host_cfg .range_override ) {
156- if (tls_force_range && dl -> host_cfg .range_override > (TLS_RANGE_MAX )) {
154+ if (tls_force_range ) {
155+ if (dl -> host_cfg .range_override > TLS_RANGE_MAX ) {
157156 LOG_WRN ("Range override > TLS max range, setting to TLS max range" );
158- dl -> host_cfg .range_override = (TLS_RANGE_MAX );
157+ dl -> host_cfg .range_override = TLS_RANGE_MAX ;
158+ } else if (dl -> host_cfg .range_override == 0 ) {
159+ dl -> host_cfg .range_override = TLS_RANGE_MAX ;
159160 }
160- } else if (tls_force_range ) {
161- dl -> host_cfg .range_override = TLS_RANGE_MAX ;
162161 }
163162
164163 if (dl -> host_cfg .range_override ) {
165164 off = dl -> progress + dl -> host_cfg .range_override - 1 ;
166165
167- if (dl -> file_size && ( off > dl -> file_size - 1 ) ) {
166+ if (dl -> file_size ) {
168167 /* Don't request bytes past the end of file */
169- off = dl -> file_size - 1 ;
168+ off = MIN ( off , dl -> file_size - 1 ) ;
170169 }
171170
172171 len = snprintf (dl -> cfg .buf , dl -> cfg .buf_size , HTTP_GET_RANGE , dl -> file ,
@@ -440,22 +439,22 @@ static int http_parse(struct downloader *dl, size_t len)
440439 }
441440 }
442441
443- /* Have we received a whole fragment or the whole file? */
444- if (dl -> progress + len != dl -> file_size ) {
445- if (http -> ranged ) {
446- http -> ranged_progress += len ;
447- if (http -> ranged_progress < dl -> host_cfg .range_override ) {
448- /* Ranged query: read until a full fragment */
449- return len ;
450- }
442+ if (dl -> progress + len == dl -> file_size ) {
443+ /* A full file has been received */
444+ http -> new_data_req = true;
445+ return len ;
446+ }
447+
448+ if (http -> ranged ) {
449+ http -> ranged_progress += len ;
450+ if (http -> ranged_progress < dl -> host_cfg .range_override ) {
451+ /* Ranged query: read until a full fragment is received */
451452 } else {
452- /* Non-ranged query: just keep on reading, ignore fragment size */
453- return len ;
453+ /* Ranged query: request next fragment */
454+ http -> new_data_req = true ;
454455 }
455456 }
456457
457- /* Either we have a full file, or we need to request a next fragment */
458- http -> new_data_req = true;
459458 return len ;
460459}
461460
0 commit comments