📄 xsupgui_events.c
字号:
break;
case IPC_EVENT_ERROR_FAILED_SETTING_UNKNOWN_KEY:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_FAILED_SETTING_UNKNOWN_KEY_STR, value);
break;
case IPC_EVENT_ERROR_OVERFLOW_ATTEMPTED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_OVERFLOW_ATTEMPTED_STR, value);
break;
case IPC_EVENT_ERROR_INVALID_KEY_REQUEST:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_INVALID_KEY_REQUEST_STR, value);
break;
case IPC_EVENT_ERROR_RESTRICTED_HOURS:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_RESTRICTED_HOURS_STR, value);
break;
case IPC_EVENT_ERROR_ACCT_DISABLED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_ACCT_DISABLED_STR, value);
break;
case IPC_EVENT_ERROR_PASSWD_EXPIRED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_PASSWD_EXPIRED_STR, value);
break;
case IPC_EVENT_ERROR_NO_PERMS:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_NO_PERMS_STR, value);
break;
case IPC_EVENT_ERROR_CHANGING_PASSWD:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_CHANGING_PASSWD_STR, value);
break;
case IPC_EVENT_ERROR_TEXT:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_TEXT_STR, value);
break;
case IPC_EVENT_ERROR_FAILED_AES_UNWRAP:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_FAILED_AES_UNWRAP_STR, value);
break;
case IPC_EVENT_ERROR_UNKNOWN_KEY_REQUEST:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_UNKNOWN_KEY_REQUEST_STR, value);
break;
case IPC_EVENT_ERROR_INVALID_PTK:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_INVALID_PTK_STR, value);
break;
case IPC_EVENT_ERROR_IES_DONT_MATCH:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_IES_DONT_MATCH_STR, value);
break;
case IPC_EVENT_ERROR_PMK_UNAVAILABLE:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_PMK_UNAVAILABLE_STR, value);
break;
case IPC_EVENT_ERROR_FAILED_ROOT_CA_LOAD:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_FAILED_ROOT_CA_LOAD_STR, value);
break;
case IPC_EVENT_ERROR_TLS_DECRYPTION_FAILED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_TLS_DECRYPTION_FAILED_STR, value);
break;
case IPC_EVENT_ERROR_SUPPLICANT_SHUTDOWN:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_SUPPLICANT_SHUTDOWN_STR, value);
break;
case IPC_EVENT_ERROR_NO_IPC_SLOTS:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_NO_IPC_SLOTS_STR, value);
break;
case IPC_EVENT_ERROR_UNKNOWN_EAPOL_KEY_TYPE:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_UNKNOWN_EAPOL_KEY_TYPE_STR, value);
break;
case IPC_EVENT_ERROR_INVALID_MIC_VERSION:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_INVALID_MIC_VERSION_STR, value);
break;
case IPC_EVENT_ERROR_UNKNOWN_PEAP_VERSION:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_UNKNOWN_PEAP_VERSION_STR, value);
break;
case IPC_EVENT_ERROR_NO_WCTX:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_NO_WCTX_STR, value);
break;
case IPC_EVENT_ERROR_CANT_RENEW_DHCP:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_CANT_RENEW_DHCP_STR, value);
break;
case IPC_EVENT_ERROR_FAILED_TO_BIND:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_FAILED_TO_BIND_STR, value);
break;
case IPC_EVENT_ERROR_FAILED_TO_GET_HANDLE:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_FAILED_TO_GET_HANDLE_STR, value);
break;
case IPC_EVENT_ERROR_EVENT_HANDLE_FAILED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_EVENT_HANDLE_FAILED_STR, value);
break;
case IPC_EVENT_ERROR_WMI_ATTACH_FAILED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_WMI_ATTACH_FAILED_STR, value);
break;
case IPC_EVENT_ERROR_WMI_ASYNC_FAILED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_WMI_ASYNC_FAILED_STR, value);
break;
case IPC_EVENT_ERROR_CANT_ADD_CERT_TO_STORE:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_CANT_ADD_CERT_TO_STORE_STR, value);
break;
case IPC_EVENT_ERROR_CANT_READ_FILE:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_CANT_READ_FILE_STR, value);
break;
case IPC_EVENT_ERROR_CERT_CHAIN_IS_INVALID:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_CERT_CHAIN_IS_INVALID, value);
break;
case IPC_EVENT_ERROR_NOT_SUPPORTED:
xsupgui_events_build_error(errstr, IPC_EVENT_ERROR_NOT_SUPPORTED_STR, value);
break;
default:
xsupgui_events_build_error(errstr, "Unknown error event!", NULL);
break;
}
free(value);
done:
// xsupgui_free_event_doc();
return retval;
}
/**
* \brief Catch a UI event and return it's event number, and the interface (if any)
* that caused the event generation.
*
* @param[out] evtnum The event number that was triggered.
* @param[out] intname The OS specific interface name that generated the event.
* @param[out] param The parameter value that came with this UI event. (May return NULL!)
*
* \retval 0 on success
* \retval <0 on failure
**/
int xsupgui_events_get_ui_event(int *evtnum, char **intname, char **param)
{
xmlDocPtr doc = NULL;
xmlNodePtr root = NULL, t = NULL, n = NULL;
char *value;
int code;
int retval = 0;
doc = xsupgui_get_event_doc();
if (doc == NULL)
{
// xsupgui_free_event_doc();
return -1;
}
root = xmlDocGetRootElement(doc);
if (root == NULL)
{
retval = -1;
goto done;
}
t = xsupgui_request_find_node(root->children, "UI_Event");
if (t == NULL)
{
retval = -1;
goto done;
}
t = t->children;
n = xsupgui_request_find_node(t, "Event_Code");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*evtnum) = atoi(value);
free(value);
(*intname) = NULL;
n = xsupgui_request_find_node(t, "Interface");
if (n != NULL)
{
(*intname) = xmlNodeGetContent(n);
}
n = xsupgui_request_find_node(t, "Parameter");
if (n == NULL)
{
retval = -1;
goto done;
}
(*param) = xmlNodeGetContent(n);
done:
// xsupgui_free_event_doc();
return retval;
}
/**
* \brief Catch a TNC UI event, and return it's IANA OUI, and event number.
*
* @param[out] oui The IANA OUI that generated this event.
* @param[out] notification The index in to the message catalog that identifies
* what the UI should display.
*
* \retval 0 on success
* \retval <0 on failure
**/
int xsupgui_events_get_tnc_ui_event(uint32_t *oui, uint32_t *notification)
{
xmlDocPtr doc = NULL;
xmlNodePtr root = NULL, t = NULL, n = NULL;
char *value;
int code;
int retval = 0;
doc = xsupgui_get_event_doc();
if (doc == NULL)
{
// xsupgui_free_event_doc();
return -1;
}
root = xmlDocGetRootElement(doc);
if (root == NULL)
{
retval = -1;
goto done;
}
t = xsupgui_request_find_node(root->children, "TNC_Event");
if (t == NULL)
{
retval = -1;
goto done;
}
t = t->children;
n = xsupgui_request_find_node(t, "OUI");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*oui) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "Notification");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*notification) = atoi(value);
free(value);
done:
// xsupgui_free_event_doc();
return retval;
}
/**
* \brief Catch a TNC UI event that needs an action, and return it's IANA OUI,
* and request number.
*
* @param[out] imcID The ID of the IMC that generated this event.
* @param[out] connID The connection ID the IMC uses to identify this connection.
* @param[out] oui The IANA OUI that generated this event.
* @param[out] request The index in to the message catalog that identifies
* which request the UI should display.
*
* \retval 0 on success
* \retval <0 on failure
**/
int xsupgui_events_get_tnc_ui_request_event(uint32_t *imcID, uint32_t *connID,
uint32_t *oui, uint32_t *request)
{
xmlDocPtr doc = NULL;
xmlNodePtr root = NULL, t = NULL, n = NULL;
char *value;
int code;
int retval = 0;
doc = xsupgui_get_event_doc();
if (doc == NULL)
{
// xsupgui_free_event_doc();
return -1;
}
root = xmlDocGetRootElement(doc);
if (root == NULL)
{
retval = -1;
goto done;
}
t = xsupgui_request_find_node(root->children, "TNC_Request_Event");
if (t == NULL)
{
retval = -1;
goto done;
}
t = t->children;
n = xsupgui_request_find_node(t, "imcID");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*imcID) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "connID");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*connID) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "OUI");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*oui) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "Request");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*request) = atoi(value);
free(value);
done:
// xsupgui_free_event_doc();
return retval;
}
/**
* \brief Following an IPC_EVENT_TNC_UI_BATCH_REQUEST event, gather all of the data about the
* event.
*
* @param[out] oui The vendor specific OUI that triggered the batch.
* @param[out] msgid The vendor specific message ID that triggered the batch.
* @param[out] batch A NULL terminated array of messages in the batch.
*
* \retval 0 on success
* \retval <0 on failure.
**/
int xsupgui_events_get_tnc_ui_batch_request_event(uint32_t *imcID, uint32_t *connID, uint32_t *oui, uint32_t *msgid, tnc_msg_batch **batch)
{
xmlDocPtr doc = NULL;
xmlNodePtr root = NULL, t = NULL, n = NULL, item = NULL;
char *value;
int items = 0;
int retval = 0;
int i = 0;
tnc_msg_batch *data = NULL;
doc = xsupgui_get_event_doc();
if (doc == NULL)
{
// xsupgui_free_event_doc();
return -1;
}
root = xmlDocGetRootElement(doc);
if (root == NULL)
{
retval = -1;
goto done;
}
t = xsupgui_request_find_node(root->children, "TNC_Request_Batch_Event");
if (t == NULL)
{
retval = -1;
goto done;
}
t = t->children;
n = xsupgui_request_find_node(t, "imcID");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*imcID) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "connID");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*connID) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "OUI");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*oui) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "MsgID");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
(*msgid) = atoi(value);
free(value);
n = xsupgui_request_find_node(t, "Items");
if (n == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(n);
items = atoi(value);
free(value);
// "items" contains the number of items that are in the batch. So
// allocate some memory to store the items.
data = malloc(((items+1) * sizeof(tnc_msg_batch)));
if (data == NULL)
{
retval = -1;
goto done;
}
memset(data, 0x00, ((items+1) * sizeof(tnc_msg_batch)));
n = xsupgui_request_find_node(t, "Batch");
if (n == NULL)
{
retval = -1;
goto done;
}
n = n->children;
for (i = 0; i < items; i++)
{
// Now, parse each item in the batch.
t = xsupgui_request_find_node(n, "Item");
if (t == NULL)
{
retval = -1;
goto done;
}
item = xsupgui_request_find_node(t->children, "imcID");
if (item == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(item);
data[i].imcID = atoi(value);
free(value);
item = xsupgui_request_find_node(t->children, "connectionID");
if (item == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(item);
data[i].connectionID = atoi(value);
free(value);
item = xsupgui_request_find_node(t->children, "OUI");
if (item == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(item);
data[i].oui = atoi(value);
free(value);
item = xsupgui_request_find_node(t->children, "MsgID");
if (item == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(item);
data[i].msgid = atoi(value);
free(value);
item = xsupgui_request_find_node(t->children, "Parameter");
if (item == NULL)
{
retval = -1;
goto done;
}
value = xmlNodeGetContent(item);
if ((value != NULL) || (strlen(value) != 0))
{
data[i].parameter = value;
}
else
{
free(value);
}
n = n->next;
}
(*batch) = data;
done:
// xsupgui_free_event_doc();
return retval;
}
/**
* \brief Free the memory that was used in the TNC message batch.
*
* @param[in] data The TNC message batch that we want to free the members of.
**/
void xsupgui_events_free_tnc_msg_batch_data(tnc_msg_batch **data)
{
int i = 0;
tnc_msg_batch *batch = NULL;
batch = (*data);
while (batch[i].oui != 0)
{
free(batch[i].parameter);
batch[i].parameter = 0;
i++;
}
free((*data));
(*data) = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -