diff options
Diffstat (limited to 'contrib/wpa_supplicant/ctrl_iface.h')
-rw-r--r-- | contrib/wpa_supplicant/ctrl_iface.h | 127 |
1 files changed, 111 insertions, 16 deletions
diff --git a/contrib/wpa_supplicant/ctrl_iface.h b/contrib/wpa_supplicant/ctrl_iface.h index affa604..051d99a 100644 --- a/contrib/wpa_supplicant/ctrl_iface.h +++ b/contrib/wpa_supplicant/ctrl_iface.h @@ -1,6 +1,6 @@ /* * WPA Supplicant / UNIX domain socket -based control interface - * Copyright (c) 2004-2005, Jouni Malinen <jkmaline@cc.hut.fi> + * Copyright (c) 2004-2005, Jouni Malinen <j@w1.fi> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -17,45 +17,140 @@ #ifdef CONFIG_CTRL_IFACE -int wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s); -void wpa_supplicant_ctrl_iface_deinit(struct wpa_supplicant *wpa_s); -void wpa_supplicant_ctrl_iface_send(struct wpa_supplicant *wpa_s, int level, - char *buf, size_t len); -void wpa_supplicant_ctrl_iface_wait(struct wpa_supplicant *wpa_s); -int wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global); -void wpa_supplicant_global_ctrl_iface_deinit(struct wpa_global *global); +/* Shared functions from ctrl_iface.c; to be called by ctrl_iface backends */ + +/** + * wpa_supplicant_ctrl_iface_process - Process ctrl_iface command + * @wpa_s: Pointer to wpa_supplicant data + * @buf: Received command buffer (nul terminated string) + * @resp_len: Variable to be set to the response length + * Returns: Response (*resp_len bytes) or %NULL on failure + * + * Control interface backends call this function when receiving a message that + * they do not process internally, i.e., anything else than ATTACH, DETACH, + * and LEVEL. The return response value is then sent to the external program + * that sent the command. Caller is responsible for freeing the buffer after + * this. If %NULL is returned, *resp_len can be set to two special values: + * 1 = send "FAIL\n" response, 2 = send "OK\n" response. If *resp_len has any + * other value, no response is sent. + */ +char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s, + char *buf, size_t *resp_len); + +/** + * wpa_supplicant_ctrl_iface_process - Process global ctrl_iface command + * @global: Pointer to global data from wpa_supplicant_init() + * @buf: Received command buffer (nul terminated string) + * @resp_len: Variable to be set to the response length + * Returns: Response (*resp_len bytes) or %NULL on failure + * + * Control interface backends call this function when receiving a message from + * the global ctrl_iface connection. The return response value is then sent to + * the external program that sent the command. Caller is responsible for + * freeing the buffer after this. If %NULL is returned, *resp_len can be set to + * two special values: 1 = send "FAIL\n" response, 2 = send "OK\n" response. If + * *resp_len has any other value, no response is sent. + */ +char * wpa_supplicant_global_ctrl_iface_process(struct wpa_global *global, + char *buf, size_t *resp_len); + + +/* Functions that each ctrl_iface backend must implement */ + +/** + * wpa_supplicant_ctrl_iface_init - Initialize control interface + * @wpa_s: Pointer to wpa_supplicant data + * Returns: Pointer to private data on success, %NULL on failure + * + * Initialize the control interface and start receiving commands from external + * programs. + * + * Required to be implemented in each control interface backend. + */ +struct ctrl_iface_priv * +wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s); + +/** + * wpa_supplicant_ctrl_iface_deinit - Deinitialize control interface + * @priv: Pointer to private data from wpa_supplicant_ctrl_iface_init() + * + * Deinitialize the control interface that was initialized with + * wpa_supplicant_ctrl_iface_init(). + * + * Required to be implemented in each control interface backend. + */ +void wpa_supplicant_ctrl_iface_deinit(struct ctrl_iface_priv *priv); + +/** + * wpa_supplicant_ctrl_iface_wait - Wait for ctrl_iface monitor + * @priv: Pointer to private data from wpa_supplicant_ctrl_iface_init() + * + * Wait until the first message from an external program using the control + * interface is received. This function can be used to delay normal startup + * processing to allow control interface programs to attach with + * %wpa_supplicant before normal operations are started. + * + * Required to be implemented in each control interface backend. + */ +void wpa_supplicant_ctrl_iface_wait(struct ctrl_iface_priv *priv); + +/** + * wpa_supplicant_global_ctrl_iface_init - Initialize global control interface + * @global: Pointer to global data from wpa_supplicant_init() + * Returns: Pointer to private data on success, %NULL on failure + * + * Initialize the global control interface and start receiving commands from + * external programs. + * + * Required to be implemented in each control interface backend. + */ +struct ctrl_iface_global_priv * +wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global); + +/** + * wpa_supplicant_global_ctrl_iface_deinit - Deinitialize global ctrl interface + * @priv: Pointer to private data from wpa_supplicant_global_ctrl_iface_init() + * + * Deinitialize the global control interface that was initialized with + * wpa_supplicant_global_ctrl_iface_init(). + * + * Required to be implemented in each control interface backend. + */ +void wpa_supplicant_global_ctrl_iface_deinit( + struct ctrl_iface_global_priv *priv); #else /* CONFIG_CTRL_IFACE */ -static inline int wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s) +static inline struct ctrl_iface_priv * +wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s) { - return 0; + return (void *) -1; } static inline void -wpa_supplicant_ctrl_iface_deinit(struct wpa_supplicant *wpa_s) +wpa_supplicant_ctrl_iface_deinit(struct ctrl_iface_priv *priv) { } static inline void -wpa_supplicant_ctrl_iface_send(struct wpa_supplicant *wpa_s, int level, +wpa_supplicant_ctrl_iface_send(struct ctrl_iface_priv *priv, int level, char *buf, size_t len) { } static inline void -wpa_supplicant_ctrl_iface_wait(struct wpa_supplicant *wpa_s) +wpa_supplicant_ctrl_iface_wait(struct ctrl_iface_priv *priv) { } -static inline int +static inline struct ctrl_iface_global_priv * wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global) { - return 0; + return (void *) 1; } static inline void -wpa_supplicant_global_ctrl_iface_deinit(struct wpa_global *global) +wpa_supplicant_global_ctrl_iface_deinit(struct ctrl_iface_global_priv *priv) { } |