int DeleteOp::executeOp() { DavixError* tmp_err=NULL; DAVIX_SLOG(DAVIX_LOG_DEBUG, DAVIX_LOG_CORE, "{} executing op on ", _scope, _destination_url); if(_opts.params.getProtocol() == RequestProtocol::AwsS3) { _destination_url += "/?delete"; PostRequest req(_c, _destination_url, &tmp_err); if(tmp_err) { Tool::errorPrint(&tmp_err); return -1; } req.setParameters(_opts.params); std::ostringstream ss; ss << _buf.size(); // calculate md5 of body and set header fields, these are required for S3 multi-objects delete std::string md5; S3::calculateMD5(_buf, md5); req.addHeaderField("Content-MD5", md5); req.addHeaderField("Content-Length", ss.str()); req.setRequestBody(_buf); req.executeRequest(&tmp_err); if(tmp_err) { Tool::errorPrint(&tmp_err); return -1; } // check response code int code = req.getRequestCode(); if(!httpcodeIsValid(code)) { httpcodeToDavixError(req.getRequestCode(), davix_scope_http_request(), "during S3 multi-objects delete operation", &tmp_err); if(tmp_err) { Tool::errorPrint(&tmp_err); return -1; } } std::vector<char> body = req.getAnswerContentVec(); TRY_DAVIX{ parse_deletion_result(code, Uri(_destination_url), _scope, body); } CATCH_DAVIX(&tmp_err); if(tmp_err) { Tool::errorPrint(&tmp_err); return -1; } }
int davixRequestToFileStatus(HttpRequest* req, const std::string & scope, DavixError** err){ const int reqcode = req->getRequestCode(); int ret = 0; if( httpcodeIsValid(reqcode) == false){ DavixError* tmp_err=NULL; httpcodeToDavixCode(reqcode, scope, "",&tmp_err); if(tmp_err && tmp_err->getStatus() != StatusCode::OK){ DavixError::propagateError(err, tmp_err); ret = -1; }else{ DavixError::clearError(&tmp_err); } } return ret; }