Exemplo n.º 1
0
static STSStatus compose_uri(char* buffer, int bufferSize, const CommonRequestContext* commonContext)
{
    int len = 0;
    
#define uri_append(fmt, ...)                                                 \
    do {                                                                     \
            len += snprintf(&(buffer[len]), bufferSize - len, fmt, __VA_ARGS__); \
            if (len >= bufferSize) {                                             \
                return STSStatusUriTooLong;                                       \
            }                                                                    \
    } while (0)
    
    uri_append("http%s://", (STSProtocolHTTP == commonContext->protocol) ? "" : "s");
    
    const char* hostName = commonContext->hostname ? commonContext->hostname : STS_DEFAULT_HOSTNAME;
    
    uri_append("%s", hostName);
    
    return STSStatusOK;
}
Exemplo n.º 2
0
// Compose the URI to use for the request given the request parameters
static S3Status compose_uri(char *buffer, int bufferSize,
                            const S3BucketContext *bucketContext,
                            const char *urlEncodedKey,
                            const char *subResource, const char *queryParams)
{
    int len = 0;
    
#define uri_append(fmt, ...)                                                 \
    do {                                                                     \
        len += snprintf(&(buffer[len]), bufferSize - len, fmt, __VA_ARGS__); \
        if (len >= bufferSize) {                                             \
            return S3StatusUriTooLong;                                       \
        }                                                                    \
    } while (0)

    uri_append("http%s://", 
               (bucketContext->protocol == S3ProtocolHTTP) ? "" : "s");

    const char *hostName = 
        bucketContext->hostName ? bucketContext->hostName : defaultHostNameG;

    if (bucketContext->bucketName && 
        bucketContext->bucketName[0]) {
        if (bucketContext->uriStyle == S3UriStyleVirtualHost) {
            uri_append("%s.%s", bucketContext->bucketName, hostName);
        }
        else {
            uri_append("%s/%s", hostName, bucketContext->bucketName);
        }
    }
    else {
        uri_append("%s", hostName);
    }

    uri_append("%s", "/");

    uri_append("%s", urlEncodedKey);
    
    if (subResource && subResource[0]) {
        uri_append("?%s", subResource);
    }
    
    if (queryParams) {
        uri_append("%s%s", (subResource && subResource[0]) ? "&" : "?",
                   queryParams);
    }
    
    return S3StatusOK;
}