/** * wps_get_msg - Build a WPS message * @wps: WPS Registration protocol data from wps_init() * @op_code: Buffer for returning message OP Code * Returns: The generated WPS message or %NULL on failure * * This function is used to build a response to a message processed by calling * wps_process_msg(). The caller is responsible for freeing the buffer. */ struct wpabuf * wps_get_msg(struct wps_data *wps, enum wsc_op_code *op_code) { if (wps->registrar) return wps_registrar_get_msg(wps, op_code); else return wps_enrollee_get_msg(wps, op_code); }
/* Send the appropriate WPS message based on the current WPS state (globule->wps->state) */ int send_msg(int type) { int ret_val = 0; const struct wpabuf *msg = NULL; unsigned char *payload = NULL; const void *packet = NULL; size_t packet_len = 0; uint16_t payload_len = 0; enum wsc_op_code opcode = 0; struct wps_data *wps = get_wps(); /* * Get the next message we need to send based on the data retrieved * from wps_registrar_process_msg (see exchange.c). */ msg = wps_registrar_get_msg(wps, &opcode, type); set_opcode(opcode); if(msg) { /* Get a pointer to the actual data inside of the wpabuf */ payload = (unsigned char *) wpabuf_head(msg); payload_len = (uint16_t) msg->used; /* Build and send an EAP packet with the message payload */ packet = build_eap_packet(payload, payload_len, &packet_len); if(packet) { if(send_packet(packet, packet_len, 1)) { ret_val = 1; } else { free((void *) packet); } } wpabuf_free((struct wpabuf *) msg); } return ret_val; }