@@ -3276,47 +3276,48 @@ impl Store {
32763276 } ;
32773277
32783278 //const MANIFEST_CONTENT_TYPE: &str = "application/x-c2pa-manifest-store"; // todo verify once these are served
3279- // const DEFAULT_MANIFEST_RESPONSE_SIZE: usize = 10 * 1024 * 1024; // 10 MB
3279+ const DEFAULT_MANIFEST_RESPONSE_SIZE : usize = 10 * 1024 * 1024 ; // 10 MB
32803280 let parsed_url = Url :: parse ( url)
32813281 . map_err ( |e| Error :: RemoteManifestFetch ( format ! ( "invalid URL: {}" , e) ) ) ?;
3282- let path_with_query = parsed_url[ url:: Position :: BeforeHost ..] . to_string ( ) ;
3282+ let authority = parsed_url. authority ( ) ;
3283+ let path_with_query = parsed_url[ url:: Position :: AfterPort ..] . to_string ( ) ;
3284+ let scheme = match parsed_url. scheme ( ) {
3285+ "http" => Scheme :: Http ,
3286+ "https" => Scheme :: Https ,
3287+ _ => {
3288+ return Err ( Error :: RemoteManifestFetch (
3289+ "unsupported URL scheme" . to_string ( ) ,
3290+ ) )
3291+ }
3292+ } ;
32833293
32843294 let request = OutgoingRequest :: new ( Fields :: new ( ) ) ;
32853295 request. set_path_with_query ( Some ( & path_with_query) ) . unwrap ( ) ;
3286- request. set_scheme ( Some ( & Scheme :: Https ) ) . unwrap ( ) ;
3296+ request. set_authority ( Some ( & authority) ) . unwrap ( ) ;
3297+ request. set_scheme ( Some ( & scheme) ) . unwrap ( ) ;
32873298 match outgoing_handler:: handle ( request, None ) {
32883299 Ok ( resp) => {
32893300 resp. subscribe ( ) . block ( ) ;
32903301 let response = resp
32913302 . get ( )
3292- . expect ( "HTTP request response missing" )
3293- . expect ( "HTTP request response requested more than once" )
3294- . expect ( "HTTP request failed" ) ;
3303+ . ok_or ( Error :: RemoteManifestFetch (
3304+ "HTTP request response missing" . to_string ( ) ,
3305+ ) ) ?
3306+ . map_err ( |_| {
3307+ Error :: RemoteManifestFetch (
3308+ "HTTP request response requested more than once" . to_string ( ) ,
3309+ )
3310+ } ) ?
3311+ . map_err ( |_| Error :: RemoteManifestFetch ( "HTTP request failed" . to_string ( ) ) ) ?;
32953312 if response. status ( ) == 200 {
3296- let raw_header = response. headers ( ) . get ( "Content-Length" ) ;
3297- if raw_header. first ( ) . map ( |val| val. is_empty ( ) ) . unwrap_or ( true ) {
3298- return Err ( Error :: RemoteManifestFetch (
3299- "url returned no content length" . to_string ( ) ,
3300- ) ) ;
3301- }
3302- let str_parsed_header = match std:: str:: from_utf8 ( raw_header. first ( ) . unwrap ( ) ) {
3303- Ok ( s) => s,
3304- Err ( e) => {
3305- return Err ( Error :: RemoteManifestFetch ( format ! (
3306- "error parsing content length header: {}" ,
3307- e
3308- ) ) )
3309- }
3310- } ;
3311- let content_length: usize = match str_parsed_header. parse ( ) {
3312- Ok ( s) => s,
3313- Err ( e) => {
3314- return Err ( Error :: RemoteManifestFetch ( format ! (
3315- "error parsing content length header: {}" ,
3316- e
3317- ) ) )
3318- }
3319- } ;
3313+ let content_length: usize = response
3314+ . headers ( )
3315+ . get ( "Content-Length" )
3316+ . first ( )
3317+ . and_then ( |val| if val. is_empty ( ) { None } else { Some ( val) } )
3318+ . and_then ( |val| std:: str:: from_utf8 ( val) . ok ( ) )
3319+ . and_then ( |str_parsed_header| str_parsed_header. parse ( ) . ok ( ) )
3320+ . unwrap_or ( DEFAULT_MANIFEST_RESPONSE_SIZE ) ;
33203321 let body = {
33213322 let mut buf = Vec :: with_capacity ( content_length) ;
33223323 let response_body = response
0 commit comments