|
From: | Larry Boyd |
Subject: | Re: [gpsd-users] gpsd as gpsd client, error "Unrecognized request" |
Date: | Wed, 28 Jun 2017 09:29:43 -0400 |
Ah, its not entirely a problem on the client side gpsd. I think the problem comes in at line 2339 and 2343 of the server side. If recv returns with just the "?" at line 2339, then a '\n' is appended to the buffer at line 2343 and the buffer is then handed off to handle_gpsd_request to be processed.The reason why recv sometimes returns with just the '?' is visible in the client gpsd log, which shows TWO "IO" lines for the request. I guess that if the time between the first and the second is just a little bit too long, the server side reads it as two requests.On Tue, Jun 27, 2017 at 5:53 PM, Larry Boyd <address@hidden> wrote:I'm running 3.16 on a raspberry pi zero w with adafruit gps hat as a gps server, and also 3.16 on a laptop running fedora 25 with gpsd as a client to the rpi's gpsd.On both I've compiled from source.On the rpi I'm running with the following;address@hidden:~/gpsd-3.16 $ ./gpsd -N -n -D 4 -G /dev/ttyAMA0On fedora, I'm, running with this;address@hidden gpsd-3.16]$ ./gpsd -N -D 5 gpsd://pizwcam.localpizwcam.local, of course, resolves to the ip address of the rpi.When I start gpsmon on the fedora laptop, it gives me this output, MOST of the time;////////////////////////////////// tcp://localhost:2947 JSON slave driver>(82) {"class":"VERSION","release":"3.16","rev":"3.16","proto_majo r":3,"proto_minor":11 }(119) {"class":"DEVICES","devices":[{"class":"DEVICE","path":"gpsd ://pizwcam.local","a ctivated":"2017-06-27T21:40:05.560Z"}]} (122) {"class":"WATCH","enable":true,"json":false,"nmea":false," raw":2,"scaled":false, "timing":false,"split24":false,"pps":true} (114) {"class":"VERSION","release":"3.16","rev":"3.16","proto_majo r":3,"proto_minor":1 1,"remote":"gpsd://pizwcam.local"} (53) {"class":"ERROR","message":"Unrecognized request ''"} ////////////////////////////////// At the same time, gpsd ON FEDORA, gives me this;////////////////////////////////// gpsd:CLIENT: => client(0): {"class":"VERSION","release":"3.16","rev":"3.16","proto_majo r":3,"proto_minor":11}\x0d\x0a gpsd:PROG: checking client(0)gpsd:CLIENT: <= client(0): ?WATCH={"raw":2,"pps":true}\x0d\x0a gpsd:PROG: no /etc/gpsd/device-hook present, skipped running ACTIVATE hookgpsd:INFO: opening remote gpsd feed at pizwcam.local, port 2947.gpsd:INFO: gpsd_activate(2): activated GPS (fd 7)gpsd:IO: => GPS: ?gpsd:IO: => GPS: WATCH={"raw":2,"pps":true}\x0d\x0a gpsd:CLIENT: => client(0): {"class":"DEVICES","devices":[{"class":"DEVICE","path":"gpsd ://pizwcam.local","activated": "2017-06-27T21:40:05.560Z"}]}\ x0d\x0a{"class":"WATCH"," enable":true,"json":false," nmea":false,"raw":2,"scaled": false,"timing":false,"split24" :false,"pps":true}\x0d\x0a gpsd:PROG: switching to match packet type 18: {"class":"VERSION","release":"3.16","rev":"3.16","proto_majo r":3,"proto_minor":11} gpsd:PROG: switch_driver(JSON slave driver) called...gpsd:PROG: selecting JSON slave driver driver...gpsd:INFO: gpsd://pizwcam.local identified as type JSON slave driver, 0 sec @ 0bpsgpsd:IO: <= GPS: {"class":"VERSION","release":"3.16","rev":"3.16","proto_majo r":3,"proto_minor":11} gpsd:PROG: JSON, passing through {"class":"VERSION","release":"3.16","rev":"3.16","proto_majo r":3,"proto_minor":11,"remote" :"gpsd://pizwcam.local"} gpsd:PROG: device 0 (fd=7, path gpsd://pizwcam.local) already active.gpsd:CLIENT: => client(0): {"class":"VERSION","release":"3.16","rev":"3.16","proto_majo r":3,"proto_minor":11,"remote" :"gpsd://pizwcam.local"}\x0d\ x0a gpsd:IO: <= GPS: {"class":"ERROR","message":"Unrecognized request ''"} gpsd:PROG: JSON, passing through {"class":"ERROR","message":"Unrecognized request ''"} gpsd:CLIENT: => client(0): {"class":"ERROR","message":"Unrecognized request ''"}\x0d\x0a ////////////////////////////////// And gpsd on the rpi gives this;////////////////////////////////// gpsd:CLIENT: <= client(0): ?\x0agpsd:ERROR: ERROR response: {"class":"ERROR","message":"Unrecognized request ''"}\x0d\x0a gpsd:CLIENT: => client(0): {"class":"ERROR","message":"Unrecognized request ''"}\x0d\x0a gpsd:PROG: checking client(0)gpsd:CLIENT: <= client(0): WATCH={"raw":2,"pps":true}\x0d\x0a gpsd:CLIENT: => client(0): =////////////////////////////////// But very occasionally, if I restart gpsmon several times, then on the rpi, I will get this instead;////////////////////////////////// gpsd:CLIENT: <= client(0): ?WATCH={"raw":2,"pps":true}\x0d\x0a ////////////////////////////////// ... and then, of course, gpsmon will work as expected. Note that there is nothing different visible on the output from gpsd or gpsmon on the fedora laptop up to that point, including the '?' and 'WATCH' appearing on separate lines.So clearly, somewhere between the gpsd's running on fedora and the rpi, there is a line break being added after the '?' character. Since I can consistently run '?WATCH=....' via telnet, it appears to be in the client code running on the fedora machine.
fix_request_split.patch
Description: Text Data
[Prev in Thread] | Current Thread | [Next in Thread] |