wps_er.h revision c5ec7f57ead87efa365800228aa0b09a12d9e6c4
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Wi-Fi Protected Setup - External Registrar
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This software may be distributed under the terms of the BSD license.
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See README for more details.
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef WPS_ER_H
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define WPS_ER_H
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "utils/list.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct wps_er_sta {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct dl_list list;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct wps_er_ap *ap;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u8 addr[ETH_ALEN];
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u16 config_methods;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u8 uuid[WPS_UUID_LEN];
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	u8 pri_dev_type[8];
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u16 dev_passwd_id;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int m1_received;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *manufacturer;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *model_name;
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	char *model_number;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *serial_number;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *dev_name;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct wps_data *wps;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct http_client *http;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct wps_credential *cred;
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)struct wps_er_ap {
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	struct dl_list list;
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)	struct wps_er *er;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct dl_list sta; /* list of STAs/Enrollees using this AP */
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct in_addr addr;
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	char *location;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci	struct http_client *http;
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	struct wps_data *wps;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u8 uuid[WPS_UUID_LEN];
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	u8 pri_dev_type[8];
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)	u8 wps_state;
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	u8 mac_addr[ETH_ALEN];
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	char *friendly_name;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *manufacturer;
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	char *manufacturer_url;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *model_description;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *model_name;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *model_number;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *model_url;
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	char *serial_number;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *udn;
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	char *upc;
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	char *scpd_url;
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	char *control_url;
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)	char *event_sub_url;
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	int subscribed;
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	u8 sid[WPS_UUID_LEN];
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	unsigned int id;
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	struct wps_credential *ap_settings;
660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	void (*m1_handler)(struct wps_er_ap *ap, struct wpabuf *m1);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct wps_er_ap_settings {
710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	struct dl_list list;
720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	u8 uuid[WPS_UUID_LEN];
730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	struct wps_credential ap_settings;
740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch};
750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct wps_er {
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct wps_context *wps;
780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	char ifname[17];
790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch	u8 mac_addr[ETH_ALEN]; /* mac addr of network i.f. we use */
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	char *ip_addr_text; /* IP address of network i.f. we use */
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	unsigned ip_addr; /* IP address of network i.f. we use (host order) */
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int multicast_sd;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int ssdp_sd;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct dl_list ap;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct dl_list ap_unsubscribing;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct dl_list ap_settings;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	struct http_server *http_srv;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int http_port;
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	unsigned int next_ap_id;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	unsigned int event_id;
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)	int deinitializing;
92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	void (*deinit_done_cb)(void *ctx);
93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	void *deinit_done_ctx;
94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	struct in_addr filter_addr;
95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)	int skip_set_sel_reg;
96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch	const u8 *set_sel_reg_uuid_filter;
97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* wps_er.c */
101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid wps_er_ap_add(struct wps_er *er, const u8 *uuid, struct in_addr *addr,
102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch		   const char *location, int max_age);
1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid wps_er_ap_remove(struct wps_er *er, struct in_addr *addr);
1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochint wps_er_ap_cache_settings(struct wps_er *er, struct in_addr *addr);
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* wps_er_ssdp.c */
107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)int wps_er_ssdp_init(struct wps_er *er);
108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void wps_er_ssdp_deinit(struct wps_er *er);
109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void wps_er_send_ssdp_msearch(struct wps_er *er);
1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif /* WPS_ER_H */
1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch