Lines Matching defs:conn

108 	struct dl_list conn; /* struct dpp_connection */
117 struct dl_list conn; /* struct dpp_connection */
8722 static void dpp_connection_free(struct dpp_connection *conn)
8724 if (conn->sock >= 0) {
8726 conn->sock);
8727 eloop_unregister_sock(conn->sock, EVENT_TYPE_READ);
8728 eloop_unregister_sock(conn->sock, EVENT_TYPE_WRITE);
8729 close(conn->sock);
8731 wpabuf_free(conn->msg);
8732 wpabuf_free(conn->msg_out);
8733 dpp_auth_deinit(conn->auth);
8734 os_free(conn);
8738 static void dpp_connection_remove(struct dpp_connection *conn)
8740 dl_list_del(&conn->list);
8741 dpp_connection_free(conn);
8747 struct dpp_connection *conn, *tmp;
8749 dl_list_for_each_safe(conn, tmp, &dpp->tcp_init, struct dpp_connection,
8751 dpp_connection_remove(conn);
8757 struct dpp_connection *conn, *tmp;
8759 dl_list_for_each_safe(conn, tmp, &ctrl->conn, struct dpp_connection,
8761 dpp_connection_remove(conn);
8833 static void dpp_controller_auth_success(struct dpp_connection *conn,
8848 dl_list_init(&ctrl->conn);
8878 static void dpp_controller_gas_done(struct dpp_connection *conn)
8880 struct dpp_authentication *auth = conn->auth;
8889 wpa_msg(conn->ctrl->global->msg_ctx, MSG_INFO, DPP_EVENT_CONF_SENT);
8890 dpp_connection_remove(conn);
8894 static int dpp_tcp_send(struct dpp_connection *conn)
8898 if (!conn->msg_out) {
8899 eloop_unregister_sock(conn->sock, EVENT_TYPE_WRITE);
8900 conn->write_eloop = 0;
8903 res = send(conn->sock,
8904 wpabuf_head_u8(conn->msg_out) + conn->msg_out_pos,
8905 wpabuf_len(conn->msg_out) - conn->msg_out_pos, 0);
8909 dpp_connection_remove(conn);
8913 conn->msg_out_pos += res;
8914 if (wpabuf_len(conn->msg_out) > conn->msg_out_pos) {
8917 (unsigned int) conn->msg_out_pos,
8918 (unsigned int) wpabuf_len(conn->msg_out));
8919 if (!conn->write_eloop &&
8920 eloop_register_sock(conn->sock, EVENT_TYPE_WRITE,
8921 dpp_conn_tx_ready, conn, NULL) == 0)
8922 conn->write_eloop = 1;
8927 wpabuf_free(conn->msg_out);
8928 conn->msg_out = NULL;
8929 conn->msg_out_pos = 0;
8930 eloop_unregister_sock(conn->sock, EVENT_TYPE_WRITE);
8931 conn->write_eloop = 0;
8932 if (!conn->read_eloop &&
8933 eloop_register_sock(conn->sock, EVENT_TYPE_READ,
8934 dpp_controller_rx, conn, NULL) == 0)
8935 conn->read_eloop = 1;
8936 if (conn->on_tcp_tx_complete_remove) {
8937 dpp_connection_remove(conn);
8938 } else if (conn->ctrl && conn->on_tcp_tx_complete_gas_done &&
8939 conn->auth) {
8940 dpp_controller_gas_done(conn);
8941 } else if (conn->on_tcp_tx_complete_auth_ok) {
8942 conn->on_tcp_tx_complete_auth_ok = 0;
8943 dpp_controller_auth_success(conn, 1);
8950 static void dpp_controller_start_gas_client(struct dpp_connection *conn)
8952 struct dpp_authentication *auth = conn->auth;
8977 wpabuf_free(conn->msg_out);
8978 conn->msg_out_pos = 0;
8979 conn->msg_out = wpabuf_alloc(4 + wpabuf_len(buf) - 1);
8980 if (!conn->msg_out) {
8984 wpabuf_put_be32(conn->msg_out, wpabuf_len(buf) - 1);
8985 wpabuf_put_data(conn->msg_out, wpabuf_head_u8(buf) + 1,
8989 if (dpp_tcp_send(conn) == 1) {
8990 if (!conn->write_eloop) {
8991 if (eloop_register_sock(conn->sock, EVENT_TYPE_WRITE,
8993 conn, NULL) < 0)
8995 conn->write_eloop = 1;
9001 static void dpp_controller_auth_success(struct dpp_connection *conn,
9004 struct dpp_authentication *auth = conn->auth;
9010 wpa_msg(conn->global->msg_ctx, MSG_INFO,
9025 dpp_controller_start_gas_client(conn);
9031 struct dpp_connection *conn = eloop_ctx;
9034 dpp_tcp_send(conn);
9079 struct dpp_connection *conn;
9084 if (dl_list_len(&ctrl->conn) >= 15) {
9094 conn = os_zalloc(sizeof(*conn));
9095 if (!conn)
9098 conn->global = ctrl->global;
9099 conn->relay = ctrl;
9100 os_memcpy(conn->mac_addr, src, ETH_ALEN);
9101 conn->freq = freq;
9103 conn->sock = socket(AF_INET, SOCK_STREAM, 0);
9104 if (conn->sock < 0)
9107 conn->sock, hostapd_ip_txt(&ctrl->ipaddr, txt, sizeof(txt)));
9109 if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) != 0) {
9115 if (connect(conn->sock, (struct sockaddr *) &addr, addrlen) < 0) {
9128 if (eloop_register_sock(conn->sock, EVENT_TYPE_WRITE,
9129 dpp_conn_tx_ready, conn, NULL) < 0)
9131 conn->write_eloop = 1;
9136 dl_list_add(&ctrl->conn, &conn->list);
9137 return conn;
9139 dpp_connection_free(conn);
9160 static int dpp_relay_tx(struct dpp_connection *conn, const u8 *hdr,
9167 wpabuf_free(conn->msg_out);
9168 conn->msg_out_pos = 0;
9169 conn->msg_out = dpp_tcp_encaps(hdr, buf, len);
9170 if (!conn->msg_out) {
9171 dpp_connection_remove(conn);
9178 conn->on_tcp_tx_complete_remove = 1;
9179 dpp_tcp_send(conn);
9189 struct dpp_connection *conn;
9199 dl_list_for_each(conn, &ctrl->conn,
9201 if (os_memcmp(src, conn->mac_addr,
9203 return dpp_relay_tx(conn, hdr, buf, len);
9217 conn = dpp_relay_new_conn(ctrl, src, freq);
9218 if (!conn)
9221 conn->msg_out = dpp_tcp_encaps(hdr, buf, len);
9222 if (!conn->msg_out) {
9223 dpp_connection_remove(conn);
9236 struct dpp_connection *conn, *found = NULL;
9246 dl_list_for_each(conn, &ctrl->conn,
9248 if (os_memcmp(src, conn->mac_addr,
9250 found = conn;
9267 wpabuf_free(conn->msg_out);
9268 conn->msg_out_pos = 0;
9269 conn->msg_out = msg;
9270 dpp_tcp_send(conn);
9277 struct dpp_connection *conn, *tmp;
9282 dl_list_for_each_safe(conn, tmp, &ctrl->conn, struct dpp_connection,
9284 dpp_connection_remove(conn);
9295 static int dpp_controller_rx_auth_req(struct dpp_connection *conn,
9302 if (!conn->ctrl)
9329 dpp_bootstrap_find_pair(conn->ctrl->global, i_bootstrap, r_bootstrap,
9337 if (conn->auth) {
9343 conn->auth = dpp_auth_req_rx(conn->ctrl->global->msg_ctx,
9344 conn->ctrl->allowed_roles,
9345 conn->ctrl->qr_mutual,
9347 if (!conn->auth) {
9352 if (dpp_set_configurator(conn->ctrl->global, conn->ctrl->global->msg_ctx,
9353 conn->auth,
9354 conn->ctrl->configurator_params) < 0) {
9355 dpp_connection_remove(conn);
9359 wpabuf_free(conn->msg_out);
9360 conn->msg_out_pos = 0;
9361 conn->msg_out = wpabuf_alloc(4 + wpabuf_len(conn->auth->resp_msg) - 1);
9362 if (!conn->msg_out)
9364 wpabuf_put_be32(conn->msg_out, wpabuf_len(conn->auth->resp_msg) - 1);
9365 wpabuf_put_data(conn->msg_out, wpabuf_head_u8(conn->auth->resp_msg) + 1,
9366 wpabuf_len(conn->auth->resp_msg) - 1);
9368 if (dpp_tcp_send(conn) == 1) {
9369 if (!conn->write_eloop) {
9370 if (eloop_register_sock(conn->sock, EVENT_TYPE_WRITE,
9372 conn, NULL) < 0)
9374 conn->write_eloop = 1;
9382 static int dpp_controller_rx_auth_resp(struct dpp_connection *conn,
9385 struct dpp_authentication *auth = conn->auth;
9401 dpp_connection_remove(conn);
9405 wpabuf_free(conn->msg_out);
9406 conn->msg_out_pos = 0;
9407 conn->msg_out = wpabuf_alloc(4 + wpabuf_len(msg) - 1);
9408 if (!conn->msg_out) {
9412 wpabuf_put_be32(conn->msg_out, wpabuf_len(msg) - 1);
9413 wpabuf_put_data(conn->msg_out, wpabuf_head_u8(msg) + 1,
9417 conn->on_tcp_tx_complete_auth_ok = 1;
9418 if (dpp_tcp_send(conn) == 1) {
9419 if (!conn->write_eloop) {
9420 if (eloop_register_sock(conn->sock, EVENT_TYPE_WRITE,
9422 conn, NULL) < 0)
9424 conn->write_eloop = 1;
9432 static int dpp_controller_rx_auth_conf(struct dpp_connection *conn,
9435 struct dpp_authentication *auth = conn->auth;
9450 dpp_controller_auth_success(conn, 0);
9455 static int dpp_controller_rx_conf_result(struct dpp_connection *conn,
9459 struct dpp_authentication *auth = conn->auth;
9462 if (!conn->ctrl)
9475 wpa_msg(conn->ctrl->global->msg_ctx, MSG_INFO,
9478 wpa_msg(conn->ctrl->global->msg_ctx, MSG_INFO,
9484 static int dpp_controller_rx_action(struct dpp_connection *conn, const u8 *msg,
9515 if (conn->relay) {
9517 conn->relay->tx(conn->relay->cb_ctx, conn->mac_addr,
9518 conn->freq, msg, len);
9524 return dpp_controller_rx_auth_req(conn, msg, pos, end - pos);
9526 return dpp_controller_rx_auth_resp(conn, msg, pos, end - pos);
9528 return dpp_controller_rx_auth_conf(conn, msg, pos, end - pos);
9530 return dpp_controller_rx_conf_result(conn, msg, pos, end - pos);
9540 static int dpp_controller_rx_gas_req(struct dpp_connection *conn, const u8 *msg,
9548 struct dpp_authentication *auth = conn->auth;
9556 if (!conn->ctrl || !auth || !auth->auth_success) {
9612 wpabuf_free(conn->msg_out);
9613 conn->msg_out_pos = 0;
9614 conn->msg_out = buf;
9615 conn->on_tcp_tx_complete_gas_done = 1;
9616 dpp_tcp_send(conn);
9621 static int dpp_tcp_rx_gas_resp(struct dpp_connection *conn, struct wpabuf *resp)
9623 struct dpp_authentication *auth = conn->auth;
9638 if (conn->global->process_conf_obj)
9639 res = conn->global->process_conf_obj(conn->global->cb_ctx,
9663 wpabuf_free(conn->msg_out);
9664 conn->msg_out_pos = 0;
9665 conn->msg_out = encaps;
9666 conn->on_tcp_tx_complete_remove = 1;
9667 dpp_tcp_send(conn);
9675 static int dpp_rx_gas_resp(struct dpp_connection *conn, const u8 *msg,
9729 if (!conn->relay && !conn->ctrl)
9730 return dpp_tcp_rx_gas_resp(conn, buf);
9732 if (!conn->relay) {
9738 conn->relay->gas_resp_tx(conn->relay->cb_ctx, conn->mac_addr,
9747 struct dpp_connection *conn = eloop_ctx;
9754 if (conn->msg_len_octets < 4) {
9757 res = recv(sd, &conn->msg_len[conn->msg_len_octets],
9758 4 - conn->msg_len_octets, 0);
9762 dpp_connection_remove(conn);
9768 dpp_connection_remove(conn);
9773 res, (int) (4 - conn->msg_len_octets));
9774 conn->msg_len_octets += res;
9776 if (conn->msg_len_octets < 4) {
9779 (int) (4 - conn->msg_len_octets));
9783 msglen = WPA_GET_BE32(conn->msg_len);
9787 dpp_connection_remove(conn);
9791 wpabuf_free(conn->msg);
9792 conn->msg = wpabuf_alloc(msglen);
9795 if (!conn->msg) {
9798 dpp_connection_remove(conn);
9803 (unsigned int) wpabuf_tailroom(conn->msg));
9805 res = recv(sd, wpabuf_put(conn->msg, 0), wpabuf_tailroom(conn->msg), 0);
9808 dpp_connection_remove(conn);
9813 dpp_connection_remove(conn);
9817 wpabuf_put(conn->msg, res);
9819 if (wpabuf_tailroom(conn->msg) > 0) {
9822 (unsigned int) wpabuf_tailroom(conn->msg));
9826 conn->msg_len_octets = 0;
9827 wpa_hexdump_buf(MSG_DEBUG, "DPP: Received TCP message", conn->msg);
9828 if (wpabuf_len(conn->msg) < 1) {
9829 dpp_connection_remove(conn);
9833 pos = wpabuf_head(conn->msg);
9836 if (dpp_controller_rx_action(conn, pos + 1,
9837 wpabuf_len(conn->msg) - 1) < 0)
9838 dpp_connection_remove(conn);
9841 if (dpp_controller_rx_gas_req(conn, pos + 1,
9842 wpabuf_len(conn->msg) - 1) < 0)
9843 dpp_connection_remove(conn);
9846 if (dpp_rx_gas_resp(conn, pos + 1,
9847 wpabuf_len(conn->msg) - 1) < 0)
9848 dpp_connection_remove(conn);
9864 struct dpp_connection *conn;
9878 conn = os_zalloc(sizeof(*conn));
9879 if (!conn)
9882 conn->global = ctrl->global;
9883 conn->ctrl = ctrl;
9884 conn->sock = fd;
9886 if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) != 0) {
9892 if (eloop_register_sock(conn->sock, EVENT_TYPE_READ,
9893 dpp_controller_rx, conn, NULL) < 0)
9895 conn->read_eloop = 1;
9899 dl_list_add(&ctrl->conn, &conn->list);
9904 os_free(conn);
9911 struct dpp_connection *conn;
9925 conn = os_zalloc(sizeof(*conn));
9926 if (!conn) {
9931 conn->global = dpp;
9932 conn->auth = auth;
9933 conn->sock = socket(AF_INET, SOCK_STREAM, 0);
9934 if (conn->sock < 0)
9937 if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) != 0) {
9943 if (connect(conn->sock, (struct sockaddr *) &saddr, addrlen) < 0) {
9956 if (eloop_register_sock(conn->sock, EVENT_TYPE_WRITE,
9957 dpp_conn_tx_ready, conn, NULL) < 0)
9959 conn->write_eloop = 1;
9965 conn->msg_out = dpp_tcp_encaps(hdr, pos, end - pos);
9966 if (!conn->msg_out)
9972 dl_list_add(&dpp->tcp_init, &conn->list);
9975 dpp_connection_free(conn);
9998 dl_list_init(&ctrl->conn);