WPS: Separate local error from max queue length reached
Drop subscription only if the max queue length has been reached; not based on any error.
This commit is contained in:
parent
dd50c2d425
commit
8c3a2f11ab
2 changed files with 9 additions and 7 deletions
|
@ -499,7 +499,7 @@ static void upnp_wps_device_send_event(struct upnp_wps_device_sm *sm)
|
||||||
|
|
||||||
dl_list_for_each_safe(s, tmp, &sm->subscriptions, struct subscription,
|
dl_list_for_each_safe(s, tmp, &sm->subscriptions, struct subscription,
|
||||||
list) {
|
list) {
|
||||||
if (event_add(s, buf)) {
|
if (event_add(s, buf) == 1) {
|
||||||
wpa_printf(MSG_INFO, "WPS UPnP: Dropping "
|
wpa_printf(MSG_INFO, "WPS UPnP: Dropping "
|
||||||
"subscriber %p due to event backlog", s);
|
"subscriber %p due to event backlog", s);
|
||||||
dl_list_del(&s->list);
|
dl_list_del(&s->list);
|
||||||
|
@ -608,6 +608,7 @@ static int subscription_first_event(struct subscription *s)
|
||||||
"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">\n";
|
"<e:propertyset xmlns:e=\"urn:schemas-upnp-org:event-1-0\">\n";
|
||||||
const char *tail = "</e:propertyset>\n";
|
const char *tail = "</e:propertyset>\n";
|
||||||
char txt[10];
|
char txt[10];
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (s->sm->wlanevent == NULL) {
|
if (s->sm->wlanevent == NULL) {
|
||||||
/*
|
/*
|
||||||
|
@ -639,7 +640,7 @@ static int subscription_first_event(struct subscription *s)
|
||||||
}
|
}
|
||||||
buf = wpabuf_alloc(500 + os_strlen(wlan_event));
|
buf = wpabuf_alloc(500 + os_strlen(wlan_event));
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
return 1;
|
return -1;
|
||||||
|
|
||||||
wpabuf_put_str(buf, head);
|
wpabuf_put_str(buf, head);
|
||||||
wpabuf_put_property(buf, "STAStatus", "1");
|
wpabuf_put_property(buf, "STAStatus", "1");
|
||||||
|
@ -649,9 +650,10 @@ static int subscription_first_event(struct subscription *s)
|
||||||
wpabuf_put_property(buf, "WLANEvent", wlan_event);
|
wpabuf_put_property(buf, "WLANEvent", wlan_event);
|
||||||
wpabuf_put_str(buf, tail);
|
wpabuf_put_str(buf, tail);
|
||||||
|
|
||||||
if (event_add(s, buf)) {
|
ret = event_add(s, buf);
|
||||||
|
if (ret) {
|
||||||
wpabuf_free(buf);
|
wpabuf_free(buf);
|
||||||
return 1;
|
return ret;
|
||||||
}
|
}
|
||||||
wpabuf_free(buf);
|
wpabuf_free(buf);
|
||||||
|
|
||||||
|
|
|
@ -365,7 +365,7 @@ void event_send_stop_all(struct upnp_wps_device_sm *sm)
|
||||||
* event_add - Add a new event to a queue
|
* event_add - Add a new event to a queue
|
||||||
* @s: Subscription
|
* @s: Subscription
|
||||||
* @data: Event data (is copied; caller retains ownership)
|
* @data: Event data (is copied; caller retains ownership)
|
||||||
* Returns: 0 on success, 1 on error
|
* Returns: 0 on success, -1 on error, 1 on max event queue limit reached
|
||||||
*/
|
*/
|
||||||
int event_add(struct subscription *s, const struct wpabuf *data)
|
int event_add(struct subscription *s, const struct wpabuf *data)
|
||||||
{
|
{
|
||||||
|
@ -381,13 +381,13 @@ int event_add(struct subscription *s, const struct wpabuf *data)
|
||||||
|
|
||||||
e = os_zalloc(sizeof(*e));
|
e = os_zalloc(sizeof(*e));
|
||||||
if (e == NULL)
|
if (e == NULL)
|
||||||
return 1;
|
return -1;
|
||||||
dl_list_init(&e->list);
|
dl_list_init(&e->list);
|
||||||
e->s = s;
|
e->s = s;
|
||||||
e->data = wpabuf_dup(data);
|
e->data = wpabuf_dup(data);
|
||||||
if (e->data == NULL) {
|
if (e->data == NULL) {
|
||||||
os_free(e);
|
os_free(e);
|
||||||
return 1;
|
return -1;
|
||||||
}
|
}
|
||||||
e->subscriber_sequence = s->next_subscriber_sequence++;
|
e->subscriber_sequence = s->next_subscriber_sequence++;
|
||||||
if (s->next_subscriber_sequence == 0)
|
if (s->next_subscriber_sequence == 0)
|
||||||
|
|
Loading…
Reference in a new issue