Response S3RESTfulService::put(const string &url, HTTPHeaders &headers, const S3VectorUInt8 &data) { Response response(RESPONSE_ERROR); headers.CreateList(); CURLWrapper wrapper(url, headers.GetList(), this->lowSpeedLimit, this->lowSpeedTime, this->debugCurl); CURL *curl = wrapper.curl; curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, RESTfulServiceWriteFuncCallback); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, this->verifyCert); UploadData uploadData(data); curl_easy_setopt(curl, CURLOPT_READDATA, (void *)&uploadData); curl_easy_setopt(curl, CURLOPT_READFUNCTION, RESTfulServiceReadFuncCallback); curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)data.size()); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void *)&response); curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, RESTfulServiceHeadersWriteFuncCallback); this->performCurl(curl, response); return response; }
// head() will execute HTTP HEAD RESTful API with given url/headers/params, and return the HTTP // response code. // // Currently, this method only return the HTTP code, will be extended if needed in the future // implementation. ResponseCode S3RESTfulService::head(const string &url, HTTPHeaders &headers) { Response response(RESPONSE_ERROR); headers.CreateList(); CURLWrapper wrapper(url, headers.GetList(), this->lowSpeedLimit, this->lowSpeedTime, this->debugCurl); CURL *curl = wrapper.curl; curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "HEAD"); curl_easy_setopt(curl, CURLOPT_NOBODY, 1L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, this->verifyCert); this->performCurl(curl, response); return response.getResponseCode(); }
// get() will execute HTTP GET RESTful API with given url/headers/params, // and return raw response content. // // This method does not care about response format, caller need to handle // response format accordingly. Response S3RESTfulService::get(const string &url, HTTPHeaders &headers) { Response response(RESPONSE_ERROR, this->s3MemContext); response.getRawData().reserve(this->chunkBufferSize); headers.CreateList(); CURLWrapper wrapper(url, headers.GetList(), this->lowSpeedLimit, this->lowSpeedTime, this->debugCurl); CURL *curl = wrapper.curl; curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, RESTfulServiceWriteFuncCallback); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, this->verifyCert); this->performCurl(curl, response); return response; }
Response S3RESTfulService::deleteRequest(const string &url, HTTPHeaders &headers) { Response response(RESPONSE_ERROR); headers.CreateList(); CURLWrapper wrapper(url, headers.GetList(), this->lowSpeedLimit, this->lowSpeedTime, this->debugCurl); CURL *curl = wrapper.curl; curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, RESTfulServiceAbortFuncCallback); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, this->verifyCert); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); S3VectorUInt8 data; UploadData uploadData(data); curl_easy_setopt(curl, CURLOPT_READDATA, (void *)&uploadData); curl_easy_setopt(curl, CURLOPT_READFUNCTION, RESTfulServiceReadFuncCallback); curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)data.size()); this->performCurl(curl, response); return response; }