char* create_rawx_request_common(ne_request **req, ne_request_param_t *param, GError **err) { ne_request *request = NULL; char str_req_id[LIMIT_LENGTH_REQID]; if (NULL == param->session || NULL == param->method || NULL == param->cPath) { GSETERROR(err, "Invalid parameter"); *req = NULL; return NULL; } if (NULL == (request = ne_request_create (param->session, param->method, param->cPath))) { GSETERROR(err, "cannot create a new WebDAV request (%s)", ne_get_error(param->session)); *req = NULL; return NULL; } /* add additionnal headers */ ne_add_request_header (request, RAWX_HEADER_PREFIX "container-id", param->containerid); ne_add_request_header (request, RAWX_HEADER_PREFIX "content-path", param->contentpath); ne_print_request_header(request, RAWX_HEADER_PREFIX "content-size", "%"G_GINT64_FORMAT, param->contentsize); ne_print_request_header(request, RAWX_HEADER_PREFIX "content-chunksnb", "%u", param->chunknb); ne_print_request_header(request, RAWX_HEADER_PREFIX "chunk-pos", "%u", param->chunkpos); ne_print_request_header(request, RAWX_HEADER_PREFIX "chunk-size", "%"G_GINT64_FORMAT, param->chunksize); /* Add request header */ add_req_id_header(request, str_req_id, sizeof(str_req_id)-1); *req = request; return g_strdup(str_req_id); }
char* create_rawx_request_common(ne_request **req, ne_request_param_t *param, GError **err) { ne_request *request = NULL; char str_req_id[1024]; memset(str_req_id, 0x00, sizeof(str_req_id)); if (NULL == param->session || NULL == param->method || NULL == param->cPath) { GSETERROR(err, "Invalid parameter"); *req = NULL; return NULL; } if (NULL == (request = ne_request_create (param->session, param->method, param->cPath))) { GSETERROR(err, "cannot create a new WebDAV request (%s)", ne_get_error(param->session)); *req = NULL; return NULL; } /* add additionnal headers */ ne_add_request_header (request, "containerid", param->containerid); ne_add_request_header (request, "contentpath", param->contentpath); ne_print_request_header(request, "chunkpos", "%u", param->chunkpos); ne_print_request_header(request, "chunknb", "%u", param->chunknb); ne_print_request_header(request, "chunksize", "%"G_GINT64_FORMAT, param->chunksize); ne_print_request_header(request, "contentsize", "%"G_GINT64_FORMAT, param->contentsize); gscstat_tags_start(GSCSTAT_SERVICE_RAWX, GSCSTAT_TAGS_REQPROCTIME); /* Add request header */ add_req_id_header(request, str_req_id, sizeof(str_req_id)-1); *req = request; return g_strdup(str_req_id); }
gs_status_t rawx_delete (gs_chunk_t *chunk, GError **err) { char str_req_id [1024]; char str_addr [STRLEN_ADDRINFO]; char str_ci [STRLEN_CHUNKID]; char cPath [CI_FULLPATHLEN]; char str_hash[STRLEN_CHUNKHASH]; ne_request *request=NULL; ne_session *session=NULL; memset(str_req_id, 0x00, sizeof(str_req_id)); if (!chunk || !chunk->ci || !chunk->content) { GSETERROR (err,"Invalid parameter (bad chunk structure)"); goto error_label; } addr_info_to_string (&(chunk->ci->id.addr), str_addr, sizeof(str_addr)); chunk_id2str(chunk, str_ci, sizeof(str_ci)); chunk_getpath (chunk, cPath, sizeof(cPath)); DEBUG("about to delete %s on %s", str_ci, cPath); gscstat_tags_start(GSCSTAT_SERVICE_RAWX, GSCSTAT_TAGS_REQPROCTIME); session = rawx_opensession (chunk, err); if (!session) { GSETERROR (err, "Cannot open a webdav session"); goto error_label; } /*Create a webdav request*/ do { request = ne_request_create (session, RAWX_DELETE, cPath); if (!request) { GSETERROR (err, "cannot create a %s WebDAV request", RAWX_DELETE); goto error_label; } } while (0); chunk_id2str (chunk, str_ci, sizeof(str_ci)); chunk_gethash (chunk, str_hash, sizeof(str_hash)); /* Add request header */ add_req_id_header(request, str_req_id, sizeof(str_req_id)-1); ne_add_request_header (request, "chunkid", str_ci); ne_add_request_header (request, "chunkhash", str_hash); ne_add_request_header (request, "containerid", C1_IDSTR(chunk->content)); ne_add_request_header (request, "contentpath", chunk->content->info.path); ne_print_request_header(request, "chunkpos", "%"G_GUINT32_FORMAT, chunk->ci->position); ne_print_request_header(request, "chunknb", "%"G_GUINT32_FORMAT, chunk->ci->nb); ne_print_request_header(request, "chunksize", "%"G_GINT64_FORMAT, chunk->ci->size); ne_print_request_header(request, "contentsize", "%"G_GINT64_FORMAT, chunk->content->info.size); /*now perform the request*/ switch (ne_request_dispatch (request)) { case NE_OK: if (ne_get_status(request)->klass != 2) { GSETERROR (err, "cannot delete '%s' (%s) (ReqId:%s)", cPath, ne_get_error(session), str_req_id); goto error_label; } DEBUG("chunk deletion finished (success) : %s", cPath); break; case NE_AUTH: case NE_CONNECT: case NE_TIMEOUT: case NE_ERROR: GSETERROR (err, "unexpected error from the WebDAV server (%s) (ReqId:%s)", ne_get_error(session), str_req_id); goto error_label; } ne_request_destroy (request); ne_session_destroy (session); TRACE("%s deleted (ReqId:%s)", cPath, str_req_id); gscstat_tags_end(GSCSTAT_SERVICE_RAWX, GSCSTAT_TAGS_REQPROCTIME); return 1; error_label: TRACE("could not delete %s", cPath); if (request) ne_request_destroy (request); if (session) ne_session_destroy (session); gscstat_tags_end(GSCSTAT_SERVICE_RAWX, GSCSTAT_TAGS_REQPROCTIME); return 0; }