WPS UPnP: Improved event notification failure processing
[libeap.git] / src / wps / wps_upnp_i.h
index 213f8a1..68782c0 100644 (file)
@@ -31,7 +31,6 @@
 #define MULTICAST_MAX_READ 1600 /* max bytes we'll read for UPD request */
 
 
-struct subscription;
 struct upnp_wps_device_sm;
 struct wps_registrar;
 
@@ -50,10 +49,7 @@ enum advertisement_type_enum {
  * separate packets and spread out in time to avoid congestion.
  */
 struct advertisement_state_machine {
-       /* double-linked list */
-       struct advertisement_state_machine *next;
-       struct advertisement_state_machine *prev;
-       struct upnp_wps_device_sm *sm; /* parent */
+       struct dl_list list;
        enum advertisement_type_enum type;
        int state;
        int nerrors;
@@ -71,6 +67,7 @@ struct subscr_addr {
        char *domain_and_port; /* domain and port part of url */
        char *path; /* "filepath" part of url (from "mem") */
        struct sockaddr_in saddr; /* address for doing connect */
+       unsigned num_failures;
 };
 
 
@@ -100,6 +97,7 @@ struct subscription {
        u8 selected_registrar;
        u16 dev_password_id;
        u16 config_methods;
+       u8 authorized_macs[WPS_MAX_AUTHORIZED_MACS][ETH_ALEN];
        struct wps_registrar *reg;
 };
 
@@ -117,8 +115,6 @@ struct upnp_wps_device_sm {
        char *root_dir;
        char *desc_url;
        int started; /* nonzero if we are active */
-       char *net_if; /* network interface we use */
-       char *mac_addr_text; /* mac addr of network i.f. we use */
        u8 mac_addr[ETH_ALEN]; /* mac addr of network i.f. we use */
        char *ip_addr_text; /* IP address of network i.f. we use */
        unsigned ip_addr; /* IP address of network i.f. we use (host order) */
@@ -127,8 +123,7 @@ struct upnp_wps_device_sm {
        int ssdp_sd_registered; /* nonzero if we must unregister */
        unsigned advertise_count; /* how many advertisements done */
        struct advertisement_state_machine advertisement;
-       struct advertisement_state_machine *msearch_replies;
-       int n_msearch_replies; /* no. of pending M-SEARCH replies */
+       struct dl_list msearch_replies;
        int web_port; /* our port that others get xml files from */
        struct http_server *web_srv;
        /* Note: subscriptions are kept in expiry order */
@@ -151,9 +146,10 @@ struct subscription * subscription_renew(struct upnp_wps_device_sm *sm,
 void subscription_destroy(struct subscription *s);
 struct subscription * subscription_find(struct upnp_wps_device_sm *sm,
                                        const u8 uuid[UUID_LEN]);
+void subscr_addr_delete(struct subscr_addr *a);
 int send_wpabuf(int fd, struct wpabuf *buf);
 int get_netif_info(const char *net_if, unsigned *ip_addr, char **ip_addr_text,
-                  u8 mac[ETH_ALEN], char **mac_addr_text);
+                  u8 mac[ETH_ALEN]);
 
 /* wps_upnp_ssdp.c */
 void msearchreply_state_machine_stop(struct advertisement_state_machine *a);