1/*
2 * Wi-Fi Protected Setup - External Registrar
3 * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9#ifndef WPS_ER_H
10#define WPS_ER_H
11
12#include "utils/list.h"
13
14struct wps_er_sta {
15	struct dl_list list;
16	struct wps_er_ap *ap;
17	u8 addr[ETH_ALEN];
18	u16 config_methods;
19	u8 uuid[WPS_UUID_LEN];
20	u8 pri_dev_type[8];
21	u16 dev_passwd_id;
22	int m1_received;
23	char *manufacturer;
24	char *model_name;
25	char *model_number;
26	char *serial_number;
27	char *dev_name;
28	struct wps_data *wps;
29	struct http_client *http;
30	struct wps_credential *cred;
31};
32
33struct wps_er_ap {
34	struct dl_list list;
35	struct wps_er *er;
36	struct dl_list sta; /* list of STAs/Enrollees using this AP */
37	struct in_addr addr;
38	char *location;
39	struct http_client *http;
40	struct wps_data *wps;
41
42	u8 uuid[WPS_UUID_LEN];
43	u8 pri_dev_type[8];
44	u8 wps_state;
45	u8 mac_addr[ETH_ALEN];
46	char *friendly_name;
47	char *manufacturer;
48	char *manufacturer_url;
49	char *model_description;
50	char *model_name;
51	char *model_number;
52	char *model_url;
53	char *serial_number;
54	char *udn;
55	char *upc;
56
57	char *scpd_url;
58	char *control_url;
59	char *event_sub_url;
60
61	int subscribed;
62	u8 sid[WPS_UUID_LEN];
63	unsigned int id;
64
65	struct wps_credential *ap_settings;
66
67	void (*m1_handler)(struct wps_er_ap *ap, struct wpabuf *m1);
68};
69
70struct wps_er_ap_settings {
71	struct dl_list list;
72	u8 uuid[WPS_UUID_LEN];
73	struct wps_credential ap_settings;
74};
75
76struct wps_er {
77	struct wps_context *wps;
78	char ifname[17];
79	int forced_ifname;
80	u8 mac_addr[ETH_ALEN]; /* mac addr of network i.f. we use */
81	char *ip_addr_text; /* IP address of network i.f. we use */
82	unsigned ip_addr; /* IP address of network i.f. we use (host order) */
83	int multicast_sd;
84	int ssdp_sd;
85	struct dl_list ap;
86	struct dl_list ap_unsubscribing;
87	struct dl_list ap_settings;
88	struct http_server *http_srv;
89	int http_port;
90	unsigned int next_ap_id;
91	unsigned int event_id;
92	int deinitializing;
93	void (*deinit_done_cb)(void *ctx);
94	void *deinit_done_ctx;
95	struct in_addr filter_addr;
96	int skip_set_sel_reg;
97	const u8 *set_sel_reg_uuid_filter;
98};
99
100
101/* wps_er.c */
102void wps_er_ap_add(struct wps_er *er, const u8 *uuid, struct in_addr *addr,
103		   const char *location, int max_age);
104void wps_er_ap_remove(struct wps_er *er, struct in_addr *addr);
105int wps_er_ap_cache_settings(struct wps_er *er, struct in_addr *addr);
106
107/* wps_er_ssdp.c */
108int wps_er_ssdp_init(struct wps_er *er);
109void wps_er_ssdp_deinit(struct wps_er *er);
110void wps_er_send_ssdp_msearch(struct wps_er *er);
111
112#endif /* WPS_ER_H */
113