- From: Patrik Lannergård <Patrik.Lannergard@nexus.se>
- Date: Fri, 12 Nov 1999 10:41:12 +0100
- To: www-lib@w3.org
- Message-ID: <382BE0B8.5C86FF3F@Nexus.se>
Hi my name i Patrik from Sweden and i have for two weeks ago start to use libwww, for internet application. I try to build an application for posting and receiving data. I start to use postform.c example and it works nice until I change the terminal_handler function to use return 1 or 0 instead exit(0) and some strange memory error oocured. I have try to do as people said in the discussion on libwww's homepage .I try to stop (HTEventList_stopLoop(); the eventloop in the end of the terminal_handler function without result. Do you think anybody can help me. The progrma looks like: #include "WWWLib.h" #include "WWWInit.h" PRIVATE HTChunk * result = NULL; PRIVATE char *Response = NULL; /////////////////////////////////////////////////////////////////////////////// // Explanation: // Arguments: // Returnvalues: /////////////////////////////////////////////////////////////////////////////// PRIVATE int printer (const char * fmt, va_list pArgs) { return (vfprintf(stdout, fmt, pArgs)); } /////////////////////////////////////////////////////////////////////////////// // Explanation: // Arguments: // Returnvalues: /////////////////////////////////////////////////////////////////////////////// PRIVATE int tracer (const char * fmt, va_list pArgs) { return (vfprintf(stderr, fmt, pArgs)); } /////////////////////////////////////////////////////////////////////////////// // Explanation: // Arguments: // Returnvalues: /////////////////////////////////////////////////////////////////////////////// PRIVATE int terminate_handler (HTRequest * request, HTResponse * response, void * param, int status) { if (status == HT_LOADED && result && HTChunk_data(result)) { Response = HTChunk_data(result); HTPrint("%s", Response); /* We are done with this request */ HTRequest_delete(request); /* Terminate libwww */ HTProfile_delete(); HTEventList_stopLoop(); return 1; } return 0; } /////////////////////////////////////////////////////////////////////////////// // Explanation: read i file and put it in a buffer // Arguments: unsigned long *data_len,char *filename, char **data // Returnvalues: int, 1 ok 0 error /////////////////////////////////////////////////////////////////////////////// int read_file(unsigned long *data_len,char *filename, char **data) { int result = 1; FILE *input = NULL; input = fopen(filename, "rb"); if(input == NULL) { result = 0; printf("Error\n"); } else if (input != NULL) { *data_len = 0; // get length for file if (fseek(input, 0, SEEK_END) != 0) { result = 0; } else { *data_len = ftell(input); rewind(input); if ((*data = (char*) malloc(*data_len)) != NULL) { if (fread(*data, 1, *data_len, input) != *data_len) { result = 0; } } } fclose(input); } return result; } /////////////////////////////////////////////////////////////////////////////// // Explanation: Main function // Arguments: // Returnvalues: 0 error 1 ok /////////////////////////////////////////////////////////////////////////////// int main (int argc, char ** argv) { HTRequest * request = NULL; HTAnchor * anchor = NULL; HTAssocList * formfields = NULL; char * uri = NULL; unsigned long data_len = 0; char *filename = NULL; char *data = NULL; char *response_result = NULL; if(read_file(&data_len,"D:\\pkcs7.txt",&data)) /* Create a new premptive client */ HTProfile_newNoCacheClient("TestApp", "1.0"); /* Need our own trace and print functions */ HTPrint_setCallback(printer); HTTrace_setCallback(tracer); /* Get trace messages */ #if 0 HTSetTraceMessageMask("sop"); #endif /* Add our own filter to update the history list */ HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST ); /* Set the timeout for long we are going to wait for a response */ //HTHost_setEventTimeout(20000); /* Handle command line args */ if (argc >= 2) { int arg; uri = argv[1]; for (arg=2; arg<argc; arg++) { char * string = argv[arg]; /* Create a list to hold the form arguments */ if (!formfields) { formfields = HTAssocList_new(); } /* Parse the content and add it to the association list */ HTParseFormInput(formfields, string); } } if (uri && formfields) { /* Create a request */ request = HTRequest_new(); /* Set the default output to "asis" */ HTRequest_setOutputFormat(request, WWW_SOURCE); /* Get an anchor object for the URI */ anchor = HTAnchor_findAddress(uri); /* Post the data and get the result in a chunk */ result = HTPostFormAnchorToChunk(formfields, anchor, request); /* Clean up the form fields */ HTAssocList_delete(formfields); /* Go into the event loop... */ HTEventList_loop(request); } else { HTPrint("Type the URI to post to and the arguments for the POST operation. Encode spaces as '+'\n"); HTPrint("\t%s <uri> 'a=1' 'b=+2+' 'c=3 ...'\n", argv[0]); } return 0; } -- Mvh Patrik :-)
Received on Friday, 12 November 1999 04:40:21 UTC