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