Exemple #1
0
static void start_aprsis_thread(void *ptr) {
    GError *error = NULL;
	aprsis_ctx *ctx = ptr;
	
	g_message("connecting to %s", ctx->host);
	if (aprsis_connect(ctx)) {
		g_error("failed to connect");
	}

	g_message("logging in...");
	aprsis_login(ctx);

	aprsis_set_filter(ctx, DEF_HOME_LAT, DEF_HOME_LON, DEF_RAD);
	//aprsis_set_filter_string(ctx, "p/M/G/2"); // callsigns beginning with G, M or 2 - UK callsigns, normally
	//aprsis_set_filter_string(ctx, "p/HB9"); // Swiss callsigns

	aprsis_io = g_io_channel_unix_new (ctx->sockfd);
    g_io_channel_set_encoding(aprsis_io, NULL, &error);
    if (!g_io_add_watch (aprsis_io, G_IO_IN | G_IO_ERR | G_IO_HUP, aprsis_got_packet, ctx))
        g_error ("Cannot add watch on GIOChannel!");
}
Exemple #2
0
int aprsis_connect(const char *hostname, int port, const char *mycall, char *filter)
{
	int sock;
	struct sockaddr_in sa;
	struct hostent *he;
	int ret;

	he = gethostbyname(hostname);
	if (!he || (he->h_length < 1))
		return -ENETUNREACH;

	sa.sin_family = AF_INET;
	memcpy(&sa.sin_addr, he->h_addr_list[0], sizeof(sa.sin_addr));
	sa.sin_port = htons(port);

	sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock < 0)
		return sock;

	ret = connect(sock, (struct sockaddr *)&sa, sizeof(sa));
	if (ret < 0)
		goto out;

	ret = aprsis_login(sock, mycall, filter);
	if (ret < 0)
		goto out;

        printf("Connected to host: %s, on port: %d\n",
               hostname, port);

 out:
	if (ret) {
		close(sock);
		return ret;
	}

	return sock;
}