static void wps_er_http_req(void *ctx, struct http_request *req) { struct wps_er *er = ctx; struct sockaddr_in *cli = http_request_get_cli_addr(req); enum httpread_hdr_type type = http_request_get_type(req); struct wpabuf *buf; wpa_printf(MSG_DEBUG, "WPS ER: HTTP request: '%s' (type %d) from " "%s:%d", http_request_get_uri(req), type, inet_ntoa(cli->sin_addr), ntohs(cli->sin_port)); switch (type) { case HTTPREAD_HDR_TYPE_NOTIFY: wps_er_http_notify(er, req); break; default: wpa_printf(MSG_DEBUG, "WPS ER: Unsupported HTTP request type " "%d", type); buf = wpabuf_alloc(200); if (buf == NULL) { http_request_deinit(req); return; } wpabuf_put_str(buf, "HTTP/1.1 501 Unimplemented\r\n" "Connection: close\r\n"); http_put_date(buf); wpabuf_put_str(buf, "\r\n"); http_request_send_and_deinit(req, buf); break; } }
static void http_req(void *ctx, struct http_request *req) { struct browser_data *data = ctx; struct wpabuf *resp; const char *url; int done = 0; url = http_request_get_uri(req); wpa_printf(MSG_INFO, "Browser response received: %s", url); if (os_strcmp(url, "/") == 0) { data->success = 1; done = 1; } else if (os_strncmp(url, "/osu/", 5) == 0) { data->success = atoi(url + 5); done = 1; } resp = wpabuf_alloc(1); if (resp == NULL) { http_request_deinit(req); if (done) eloop_terminate(); return; } if (done) { eloop_cancel_timeout(browser_timeout, NULL, NULL); eloop_register_timeout(0, 500000, browser_timeout, &data, NULL); } http_request_send_and_deinit(req, resp); }
static void wps_er_http_notify(struct wps_er *er, struct http_request *req) { char *uri = http_request_get_uri(req); if (os_strncmp(uri, "/event/", 7) == 0) { unsigned int event_id; char *pos; event_id = atoi(uri + 7); if (event_id != er->event_id) { wpa_printf(MSG_DEBUG, "WPS ER: HTTP event for an " "unknown event id %u", event_id); return; } pos = os_strchr(uri + 7, '/'); if (pos == NULL) return; pos++; wps_er_http_event(er, req, atoi(pos)); } else { wpa_printf(MSG_DEBUG, "WPS ER: Unknown HTTP NOTIFY for '%s'", uri); wps_er_http_resp_not_found(req); } }