#include <config.h>
#endif
+#define _GNU_SOURCE
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <termios.h>
+#include <netdb.h>
#include <gweb/gweb.h>
static void user_callback(struct user_input_data *data)
{
char *value;
- int len;
- if (data->hidden == TRUE)
+ if (data->hidden == TRUE) {
+ ssize_t len;
+
len = write(data->fd, "\n", 1);
+ if (len < 0)
+ return;
+ }
tcsetattr(data->fd, TCSADRAIN, &data->saved_termios);
struct termios new_termios;
GIOChannel *channel;
guint watch;
- int len;
+ ssize_t len;
data = g_try_new0(struct user_input_data, 1);
if (data == NULL)
data->user_data = user_data;
data->hidden = hidden;
- data->fd = open("/dev/tty", O_RDWR | O_NOCTTY);
+ data->fd = open("/dev/tty", O_RDWR | O_NOCTTY | O_CLOEXEC);
if (data->fd < 0)
goto error;
goto error;
len = write(data->fd, label, strlen(label));
+ if (len < 0)
+ goto error;
+
len = write(data->fd, ": ", 2);
+ if (len < 0)
+ goto error;
return TRUE;
return FALSE;
}
+static gboolean wispr_route(const char *addr, int ai_family, int if_index,
+ gpointer user_data)
+{
+ char *family = "unknown";
+
+ if (ai_family == AF_INET)
+ family = "IPv4";
+ else if (ai_family == AF_INET6)
+ family = "IPv6";
+
+ printf("Route request: %s %s index %d\n", family, addr, if_index);
+
+ if (ai_family != AF_INET && ai_family != AF_INET6)
+ return FALSE;
+
+ return TRUE;
+}
+
static gboolean wispr_result(GWebResult *result, gpointer user_data)
{
struct wispr_session *wispr = user_data;
printf("\n");
wispr->request = g_web_request_get(wispr->web, redirect,
- wispr_result, wispr);
+ wispr_result, wispr_route, wispr);
return FALSE;
}
printf("\n");
wispr->request = g_web_request_get(wispr->web, redirect,
- wispr_result, wispr);
+ wispr_result, NULL, wispr);
return FALSE;
}
parser_callback, &wispr);
wispr.request = g_web_request_get(wispr.web, option_url,
- wispr_result, &wispr);
+ wispr_result, wispr_route, &wispr);
if (wispr.request == 0) {
fprintf(stderr, "Failed to start request\n");