]>
git.ipfire.org Git - thirdparty/hostap.git/blob - src/utils/browser-system.c
97dae4fc232f74648b0703ade5c43045b6b4dbe8
2 * Hotspot 2.0 client - Web browser using system browser
3 * Copyright (c) 2013, Qualcomm Atheros, Inc.
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
12 #include "utils/eloop.h"
13 #include "wps/http_server.h"
22 static void browser_timeout(void *eloop_data
, void *user_ctx
)
24 wpa_printf(MSG_INFO
, "Timeout on waiting browser interaction to "
30 static void http_req(void *ctx
, struct http_request
*req
)
32 struct browser_data
*data
= ctx
;
37 url
= http_request_get_uri(req
);
38 wpa_printf(MSG_INFO
, "Browser response received: %s", url
);
40 if (os_strcmp(url
, "/") == 0) {
43 } else if (os_strncmp(url
, "/osu/", 5) == 0) {
44 data
->success
= atoi(url
+ 5);
48 resp
= wpabuf_alloc(1);
50 http_request_deinit(req
);
57 eloop_cancel_timeout(browser_timeout
, NULL
, NULL
);
58 eloop_register_timeout(0, 500000, browser_timeout
, &data
, NULL
);
61 http_request_send_and_deinit(req
, resp
);
65 int hs20_web_browser(const char *url
)
67 struct http_server
*http
;
69 struct browser_data data
;
72 wpa_printf(MSG_INFO
, "Launching system browser to %s", url
);
74 os_memset(&data
, 0, sizeof(data
));
76 if (eloop_init() < 0) {
77 wpa_printf(MSG_ERROR
, "eloop_init failed");
80 addr
.s_addr
= htonl((127 << 24) | 1);
81 http
= http_server_init(&addr
, 12345, http_req
, &data
);
83 wpa_printf(MSG_ERROR
, "http_server_init failed");
91 http_server_deinit(http
);
97 /* run the external command in the child process */
100 argv
[0] = "browser-system";
101 argv
[1] = (void *) url
;
104 execv("/usr/bin/x-www-browser", argv
);
110 eloop_register_timeout(120, 0, browser_timeout
, &data
, NULL
);
112 eloop_cancel_timeout(browser_timeout
, &data
, NULL
);
113 http_server_deinit(http
);
116 /* TODO: Close browser */