/*
 * UPnP WPS Device
 * Copyright (c) 2000-2003 Intel Corporation
 * Copyright (c) 2006-2007 Sony Corporation
 * Copyright (c) 2008-2009 Atheros Communications
 * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
 *
 * See wps_upnp.c for more details on licensing and code history.
 */

#ifndef WPS_UPNP_H
#define WPS_UPNP_H

struct upnp_wps_device_sm;
struct wps_context;
struct wps_data;

struct upnp_wps_peer {
	struct wps_data *wps;
};

enum upnp_wps_wlanevent_type {
	UPNP_WPS_WLANEVENT_TYPE_PROBE = 1,
	UPNP_WPS_WLANEVENT_TYPE_EAP = 2
};

struct upnp_wps_device_ctx {
	int (*rx_req_put_wlan_response)(
		void *priv, enum upnp_wps_wlanevent_type ev_type,
		const u8 *mac_addr, const struct wpabuf *msg,
		enum wps_msg_type msg_type);

	char *ap_pin;
};

struct upnp_wps_device_sm *
upnp_wps_device_init(struct upnp_wps_device_ctx *ctx, struct wps_context *wps,
		     void *priv, char *net_if);
void upnp_wps_device_deinit(struct upnp_wps_device_sm *sm, void *priv);

int upnp_wps_device_send_wlan_event(struct upnp_wps_device_sm *sm,
				    const u8 from_mac_addr[ETH_ALEN],
				    enum upnp_wps_wlanevent_type ev_type,
				    const struct wpabuf *msg);
int upnp_wps_subscribers(struct upnp_wps_device_sm *sm);
int upnp_wps_set_ap_pin(struct upnp_wps_device_sm *sm, const char *ap_pin);

#endif /* WPS_UPNP_H */
