openbsd-ports/net/kismet/patches/patch-gpsmap_cc
kili 5ba7c853bc Update to 2008-05-R1.
Tests, feedback and corrections from Jim Razmus and sthen@

ok sthen@
2008-06-27 22:10:14 +00:00

216 lines
9.4 KiB
Plaintext

$OpenBSD: patch-gpsmap_cc,v 1.5 2008/06/27 22:10:14 kili Exp $
# Disable map sources known to be broken.
# Use our ftp(1) instead of wget.
# Fix OSM map source (OSM already provides PNGs, not GIFs).
# If the first attempt to load the image fails, reset the exception,
# because ImageMagick would bail out on the second attempt (after the
# download).
--- gpsmap.cc.orig Thu May 8 23:48:35 2008
+++ gpsmap.cc Sat Jun 21 18:36:19 2008
@@ -90,24 +90,24 @@ const char *config_base = "kismet.conf";
// Broken map sources... Damn vendors changing.
// Mappoint
// const char url_template_mp[] = "http://msrvmaps.mappoint.net/isapi/MSMap.dll?ID=3XNsF.&C=%f,%f&L=USA&CV=1&A=%ld&S=%d,%d&O=0.000000,0.000000&MS=0&P=|5748|";
+// Terraserver photo-maps and topo maps
+// const char url_template_ts[] = "http://terraservice.net/GetImageArea.ashx?t=1&lat=%f&lon=%f&s=%ld&w=%d&h=%d";
+// const char url_template_tt[] = "http://terraservice.net/GetImageArea.ashx?t=2&lat=%f&lon=%f&s=%ld&w=%d&h=%d";
+// Earthamaps need a perl helper script to get data because of cookies
+// const char url_template_em[] = "gpsmap-helper-earthamaps %s %f %f %d %d %ld";
// Mapblast
const char url_template_mb[] = "http://go.vicinity.com/homedepotvd/MakeMap.d?&CT=%f:%f:%ld&IC=&W=%d&H=%d&FAM=mblast&LB=%s";
-// Terraserver photo-maps and topo maps
-const char url_template_ts[] = "http://terraservice.net/GetImageArea.ashx?t=1&lat=%f&lon=%f&s=%ld&w=%d&h=%d";
-const char url_template_tt[] = "http://terraservice.net/GetImageArea.ashx?t=2&lat=%f&lon=%f&s=%ld&w=%d&h=%d";
// Tiger census vector maps
const char url_template_ti[] = "http://tiger.census.gov/cgi-bin/mapper/map.gif?lat=%f&lon=%f&wid=0.001&ht=%f&iwd=%d&iht=%d&on=majroads&on=places&on=shorelin&on=streets&on=interstate&on=statehwy&on=ushwy&on=water&tlevel=-&tvar=-&tmeth=i";
-// Earthamaps need a perl helper script to get data because of cookies
-const char url_template_em[] = "gpsmap-helper-earthamaps %s %f %f %d %d %ld";
const char url_template_euex[] = "http://www.expedia.de/pub/agent.dll?qscr=mrdt&ID=3XNsF.&CenP=%f,%f&Lang=%s&Alti=%ld&Size=%d,%d&Offs=0.000000,0.000000&BCheck=1";
const char url_template_osm[] = "http://tah.openstreetmap.org/MapOf/?lat=%f&long=%f&z=%d&w=%d&h=%d&format=png";
-// Download template for sources that we fetch using wget
-const char download_template[] = "wget \"%s\" -O %s";
+// Download template for sources that we fetch using ftp
+const char download_template[] = "/usr/bin/ftp -o %s \"%s\"";
// Image scales we try to autofetch
long int scales[] = { 1000, 2000, 5000, 10000, 20000, 30000, 50000, 60000,
@@ -1512,29 +1512,6 @@ int BestMapScale(long int *in_mapscale, long int *in_f
double mapx, mapy;
double map2x, map2y;
- if ((mapsource == MAPSOURCE_TERRA) || (mapsource == MAPSOURCE_TERRATOPO)) {
- for (int x = 0; terrascales[x] != -1; x++) {
- calcxy(&mapx, &mapy, tlat, tlon,
- (double) terrascales[x]/PIXELFACT,
- map_avg_lat, map_avg_lon);
- calcxy(&map2x, &map2y, blat, blon,
- (double) terrascales[x]/PIXELFACT,
- map_avg_lat, map_avg_lon);
-
- if ((mapx < 0 || mapx > map_width || mapy < 0 ||
- mapy > map_height) ||
- (map2x < 0 || map2x > map_width ||
- map2y < 0 || map2y > map_height)) {
- continue;
- } else {
- (*in_mapscale) = terrascales[x];
- (*in_fetchscale) = x + 10;
- return 1;
- }
- }
- return -1;
- }
-
if (mapsource == MAPSOURCE_EUEX) {
for (int x = 0; euexscales[x] != -1; x++) {
calcxy(&mapx, &mapy, tlat, tlon,
@@ -1581,35 +1558,6 @@ int BestMapScale(long int *in_mapscale, long int *in_f
return -1;
}
- if (mapsource == MAPSOURCE_EARTHAMAPS) {
- // Find how many scales we have
- int nscales;
- for (nscales = 0; earthamapscales[nscales] != -1; nscales++)
- ; // Nothing
-
- for (int x = (nscales - 1); x > 1; x--) {
- calcxy(&mapx, &mapy, tlat, tlon,
- (double) earthamapscales[x]/PIXELFACT,
- map_avg_lat, map_avg_lon);
- calcxy(&map2x, &map2y, blat, blon,
- (double) earthamapscales[x]/PIXELFACT,
- map_avg_lat, map_avg_lon);
-
- if ((mapx < 0 || mapx > map_width || mapy < 0 ||
- mapy > map_height) ||
- (map2x < 0 || map2x > map_width ||
- map2y < 0 || map2y > map_height)) {
- continue;
- } else {
- (*in_mapscale) = earthamapscales[x];
- (*in_fetchscale) = x;
- return 1;
- }
- }
-
- return -1;
- }
-
// Mapblast style scale finding
for (int x = 0; scales[x] != -1; x++) {
calcxy(&mapx, &mapy, tlat, tlon, (double) scales[x]/PIXELFACT,
@@ -4016,30 +3964,6 @@ int main(int argc, char *argv[]) {
// Some day this needs to get rewritten to not be using a source that doesn't
// work anymore as the internal reference point.
- if (((mapsource == MAPSOURCE_TERRA) ||
- (mapsource == MAPSOURCE_TERRATOPO)) && user_scale != 0) {
- // It's way too much of a kludge to muck with munging the scale around
- if ((user_scale < 10) || (user_scale > 16)) {
- fprintf(stderr, "FATAL: You must provide a scale with the -s "
- "option that is from 10 to 16\n");
- exit(0);
- }
- fetch_scale = user_scale;
- map_scale = user_scale = terrascales[(user_scale - 10)];
- }
-
- // Require the user to specify a scale between 2 and 15, then set
- // {map,user}_scale to the cooresponding element in earthamapscales[].
- if (mapsource == MAPSOURCE_EARTHAMAPS && user_scale != 0) {
- if ((user_scale < 2) || (user_scale > 15)) {
- fprintf(stderr, "FATAL: You must provide a scale with the -s "
- "option that is from 2 to 15\n");
- exit(0);
- }
- fetch_scale = user_scale;
- map_scale = user_scale = earthamapscales[user_scale];
- }
-
if (ap_manuf_name != NULL) {
char pathname[1024];
@@ -4181,8 +4105,9 @@ int main(int argc, char *argv[]) {
}
if (!usermap) {
- snprintf(mapname, 1024, "map_%f_%f_%ld_%d_%d.gif", map_avg_lat,
- map_avg_lon, map_scale, map_width, map_height);
+ snprintf(mapname, 1024, "map_%f_%f_%ld_%d_%d.%s", map_avg_lat,
+ map_avg_lon, map_scale, map_width, map_height,
+ mapsource == MAPSOURCE_OSM ? "png" : "gif");
}
if (useroutmap == false)
@@ -4227,7 +4152,10 @@ int main(int argc, char *argv[]) {
exit(1);
}
- if (mapsource == MAPSOURCE_MAPPOINT) {
+ if (mapsource == MAPSOURCE_MAPPOINT
+ || mapsource == MAPSOURCE_TERRA
+ || mapsource == MAPSOURCE_EARTHAMAPS
+ || mapsource == MAPSOURCE_TERRATOPO) {
fprintf(stderr, "The source you selected is known to be broken. "
"Support remains for this source only if previously "
"downloaded maps are available, because the map vendor has "
@@ -4242,18 +4170,9 @@ int main(int argc, char *argv[]) {
snprintf(url, 1024, url_template_mb, map_avg_lat, map_avg_lon,
map_scale, map_width, map_height,
metric ? "&DU=KM" : "");
- } else if (mapsource == MAPSOURCE_TERRA) {
- snprintf(url, 1024, url_template_ts, map_avg_lat, map_avg_lon,
- fetch_scale, map_width, map_height);
- } else if (mapsource == MAPSOURCE_TERRATOPO) {
- snprintf(url, 1024, url_template_tt, map_avg_lat, map_avg_lon,
- fetch_scale, map_width, map_height);
} else if (mapsource == MAPSOURCE_TIGER) {
snprintf(url, 1024, url_template_ti, map_avg_lat, map_avg_lon,
(map_scale / 300000.0), map_width, map_height);
- } else if (mapsource == MAPSOURCE_EARTHAMAPS) {
- snprintf(url, 1024, url_template_em, mapname, map_avg_lat,
- map_avg_lon, map_width, map_height, fetch_scale);
} else if (mapsource == MAPSOURCE_EUEX) {
fetch_scale = (long) (map_scale / 3950);
char loc[8] = "USA0409";
@@ -4294,24 +4213,16 @@ int main(int argc, char *argv[]) {
printf("Map url: %s\n", url);
printf("Fetching map...\n");
- if (mapsource == MAPSOURCE_EARTHAMAPS) {
- int retval = system(url);
+ char geturl[1024];
+ snprintf(geturl, 1024, download_template, mapname, url);
+ if (system(geturl)!=0) {
+ fprintf(stderr, "WARNING: failed to execute '%s'\n", geturl);
+ exit(1);
+ }
- if (retval != 0) {
- fprintf(stderr, "Could not run %s: %s\n", url, strerror(retval));
- exit(1);
- }
- } else {
- char geturl[1024];
- snprintf(geturl, 1024, download_template, url, mapname);
- if (system(geturl)!=0) {
- fprintf(stderr, "WARNING: failed to execute '%s'\n", geturl);
- exit(1);
- }
- }
-
printf("Loading map into Imagemagick structures.\n");
strcpy(img_info->filename, mapname);
+ ClearMagickException(&im_exception);
img = ReadImage(img_info, &im_exception);
if (img == (Image *) NULL) {