Request missing SWID tags in a directed PA-TNC message
authorAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 4 Mar 2016 00:04:44 +0000 (01:04 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 4 Mar 2016 00:04:44 +0000 (01:04 +0100)
src/libimcv/plugins/imv_swid/imv_swid_agent.c
src/libimcv/plugins/imv_swid/imv_swid_state.c
src/libimcv/plugins/imv_swid/imv_swid_state.h

index 6d32783..c057e7e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013-2015 Andreas Steffen
+ * Copyright (C) 2013-2016 Andreas Steffen
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -213,7 +213,8 @@ static TNC_Result receive_msg(private_imv_swid_agent_t *this,
                                if (request_id == swid_state->get_request_id(swid_state))
                                {
                                        swid_state->set_swid_inventory(swid_state, inventory);
-                                       swid_state->set_count(swid_state, tag_id_count, 0);
+                                       swid_state->set_count(swid_state, tag_id_count, 0,
+                                                                                 in_msg->get_src_id(in_msg));
                                }
                                else
                                {
@@ -251,7 +252,8 @@ static TNC_Result receive_msg(private_imv_swid_agent_t *this,
 
                                if (request_id == swid_state->get_request_id(swid_state))
                                {
-                                       swid_state->set_count(swid_state, 0, tag_count);
+                                       swid_state->set_count(swid_state, 0, tag_count,
+                                                                                 in_msg->get_src_id(in_msg));
 
                                        if (this->rest_api)
                                        {
@@ -387,7 +389,8 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
        }
 
        /* Create an empty out message - we might need it */
-       out_msg = imv_msg_create(this->agent, state, id, imv_id, TNC_IMCID_ANY,
+       out_msg = imv_msg_create(this->agent, state, id, imv_id,
+                                                        swid_state->get_imc_id(swid_state),
                                                         msg_types[0]);
 
        if (!imcv_db)
index 04364b0..fb9493a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013-2014 Andreas Steffen
+ * Copyright (C) 2013-2016 Andreas Steffen
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -123,6 +123,11 @@ struct private_imv_swid_state_t {
        uint32_t missing;
 
        /**
+        * SWID IMC ID
+        */
+       TNC_UInt32 imc_id;
+
+       /**
         * Top level JSON object
         */
        json_object *jobj;
@@ -326,10 +331,12 @@ METHOD(imv_swid_state_t, get_missing, uint32_t,
 }
 
 METHOD(imv_swid_state_t, set_count, void,
-       private_imv_swid_state_t *this, int tag_id_count, int tag_count)
+       private_imv_swid_state_t *this, int tag_id_count, int tag_count,
+       TNC_UInt32 imc_id)
 {
        this->tag_id_count += tag_id_count;
        this->tag_count += tag_count;
+       this->imc_id = imc_id;
 }
 
 METHOD(imv_swid_state_t, get_count, void,
@@ -345,6 +352,12 @@ METHOD(imv_swid_state_t, get_count, void,
        }
 }
 
+METHOD(imv_swid_state_t, get_imc_id, TNC_UInt32,
+       private_imv_swid_state_t *this)
+{
+       return this->imc_id;
+}
+
 /**
  * Described in header.
  */
@@ -384,12 +397,14 @@ imv_state_t *imv_swid_state_create(TNC_ConnectionID connection_id)
                        .get_missing = _get_missing,
                        .set_count = _set_count,
                        .get_count = _get_count,
+                       .get_imc_id = _get_imc_id,
                },
                .state = TNC_CONNECTION_STATE_CREATE,
                .rec = TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
                .eval = TNC_IMV_EVALUATION_RESULT_DONT_KNOW,
                .connection_id = connection_id,
                .contracts = seg_contract_manager_create(),
+               .imc_id = TNC_IMCID_ANY,
                .jobj = json_object_new_object(),
                .jarray = json_object_new_array(),
        );
index af5d95c..5fe99ec 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013-2014 Andreas Steffen
+ * Copyright (C) 2013-2016 Andreas Steffen
  * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
@@ -81,19 +81,19 @@ struct imv_swid_state_t {
         */
        uint32_t (*get_request_id)(imv_swid_state_t *this);
 
-    /**
-     * Set or extend the SWID Tag ID inventory in the state
-     *
-     * @param inventory                        SWID Tags ID inventory to be added
-     */
-    void (*set_swid_inventory)(imv_swid_state_t *this, swid_inventory_t *inventory);
+       /**
+        * Set or extend the SWID Tag ID inventory in the state
+        *
+        * @param inventory                     SWID Tags ID inventory to be added
+        */
+       void (*set_swid_inventory)(imv_swid_state_t *this, swid_inventory_t *inventory);
 
-   /**
-     * Get the encoding of the complete SWID Tag ID inventory
-     *
-     * @return                        SWID Tags ID inventory as a JSON array
-     */
-    json_object* (*get_swid_inventory)(imv_swid_state_t *this);
+       /**
+        * Get the encoding of the complete SWID Tag ID inventory
+        *
+        * @return                             SWID Tags ID inventory as a JSON array
+        */
+       json_object* (*get_swid_inventory)(imv_swid_state_t *this);
 
        /**
         * Set the number of still missing SWID Tags or Tag IDs
@@ -114,8 +114,10 @@ struct imv_swid_state_t {
         *
         * @param tag_id_count          Number of received SWID Tag IDs
         * @param tag_count                     Number of received SWID Tags
+        * @param imc_id                        SWID IMC ID
         */
-       void (*set_count)(imv_swid_state_t *this, int tag_id_count, int tag_count);
+       void (*set_count)(imv_swid_state_t *this, int tag_id_count, int tag_count,
+                                         TNC_UInt32 imc_id);
 
        /**
         * Set [or with multiple attributes increment] SWID Tag [ID] counters
@@ -124,6 +126,13 @@ struct imv_swid_state_t {
         * @param tag_count                     Number of received SWID Tags
         */
        void (*get_count)(imv_swid_state_t *this, int *tag_id_count, int *tag_count);
+
+       /**
+        * Get SWID IMC ID
+        *
+        * @return                                      SWID IMC ID
+        */
+       TNC_UInt32 (*get_imc_id)(imv_swid_state_t *this);
 };
 
 /**