char *path, char *method)
{
struct wps_context *wps = hapd->wps;
+ struct oob_device_data *oob_dev;
- wps->oob_dev = wps_get_oob_device(device_type);
- if (wps->oob_dev == NULL)
+ oob_dev = wps_get_oob_device(device_type);
+ if (oob_dev == NULL)
return -1;
- wps->oob_dev->device_path = path;
+ oob_dev->device_path = path;
wps->oob_conf.oob_method = wps_get_oob_method(method);
- if (wps_process_oob(wps, 1) < 0)
+ if (wps_process_oob(wps, oob_dev, 1) < 0)
return -1;
if ((wps->oob_conf.oob_method == OOB_METHOD_DEV_PWD_E ||
struct wps_device_data dev;
/**
- * oob_dev - OOB Device data
- */
- struct oob_device_data *oob_dev;
-
- /**
* oob_conf - OOB Config data
*/
struct oob_conf_data oob_conf;
struct oob_device_data {
char *device_path;
- void * (*init_func)(struct wps_context *, int);
+ void * (*init_func)(struct wps_context *, struct oob_device_data *,
+ int);
struct wpabuf * (*read_func)(void *);
int (*write_func)(void *, struct wpabuf *);
void (*deinit_func)(void *);
struct oob_device_data * wps_get_oob_device(char *device_type);
int wps_get_oob_method(char *method);
-int wps_process_oob(struct wps_context *wps, int registrar);
+int wps_process_oob(struct wps_context *wps, struct oob_device_data *oob_dev,
+ int registrar);
#endif /* WPS_H */
}
-int wps_process_oob(struct wps_context *wps, int registrar)
+int wps_process_oob(struct wps_context *wps, struct oob_device_data *oob_dev,
+ int registrar)
{
- struct oob_device_data *oob_dev = wps->oob_dev;
struct wpabuf *data;
int ret, write_f, oob_method = wps->oob_conf.oob_method;
void *oob_priv;
write_f = oob_method == OOB_METHOD_DEV_PWD_E ? !registrar : registrar;
- oob_priv = oob_dev->init_func(wps, registrar);
+ oob_priv = oob_dev->init_func(wps, oob_dev, registrar);
if (oob_priv == NULL) {
wpa_printf(MSG_ERROR, "WPS: Failed to initialize OOB device");
return -1;
data = wps_get_oob_dev_pwd(wps);
ret = 0;
- if (data == NULL ||
- wps->oob_dev->write_func(oob_priv, data) < 0)
+ if (data == NULL || oob_dev->write_func(oob_priv, data) < 0)
ret = -1;
} else {
data = oob_dev->read_func(oob_priv);
static int get_file_name(struct wps_context *wps, int registrar,
- char *file_name)
+ const char *path, char *file_name)
{
switch (wps->oob_conf.oob_method) {
case OOB_METHOD_CRED:
case OOB_METHOD_DEV_PWD_E:
if (registrar) {
char temp[128];
- os_snprintf(temp, sizeof(temp), UFD_DIR2,
- wps->oob_dev->device_path);
+ os_snprintf(temp, sizeof(temp), UFD_DIR2, path);
if (wps_get_dev_pwd_e_file_name(temp, file_name) < 0)
return -1;
} else {
}
-static void * init_ufd(struct wps_context *wps, int registrar)
+static void * init_ufd(struct wps_context *wps,
+ struct oob_device_data *oob_dev, int registrar)
{
int write_f;
char temp[128];
- char *path = wps->oob_dev->device_path;
+ char *path = oob_dev->device_path;
char filename[13];
struct wps_ufd_data *data;
int ufd_fd;
write_f = wps->oob_conf.oob_method == OOB_METHOD_DEV_PWD_E ?
!registrar : registrar;
- if (get_file_name(wps, registrar, filename) < 0) {
+ if (get_file_name(wps, registrar, path, filename) < 0) {
wpa_printf(MSG_ERROR, "WPS (UFD): Failed to get file name");
return NULL;
}
char *path, char *method)
{
struct wps_context *wps = wpa_s->wps;
+ struct oob_device_data *oob_dev;
- wps->oob_dev = wps_get_oob_device(device_type);
- if (wps->oob_dev == NULL)
+ oob_dev = wps_get_oob_device(device_type);
+ if (oob_dev == NULL)
return -1;
- wps->oob_dev->device_path = path;
+ oob_dev->device_path = path;
wps->oob_conf.oob_method = wps_get_oob_method(method);
if (wps->oob_conf.oob_method == OOB_METHOD_CRED)
wpas_clear_wps(wpa_s);
- if (wps_process_oob(wps, 0) < 0)
+ if (wps_process_oob(wps, oob_dev, 0) < 0)
return -1;
if ((wps->oob_conf.oob_method == OOB_METHOD_DEV_PWD_E ||