@@ -218,6 +218,8 @@ ngx_http_vod_parse_uri_file_name(
218
218
sequence_tracks_mask_t * sequence_tracks_mask ;
219
219
ngx_str_t * cur_sequence_id ;
220
220
ngx_str_t * last_sequence_id ;
221
+ ngx_str_t * cur_lang ;
222
+ ngx_str_t * last_lang ;
221
223
track_mask_t default_tracks_mask ;
222
224
track_mask_t * tracks_mask ;
223
225
uint32_t segment_index_shift ;
@@ -480,35 +482,38 @@ ngx_http_vod_parse_uri_file_name(
480
482
// languages
481
483
if (* start_pos == 'l' )
482
484
{
483
- result -> langs_mask = ngx_pcalloc (r -> pool , LANG_MASK_SIZE * sizeof (result -> langs_mask [0 ]));
484
- if (result -> langs_mask == NULL )
485
+ result -> langs = ngx_pcalloc (r -> pool , MAX_LANGUAGE_COUNT * sizeof (result -> langs [0 ]));
486
+ if (result -> langs == NULL )
485
487
{
486
488
ngx_log_debug0 (NGX_LOG_DEBUG_HTTP , r -> connection -> log , 0 ,
487
489
"ngx_http_vod_parse_uri_file_name: ngx_palloc failed" );
488
490
return ngx_http_vod_status_to_ngx_error (r , VOD_ALLOC_FAILED );
489
491
}
490
492
493
+ cur_lang = result -> langs ;
494
+ last_lang = cur_lang + MAX_LANGUAGE_COUNT ;
495
+
491
496
for (;;)
492
497
{
493
498
start_pos ++ ; // skip the l
494
- if (start_pos + LANG_ISO639_3_LEN > end_pos )
499
+
500
+ if (cur_lang >= last_lang )
495
501
{
496
502
ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
497
- "ngx_http_vod_parse_uri_file_name: language specifier length must be 3 characters " );
503
+ "ngx_http_vod_parse_uri_file_name: the number of language codes exceeds the limit " );
498
504
return ngx_http_vod_status_to_ngx_error (r , VOD_BAD_REQUEST );
499
505
}
500
506
501
- lang_id = lang_parse_iso639_3_code (iso639_3_str_to_int (start_pos ));
502
- if (lang_id == 0 )
507
+ cur_lang -> data = start_pos ;
508
+
509
+ while (start_pos < end_pos && * start_pos != '-' )
503
510
{
504
- ngx_log_error (NGX_LOG_ERR , r -> connection -> log , 0 ,
505
- "ngx_http_vod_parse_uri_file_name: failed to parse language specifier %*s" , (size_t )3 , start_pos );
506
- return ngx_http_vod_status_to_ngx_error (r , VOD_BAD_REQUEST );
511
+ start_pos ++ ;
507
512
}
508
513
509
- vod_set_bit ( result -> langs_mask , lang_id ) ;
514
+ cur_lang -> len = start_pos - cur_lang -> data ;
510
515
511
- start_pos += LANG_ISO639_3_LEN ;
516
+ cur_lang ++ ;
512
517
513
518
skip_dash (start_pos , end_pos );
514
519
0 commit comments