main_winmain.c revision c5ec7f57ead87efa365800228aa0b09a12d9e6c4
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * WPA Supplicant / WinMain() function for Windows-based applications
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 2006, Jouni Malinen <j@w1.fi>
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This software may be distributed under the terms of the BSD license.
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * See README for more details.
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "includes.h"
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "common.h"
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "wpa_supplicant_i.h"
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef _WIN32_WCE
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CMDLINE LPWSTR
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else /* _WIN32_WCE */
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CMDLINE LPSTR
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* _WIN32_WCE */
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		   CMDLINE lpCmdLine, int nShowCmd)
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	int i;
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	struct wpa_interface *ifaces, *iface;
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	int iface_count, exitcode = -1;
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	struct wpa_params params;
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	struct wpa_global *global;
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	if (os_program_init())
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		return -1;
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	os_memset(&params, 0, sizeof(params));
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	params.wpa_debug_level = MSG_MSGDUMP;
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	params.wpa_debug_file_path = "\\Temp\\wpa_supplicant-log.txt";
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	params.wpa_debug_show_keys = 1;
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	iface = ifaces = os_zalloc(sizeof(struct wpa_interface));
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	if (ifaces == NULL)
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		return -1;
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	iface_count = 1;
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	iface->confname = "default";
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	iface->driver = "ndis";
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	iface->ifname = "";
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	exitcode = 0;
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	global = wpa_supplicant_init(&params);
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project	if (global == NULL) {
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		printf("Failed to initialize wpa_supplicant\n");
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project		exitcode = -1;
52	}
53
54	for (i = 0; exitcode == 0 && i < iface_count; i++) {
55		if ((ifaces[i].confname == NULL &&
56		     ifaces[i].ctrl_interface == NULL) ||
57		    ifaces[i].ifname == NULL) {
58			if (iface_count == 1 && (params.ctrl_interface ||
59						 params.dbus_ctrl_interface))
60				break;
61			exitcode = -1;
62			break;
63		}
64		if (wpa_supplicant_add_iface(global, &ifaces[i]) == NULL)
65			exitcode = -1;
66	}
67
68	if (exitcode == 0)
69		exitcode = wpa_supplicant_run(global);
70
71	wpa_supplicant_deinit(global);
72
73	os_free(ifaces);
74
75	os_program_deinit();
76
77	return exitcode;
78}
79