cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: Issue With curl_easy_perform

From: Saikat Kanjilal <sxk1969_at_hotmail.com>
Date: Mon, 03 Apr 2006 13:10:22 -0700

Hi Jeff:
Thanks for responsding, I am finally getting a chance to look at this. I
have made your suggested changes, however I currently have a dll that makes
an out of process call to an exe that performs the libcurl functionality, I
noticed that when I put my dll inside a windows app and call it from there
it opens up a command window every time, I am guessing this is for libcurl,
is there any way to remove this. I also noticed that when I run the exe by
itself there is a command window popping up.

Your help is much appreciated, I am wondering if this is a libcurl issue.

Thanks
SK

>From: Jeff Phillips <jeff_at_seasideresearch.com>
>Reply-To: jeff_at_seasideresearch.com, libcurl development
><curl-library_at_cool.haxx.se>
>To: libcurl development <curl-library_at_cool.haxx.se>
>Subject: Re: Issue With curl_easy_perform
>Date: Fri, 31 Mar 2006 19:29:24 -0800 (PST)
>
>Hello Saikat,
>
>Not quite. You need to return the product of size and
>nmemb, like this:
>
>extern "C" size_t write_data(
> void *source,
> size_t size,
> size_t nmemb,
> void *userData)
>{
> return size * nmemb;
>}
>
>Take care,
>Jeff
>
>--- Saikat Kanjilal <sxk1969_at_hotmail.com> wrote:
>
> > Hi Jeff:
> > Thanks for responding,let me make sure I understand,
> > are you saying do the
> > following:
> >
> > /* libcurl callback function */
> > extern "C" size_t * write_data(void *source
> > ,size_t,size ,size_t nmemb ,void
> > *userData);
> >
> >
> > extern "C" size_t * write_data(void *source ,size_t
> > size ,size_t nmemb ,void
> > *userData)
> > {
> > size_t * retval;
> > return retval;
> > }
> >
> >
> >
> > Just out of curiosity is this because I am passing
> > in the address of the
> > function write_data in the CURLOPT_WRITEFUNCTION
> >
> >
> > Thanks again for your help
> > SK
> >
> >
> > >From: Jeff Phillips <jeff_at_seasideresearch.com>
> > >Reply-To: jeff_at_seasideresearch.com, libcurl
> > development
> > ><curl-library_at_cool.haxx.se>
> > >To: libcurl development <curl-library_at_cool.haxx.se>
> > >Subject: Re: Issue With curl_easy_perform
> > >Date: Fri, 31 Mar 2006 17:14:07 -0800 (PST)
> > >
> > >Hello Saikat,
> > >
> > >Your implementation of write_data should return
> > size *
> > >nmemb, so that libcurl knows that your application
> > has
> > >processed the data.
> > >
> > >Take care,
> > >Jeff Phillips
> > >
> > >--- Saikat Kanjilal <sxk1969_at_hotmail.com> wrote:
> > >
> > > > Hello All:
> > > > I am trying to use libcurl to do a simple
> > http_post,
> > > > I have the code below,
> > > > everything works like a charm except that
> > > > curl_easy_perform keeps popping up
> > > > this window, I have a callback function that I
> > have
> > > > written using
> > > > CURLOPT_WRITEFUNCTION but that still does not
> > make
> > > > the dos window completely
> > > > go away, any help on this would be much
> > appreciated.
> > > > I have been struggling
> > > > with this for a day or so, any ideas??
> > > >
> > > >
> > > >
> > > > /* libcurl callback function */
> > > > extern "C" size_t write_data(void *source
> > ,size_t
> > > > size ,size_t nmemb ,void
> > > > *userData);
> > > >
> > > > extern "C" size_t write_data(void *source
> > ,size_t
> > > > size ,size_t nmemb ,void
> > > > *userData)
> > > > {
> > > > size_t retval=0;
> > > > std::cout<<"Inside write_data\n";
> > > > return retval;
> > > > }
> > > >
> > > >
> > > > int MyClass::uploadFile(std::string
> > URL,std::string
> > > > path)
> > > > {
> > > > CURL *curl;
> > > > CURLcode res;
> > > >
> > > > struct curl_httppost *formpost=NULL;
> > > > struct curl_httppost *lastptr=NULL;
> > > > struct curl_slist *headerlist=NULL;
> > > > char buf[] = "Expect:";
> > > > bool delFile = false;
> > > >
> > > > curl_global_init(CURL_GLOBAL_ALL);
> > > >
> > > > /* Fill in the file upload field */
> > > > curl_formadd(&formpost,
> > > > &lastptr,
> > > > CURLFORM_COPYNAME, "sendfile",
> > > > CURLFORM_FILE, path.c_str(),
> > > > CURLFORM_END);
> > > >
> > > > /* Fill in the filename field */
> > > > curl_formadd(&formpost,
> > > > &lastptr,
> > > > CURLFORM_COPYNAME, "filename",
> > > > CURLFORM_COPYCONTENTS, path.c_str(),
> > > > CURLFORM_END);
> > > >
> > > >
> > > > /* Fill in the submit field too, even if
> > this is
> > > > rarely needed */
> > > > curl_formadd(&formpost,
> > > > &lastptr,
> > > > CURLFORM_COPYNAME, "submit",
> > > > CURLFORM_COPYCONTENTS, "send",
> > > > CURLFORM_END);
> > > >
> > > > curl = curl_easy_init();
> > > >
> > > > /* initalize custom header list (stating that
> > > > Expect: 100-continue is not
> > > > wanted */
> > > > headerlist = curl_slist_append(headerlist,
> > buf);
> > > >
> > > > /* if we have a handle proceed with the
> > transaction
> > > > */
> > > > if(curl)
> > > > {
> > > > curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
> > > > &write_data);
> > > >
> > > > /* what URL that receives this POST */
> > > > curl_easy_setopt(curl, CURLOPT_URL,
> > URL.c_str());
> > > > curl_easy_setopt(curl, CURLOPT_HTTPPOST,
> > > > formpost);
> > > > res = curl_easy_perform(curl);
> > > >
> > > > /* if the file was transported successfully we
> > > > need to delete
> > > > the file else wait a while and try to
> > upload
> > > > */
> > > > if (res==CURLE_OK)
> > > > delFile=true;
> > > > else
> > > > {
> > > > /* if we are here we wait
> > > > and try the upload again till we are
> > > > successful
> > > > for now we set this to 2 minutes
> > > > later it will be configurable
> > > > */
> > > > Sleep(120000);
> > > > uploadFile(URL,path);
> > > > }
> > > >
> > > >
> > > > /* cleanup */
> > > > curl_easy_cleanup(curl);
> > > >
> > > > /* then cleanup the formpost chain */
> > > > curl_formfree(formpost);
> > > >
> > > > /* free slist */
> > > > curl_slist_free_all (headerlist);
> > > > }
> > > >
> > > > if (delFile)
> > > > DeleteLog(path);
> > > > return res;
> > > > }
> > > >
> > > > Thanks Again
> > > >
> > > >
> > > >
> > >
> >
> >
> >
>
Received on 2006-04-03