Files correlati : Commento : Aggiornata cUrl alla ultima versione su Github: 7.56.1 git-svn-id: svn://10.65.10.50/branches/R_10_00@24203 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			161 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" **************************************************************************
 | |
| .\" *                                  _   _ ____  _
 | |
| .\" *  Project                     ___| | | |  _ \| |
 | |
| .\" *                             / __| | | | |_) | |
 | |
| .\" *                            | (__| |_| |  _ <| |___
 | |
| .\" *                             \___|\___/|_| \_\_____|
 | |
| .\" *
 | |
| .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 | |
| .\" *
 | |
| .\" * This software is licensed as described in the file COPYING, which
 | |
| .\" * you should have received as part of this distribution. The terms
 | |
| .\" * are also available at https://curl.haxx.se/docs/copyright.html.
 | |
| .\" *
 | |
| .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 | |
| .\" * copies of the Software, and permit persons to whom the Software is
 | |
| .\" * furnished to do so, under the terms of the COPYING file.
 | |
| .\" *
 | |
| .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 | |
| .\" * KIND, either express or implied.
 | |
| .\" *
 | |
| .\" **************************************************************************
 | |
| .TH curl_mime_data_cb 3 "22 August 2017" "libcurl 7.56.0" "libcurl Manual"
 | |
| .SH NAME
 | |
| curl_mime_data_cb - set a callback-based data source for a mime part's body
 | |
| .SH SYNOPSIS
 | |
| .B #include <curl/curl.h>
 | |
| .sp
 | |
| size_t readfunc(char *buffer, size_t size, size_t nitems, void *arg);
 | |
| .br
 | |
| int seekfunc(void *arg, curl_off_t offset, int origin);
 | |
| .br
 | |
| void freefunc(void *arg);
 | |
| .sp
 | |
| .BI "CURLcode curl_mime_data_cb(curl_mimepart * " part ", curl_off_t " datasize ,
 | |
| .br
 | |
| .BI "        curl_read_callback " readfunc ", curl_seek_callback " seekfunc ,
 | |
| .br
 | |
| .BI "        curl_free_callback " freefunc ", void * " arg ");"
 | |
| .ad
 | |
| .SH DESCRIPTION
 | |
| \fIcurl_mime_data_cb(3)\fP sets the data source of a mime part's body content
 | |
| from a data read callback function.
 | |
| 
 | |
| \fIpart\fP is the part's to assign contents to.
 | |
| 
 | |
| \fIreadfunc\fP is a pointer to a data read callback function, with a signature
 | |
| as shown by the above prototype. It may not be set to NULL.
 | |
| 
 | |
| \fIseekfunc\fP is a pointer to a seek callback function, with a signature as
 | |
| shown by the above prototype. This function will be used upon resending data
 | |
| (i.e.: after a redirect); this pointer may be set to NULL, in which case a
 | |
| resend is not possible.
 | |
| 
 | |
| \fIfreefunc\fP is a pointer to a user resource freeing callback function, with
 | |
| a signature as shown by the above prototype. If no resource is to be freed, it
 | |
| may safely be set to NULL. This function will be called upon mime structure
 | |
| freeing.
 | |
| 
 | |
| \fIarg\fP is a user defined argument to callback functions.
 | |
| 
 | |
| The read callback function gets called by libcurl as soon as it needs to
 | |
| read data in order to send it to the peer - like if you ask it to upload or
 | |
| post data to the server. The data area pointed at by the pointer \fIbuffer\fP
 | |
| should be filled up with at most \fIsize\fP multiplied with \fInmemb\fP number
 | |
| of bytes by your function.
 | |
| 
 | |
| Your read function must then return the actual number of bytes that it stored
 | |
| in that memory area. Returning 0 will signal end-of-file to the library and
 | |
| cause it to stop the current transfer.
 | |
| 
 | |
| If you stop the current transfer by returning 0 "pre-maturely" (i.e before the
 | |
| server expected it, like when you've said you will upload N bytes and you
 | |
| upload less than N bytes), you may experience that the server "hangs" waiting
 | |
