Lines Matching refs:sm
460 static void upnp_wps_device_send_event(struct upnp_wps_device_sm *sm) in upnp_wps_device_send_event() argument
473 if (dl_list_empty(&sm->subscriptions)) { in upnp_wps_device_send_event()
479 if (now.sec != sm->last_event_sec) { in upnp_wps_device_send_event()
480 sm->last_event_sec = now.sec; in upnp_wps_device_send_event()
481 sm->num_events_in_sec = 1; in upnp_wps_device_send_event()
483 sm->num_events_in_sec++; in upnp_wps_device_send_event()
491 if (sm->num_events_in_sec > MAX_EVENTS_PER_SEC && in upnp_wps_device_send_event()
492 sm->wlanevent_type == in upnp_wps_device_send_event()
497 sm->num_events_in_sec); in upnp_wps_device_send_event()
506 if (sm->wlanevent) in upnp_wps_device_send_event()
507 buf_size += os_strlen(sm->wlanevent); in upnp_wps_device_send_event()
514 wpabuf_put_property(buf, "WLANEvent", sm->wlanevent); in upnp_wps_device_send_event()
520 dl_list_for_each_safe(s, tmp, &sm->subscriptions, struct subscription, in upnp_wps_device_send_event()
523 sm->wlanevent_type == UPNP_WPS_WLANEVENT_TYPE_PROBE); in upnp_wps_device_send_event()
545 dl_list_for_each(iface, &s->sm->interfaces, in subscription_destroy()
553 static void subscription_list_age(struct upnp_wps_device_sm *sm, time_t now) in subscription_list_age() argument
556 dl_list_for_each_safe(s, tmp, &sm->subscriptions, in subscription_list_age()
570 struct subscription * subscription_find(struct upnp_wps_device_sm *sm, in subscription_find() argument
574 dl_list_for_each(s, &sm->subscriptions, struct subscription, list) { in subscription_find()
635 if (s->sm->wlanevent == NULL) { in subscription_first_event()
650 s->sm->wlanevent = (char *) in subscription_first_event()
657 wlan_event = s->sm->wlanevent; in subscription_first_event()
692 struct subscription * subscription_start(struct upnp_wps_device_sm *sm, in subscription_start() argument
701 subscription_list_age(sm, now); in subscription_start()
704 if (dl_list_len(&sm->subscriptions) >= MAX_SUBSCRIPTIONS) { in subscription_start()
705 s = dl_list_first(&sm->subscriptions, struct subscription, in subscription_start()
721 s->sm = sm; in subscription_start()
736 dl_list_add_tail(&sm->subscriptions, &s->list); in subscription_start()
752 event_send_all_later(sm); in subscription_start()
758 struct subscription * subscription_renew(struct upnp_wps_device_sm *sm, in subscription_renew() argument
763 struct subscription *s = subscription_find(sm, uuid); in subscription_renew()
770 dl_list_add_tail(&sm->subscriptions, &s->list); in subscription_renew()
787 int upnp_wps_device_send_wlan_event(struct upnp_wps_device_sm *sm, in upnp_wps_device_send_wlan_event() argument
802 if (!sm) in upnp_wps_device_send_wlan_event()
829 os_free(sm->wlanevent); in upnp_wps_device_send_wlan_event()
830 sm->wlanevent = val; in upnp_wps_device_send_wlan_event()
831 sm->wlanevent_type = ev_type; in upnp_wps_device_send_wlan_event()
832 upnp_wps_device_send_event(sm); in upnp_wps_device_send_wlan_event()
977 static void upnp_wps_device_stop(struct upnp_wps_device_sm *sm) in upnp_wps_device_stop() argument
979 if (!sm || !sm->started) in upnp_wps_device_stop()
983 web_listener_stop(sm); in upnp_wps_device_stop()
984 ssdp_listener_stop(sm); in upnp_wps_device_stop()
985 upnp_wps_free_msearchreply(&sm->msearch_replies); in upnp_wps_device_stop()
986 upnp_wps_free_subscriptions(&sm->subscriptions, NULL); in upnp_wps_device_stop()
988 advertisement_state_machine_stop(sm, 1); in upnp_wps_device_stop()
990 event_send_stop_all(sm); in upnp_wps_device_stop()
991 os_free(sm->wlanevent); in upnp_wps_device_stop()
992 sm->wlanevent = NULL; in upnp_wps_device_stop()
993 os_free(sm->ip_addr_text); in upnp_wps_device_stop()
994 sm->ip_addr_text = NULL; in upnp_wps_device_stop()
995 if (sm->multicast_sd >= 0) in upnp_wps_device_stop()
996 close(sm->multicast_sd); in upnp_wps_device_stop()
997 sm->multicast_sd = -1; in upnp_wps_device_stop()
999 sm->started = 0; in upnp_wps_device_stop()
1009 static int upnp_wps_device_start(struct upnp_wps_device_sm *sm, char *net_if) in upnp_wps_device_start() argument
1011 if (!sm || !net_if) in upnp_wps_device_start()
1014 if (sm->started) in upnp_wps_device_start()
1015 upnp_wps_device_stop(sm); in upnp_wps_device_start()
1017 sm->multicast_sd = -1; in upnp_wps_device_start()
1018 sm->ssdp_sd = -1; in upnp_wps_device_start()
1019 sm->started = 1; in upnp_wps_device_start()
1020 sm->advertise_count = 0; in upnp_wps_device_start()
1027 if (get_netif_info(net_if, &sm->ip_addr, &sm->ip_addr_text, in upnp_wps_device_start()
1028 sm->mac_addr)) { in upnp_wps_device_start()
1037 if (web_listener_start(sm)) in upnp_wps_device_start()
1041 if (ssdp_listener_start(sm)) in upnp_wps_device_start()
1045 if (ssdp_open_multicast(sm) < 0) in upnp_wps_device_start()
1053 if (advertisement_state_machine_start(sm)) in upnp_wps_device_start()
1059 upnp_wps_device_stop(sm); in upnp_wps_device_start()
1065 upnp_wps_get_iface(struct upnp_wps_device_sm *sm, void *priv) in upnp_wps_get_iface() argument
1068 dl_list_for_each(iface, &sm->interfaces, in upnp_wps_get_iface()
1082 void upnp_wps_device_deinit(struct upnp_wps_device_sm *sm, void *priv) in upnp_wps_device_deinit() argument
1087 if (!sm) in upnp_wps_device_deinit()
1090 iface = upnp_wps_get_iface(sm, priv); in upnp_wps_device_deinit()
1097 if (dl_list_len(&sm->interfaces) == 1) { in upnp_wps_device_deinit()
1100 upnp_wps_device_stop(sm); in upnp_wps_device_deinit()
1102 upnp_wps_free_subscriptions(&sm->subscriptions, in upnp_wps_device_deinit()
1117 if (dl_list_empty(&sm->interfaces)) { in upnp_wps_device_deinit()
1118 os_free(sm->root_dir); in upnp_wps_device_deinit()
1119 os_free(sm->desc_url); in upnp_wps_device_deinit()
1120 os_free(sm); in upnp_wps_device_deinit()
1138 struct upnp_wps_device_sm *sm; in upnp_wps_device_init() local
1158 sm = shared_upnp_device; in upnp_wps_device_init()
1161 sm = os_zalloc(sizeof(*sm)); in upnp_wps_device_init()
1162 if (!sm) { in upnp_wps_device_init()
1170 shared_upnp_device = sm; in upnp_wps_device_init()
1172 dl_list_init(&sm->msearch_replies); in upnp_wps_device_init()
1173 dl_list_init(&sm->subscriptions); in upnp_wps_device_init()
1174 dl_list_init(&sm->interfaces); in upnp_wps_device_init()
1178 dl_list_add(&sm->interfaces, &iface->list); in upnp_wps_device_init()
1180 if (start && upnp_wps_device_start(sm, net_if)) { in upnp_wps_device_init()
1181 upnp_wps_device_deinit(sm, priv); in upnp_wps_device_init()
1186 return sm; in upnp_wps_device_init()
1195 int upnp_wps_subscribers(struct upnp_wps_device_sm *sm) in upnp_wps_subscribers() argument
1197 return !dl_list_empty(&sm->subscriptions); in upnp_wps_subscribers()
1201 int upnp_wps_set_ap_pin(struct upnp_wps_device_sm *sm, const char *ap_pin) in upnp_wps_set_ap_pin() argument
1204 if (sm == NULL) in upnp_wps_set_ap_pin()
1207 dl_list_for_each(iface, &sm->interfaces, in upnp_wps_set_ap_pin()