mirror of
https://github.com/fangfufu/httpdirfs.git
synced 2024-09-28 13:11:47 +02:00
finished writing header parser
This commit is contained in:
parent
63925a2832
commit
af5b5e9486
19
http.c
19
http.c
@ -10,9 +10,6 @@
|
|||||||
* instead of (only) local files. Local files (ie those that can be directly
|
* instead of (only) local files. Local files (ie those that can be directly
|
||||||
* fopened) will drop back to using the underlying clib implementations
|
* fopened) will drop back to using the underlying clib implementations
|
||||||
*
|
*
|
||||||
* See the main() function at the bottom that shows an app that retrieves from
|
|
||||||
* a specified url using fgets() and fread() and saves as two output files.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2003, 2017 Simtec Electronics
|
* Copyright (c) 2003, 2017 Simtec Electronics
|
||||||
*
|
*
|
||||||
* Re-implemented by Vincent Sanders <vince@kyllikki.org> with extensive
|
* Re-implemented by Vincent Sanders <vince@kyllikki.org> with extensive
|
||||||
@ -118,6 +115,22 @@ static size_t header_callback(char *buffer, size_t size,
|
|||||||
memcpy(&url->header[url->header_pos], buffer, size);
|
memcpy(&url->header[url->header_pos], buffer, size);
|
||||||
url->header_pos += size;
|
url->header_pos += size;
|
||||||
|
|
||||||
|
char *hf;
|
||||||
|
hf = "Accept-Ranges:";
|
||||||
|
if (!strncasecmp(buffer, hf, strlen(hf))) {
|
||||||
|
url->accept_range = 1;
|
||||||
|
}
|
||||||
|
hf = "Content-Length: ";
|
||||||
|
if (!strncasecmp(buffer, hf, strlen(hf))) {
|
||||||
|
/*
|
||||||
|
* We are doing this, because libcurl documentation says
|
||||||
|
*"Do not assume that the header line is zero terminated!"
|
||||||
|
*/
|
||||||
|
char *tmp = malloc((nitems) * sizeof(char));
|
||||||
|
tmp[nitems] = '\0';
|
||||||
|
strncpy(tmp, buffer, nitems);
|
||||||
|
url->content_length = atoi(strchr(tmp, ' ')+1);
|
||||||
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
7
test.c
7
test.c
@ -22,7 +22,7 @@ int http_test()
|
|||||||
/* ---------------------------Test fgets ----------------------------*/
|
/* ---------------------------Test fgets ----------------------------*/
|
||||||
|
|
||||||
/* open the input file */
|
/* open the input file */
|
||||||
handle = url_fopen(url, "rh");
|
handle = url_fopen(url, "hr");
|
||||||
if(!handle) {
|
if(!handle) {
|
||||||
printf("couldn't url_fopen() %s\n", url);
|
printf("couldn't url_fopen() %s\n", url);
|
||||||
return 2;
|
return 2;
|
||||||
@ -40,7 +40,12 @@ int http_test()
|
|||||||
url_fgets(buffer, sizeof(buffer), handle);
|
url_fgets(buffer, sizeof(buffer), handle);
|
||||||
fwrite(buffer, 1, strlen(buffer), outf);
|
fwrite(buffer, 1, strlen(buffer), outf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print the header */
|
||||||
printf(handle->header);
|
printf(handle->header);
|
||||||
|
printf("\n");
|
||||||
|
printf("accept-range: %d\n", handle->accept_range);
|
||||||
|
printf("filesize: %d\n", handle->content_length);
|
||||||
|
|
||||||
/* close the handles for the fgets test*/
|
/* close the handles for the fgets test*/
|
||||||
url_fclose(handle);
|
url_fclose(handle);
|
||||||
|
Loading…
Reference in New Issue
Block a user