wok rev 19232
httpfs-fuse: add status 301 supprot
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Jun 25 11:48:21 2016 +0200 (2016-06-25) |
parents | 140b8603135c |
children | ff90a1630a13 |
files | httpfs-fuse/receipt httpfs-fuse/stuff/httpfs.u |
line diff
1.1 --- a/httpfs-fuse/receipt Fri Jun 24 19:59:40 2016 +0100 1.2 +++ b/httpfs-fuse/receipt Sat Jun 25 11:48:21 2016 +0200 1.3 @@ -18,9 +18,8 @@ 1.4 # Rules to configure and make the package. 1.5 compile_rules() 1.6 { 1.7 - cd $src 1.8 - mkdir -p $DESTDIR/usr/bin \ 1.9 - $DESTDIR/usr/share/boot 1.10 + patch -p0 < $stuff/httpfs.u 1.11 + mkdir -p $DESTDIR/usr/bin $DESTDIR/usr/share/boot 1.12 . ./make_httpfs && cp -a httpfs $DESTDIR/usr/bin && 1.13 cp -a static_uclibc/httpfs $DESTDIR/usr/share/boot/httpfs-static 1.14 }
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/httpfs-fuse/stuff/httpfs.u Sat Jun 25 11:48:21 2016 +0200 2.3 @@ -0,0 +1,75 @@ 2.4 +--- httpfs.c 2.5 ++++ httpfs.c 2.6 +@@ -313,6 +313,7 @@ 2.7 + struct timeval timeout; 2.8 + int bytes, status; 2.9 + 2.10 ++moved: 2.11 + #ifdef USE_SSL 2.12 + if (protocol == PROTO_HTTPS) { 2.13 + /* Make SSL connection. */ 2.14 +@@ -371,6 +372,27 @@ 2.15 + #endif 2.16 + 2.17 + (void) sscanf(buf, "HTTP/1.1 %d ", &status); 2.18 ++ if (status == 301 || status == 302) { 2.19 ++ static int movedcnt = 0; 2.20 ++ b = strstr(buf,"Location:"); 2.21 ++ if (b != NULL && ++movedcnt < 5) { 2.22 ++ char *eol = strchr(b, '\r'); 2.23 ++ b = strstr(b,"http"); 2.24 ++ if (eol == NULL || b == NULL) 2.25 ++ goto notmoved; 2.26 ++ *eol = 0; 2.27 ++ fprintf(stderr, "%s: HEAD (read) Status %d moved to %s\n", 2.28 ++ argv0, status, b); 2.29 ++ protocol = parseURL(b, host, &file_name, &port); 2.30 ++ if (protocol == -1) 2.31 ++ goto notmoved; 2.32 ++ close(sockfd); 2.33 ++ sockfd = open_client_socket(host, port); 2.34 ++ if (sockfd >= 0) 2.35 ++ goto moved; 2.36 ++ } 2.37 ++ } 2.38 ++notmoved: 2.39 + if (status != 200) { 2.40 + fprintf(stderr, "%s: HEAD (read) failed with Status %d\n", argv0, status); 2.41 + return -1; 2.42 +@@ -892,6 +914,7 @@ 2.43 + struct stat mpstat; 2.44 + int sr; 2.45 + char* ri; 2.46 ++ char* s; 2.47 + char* fusev[4]; 2.48 + 2.49 + argv0 = argv[0]; 2.50 +@@ -911,6 +934,14 @@ 2.51 + if (sockfd < 0) 2.52 + return 1; 2.53 + 2.54 ++ s = httpfs_path; 2.55 ++ ri = rindex(file_name, '/'); 2.56 ++ if (ri == (char *) 0) { 2.57 ++ ri = file_name; 2.58 ++ *s++ = '/'; 2.59 ++ } 2.60 ++ strcpy(s, ri); 2.61 ++ 2.62 + if (getSize() != 0) 2.63 + return 1; 2.64 + 2.65 +@@ -930,13 +961,6 @@ 2.66 + return 1; 2.67 + } 2.68 + 2.69 +- ri = rindex(file_name, '/'); 2.70 +- if (ri == (char *) 0) { 2.71 +- httpfs_path[0] = '/'; 2.72 +- strcpy(&httpfs_path[1], file_name); 2.73 +- } else 2.74 +- strcpy(httpfs_path, ri); 2.75 +- 2.76 + fusev[0] = argv0; 2.77 + fusev[1] = "-o"; 2.78 + fusev[2] = "nonempty";