| for the rest of the data that won't come.
 | |
| 
 | |
| The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current
 | |
| operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error
 | |
| code from the transfer.
 | |
| 
 | |
| The callback can return \fICURL_READFUNC_PAUSE\fP to cause reading from this
 | |
| connection to pause. See \fIcurl_easy_pause(3)\fP for further details.
 | |
| 
 | |
| The seek function gets called by libcurl to rewind input stream data or to
 | |
| seek to a certain position. The function shall work like fseek(3) or lseek(3)
 | |
| and it gets SEEK_SET, SEEK_CUR or SEEK_END as argument for \fIorigin\fP,
 | |
| although libcurl currently only passes SEEK_SET.
 | |
| 
 | |
| The callback function must return \fICURL_SEEKFUNC_OK\fP on success,
 | |
| \fICURL_SEEKFUNC_FAIL\fP to cause the upload operation to fail or
 | |
| \fICURL_SEEKFUNC_CANTSEEK\fP to indicate that while the seek failed, libcurl
 | |
| is free to work around the problem if possible. The latter can sometimes be
 | |
| done by instead reading from the input or similar.
 | |
| 
 | |
| .SH AVAILABILITY
 | |
| As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
 | |
| .SH RETURN VALUE
 | |
| CURLE_OK or a CURL error code upon failure.
 | |
| .SH EXAMPLE
 | |
| Sending a huge data string will cause the same amount of memory to be
 | |
| allocated: to avoid overhead resources consumption, one might want to use a
 | |
| callback source to avoid data duplication. In this case, original data
 | |
| must be retained until after the transfer terminates.
 | |
| .nf
 | |
| 
 | |
| char hugedata[512000];
 | |
| 
 | |
| struct ctl {
 | |
|   char *buffer;
 | |
|   curl_off_t size;
 | |
|   curl_off_t position;
 | |
| };
 | |
| 
 | |
| size_t read_callback(char *buffer, size_t size, size_t nitems, void *arg)
 | |
| {
 | |
|   struct ctl *p = (struct ctl *) arg;
 | |
|   curl_off_t sz = p->size - p->position;
 | |
| 
 | |
|   nitems *= size;
 | |
|   if(sz > nitems)
 | |
|     sz = nitems;
 | |
|   if(sz)
 | |
|     memcpy(buffer, p->buffer + p->position, sz);
 | |
|   p->position += sz;
 | |
|   return sz;
 | |
| }
 | |
| 
 | |
| int seek_callback(void *arg, curl_off_t offset, int origin)
 | |
| {
 | |
|   struct ctl *p = (struct ctl *) arg;
 | |
| 
 | |
|   switch(origin) {
 | |
|   case SEEK_END:
 | |
|     offset += p->size;
 | |
|     break;
 | |
|   case SEEK_CUR:
 | |
|     offset += p->position;
 | |
|     break;
 | |
|   }
 | |
| 
 | |
|   if(offset < 0)
 | |
|     return CURL_SEEKFUNC_FAIL;
 | |
|   p->position = offset;
 | |
|   return CURL_SEEKFUNC_OK;
 | |
| }
 | |
| 
 | |
|  CURL *easy = curl_easy_init();
 | |
|  curl_mime *mime = curl_mime_init(easy);
 | |
|  curl_mimepart *part = curl_mime_addpart(mime);
 | |
|  struct ctl hugectl;
 | |
| 
 | |
|  hugectl.buffer = hugedata;
 | |
|  hugectl.size = sizeof hugedata;
 | |
|  hugectl.position = 0;
 | |
|  curl_mime_data_cb(part, hugectl.size, read_callback, seek_callback, NULL,
 | |
|                    &hugectl);
 | |
| 
 | |
| .SH "SEE ALSO"
 | |
| .BR curl_mime_addpart "(3),"
 | |
| .BR curl_mime_data "(3),"
 | |
| .BR curl_mime_name "(3)"
 |