forked from osmocom/wireshark
GSM MAP: Add OSM URI for locationEstimate
As requested by bug 10969 add a link to OSM for locationEstimate. Bug: 10969 Change-Id: I715b3b5eae9728999d5c8f8c155bbcef3911ee93 Reviewed-on: https://code.wireshark.org/review/17375 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com> Reviewed-by: Roland Knall <rknall@gmail.com>
This commit is contained in:
parent
abd78dc12b
commit
1ba3426f18
|
@ -715,6 +715,7 @@ static int hf_gsm_a_geo_loc_type_of_shape = -1;
|
||||||
static int hf_gsm_a_geo_loc_sign_of_lat = -1;
|
static int hf_gsm_a_geo_loc_sign_of_lat = -1;
|
||||||
static int hf_gsm_a_geo_loc_deg_of_lat =-1;
|
static int hf_gsm_a_geo_loc_deg_of_lat =-1;
|
||||||
static int hf_gsm_a_geo_loc_deg_of_long =-1;
|
static int hf_gsm_a_geo_loc_deg_of_long =-1;
|
||||||
|
static int hf_gsm_a_geo_loc_osm_uri =-1;
|
||||||
static int hf_gsm_a_geo_loc_uncertainty_code = -1;
|
static int hf_gsm_a_geo_loc_uncertainty_code = -1;
|
||||||
static int hf_gsm_a_geo_loc_uncertainty_semi_major = -1;
|
static int hf_gsm_a_geo_loc_uncertainty_semi_major = -1;
|
||||||
static int hf_gsm_a_geo_loc_uncertainty_semi_minor = -1;
|
static int hf_gsm_a_geo_loc_uncertainty_semi_minor = -1;
|
||||||
|
@ -813,7 +814,7 @@ typedef guint16 (**elem_func_hander)(tvbuff_t *tvb, proto_tree *tree, packet_inf
|
||||||
void
|
void
|
||||||
dissect_geographical_description(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
|
dissect_geographical_description(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) {
|
||||||
|
|
||||||
proto_item *lat_item, *long_item, *major_item, *minor_item, *alt_item, *uncer_item;
|
proto_item *lat_item, *long_item, *major_item, *minor_item, *alt_item, *uncer_item, *loc_uri_item;
|
||||||
/*proto_tree *subtree; */
|
/*proto_tree *subtree; */
|
||||||
guint8 type_of_shape;
|
guint8 type_of_shape;
|
||||||
/*guint8 no_of_points;*/
|
/*guint8 no_of_points;*/
|
||||||
|
@ -822,6 +823,10 @@ dissect_geographical_description(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tr
|
||||||
guint8 value;
|
guint8 value;
|
||||||
guint32 uvalue32;
|
guint32 uvalue32;
|
||||||
gint32 svalue32;
|
gint32 svalue32;
|
||||||
|
gchar *deg_lat_str;
|
||||||
|
gchar *deg_lon_str;
|
||||||
|
gchar *osm_uri;
|
||||||
|
int loc_offset;
|
||||||
|
|
||||||
/*subtree = proto_item_add_subtree(item, ett_gsm_a_geo_desc);*/
|
/*subtree = proto_item_add_subtree(item, ett_gsm_a_geo_desc);*/
|
||||||
|
|
||||||
|
@ -855,9 +860,11 @@ dissect_geographical_description(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tr
|
||||||
uvalue32 = tvb_get_ntoh24(tvb,offset);
|
uvalue32 = tvb_get_ntoh24(tvb,offset);
|
||||||
/* convert degrees (X/0x7fffff) * 90 = degrees */
|
/* convert degrees (X/0x7fffff) * 90 = degrees */
|
||||||
lat_item = proto_tree_add_item(tree, hf_gsm_a_geo_loc_deg_of_lat, tvb, offset, 3, ENC_BIG_ENDIAN);
|
lat_item = proto_tree_add_item(tree, hf_gsm_a_geo_loc_deg_of_lat, tvb, offset, 3, ENC_BIG_ENDIAN);
|
||||||
proto_item_append_text(lat_item, " (%s%.5f degrees)",
|
deg_lat_str = wmem_strdup_printf(wmem_packet_scope(), "%s%.5f",
|
||||||
(uvalue32 & 0x00800000) ? "-" : "",
|
(uvalue32 & 0x00800000) ? "-" : "",
|
||||||
((double)(uvalue32 & 0x7fffff)/8388607.0) * 90);
|
((double)(uvalue32 & 0x7fffff)/8388607.0) * 90);
|
||||||
|
proto_item_append_text(lat_item, " (%s degrees)", deg_lat_str);
|
||||||
|
loc_offset = offset;
|
||||||
if (length < 7)
|
if (length < 7)
|
||||||
return;
|
return;
|
||||||
offset = offset + 3;
|
offset = offset + 3;
|
||||||
|
@ -865,8 +872,9 @@ dissect_geographical_description(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tr
|
||||||
svalue32 |= (svalue32 & 0x800000) ? 0xff000000 : 0x00000000;
|
svalue32 |= (svalue32 & 0x800000) ? 0xff000000 : 0x00000000;
|
||||||
long_item = proto_tree_add_item(tree, hf_gsm_a_geo_loc_deg_of_long, tvb, offset, 3, ENC_BIG_ENDIAN);
|
long_item = proto_tree_add_item(tree, hf_gsm_a_geo_loc_deg_of_long, tvb, offset, 3, ENC_BIG_ENDIAN);
|
||||||
/* (X/0xffffff) *360 = degrees */
|
/* (X/0xffffff) *360 = degrees */
|
||||||
proto_item_append_text(long_item, " (%.5f degrees)",
|
deg_lon_str = wmem_strdup_printf(wmem_packet_scope(), "%.5f",
|
||||||
((double)svalue32/16777215.0) * 360);
|
((double)svalue32/16777215.0) * 360);
|
||||||
|
proto_item_append_text(long_item, " (%s degrees)", deg_lon_str);
|
||||||
offset = offset + 3;
|
offset = offset + 3;
|
||||||
if (type_of_shape == ELLIPSOID_POINT_WITH_UNCERT_CIRC) {
|
if (type_of_shape == ELLIPSOID_POINT_WITH_UNCERT_CIRC) {
|
||||||
/* Ellipsoid Point with uncertainty Circle */
|
/* Ellipsoid Point with uncertainty Circle */
|
||||||
|
@ -963,6 +971,10 @@ dissect_geographical_description(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tr
|
||||||
/* Confidence */
|
/* Confidence */
|
||||||
proto_tree_add_item(tree, hf_gsm_a_geo_loc_confidence, tvb, offset, 1, ENC_BIG_ENDIAN);
|
proto_tree_add_item(tree, hf_gsm_a_geo_loc_confidence, tvb, offset, 1, ENC_BIG_ENDIAN);
|
||||||
}
|
}
|
||||||
|
osm_uri = wmem_strdup_printf(wmem_packet_scope(), "https://www.openstreetmap.org/?mlat=%s&mlon=%s&zoom=12", deg_lat_str, deg_lon_str);
|
||||||
|
loc_uri_item = proto_tree_add_string(tree, hf_gsm_a_geo_loc_osm_uri, tvb, loc_offset, 6, osm_uri);
|
||||||
|
PROTO_ITEM_SET_URL(loc_uri_item);
|
||||||
|
PROTO_ITEM_SET_GENERATED(loc_uri_item);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case POLYGON: /* Polygon */
|
case POLYGON: /* Polygon */
|
||||||
|
@ -4517,6 +4529,11 @@ proto_register_gsm_a_common(void)
|
||||||
FT_INT24, BASE_DEC, NULL, 0xffffff,
|
FT_INT24, BASE_DEC, NULL, 0xffffff,
|
||||||
NULL, HFILL }
|
NULL, HFILL }
|
||||||
},
|
},
|
||||||
|
{ &hf_gsm_a_geo_loc_osm_uri,
|
||||||
|
{ "Location OSM URI", "gsm_a.gad.location_uri",
|
||||||
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
{ &hf_gsm_a_geo_loc_uncertainty_code,
|
{ &hf_gsm_a_geo_loc_uncertainty_code,
|
||||||
{ "Uncertainty code", "gsm_a.gad.uncertainty_code",
|
{ "Uncertainty code", "gsm_a.gad.uncertainty_code",
|
||||||
FT_UINT8, BASE_DEC, NULL, 0x7f,
|
FT_UINT8, BASE_DEC, NULL, 0x7f,
|
||||||
|
|
Loading…
Reference in New Issue