static void rtcfg_conn_recv_announce_new(struct rtcfg_connection *conn, struct rtskb *rtskb) { struct rtcfg_device *rtcfg_dev = &device[conn->ifindex]; struct rtcfg_frm_announce *announce_new; int packets; conn->last_frame = rtskb->time_stamp; announce_new = (struct rtcfg_frm_announce *)rtskb->data; conn->flags = announce_new->flags; if (announce_new->burstrate < conn->burstrate) conn->burstrate = announce_new->burstrate; rtcfg_next_conn_state(conn, RTCFG_CONN_STAGE_1); rtcfg_dev->stations_found++; if ((conn->flags & RTCFG_FLAG_READY) != 0) rtcfg_dev->stations_ready++; if (((conn->flags & RTCFG_FLAG_STAGE_2_DATA) != 0) && (conn->stage2_file != NULL)) { packets = conn->burstrate - 1; rtcfg_send_stage_2(conn, 1); while ((conn->cfg_offs < conn->stage2_file->size) && (packets > 0)) { rtcfg_send_stage_2_frag(conn); packets--; } } else { rtcfg_send_stage_2(conn, 0); conn->flags &= ~RTCFG_FLAG_STAGE_2_DATA; } }
static int rtcfg_conn_state_searching(struct rtcfg_connection *conn, RTCFG_EVENT event_id, void* event_data) { switch (event_id) { case RTCFG_FRM_ANNOUNCE_NEW: rtcfg_next_conn_state(conn, RTCFG_CONN_1); rtcfg_send_stage_2(conn); break; default: RTCFG_DEBUG(1, "RTcfg: unknown event %s for conn %p in %s()\n", rtcfg_event[event_id], conn, __FUNCTION__); return -EINVAL; } return 0; }