summaryrefslogtreecommitdiffstats
path: root/src/wps/wps_upnp_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wps/wps_upnp_i.h')
-rw-r--r--src/wps/wps_upnp_i.h76
1 files changed, 31 insertions, 45 deletions
diff --git a/src/wps/wps_upnp_i.h b/src/wps/wps_upnp_i.h
index ba4ec20..b31875a 100644
--- a/src/wps/wps_upnp_i.h
+++ b/src/wps/wps_upnp_i.h
@@ -11,6 +11,9 @@
#ifndef WPS_UPNP_I_H
#define WPS_UPNP_I_H
+#include "utils/list.h"
+#include "http.h"
+
#define UPNP_MULTICAST_ADDRESS "239.255.255.250" /* for UPnP multicasting */
#define UPNP_MULTICAST_PORT 1900 /* UDP port to monitor for UPnP */
@@ -25,25 +28,11 @@
#define UPNP_WPS_DEVICE_CONTROL_FILE "wps_control"
#define UPNP_WPS_DEVICE_EVENT_FILE "wps_event"
-
-struct web_connection;
-struct subscription;
-struct upnp_wps_device_sm;
+#define MULTICAST_MAX_READ 1600 /* max bytes we'll read for UPD request */
-enum http_reply_code {
- HTTP_OK = 200,
- HTTP_BAD_REQUEST = 400,
- UPNP_INVALID_ACTION = 401,
- UPNP_INVALID_ARGS = 402,
- HTTP_PRECONDITION_FAILED = 412,
- HTTP_INTERNAL_SERVER_ERROR = 500,
- HTTP_UNIMPLEMENTED = 501,
- UPNP_ACTION_FAILED = 501,
- UPNP_ARG_VALUE_INVALID = 600,
- UPNP_ARG_VALUE_OUT_OF_RANGE = 601,
- UPNP_OUT_OF_MEMORY = 603
-};
+struct upnp_wps_device_sm;
+struct wps_registrar;
enum advertisement_type_enum {
@@ -60,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;
@@ -77,10 +63,7 @@ struct advertisement_state_machine {
* for a subscriber until we find one that seems to work.
*/
struct subscr_addr {
- /* double linked list */
- struct subscr_addr *next;
- struct subscr_addr *prev;
- struct subscription *s; /* parent */
+ struct dl_list list;
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 */
@@ -93,9 +76,7 @@ struct subscr_addr {
* also have to age out subscribers unless they renew.
*/
struct subscription {
- /* double linked list */
- struct subscription *next;
- struct subscription *prev;
+ struct dl_list list;
struct upnp_wps_device_sm *sm; /* parent */
time_t timeout_time; /* when to age out the subscription */
unsigned next_subscriber_sequence; /* number our messages */
@@ -106,12 +87,16 @@ struct subscription {
*/
u8 uuid[UUID_LEN];
/* Linked list of address alternatives (rotate through on failure) */
- struct subscr_addr *addr_list;
- int n_addr; /* Number of addresses in list */
- struct wps_event_ *event_queue; /* Queued event messages. */
- int n_queue; /* How many events are queued */
+ struct dl_list addr_list;
+ struct dl_list event_queue; /* Queued event messages. */
struct wps_event_ *current_event; /* non-NULL if being sent (not in q)
*/
+
+ /* Information from SetSelectedRegistrar action */
+ u8 selected_registrar;
+ u16 dev_password_id;
+ u16 config_methods;
+ struct wps_registrar *reg;
};
@@ -128,8 +113,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) */
@@ -138,16 +121,11 @@ 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 */
- int web_sd; /* socket to listen for web requests */
- int web_sd_registered; /* nonzero if we must cancel registration */
- struct web_connection *web_connections; /* linked list */
- int n_web_connections; /* no. of pending web connections */
+ struct http_server *web_srv;
/* Note: subscriptions are kept in expiry order */
- struct subscription *subscriptions; /* linked list */
- int n_subscriptions; /* no of current subscriptions */
+ struct dl_list subscriptions;
int event_send_all_queued; /* if we are scheduled to send events soon
*/
@@ -163,11 +141,12 @@ struct subscription * subscription_start(struct upnp_wps_device_sm *sm,
const char *callback_urls);
struct subscription * subscription_renew(struct upnp_wps_device_sm *sm,
const u8 uuid[UUID_LEN]);
-void subscription_unlink(struct subscription *s);
void subscription_destroy(struct subscription *s);
struct subscription * subscription_find(struct upnp_wps_device_sm *sm,
const u8 uuid[UUID_LEN]);
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]);
/* wps_upnp_ssdp.c */
void msearchreply_state_machine_stop(struct advertisement_state_machine *a);
@@ -176,11 +155,12 @@ void advertisement_state_machine_stop(struct upnp_wps_device_sm *sm,
int send_byebye);
void ssdp_listener_stop(struct upnp_wps_device_sm *sm);
int ssdp_listener_start(struct upnp_wps_device_sm *sm);
-int add_ssdp_network(char *net_if);
+int ssdp_listener_open(void);
+int add_ssdp_network(const char *net_if);
+int ssdp_open_multicast_sock(u32 ip_addr);
int ssdp_open_multicast(struct upnp_wps_device_sm *sm);
/* wps_upnp_web.c */
-void web_connection_stop(struct web_connection *c);
int web_listener_start(struct upnp_wps_device_sm *sm);
void web_listener_stop(struct upnp_wps_device_sm *sm);
@@ -190,4 +170,10 @@ void event_delete_all(struct subscription *s);
void event_send_all_later(struct upnp_wps_device_sm *sm);
void event_send_stop_all(struct upnp_wps_device_sm *sm);
+/* wps_upnp_ap.c */
+int upnp_er_set_selected_registrar(struct wps_registrar *reg,
+ struct subscription *s,
+ const struct wpabuf *msg);
+void upnp_er_remove_notification(struct subscription *s);
+
#endif /* WPS_UPNP_I_H */
OpenPOWER on IntegriCloud