Lines Matching refs:sm
306 static int local_network_addr(struct upnp_wps_device_sm *sm, in local_network_addr() argument
309 return (addr->sin_addr.s_addr & sm->netmask.s_addr) == in local_network_addr()
310 (sm->ip_addr & sm->netmask.s_addr); in local_network_addr()
406 if (!local_network_addr(s->sm, addr)) { in subscr_addr_add_url()
481 static void upnp_wps_device_send_event(struct upnp_wps_device_sm *sm) in upnp_wps_device_send_event() argument
494 if (dl_list_empty(&sm->subscriptions)) { in upnp_wps_device_send_event()
500 if (now.sec != sm->last_event_sec) { in upnp_wps_device_send_event()
501 sm->last_event_sec = now.sec; in upnp_wps_device_send_event()
502 sm->num_events_in_sec = 1; in upnp_wps_device_send_event()
504 sm->num_events_in_sec++; in upnp_wps_device_send_event()
512 if (sm->num_events_in_sec > MAX_EVENTS_PER_SEC && in upnp_wps_device_send_event()
513 sm->wlanevent_type == in upnp_wps_device_send_event()
518 sm->num_events_in_sec); in upnp_wps_device_send_event()
527 if (sm->wlanevent) in upnp_wps_device_send_event()
528 buf_size += os_strlen(sm->wlanevent); in upnp_wps_device_send_event()
535 wpabuf_put_property(buf, "WLANEvent", sm->wlanevent); in upnp_wps_device_send_event()
541 dl_list_for_each_safe(s, tmp, &sm->subscriptions, struct subscription, in upnp_wps_device_send_event()
545 sm->wlanevent_type == UPNP_WPS_WLANEVENT_TYPE_PROBE); in upnp_wps_device_send_event()
567 dl_list_for_each(iface, &s->sm->interfaces, in subscription_destroy()
575 static void subscription_list_age(struct upnp_wps_device_sm *sm, time_t now) in subscription_list_age() argument
578 dl_list_for_each_safe(s, tmp, &sm->subscriptions, in subscription_list_age()
592 struct subscription * subscription_find(struct upnp_wps_device_sm *sm, in subscription_find() argument
596 dl_list_for_each(s, &sm->subscriptions, struct subscription, list) { in subscription_find()
657 if (s->sm->wlanevent == NULL) { in subscription_first_event()
672 s->sm->wlanevent = in subscription_first_event()
679 wlan_event = s->sm->wlanevent; in subscription_first_event()
714 struct subscription * subscription_start(struct upnp_wps_device_sm *sm, in subscription_start() argument
723 subscription_list_age(sm, now); in subscription_start()
726 if (dl_list_len(&sm->subscriptions) >= MAX_SUBSCRIPTIONS) { in subscription_start()
727 s = dl_list_first(&sm->subscriptions, struct subscription, in subscription_start()
743 s->sm = sm; in subscription_start()
758 dl_list_add_tail(&sm->subscriptions, &s->list); in subscription_start()
774 wps_upnp_event_send_all_later(sm); in subscription_start()
780 struct subscription * subscription_renew(struct upnp_wps_device_sm *sm, in subscription_renew() argument
785 struct subscription *s = subscription_find(sm, uuid); in subscription_renew()
792 dl_list_add_tail(&sm->subscriptions, &s->list); in subscription_renew()
809 int upnp_wps_device_send_wlan_event(struct upnp_wps_device_sm *sm, in upnp_wps_device_send_wlan_event() argument
824 if (!sm) in upnp_wps_device_send_wlan_event()
851 os_free(sm->wlanevent); in upnp_wps_device_send_wlan_event()
852 sm->wlanevent = val; in upnp_wps_device_send_wlan_event()
853 sm->wlanevent_type = ev_type; in upnp_wps_device_send_wlan_event()
854 upnp_wps_device_send_event(sm); in upnp_wps_device_send_wlan_event()
1013 static void upnp_wps_device_stop(struct upnp_wps_device_sm *sm) in upnp_wps_device_stop() argument
1015 if (!sm || !sm->started) in upnp_wps_device_stop()
1019 web_listener_stop(sm); in upnp_wps_device_stop()
1020 ssdp_listener_stop(sm); in upnp_wps_device_stop()
1021 upnp_wps_free_msearchreply(&sm->msearch_replies); in upnp_wps_device_stop()
1022 upnp_wps_free_subscriptions(&sm->subscriptions, NULL); in upnp_wps_device_stop()
1024 advertisement_state_machine_stop(sm, 1); in upnp_wps_device_stop()
1026 wps_upnp_event_send_stop_all(sm); in upnp_wps_device_stop()
1027 os_free(sm->wlanevent); in upnp_wps_device_stop()
1028 sm->wlanevent = NULL; in upnp_wps_device_stop()
1029 os_free(sm->ip_addr_text); in upnp_wps_device_stop()
1030 sm->ip_addr_text = NULL; in upnp_wps_device_stop()
1031 if (sm->multicast_sd >= 0) in upnp_wps_device_stop()
1032 close(sm->multicast_sd); in upnp_wps_device_stop()
1033 sm->multicast_sd = -1; in upnp_wps_device_stop()
1035 sm->started = 0; in upnp_wps_device_stop()
1045 static int upnp_wps_device_start(struct upnp_wps_device_sm *sm, char *net_if) in upnp_wps_device_start() argument
1047 if (!sm || !net_if) in upnp_wps_device_start()
1050 if (sm->started) in upnp_wps_device_start()
1051 upnp_wps_device_stop(sm); in upnp_wps_device_start()
1053 sm->multicast_sd = -1; in upnp_wps_device_start()
1054 sm->ssdp_sd = -1; in upnp_wps_device_start()
1055 sm->started = 1; in upnp_wps_device_start()
1056 sm->advertise_count = 0; in upnp_wps_device_start()
1063 if (get_netif_info(net_if, &sm->ip_addr, &sm->ip_addr_text, in upnp_wps_device_start()
1064 &sm->netmask, sm->mac_addr)) { in upnp_wps_device_start()
1071 sm->ip_addr_text, inet_ntoa(sm->netmask), in upnp_wps_device_start()
1072 MAC2STR(sm->mac_addr)); in upnp_wps_device_start()
1077 if (web_listener_start(sm)) in upnp_wps_device_start()
1081 if (ssdp_listener_start(sm)) in upnp_wps_device_start()
1085 if (ssdp_open_multicast(sm) < 0) in upnp_wps_device_start()
1093 if (advertisement_state_machine_start(sm)) in upnp_wps_device_start()
1099 upnp_wps_device_stop(sm); in upnp_wps_device_start()
1105 upnp_wps_get_iface(struct upnp_wps_device_sm *sm, void *priv) in upnp_wps_get_iface() argument
1108 dl_list_for_each(iface, &sm->interfaces, in upnp_wps_get_iface()
1122 void upnp_wps_device_deinit(struct upnp_wps_device_sm *sm, void *priv) in upnp_wps_device_deinit() argument
1127 if (!sm) in upnp_wps_device_deinit()
1130 iface = upnp_wps_get_iface(sm, priv); in upnp_wps_device_deinit()
1137 if (dl_list_len(&sm->interfaces) == 1) { in upnp_wps_device_deinit()
1140 upnp_wps_device_stop(sm); in upnp_wps_device_deinit()
1142 upnp_wps_free_subscriptions(&sm->subscriptions, in upnp_wps_device_deinit()
1157 if (dl_list_empty(&sm->interfaces)) { in upnp_wps_device_deinit()
1158 os_free(sm->root_dir); in upnp_wps_device_deinit()
1159 os_free(sm->desc_url); in upnp_wps_device_deinit()
1160 os_free(sm); in upnp_wps_device_deinit()
1178 struct upnp_wps_device_sm *sm; in upnp_wps_device_init() local
1198 sm = shared_upnp_device; in upnp_wps_device_init()
1201 sm = os_zalloc(sizeof(*sm)); in upnp_wps_device_init()
1202 if (!sm) { in upnp_wps_device_init()
1210 shared_upnp_device = sm; in upnp_wps_device_init()
1212 dl_list_init(&sm->msearch_replies); in upnp_wps_device_init()
1213 dl_list_init(&sm->subscriptions); in upnp_wps_device_init()
1214 dl_list_init(&sm->interfaces); in upnp_wps_device_init()
1218 dl_list_add(&sm->interfaces, &iface->list); in upnp_wps_device_init()
1220 if (start && upnp_wps_device_start(sm, net_if)) { in upnp_wps_device_init()
1221 upnp_wps_device_deinit(sm, priv); in upnp_wps_device_init()
1226 return sm; in upnp_wps_device_init()
1235 int upnp_wps_subscribers(struct upnp_wps_device_sm *sm) in upnp_wps_subscribers() argument
1237 return !dl_list_empty(&sm->subscriptions); in upnp_wps_subscribers()
1241 int upnp_wps_set_ap_pin(struct upnp_wps_device_sm *sm, const char *ap_pin) in upnp_wps_set_ap_pin() argument
1244 if (sm == NULL) in upnp_wps_set_ap_pin()
1247 dl_list_for_each(iface, &sm->interfaces, in upnp_wps_set_ap_pin()