>-----Original Message-----
>From: [email protected] 
>[mailto:[email protected]] On Behalf Of Dan Fandrich
>Sent: Wednesday, January 25, 2012 12:23 AM
>To: [email protected]
>Subject: Re: libcurl PUT retry and READFUNCTION

>On Wed, Jan 25, 2012 at 04:13:09AM +0000, Wenjun Chen wrote:
>> The above code did not fix the problem. I added log message  in call back 
>> funcgtions. The log output is as follows. 
>> 
>> 2012-01-24 22:59:22.000 (GMT-05:00) Write Data is 489 bytes
>> 2012-01-24 22:59:22.000 (GMT-05:00) put_data_callback buff length 
>> 16372,  data passed in 489 bytes
>> 2012-01-24 22:59:22.000 (GMT-05:00) seek_data_callback, offset: 0, 
>> origin: 0, data len: 0
>> 
>> Looks like the put_data_callback is not called again after seek_data 
>> callback with SEEK_SET operation(the seek_data_callback returns 
>> CURL_SEEKFUNC_OK) . Also the data passed back in seek_data_callback is not 
>> correct (the datalen should be 489, not 0). Maybe my implementation of 
>> seek_data_callback is not correct. 

>data_len is entirely controlled by your application's code; it's entirely 
>opaque to libcurl. If it's wrong when it's passed in to the seek callback, 
>then (barring a serious bug in libcurl), it is probably being corrupted 
>elsewhere. That >seek data struct isn't stored on the stack by any chance, is 
>it?
Thanks Dan for the response. No it is not on the stack.  The same data is 
passed in the put_data_callback and the length is fine there (489 bytes), data 
is copied when put_data_callback is called. It is possible that I may misuse 
the seek_data_callback, I coded based on my understanding of the document.

The code looks like this. 

Put_data_t *data = malloc(sizeof(put_data_t)); 
data->buff = malloc(489);  ( The buff is filled with data).
data->read__pos = 0; 
data->data_len = 489;
curl_easy_setopt(curl, CURLOPT_READDATA, &data);    #### Note, the same data is 
passed in to the put_data_callback, when put_data_callback is called, data is 
fine.
curl_easy_setopt(curl, CURLOPT_READFUNCTION, put_data_callback);
curl_easy_setopt(curl, CURLOPT_SEEKDATA, &data);    #### It is the same data 
that passed in to the put_data_callback. 
curl_easy_setopt(curl, CURLOPT_SEEKFUNCTION, seek_data_callback); 
curl_easy_perform(curl);

Thanks,
Wenjun

>>> Dan
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to