cURL / Mailing Lists / curl-users / Single Mail

curl-users

Fw: Problem using libcurl - Resending - SOAP USERS!!!!!!!

From: Francis Dagenais <francis_at_voxtel.com>
Date: Tue, 16 Jul 2002 15:09:06 -0400

Hi,
  I'm using libcurl to send SOAP-XML messages over HTTPS. I'm now able to do 1 post, and receive the answer without problem. But when I try to do 2 post in a row, the second post doesn't end correctly, and my C program ends in a core dump. Here is what I've programmed:

CURL *ch;
struct curl_slist *headerlist=NULL;
struct MemoryStruct *bodyStruct=NULL;
char _gatineauSoapReq[2000]="";

void _gatineauInit() {
  ch = curl_easy_init();
  curl_easy_setopt(ch, CURLOPT_URL, transactionServerUrl3);
  curl_easy_setopt(ch, CURLOPT_POST, 1);
  curl_easy_setopt(ch, CURLOPT_HEADER, 1);
  curl_easy_setopt(ch, CURLOPT_VERBOSE, 1);
  curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
  if ((bodyStruct = (struct MemoryStruct *) malloc(sizeof(struct MemoryStruct))) == NULL) exit(1);
  curl_easy_setopt(ch, CURLOPT_FILE, bodyStruct);
}

void _gatineauEndReq() {
  free(bodyStruct);
  curl_slist_free_all(headerlist);
  curl_easy_cleanup(ch);
}

int _gatineauExtractRetour(char *response) {
  char *tok="", buf[64]="", *p="";
  p = strstr(response, "<Retour>");
  tok = strtok(p, ">");
  tok = strtok(NULL, "<");
  strcpy(buf, tok);
  return(atoi(buf));
}

void _gatineauValidateNow(const char *arg1, const char *arg2, const char *arg3, const char *arg4) {
  // I make sure that headerlist is erased before rebuilding it with the soap function
  curl_slist_free_all(headerlist);
  headerlist = curl_slist_append(headerlist, "Content-Type: text/xml");
  headerlist = curl_slist_append(headerlist, "SOAPAction: \"http://blabla.com/blabla_services/ValidateNow\"");
  sprintf(_gatineauSoapReq, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\
<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\
<soap:Body>\
<ValidateNow xmlns=\"namespace://xml.blabla.com/shemas/blabla_service/blabliblo/\">\
<IdSessionTel>%s</IdSessionTel>\
<NoMember>%s</NoMember>\
<NoActivity>%s</NoActivity>\
<ready>%s</ready>\
</ValidateNow>\
</soap:Body>\
</soap:Envelope>", arg1, arg2, arg3, arg4);
  curl_easy_setopt(ch, CURLOPT_POSTFIELDS, _gatineauSoapReq);
  curl_easy_setopt(ch, CURLOPT_HTTPHEADER, headerlist);
  curl_easy_perform(ch);
}

void _gatineau() {
  char *strToSend="", buf[2000]="", buf2[256]="", *dtmf="",
         *msgDir="", msgPath[128]="", *periodInfo="";
  int i=0, retour=0;
  
  _gatineauInit();
  
  _gatineauValidateNow("1234", "0052", "654321", "0");
  printf("Retour: %s\n", bodyStruct->memory);
  retour = _gatineauExtractRetour(bodyStruct->memory);
  printf("Retour1: --%d--\n", retour);

  _gatineauValidateNow("1235", "0053", "123456", "1");
  printf("Retour: %s\n", bodyStruct->memory);
  retour = _gatineauExtractRetour(bodyStruct->memory);
  printf("Retour2: --%d--\n", retour);
  
  _gatineauEndReq();
}

I think that may be the problem is within the headerlist function :
curl_slist_free_all(headerlist);
headerlist = curl_slist_append(headerlist, "Content-Type: text/xml");
If someone has already done something with soap-xml or has made several posts within the same curl session, please help!
Does anybody has a working example of more than one soap xml request within the same curl session?

Thank you,
Francis Dagenais

-------------------------------------------------------
This sf.net email is sponsored by: Jabber - The world's fastest growing
real-time communications platform! Don't just IM. Build it in!
http://www.jabber.com/osdn/xim
Received on 2002-07-16