GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: a tiny graphical app kit for ruby
Homepage: http://code.whytheluckystiff.net/shoes
Clone URL: git://github.com/why/shoes.git
 * shoes/ruby.c: downloads default to honoring server redirects.  this can 
 be turned off by using :redirect => false on the download.
why (author)
Sat Oct 04 15:09:36 -0700 2008
commit  b67a3b0ebc6468685e101929e156541b12d3d148
tree    95e1d40eaa4031c3a292abfdde7094d9e2a978a1
parent  085e6d2f32c31cf7894aca274122d3c0afc04189
...
131
132
133
134
 
135
136
137
...
142
143
144
145
 
 
146
147
148
...
131
132
133
 
134
135
136
137
...
142
143
144
 
145
146
147
148
149
0
@@ -131,7 +131,7 @@ shoes_download_thread(IN DWORD mid, IN WPARAM w, LPARAM &l, IN LPVOID data)
0
   strncat(setup_path, setup_exe, strlen(setup_exe));
0
 
0
   shoes_winhttp(L"hacketyhack.net", 80, L"/pkg/win32/shoes", &buf, BUFSIZE,
0
- INVALID_HANDLE_VALUE, &len, NULL, NULL);
0
+ INVALID_HANDLE_VALUE, &len, SHOES_DL_DEFAULTS, NULL, NULL);
0
   if (len == 0)
0
     return 0;
0
 
0
@@ -142,7 +142,8 @@ shoes_download_thread(IN DWORD mid, IN WPARAM w, LPARAM &l, IN LPVOID data)
0
   MultiByteToWideChar(CP_ACP, 0, buf, -1, path, BUFSIZE);
0
   file = CreateFile(setup_path, GENERIC_READ | GENERIC_WRITE,
0
     FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
0
- shoes_winhttp(L"hacketyhack.net", 80, path, &empty, 0, file, &len, HTTP_HANDLER(StubDownloadingShoes), NULL);
0
+ shoes_winhttp(L"hacketyhack.net", 80, path, &empty, 0, file, &len,
0
+ SHOES_DL_DEFAULTS, HTTP_HANDLER(StubDownloadingShoes), NULL);
0
   CloseHandle(file);
0
 
0
   shoes_silent_install(setup_path);
...
29
30
31
 
32
33
34
...
29
30
31
32
33
34
35
0
@@ -29,6 +29,7 @@ typedef struct {
0
   unsigned LONG_LONG size;
0
   shoes_download_handler handler;
0
   void *data;
0
+ unsigned char flags;
0
 } shoes_download_request;
0
 
0
 void shoes_download(shoes_download_request *req);
...
7
8
9
 
 
 
10
11
12
...
7
8
9
10
11
12
13
14
15
0
@@ -7,6 +7,9 @@
0
 
0
 #define SHOES_CHUNKSIZE 16384
0
 
0
+#define SHOES_DL_REDIRECTS 1
0
+#define SHOES_DL_DEFAULTS (SHOES_DL_REDIRECTS)
0
+
0
 #define SHOES_DOWNLOAD_CONTINUE 0
0
 #define SHOES_DOWNLOAD_HALT 1
0
 
...
144
145
146
 
 
147
148
149
...
144
145
146
147
148
149
150
151
0
@@ -144,6 +144,8 @@ shoes_download(shoes_download_request *req)
0
   curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, shoes_curl_progress_funk);
0
   curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &cdata);
0
   curl_easy_setopt(curl, CURLOPT_USERAGENT, uagent);
0
+ if (req->flags & SHOES_DL_REDIRECTS)
0
+ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
0
   if (req->method)
0
     curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, req->method);
0
   if (req->headers)
...
28
29
30
31
 
 
32
33
34
...
28
29
30
 
31
32
33
34
35
0
@@ -28,7 +28,8 @@ shoes_download(shoes_download_request *req)
0
   if (req->mem == NULL && req->filepath != NULL)
