HTTPRESULT *http_read(char *url) { HTTPRESULT *result = http_new_result(); if ( strncmp(url,"http://",7)==0 ) { output_warning("http_read('%s'): http access not implemented", url); } else if ( strncmp(url,"file://",7)==0 ) { FILE *fp = fopen(url+7,"rt"); if ( fp==NULL ) { output_error("http_read('%s'): unable to access file", url); } else { result->body.size = filelength(fileno(fp))+1; result->body.data = malloc(result->body.size); memset(result->body.data,0,result->body.size); if ( fread(result->body.data,1,result->body.size,fp)<=0 ) { output_error("http_read('%s'): unable to read file", url); result->status = errno; } else result->status = 0; } } return result; }
HTTPRESULT *http_read(char *url, int maxlen) { HTTPRESULT *result = http_new_result(); if ( strncmp(url,"http://",7)==0 ) { HTTP *fp = hopen(url,maxlen); if ( fp==NULL ) { output_error("http_read('%s'): unable to access url", url); result->status = errno; } else { size_t len = (int)hfilelength(fp); size_t hlen = len; char *buffer = (char*)malloc(len+1); char *data = NULL; if ( hread(buffer,len,fp)<=0 ) { output_error("http_read('%s'): unable to read file", url); result->status = errno; } else { buffer[len]='\0'; data = strstr(buffer,"\r\n\r\n"); if ( data!=NULL ) { hlen = data - buffer; *data++ = '\0'; result->body.size = (int)(len - hlen - 1); while ( isspace(*data) ) { data++; result->body.size--; } // if ( sscanf(data,"%x",&dlen)==1 ) // { // data = strchr(data,'\n'); // while ( isspace(*data) ) {data++;} // result->body.size = dlen; // result->body.data = malloc(dlen+1); // } // else // { result->body.data = malloc(result->body.size+1); // } memcpy(result->body.data,data,result->body.size); result->body.data[result->body.size] = '\0'; } else { result->body.data = ""; result->body.size = 0; } result->header.size = (int)hlen; result->header.data = malloc(hlen+1); strcpy(result->header.data,buffer); result->status = 0; } } hclose(fp); } else if ( strncmp(url,"file://",7)==0 ) { FILE *fp = fopen(url+7,"rt"); if ( fp==NULL ) { output_error("http_read('%s'): unable to access file", url); result->status = errno; } else { result->body.size = filelength(fileno(fp))+1; result->body.data = malloc(result->body.size); memset(result->body.data,0,result->body.size); if ( fread(result->body.data,1,result->body.size,fp)<=0 ) { output_error("http_read('%s'): unable to read file", url); result->status = errno; } else result->status = 0; } fclose(fp); } return result; }