@@ -105,7 +105,7 @@ static void H5FD__s3comms_load_aws_creds_from_env(char *key_id, char *secret_acc
105
105
106
106
static herr_t H5FD__s3comms_make_iso_8661_string (time_t time , char iso8601 [ISO8601_SIZE ]);
107
107
108
- static parsed_url_t * H5FD__s3comms_parse_url (const char * url , const char * fapl_endpoint );
108
+ static parsed_url_t * H5FD__s3comms_parse_url (const char * url , const char * aws_region , const char * fapl_endpoint );
109
109
110
110
static herr_t H5FD__s3comms_free_purl (parsed_url_t * purl );
111
111
@@ -758,7 +758,7 @@ H5FD__s3comms_s3r_open(const char *url, const H5FD_ros3_fapl_t *fa, const char *
758
758
HGOTO_ERROR (H5E_VFL , H5E_CANTALLOC , NULL , "unable to allocate space for S3 request HTTP verb" );
759
759
760
760
/* Parse URL */
761
- if (NULL == (handle -> purl = H5FD__s3comms_parse_url (url , fapl_endpoint )))
761
+ if (NULL == (handle -> purl = H5FD__s3comms_parse_url (url , handle -> aws_region , fapl_endpoint )))
762
762
HGOTO_ERROR (H5E_VFL , H5E_CANTALLOC , NULL , "could not allocate and create parsed URL" );
763
763
764
764
/*************************************
@@ -784,7 +784,7 @@ H5FD__s3comms_s3r_open(const char *url, const H5FD_ros3_fapl_t *fa, const char *
784
784
HGOTO_ERROR (H5E_VFL , H5E_BADVALUE , NULL , "error while setting CURL option (CURLOPT_FAILONERROR)" );
785
785
if (CURLE_OK != curl_easy_setopt (curlh , CURLOPT_WRITEFUNCTION , H5FD__s3comms_curl_write_callback ))
786
786
HGOTO_ERROR (H5E_VFL , H5E_BADVALUE , NULL , "error while setting CURL option (CURLOPT_WRITEFUNCTION)" );
787
- if (CURLE_OK != curl_easy_setopt (curlh , CURLOPT_URL , url ))
787
+ if (CURLE_OK != curl_easy_setopt (curlh , CURLOPT_URL , handle -> purl -> url ))
788
788
HGOTO_ERROR (H5E_VFL , H5E_BADVALUE , NULL , "error while setting CURL option (CURLOPT_URL)" );
789
789
790
790
#if S3COMMS_CURL_VERBOSITY > 1
@@ -1434,14 +1434,14 @@ H5FD__s3comms_bytes_to_hex(char *dest, size_t dest_len, const unsigned char *msg
1434
1434
/*----------------------------------------------------------------------------
1435
1435
* Function: H5FD__s3comms_parse_url
1436
1436
*
1437
- * Purpose: Release resources from a parsed_url_t pointer
1437
+ * Purpose: Parse args to a parsed_url_t pointer
1438
1438
*
1439
1439
* Return: Success: A pointer to a parsed_url_t
1440
1440
* Failure: NULL
1441
1441
*----------------------------------------------------------------------------
1442
1442
*/
1443
1443
static parsed_url_t *
1444
- H5FD__s3comms_parse_url (const char * url , const char * fapl_endpoint )
1444
+ H5FD__s3comms_parse_url (const char * url , const char * aws_region , const char * fapl_endpoint )
1445
1445
{
1446
1446
CURLUcode rc ;
1447
1447
CURLU * curlurl = NULL ;
@@ -1467,22 +1467,27 @@ H5FD__s3comms_parse_url(const char *url, const char *fapl_endpoint)
1467
1467
1468
1468
// Calculate lengths
1469
1469
size_t bucket_len = slash_pos - path_start ;
1470
- size_t key_len = strlen (slash_pos + 1 );
1470
+ slash_pos ++ ; /*skip over slash */
1471
+ size_t key_len = strlen (slash_pos );
1471
1472
1472
1473
/* Copy bucket and key strings into temp variables */
1473
1474
strncpy (bucket_name , path_start , bucket_len );
1474
1475
bucket_name [bucket_len ] = '\0' ;
1475
1476
1476
- strncpy (object_key , slash_pos + 1 , key_len );
1477
- object_key [bucket_len ] = '\0' ;
1477
+ strncpy (object_key , slash_pos , key_len );
1478
+ object_key [key_len ] = '\0' ;
1478
1479
1479
1480
if (fapl_endpoint )
1480
1481
snprintf (s3_url , strlen (fapl_endpoint ) + strlen (bucket_name ) + strlen (object_key ) + 3 ,
1481
1482
"%s/%s/%s" , fapl_endpoint , bucket_name , object_key );
1482
- else
1483
- /*object_url = "https://s3."+region_code+".amazonaws.com/"+bucket_name+"/"+object_key;*/
1484
- snprintf (s3_url , 24 + strlen (bucket_name ) + strlen (object_key ) + 3 ,
1485
- "https://s3.amazonaws.com/%s/%s" , bucket_name , object_key );
1483
+ else {
1484
+ if (aws_region == NULL )
1485
+ snprintf (s3_url , 24 + strlen (bucket_name ) + strlen (object_key ) + 3 ,
1486
+ "https://s3.amazonaws.com/%s/%s" , bucket_name , object_key );
1487
+ else
1488
+ snprintf (s3_url , 24 + strlen (aws_region ) + strlen (bucket_name ) + strlen (object_key ) + 3 ,
1489
+ "https://s3.%s.amazonaws.com/%s/%s" , bucket_name , object_key );
1490
+ }
1486
1491
object_url = s3_url ;
1487
1492
}
1488
1493
else
@@ -1559,6 +1564,7 @@ H5FD__s3comms_free_purl(parsed_url_t *purl)
1559
1564
curl_free (purl -> port );
1560
1565
curl_free (purl -> path );
1561
1566
curl_free (purl -> query );
1567
+ curl_free (purl -> url );
1562
1568
1563
1569
H5MM_xfree (purl );
1564
1570
0 commit comments