0
     file = CreateFile(req->filepath, GENERIC_READ | GENERIC_WRITE,
0
       FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
0
- shoes_winhttp(_host, _port, _path, &req->mem, req->memlen, file, &_size, req->handler, req->data);
0
+ shoes_winhttp(_host, _port, _path, &req->mem, req->memlen, file,
0
+ &_size, req->flags, req->handler, req->data);
0
   req->size = _size;
0
   SHOE_FREE(_host);
0
   SHOE_FREE(_path);
...
53
54
55
56
 
57
58
59
...
83
84
85
 
 
 
 
 
 
86
87
88
...
53
54
55
 
56
57
58
59
...
83
84
85
86
87
88
89
90
91
92
93
94
0
@@ -53,7 +53,7 @@ shoes_winhttp_headers(HINTERNET req, shoes_download_handler handler, void *data)
0
 
0
 void
0
 shoes_winhttp(LPCWSTR host, INTERNET_PORT port, LPCWSTR path, TCHAR **mem, ULONG memlen, HANDLE file,
0
- LPDWORD size, shoes_download_handler handler, void *data)
0
+ LPDWORD size, UCHAR flags, shoes_download_handler handler, void *data)
0
 {
0
   LPWSTR proxy;
0
   DWORD len = 0, rlen = 0, status = 0, complete = 0, flen = 0, total = 0, written = 0;
0
@@ -83,6 +83,12 @@ shoes_winhttp(LPCWSTR host, INTERNET_PORT port, LPCWSTR path, TCHAR **mem, ULONG
0
     WinHttpSetOption(sess, WINHTTP_OPTION_PROXY, &proxy_info, sizeof(proxy_info));
0
   }
0
 
0
+ if (!(flags & SHOES_DL_REDIRECTS))
0
+ {
0
+ DWORD options = WINHTTP_DISABLE_REDIRECTS;
0
+ WinHttpSetOption(sess, WINHTTP_OPTION_DISABLE_FEATURE, &options, sizeof(options));
0
+ }
0
+
0
   conn = WinHttpConnect(sess, host, port, 0);
0
   if (conn == NULL)
0
     goto done;
...
14
15
16
17
 
18
19
...
14
15
16
 
17
18
19
0
@@ -14,6 +14,6 @@
0
 
0
 #define HTTP_HANDLER(x) reinterpret_cast<shoes_download_handler>(x)
0
 
0
-void shoes_winhttp(LPCWSTR, INTERNET_PORT, LPCWSTR, TCHAR **, ULONG, HANDLE, LPDWORD, shoes_download_handler, void *);
0
+void shoes_winhttp(LPCWSTR, INTERNET_PORT, LPCWSTR, TCHAR **, ULONG, HANDLE, LPDWORD, UCHAR, shoes_download_handler, void *);
0
 
0
 #endif
...
17
18
19
20
 
21
22
23
...
3854
3855
3856
 
 
3857
3858
3859
...
4133
4134
4135
 
4136
4137
4138
...
17
18
19
 
20
21
22
23
...
3854
3855
3856
3857
3858
3859
3860
3861
...
4135
4136
4137
4138
4139
4140
4141
0
@@ -17,7 +17,7 @@ VALUE cShoes, cApp, cDialog, cShoesWindow, cMouse, cCanvas, cFlow, cStack, cMask
0
 VALUE eVlcError, eImageError, eInvMode, eNotImpl;
0
 VALUE reHEX_SOURCE, reHEX3_SOURCE, reRGB_SOURCE, reRGBA_SOURCE, reGRAY_SOURCE, reGRAYA_SOURCE, reLF;
0
 VALUE symAltQuest, symAltSlash, symAltDot;
0
-ID s_aref, s_mult, s_perc, s_bind, s_gsub, s_keys, s_update, s_merge, s_new, s_run, s_to_pattern, s_to_i, s_to_s, s_URI, s_angle, s_angle1, s_angle2, s_arrow, s_autoplay, s_begin, s_body, s_call, s_center, s_change, s_checked, s_checked_q, s_choose, s_click, s_corner, s_curve, s_distance, s_displace_left, s_displace_top, s_downcase, s_draw, s_end, s_fill, s_finish, s_font, s_group, s_hand, s_headers, s_hidden, s_host, s_hover, s_href, s_inner, s_insert, s_items, s_keypress, s_link, s_method, s_motion, s_path, s_port, s_progress, s_release, s_request_uri, s_save, s_wheel, s_stroke, s_scroll, s_start, s_attach, s_leading, s_leave, s_outer, s_points, s_match, s_text, s_title, s_top, s_right, s_bottom, s_left, s_up, s_down, s_height, s_resizable, s_remove, s_cap, s_strokewidth, s_width, s_margin, s_margin_left, s_margin_right, s_margin_top, s_margin_bottom, s_radius, s_secret, s_now, s_debug, s_error, s_warn, s_info, s_blur, s_glow, s_shadow, s_arc, s_rect, s_oval, s_line, s_shape, s_star, s_project, s_round, s_square;
0
+ID s_aref, s_mult, s_perc, s_bind, s_gsub, s_keys, s_update, s_merge, s_new, s_run, s_to_pattern, s_to_i, s_to_s, s_URI, s_angle, s_angle1, s_angle2, s_arrow, s_autoplay, s_begin, s_body, s_call, s_center, s_change, s_checked, s_checked_q, s_choose, s_click, s_corner, s_curve, s_distance, s_displace_left, s_displace_top, s_downcase, s_draw, s_end, s_fill, s_finish, s_font, s_group, s_hand, s_headers, s_hidden, s_host, s_hover, s_href, s_inner, s_insert, s_items, s_keypress, s_link, s_method, s_motion, s_path, s_port, s_progress, s_redirect, s_release, s_request_uri, s_save, s_wheel, s_stroke, s_scroll, s_start, s_attach, s_leading, s_leave, s_outer, s_points, s_match, s_text, s_title, s_top, s_right, s_bottom, s_left, s_up, s_down, s_height, s_resizable, s_remove, s_cap, s_strokewidth, s_width, s_margin, s_margin_left, s_margin_right, s_margin_top, s_margin_bottom, s_radius, s_secret, s_now, s_debug, s_error, s_warn, s_info, s_blur, s_glow, s_shadow, s_arc, s_rect, s_oval, s_line, s_shape, s_star, s_project, s_round, s_square;
0
 
0
 //
0
 // Mauricio's instance_eval hack (he bested my cloaker back in 06 Jun 2006)
0
@@ -3854,6 +3854,8 @@ shoes_download_threaded(VALUE self, VALUE url, VALUE attr)
0
   req->port = 80;
0
   req->path = RSTRING_PTR(path);
0
   req->handler = shoes_doth_handler;
0
+ req->flags = SHOES_DL_DEFAULTS;
0
+ if (ATTR(attr, redirect) == Qfalse) req->flags ^= SHOES_DL_REDIRECTS;
0
 
0
   VALUE method = ATTR(attr, method);
0
   VALUE headers = ATTR(attr, headers);
0
@@ -4133,6 +4135,7 @@ shoes_ruby_init()
0
   s_points = rb_intern("points");
0
   s_port = rb_intern("port");
0
   s_progress = rb_intern("progress");
0
+ s_redirect = rb_intern("redirect");
0
   s_release = rb_intern("release");
0
   s_request_uri = rb_intern("request_uri");
0
   s_save = rb_intern("save");

Comments

    No one has commented yet.