static void wps_er_http_get_dev_info_cb(void *ctx, struct http_client *c, enum http_client_event event) { struct wps_er_ap *ap = ctx; struct wpabuf *reply; char *dev_info = NULL; switch (event) { case HTTP_CLIENT_OK: wpa_printf(MSG_DEBUG, "WPS ER: GetDeviceInfo OK"); reply = http_client_get_body(c); if (reply == NULL) break; dev_info = os_zalloc(wpabuf_len(reply) + 1); if (dev_info == NULL) break; os_memcpy(dev_info, wpabuf_head(reply), wpabuf_len(reply)); break; case HTTP_CLIENT_FAILED: case HTTP_CLIENT_INVALID_REPLY: case HTTP_CLIENT_TIMEOUT: wpa_printf(MSG_DEBUG, "WPS ER: GetDeviceInfo failed"); break; } http_client_free(ap->http); ap->http = NULL; if (dev_info) { wps_er_ap_learn(ap, dev_info); os_free(dev_info); } }
static void wps_er_http_dev_desc_cb(void *ctx, struct http_client *c, enum http_client_event event) { struct wps_er_ap *ap = ctx; struct wpabuf *reply; int ok = 0; switch (event) { case HTTP_CLIENT_OK: reply = http_client_get_body(c); if (reply == NULL) break; wps_er_parse_device_description(ap, reply); ok = 1; break; case HTTP_CLIENT_FAILED: case HTTP_CLIENT_INVALID_REPLY: case HTTP_CLIENT_TIMEOUT: wpa_printf(MSG_DEBUG, "WPS ER: Failed to fetch device info"); break; } http_client_free(ap->http); ap->http = NULL; if (ok) wps_er_get_device_info(ap); }
static void wps_er_http_put_message_cb(void *ctx, struct http_client *c, enum http_client_event event) { struct wps_er_ap *ap = ctx; struct wpabuf *reply; char *msg = NULL; switch (event) { case HTTP_CLIENT_OK: wpa_printf(MSG_DEBUG, "WPS ER: PutMessage OK"); reply = http_client_get_body(c); if (reply == NULL) break; msg = os_zalloc(wpabuf_len(reply) + 1); if (msg == NULL) break; os_memcpy(msg, wpabuf_head(reply), wpabuf_len(reply)); break; case HTTP_CLIENT_FAILED: case HTTP_CLIENT_INVALID_REPLY: case HTTP_CLIENT_TIMEOUT: wpa_printf(MSG_DEBUG, "WPS ER: PutMessage failed"); if (ap->wps) { wps_deinit(ap->wps); ap->wps = NULL; } break; } http_client_free(ap->http); ap->http = NULL; if (msg) { struct wpabuf *buf; enum http_reply_code ret; buf = xml_get_base64_item(msg, "NewOutMessage", &ret); os_free(msg); if (buf == NULL) { wpa_printf(MSG_DEBUG, "WPS ER: Could not extract " "NewOutMessage from PutMessage response"); wps_deinit(ap->wps); ap->wps = NULL; return; } wps_er_ap_process(ap, buf); wpabuf_free(buf); } }