From 79ea0f8e3193aea3c7c5cc0cfc1247307b523d20 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Tue, 1 May 2012 22:21:44 +0200 Subject: [PATCH] Fix LOC parsing --- parse_test.go | 4 ++-- zscan.go | 7 +++++-- zscan_rr.go | 13 ++++++++----- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/parse_test.go b/parse_test.go index ca458a0e..4abaa3c1 100644 --- a/parse_test.go +++ b/parse_test.go @@ -255,8 +255,8 @@ func TestParseLOC(t *testing.T) { lt := map[string]string{ "SW1A2AA.find.me.uk. LOC 51 30 12.748 N 00 07 39.611 W 0.00m 0.00m 0.00m 0.00m": "SW1A2AA.find.me.uk.\t3600\tIN\tLOC\t51 30 12.748 N 00 07 39.611 W 0.00m 0.00m 0.00m 0.00m", -// "SW1A2AA.find.me.uk. LOC 51 0 0.0 N 00 07 39.611 W 0.00m 0.00m 0.00m 0.00m": -// "SW1A2AA.find.me.uk.\t3600\tIN\tLOC\t51 0 0.0 N 00 07 39.611 W 0.00m 0.00m 0.00m 0.00m", + "SW1A2AA.find.me.uk. LOC 51 0 0.0 N 00 07 39.611 W 0.00m 0.00m 0.00m 0.00m": + "SW1A2AA.find.me.uk.\t3600\tIN\tLOC\t51 0 0.0 N 00 07 39.611 W 0.00m 0.00m 0.00m 0.00m", } for i, o := range lt { rr, e := NewRR(i) diff --git a/zscan.go b/zscan.go index 3f008a21..ff8d54dc 100644 --- a/zscan.go +++ b/zscan.go @@ -739,15 +739,18 @@ func stringToCm(token string) (e, m uint8, ok bool) { var meters, cmeters, val int var err error switch len(s) { - case 1: + case 2: if cmeters, err = strconv.Atoi(s[1]); err != nil { return } fallthrough - case 0: + case 1: if meters, err = strconv.Atoi(s[0]); err != nil { return } + case 0: + // huh? + return 0, 0, false } ok = true if meters > 0 { diff --git a/zscan_rr.go b/zscan_rr.go index cbdff55f..618467ca 100644 --- a/zscan_rr.go +++ b/zscan_rr.go @@ -422,16 +422,19 @@ func setTALINK(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { } func setLOC(h RR_Header, c chan lex, f string) (RR, *ParseError) { - // Defaults TODO(mg) rr := new(RR_LOC) rr.Hdr = h + // Non zero defaults for LOC record, see RFC 1876, Section 3. + rr.HorizPre = 165 // 10000 + rr.VertPre = 162 // 10 + rr.Size = 18 // 1 ok := false // North l := <-c if i, e := strconv.Atoi(l.token); e != nil { return nil, &ParseError{f, "bad LOC Latitude", l} } else { - rr.Latitude = 1000 * uint32(i) + rr.Latitude = 1000 * 60 * 60 * uint32(i) } <-c // _BLANK // Either number, 'N' or 'S' @@ -449,7 +452,7 @@ func setLOC(h RR_Header, c chan lex, f string) (RR, *ParseError) { if i, e := strconv.ParseFloat(l.token, 32); e != nil { return nil, &ParseError{f, "bad LOC Latitude seconds", l} } else { - rr.Latitude += uint32(1000 * 60 * 60 * i) + rr.Latitude += uint32(1000 * i) } <-c // _BLANK // Either number, 'N' or 'S' @@ -467,7 +470,7 @@ East: if i, e := strconv.Atoi(l.token); e != nil { return nil, &ParseError{f, "bad LOC Longitude", l} } else { - rr.Longitude = uint32(1000.0 * i) // +0.0005 in ldns? + rr.Longitude = 1000 * 60 * 60 * uint32(i) } <-c // _BLANK // Either number, 'E' or 'W' @@ -485,7 +488,7 @@ East: if i, e := strconv.ParseFloat(l.token, 32); e != nil { return nil, &ParseError{f, "bad LOC Longitude seconds", l} } else { - rr.Longitude += uint32(1000 * 60 * 60 * i) + rr.Longitude += uint32(1000 * i) } <-c // _BLANK // Either number, 'E' or 'W'