Author: poeml Date: Sat Nov 6 02:45:24 2010 New Revision: 8201 URL: http://svn.mirrorbrain.org/viewvc/mirrorbrain?rev=8201&view=rev Log: mod_mirrorbrain: - Per-file mirror lists were improved by showing data in a better readable way, and by embedding a link to a Google map showing the 10 best mirrors. Modified: trunk/mod_mirrorbrain/mod_mirrorbrain.c Modified: trunk/mod_mirrorbrain/mod_mirrorbrain.c URL: http://svn.mirrorbrain.org/viewvc/mirrorbrain/trunk/mod_mirrorbrain/mod_mirrorbrain.c?rev=8201&r1=8200&r2=8201&view=diff ============================================================================== --- trunk/mod_mirrorbrain/mod_mirrorbrain.c (original) +++ trunk/mod_mirrorbrain/mod_mirrorbrain.c Sat Nov 6 02:45:24 2010 _at_@ -918,6 +918,42 @@ return (m1->dist + distprio / m1->score) - (m2->dist + distprio / m2->score); } +static apr_array_header_t *get_n_best_mirrors(request_rec *r, int n, + apr_array_header_t *a1, apr_array_header_t *a2, + apr_array_header_t *a3, apr_array_header_t *a4, + apr_array_header_t *a5) +{ + int i; + int found = 0; + apr_array_header_t *mirrors_n_best; + mirror_entry_t **mirrorp; + + mirrors_n_best = apr_array_make(r->pool, n, sizeof (mirror_entry_t *)); + + mirrorp = (mirror_entry_t **)a1->elts; + for (i = 0; found < n && i < a1->nelts; i++, found++) { + *(void **)apr_array_push(mirrors_n_best) = mirrorp[i]; + } + mirrorp = (mirror_entry_t **)a2->elts; + for (i = 0; found < n && i < a2->nelts; i++, found++) { + *(void **)apr_array_push(mirrors_n_best) = mirrorp[i]; + } + mirrorp = (mirror_entry_t **)a3->elts; + for (i = 0; found < n && i < a3->nelts; i++, found++) { + *(void **)apr_array_push(mirrors_n_best) = mirrorp[i]; + } + mirrorp = (mirror_entry_t **)a4->elts; + for (i = 0; found < n && i < a4->nelts; i++, found++) { + *(void **)apr_array_push(mirrors_n_best) = mirrorp[i]; + } + mirrorp = (mirror_entry_t **)a5->elts; + for (i = 0; found < n && i < a5->nelts; i++, found++) { + *(void **)apr_array_push(mirrors_n_best) = mirrorp[i]; + } + + return mirrors_n_best; +} + /* return the scheme of an URL, e.g. ftp for ftp://foo.example.com/ */ static const char *url_scheme(apr_pool_t *p, const char *url) { _at_@ -1234,6 +1270,7 @@ if it's excluded from redirection by configuration */ const char *continent_code; const char *country_code; + const char *country_name; const char *slat, *slng; float lat = 0, lng = 0; const char *state_id, *state_name; _at_@ -1571,6 +1608,7 @@ country_code = apr_table_get(r->subprocess_env, "GEOIP_COUNTRY_CODE"); + country_name = apr_table_get(r->subprocess_env, "GEOIP_COUNTRY_NAME"); continent_code = apr_table_get(r->subprocess_env, "GEOIP_CONTINENT_CODE"); slat = apr_table_get(r->subprocess_env, "GEOIP_LATITUDE"); slng = apr_table_get(r->subprocess_env, "GEOIP_LONGITUDE"); _at_@ -2772,7 +2810,7 @@ /* Metalink info */ ap_rputs(" <br/>\n" - " <blockquote>Metalinks for easier, more reliable, self healing downloads:\n" + " <blockquote>Metalinks for reliable downloads:\n" " <br/>\n", r); ap_rprintf(r, " <a href=\"http://%s%s.meta4\">http://%s%s.meta4</a> (IETF Metalink)" " <br/>\n", _at_@ -2793,11 +2831,45 @@ r->hostname, r->uri, r->hostname, r->uri); } } - ap_rputs(" </blockquote>", r); - - - ap_rprintf(r, " <p>List of best mirrors for IP address %s, located in country %s, %s (AS%s):</p>\n", - clientip, country_code, prefix, as); + ap_rputs(" </blockquote>\n\n", r); + + + ap_rprintf(r, " <p>List of best mirrors for IP address %s, located ", clientip); + if (lat != 0 && lng != 0) { + ap_rprintf(r, "at %f,%f ", lat, lng); + } + if (strcmp(country_code, "--") != 0) { + ap_rprintf(r, "in %s (%s)", country_name, country_code); + } else { + ap_rputs("in an unknown country", r); + } + if (strcmp(prefix, "--") != 0) { + ap_rprintf(r, ", \n network %s (autonomous system %s)", prefix, as); + } + ap_rputs(": ", r); + + if (lat != 0 && lng != 0) { + ap_rputs(" ", r); + apr_array_header_t *topten = get_n_best_mirrors(r, 9, mirrors_same_prefix, mirrors_same_as, + mirrors_same_country, mirrors_same_region, + mirrors_elsewhere); + mirrorp = (mirror_entry_t **)topten->elts; + ap_rprintf(r, "\n <a href=\"http://maps.google.com/maps/api/staticmap?size=640x640" + "&maptype=terrain&visible&sensor=false&markers=size:mid|color:red|%f,%f", lat, lng); + for (i = 0; i < topten->nelts; i++) { + mirror = mirrorp[i]; + ap_rprintf(r, "&markers=size:normal|color:yellow|label:%d|%f,%f", i+1, mirror->lat, mirror->lng); + } + ap_rputs("\">\n <img src=\"", r); + ap_rprintf(r, "http://maps.google.com/maps/api/staticmap?size=50x50" + "&maptype=terrain&visible&sensor=false&markers=size:mid|color:red|%f,%f", lat, lng); + for (i = 0; i < topten->nelts; i++) { + mirror = mirrorp[i]; + ap_rprintf(r, "&markers=size:normal|color:yellow|label:%d|%f,%f", i+1, mirror->lat, mirror->lng); + } + ap_rputs("\" width=\"50\" height=\"50\" alt=\"map showing the closest mirrors\"/></a> ", r); + } + ap_rputs("</p>\n", r); if ((mirror_cnt <= 0) || (!mirrors_same_prefix->nelts && !mirrors_same_as->nelts && !mirrors_same_country->nelts && !mirrors_same_region->nelts _______________________________________________ mirrorbrain-commits mailing list Archive: http://mirrorbrain.org/archive/mirrorbrain-commits/ Note: To remove yourself from this list, send a mail with the content unsubscribe to the address mirrorbrain-commits-request_at_mirrorbrain.orgReceived on Sat Nov 06 2010 - 01:45:30 GMT
This archive was generated by hypermail 2.3.0 : Sat Nov 06 2010 - 01:47:06 GMT