@@ -3286,47 +3286,48 @@ impl Store {
32863286 } ;
32873287
32883288 //const MANIFEST_CONTENT_TYPE: &str = "application/x-c2pa-manifest-store"; // todo verify once these are served
3289- // const DEFAULT_MANIFEST_RESPONSE_SIZE: usize = 10 * 1024 * 1024; // 10 MB
3289+ const DEFAULT_MANIFEST_RESPONSE_SIZE : usize = 10 * 1024 * 1024 ; // 10 MB
32903290 let parsed_url = Url :: parse ( url)
32913291 . map_err ( |e| Error :: RemoteManifestFetch ( format ! ( "invalid URL: {}" , e) ) ) ?;
3292- let path_with_query = parsed_url[ url:: Position :: BeforeHost ..] . to_string ( ) ;
3292+ let authority = parsed_url. authority ( ) ;
3293+ let path_with_query = parsed_url[ url:: Position :: AfterPort ..] . to_string ( ) ;
3294+ let scheme = match parsed_url. scheme ( ) {
3295+ "http" => Scheme :: Http ,
3296+ "https" => Scheme :: Https ,
3297+ _ => {
3298+ return Err ( Error :: RemoteManifestFetch (
3299+ "unsupported URL scheme" . to_string ( ) ,
3300+ ) )
3301+ }
3302+ } ;
32933303
32943304 let request = OutgoingRequest :: new ( Fields :: new ( ) ) ;
32953305 request. set_path_with_query ( Some ( & path_with_query) ) . unwrap ( ) ;
3296- request. set_scheme ( Some ( & Scheme :: Https ) ) . unwrap ( ) ;
3306+ request. set_authority ( Some ( & authority) ) . unwrap ( ) ;
3307+ request. set_scheme ( Some ( & scheme) ) . unwrap ( ) ;
32973308 match outgoing_handler:: handle ( request, None ) {
32983309 Ok ( resp) => {
32993310 resp. subscribe ( ) . block ( ) ;
33003311 let response = resp
33013312 . get ( )
3302- . expect ( "HTTP request response missing" )
3303- . expect ( "HTTP request response requested more than once" )
3304- . expect ( "HTTP request failed" ) ;
3313+ . ok_or ( Error :: RemoteManifestFetch (
3314+ "HTTP request response missing" . to_string ( ) ,
3315+ ) ) ?
3316+ . map_err ( |_| {
3317+ Error :: RemoteManifestFetch (
3318+ "HTTP request response requested more than once" . to_string ( ) ,
3319+ )
3320+ } ) ?
3321+ . map_err ( |_| Error :: RemoteManifestFetch ( "HTTP request failed" . to_string ( ) ) ) ?;
33053322 if response. status ( ) == 200 {
3306- let raw_header = response. headers ( ) . get ( "Content-Length" ) ;
3307- if raw_header. first ( ) . map ( |val| val. is_empty ( ) ) . unwrap_or ( true ) {
3308- return Err ( Error :: RemoteManifestFetch (
3309- "url returned no content length" . to_string ( ) ,
3310- ) ) ;
3311- }
3312- let str_parsed_header = match std:: str:: from_utf8 ( raw_header. first ( ) . unwrap ( ) ) {
3313- Ok ( s) => s,
3314- Err ( e) => {
3315- return Err ( Error :: RemoteManifestFetch ( format ! (
3316- "error parsing content length header: {}" ,
3317- e
3318- ) ) )
3319- }
3320- } ;
3321- let content_length: usize = match str_parsed_header. parse ( ) {
3322- Ok ( s) => s,
3323- Err ( e) => {
3324- return Err ( Error :: RemoteManifestFetch ( format ! (
3325- "error parsing content length header: {}" ,
3326- e
3327- ) ) )
3328- }
3329- } ;
3323+ let content_length: usize = response
3324+ . headers ( )
3325+ . get ( "Content-Length" )
3326+ . first ( )
3327+ . and_then ( |val| if val. is_empty ( ) { None } else { Some ( val) } )
3328+ . and_then ( |val| std:: str:: from_utf8 ( val) . ok ( ) )
3329+ . and_then ( |str_parsed_header| str_parsed_header. parse ( ) . ok ( ) )
3330+ . unwrap_or ( DEFAULT_MANIFEST_RESPONSE_SIZE ) ;
33303331 let body = {
33313332 let mut buf = Vec :: with_capacity ( content_length) ;
33323333 let response_body = response
0 commit comments