svn_error_t *svn_ra_neon__set_neon_body_provider(svn_ra_neon__request_t *req, apr_file_t *body_file) { apr_status_t status; apr_finfo_t finfo; body_provider_baton_t *b = apr_palloc(req->pool, sizeof(*b)); status = apr_file_info_get(&finfo, APR_FINFO_SIZE, body_file); if (status) return svn_error_wrap_apr(status, _("Can't calculate the request body size")); b->body_file = body_file; b->req = req; #if defined(SVN_NEON_0_27) ne_set_request_body_provider(req->ne_req, (ne_off_t)finfo.size, ra_neon_body_provider, b); #elif defined(NE_LFS) ne_set_request_body_provider64(req->ne_req, finfo.size, ra_neon_body_provider, b); #else /* Cut size to 32 bit */ ne_set_request_body_provider(req->ne_req, (size_t) finfo.size, ra_neon_body_provider, b); #endif return SVN_NO_ERROR; }
static int large_put(void) { ne_request *req = ne_request_create(i_session, "PUT", path); int count, ret; #ifdef NE_LFS ne_set_request_body_provider64(req, TOTALSIZE, provider, &count); #else ne_set_request_body_provider(req, TOTALSIZE, provider, &count); #endif ret = ne_request_dispatch(req); ONNREQ("large PUT request", ret || ne_get_status(req)->klass != 2); ne_request_destroy(req); return OK; }
int s3_put_object(S3 *s3,const char *bucket,const char *key,const char *content_type,int content_length,const S3ReadCallback *rcb) { ne_request *req; int err, retry; if(!s3) return -1; if(!bucket) return -1; if(!rcb) return -1; s3_begin_session(s3); req = s3_new_request(s3,"PUT",bucket,key,NULL,content_type); ne_print_request_header(req,"Content-Length","%d",content_length); #ifdef NE_LFS ne_set_request_body_provider64(req,content_length,rcb->callback,rcb->userdata); #else ne_set_request_body_provider(req,content_length,rcb->callback,rcb->userdata); #endif //ne_set_request_body_buffer(req,"hello",5); // send to server do { err = ne_begin_request(req); if(err != NE_OK) err = -EIO; else { if(ne_get_status(req)->code != 200) { s3_handle_error_response(s3,req); err = -EACCES; } retry = ne_end_request(req); } } while(retry == NE_RETRY); ne_request_destroy(req); s3_end_session(s3); return err; }