12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # This file is Copyright 2010 by the GPSD project
- # SPDX-License-Identifier: BSD-2-clause
- """
- gpsdfake - a fake gpsd server that spews specified data at gpsd clients.
- """
- import sys, SocketServer
- class FakeHandler(SocketServer.BaseRequestHandler):
- "Instantiated once per connection to the server."
- def handle(self):
- global lines
- # self.request is the TCP socket connected to the client
- # Read the client's ?WATCH request.
- self.data = self.request.recv(1024).strip()
- # We'd like to send a fake banner to the client on startup,
- # but there's no (documented) method for that. We settle
- # for shipping on first request.
- self.request.send('{"class":"VERSION",'
- '"version":"gpsdfake","rev":"gpsdfake",'
- '"proto_major":3,"proto_minor":1}\r\n')
- # Perpetually resend the data we have specified
- while True:
- for line in lines:
- self.request.send(line)
- if __name__ == "__main__":
- (HOST, PORT) = "localhost", 2947
- try:
- if len(sys.argv) <= 1:
- sys.stderr.write("gpsdfake: requires a file argument.\n")
- sys.exit(1)
- lines = open(sys.argv[1]).readlines()
- # Create the server, binding to localhost on port 2947
- server = SocketServer.TCPServer((HOST, PORT), FakeHandler)
- # Activate the server; this will keep running until you
- # interrupt the program with Ctrl-C
- server.serve_forever()
- except KeyboardInterrupt:
- pass
- sys.exit(0)
- # The following sets edit modes for GNU EMACS
- # Local Variables:
- # mode:python
- # End:
- # vim: set expandtab shiftwidth=4
|