bool SocketDescriptor::CreateConnectUDP(const char *host, const char *port) { const int socktype = SOCK_DGRAM; StaticSocketAddress address; if (!address.Lookup(host, port, socktype)) return false; return Create(address.GetFamily(), socktype, 0) && Connect(address); }
int main(int argc, char *argv[]) { Args args(argc, argv, "HOST KEY"); const char *host = args.ExpectNext(); const char *key = args.ExpectNext(); StaticSocketAddress address; if (!address.Lookup(host, "5597", SOCK_DGRAM)) { fprintf(stderr, "Failed to look up: %s\n", host); return EXIT_FAILURE; } if (address.GetFamily() != AF_INET) { fprintf(stderr, "Not an IPv4 address: %s\n", host); return EXIT_FAILURE; } #ifdef HAVE_SKYLINES_TRACKING_HANDLER InitialiseIOThread(); #endif SkyLinesTracking::Client client; #ifdef HAVE_SKYLINES_TRACKING_HANDLER client.SetIOThread(io_thread); Handler handler; client.SetHandler(&handler); #endif client.SetKey(ParseUint64(key, NULL, 16)); if (!client.Open(address)) { fprintf(stderr, "Failed to create client\n"); return EXIT_FAILURE; } if (args.IsEmpty() || StringIsEqual(args.PeekNext(), "fix")) { NMEAInfo basic; basic.Reset(); basic.UpdateClock(); basic.time = fixed(1); basic.time_available.Update(basic.clock); return client.SendFix(basic) ? EXIT_SUCCESS : EXIT_FAILURE; } else if (StringIsEqual(args.PeekNext(), "ping")) { client.SendPing(1); #ifdef HAVE_SKYLINES_TRACKING_HANDLER handler.Wait(); } else if (StringIsEqual(args.PeekNext(), "traffic")) { client.SendTrafficRequest(true, true, true); handler.Wait(); #endif } else { DebugReplay *replay = CreateDebugReplay(args); if (replay == NULL) return EXIT_FAILURE; while (replay->Next()) { client.SendFix(replay->Basic()); usleep(100000); } } #ifdef HAVE_SKYLINES_TRACKING_HANDLER client.Close(); DeinitialiseIOThread(); #endif return EXIT_SUCCESS; }