Home | History | Annotate | Download | only in eap_server

Lines Matching refs:tncs

2  * EAP-TNC - TNCS (IF-IMV, IF-TNCCS, and IF-TNCCS-SOH)
15 #include "tncs.h"
20 /* TODO: TNCS must be thread-safe; review the code and add locking etc. if
28 "<TNCCS-Batch BatchId=\"%d\" Recipient=\"TNCS\" " \
123 struct tncs_data *tncs;
128 tncs = tncs_global_data->connections;
129 while (tncs) {
130 if (tncs->connectionID == connectionID)
131 return tncs;
132 tncs = tncs->next;
142 /* TNCS functions that IMVs can call */
181 struct tncs_data *tncs;
194 tncs = tncs_get_conn(connectionID);
195 if (tncs == NULL)
202 os_free(tncs->imv_data[imvID].imv_send);
203 tncs->imv_data[imvID].imv_send_len = 0;
204 tncs->imv_data[imvID].imv_send = os_zalloc(b64len + 100);
205 if (tncs->imv_data[imvID].imv_send == NULL) {
210 tncs->imv_data[imvID].imv_send_len =
211 os_snprintf((char *) tncs->imv_data[imvID].imv_send,
240 struct tncs_data *tncs;
250 tncs = tncs_get_conn(connectionID);
251 if (tncs == NULL)
254 tncs->imv_data[imvID].recommendation = recommendation;
255 tncs->imv_data[imvID].recommendation_set = 1;
511 static void tncs_send_to_imvs(struct tncs_data *tncs, unsigned int type,
519 for (imv = tncs->imv; imv; imv = imv->next) {
526 res = imv->ReceiveMessage(imv->imvID, tncs->connectionID,
535 static void tncs_batch_ending(struct tncs_data *tncs)
540 for (imv = tncs->imv; imv; imv = imv->next) {
546 res = imv->BatchEnding(imv->imvID, tncs->connectionID);
553 static void tncs_solicit_recommendation(struct tncs_data *tncs)
558 for (imv = tncs->imv; imv; imv = imv->next) {
559 if (tncs->imv_data[imv->imvID].recommendation_set)
565 tncs->connectionID);
572 void tncs_init_connection(struct tncs_data *tncs)
577 for (imv = tncs->imv; imv; imv = imv->next) {
579 imv, tncs->connectionID, TNC_CONNECTION_STATE_CREATE);
581 imv, tncs->connectionID,
586 os_free(tncs->imv_data[i].imv_send);
587 tncs->imv_data[i].imv_send = NULL;
588 tncs->imv_data[i].imv_send_len = 0;
593 size_t tncs_total_send_len(struct tncs_data *tncs)
599 len += tncs->imv_data[i].imv_send_len;
600 if (tncs->tncs_message)
601 len += os_strlen(tncs->tncs_message);
606 u8 * tncs_copy_send_buf(struct tncs_data *tncs, u8 *pos)
611 if (tncs->imv_data[i].imv_send == NULL)
614 os_memcpy(pos, tncs->imv_data[i].imv_send,
615 tncs->imv_data[i].imv_send_len);
616 pos += tncs->imv_data[i].imv_send_len;
617 os_free(tncs->imv_data[i].imv_send);
618 tncs->imv_data[i].imv_send = NULL;
619 tncs->imv_data[i].imv_send_len = 0;
622 if (tncs->tncs_message) {
623 size_t len = os_strlen(tncs->tncs_message);
624 os_memcpy(pos, tncs->tncs_message, len);
626 os_free(tncs->tncs_message);
627 tncs->tncs_message = NULL;
634 char * tncs_if_tnccs_start(struct tncs_data *tncs)
639 tncs->last_batchid++;
640 os_snprintf(buf, 1000, IF_TNCCS_START, tncs->last_batchid);
692 static enum tncs_process_res tncs_derive_recommendation(struct tncs_data *tncs)
701 if (tncs->done)
704 tncs_solicit_recommendation(tncs);
708 for (imv = tncs->imv; imv; imv = imv->next) {
710 irec = tncs->imv_data[imv->imvID].recommendation;
722 tncs->recommendation = rec;
723 tncs->done = 1;
746 os_free(tncs->tncs_message);
747 tncs->tncs_message = os_zalloc(200);
748 if (tncs->tncs_message) {
749 os_snprintf(tncs->tncs_message, 199,
750 "<TNCC-TNCS-Message><Type>%08X</Type>"
753 "</TNCC-TNCS-Message>",
758 for (imv = tncs->imv; imv; imv = imv->next) {
759 tncs_imv_notify_connection_change(imv, tncs->connectionID,
778 enum tncs_process_res tncs_process_if_tnccs(struct tncs_data *tncs,
814 if (batch_id != tncs->last_batchid + 1) {
817 batch_id, tncs->last_batchid + 1);
821 tncs->last_batchid = batch_id;
868 tncs_send_to_imvs(tncs, type, decoded, decoded_len);
876 * <TNCC-TNCS-Message>
880 * </TNCC-TNCS-Message>
888 pos = os_strstr(start, "<TNCC-TNCS-Message>");
892 end = os_strstr(start, "</TNCC-TNCS-Message>");
904 wpa_printf(MSG_DEBUG, "TNC: TNCC-TNCS-Message Type 0x%x",
933 "TNC: TNCC-TNCS-Message Base64",
940 "TNC: TNCC-TNCS-Message XML",
950 tncs_batch_ending(tncs);
952 if (tncs_total_send_len(tncs) == 0)
953 return tncs_derive_recommendation(tncs);
1065 struct tncs_data *tncs;
1070 tncs = os_zalloc(sizeof(*tncs));
1071 if (tncs == NULL)
1073 tncs->imv = tncs_global_data->imv;
1074 tncs->connectionID = tncs_global_data->next_conn_id++;
1075 tncs->next = tncs_global_data->connections;
1076 tncs_global_data->connections = tncs;
1078 return tncs;
1082 void tncs_deinit(struct tncs_data *tncs)
1087 if (tncs == NULL)
1091 os_free(tncs->imv_data[i].imv_send);
1096 if (conn == tncs) {
1098 prev->next = tncs->next;
1100 tncs_global_data->connections = tncs->next;
1107 os_free(tncs->tncs_message);
1108 os_free(tncs);