store the long and excl flags in the connection state
authorAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 9 Dec 2011 10:25:53 +0000 (11:25 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Fri, 9 Dec 2011 10:25:53 +0000 (11:25 +0100)
src/libimcv/imc/imc_agent.c
src/libimcv/imc/imc_state.h
src/libimcv/imv/imv_agent.c
src/libimcv/imv/imv_state.h
src/libimcv/plugins/imc_scanner/imc_scanner_state.c
src/libimcv/plugins/imc_test/imc_test_state.c
src/libimcv/plugins/imv_scanner/imv_scanner_state.c
src/libimcv/plugins/imv_test/imv_test_state.c
src/libpts/plugins/imc_attestation/imc_attestation_state.c
src/libpts/plugins/imv_attestation/imv_attestation_state.c

index d1d4073..a39b4b7 100644 (file)
@@ -309,6 +309,8 @@ METHOD(imc_agent_t, create_state, TNC_Result,
        t_p = get_str_attribute(this, conn_id, TNC_ATTRIBUTEID_IFT_PROTOCOL);
        t_v = get_str_attribute(this, conn_id, TNC_ATTRIBUTEID_IFT_VERSION);
 
+       state->set_flags(state, has_long, has_excl);
+
        DBG2(DBG_IMC, "IMC %u \"%s\" created a state for Connection ID %u: "
                                  "%s %s with %slong %sexcl %ssoh over %s %s",
                                  this->id, this->name, conn_id, tnccs_p ? tnccs_p:"?",
index 73013f8..f1b0358 100644 (file)
@@ -33,13 +33,37 @@ typedef struct imc_state_t imc_state_t;
 struct imc_state_t {
 
        /**
-        * Get the TNCS connection ID attached to the state
+        * Get the TNCS connection I
+D attached to the state
         *
         * @return                              TNCS connection ID of the state
         */
         TNC_ConnectionID (*get_connection_id)(imc_state_t *this);
 
        /**
+        * Checks if long message types are supported for this TNCCS connection
+        *
+        * @return                              TRUE if set, FALSE otherwise
+        */
+       bool (*has_long)(imc_state_t *this);
+
+       /**
+        * Checks if the exclusive delivery is supported for this TNCCS connection
+        *
+        * @return                              TRUE if set, FALSE otherwise
+        */
+       bool (*has_excl)(imc_state_t *this);
+
+       /**
+        * Sets the long message types and exclusive flags for this TNCCS connection
+        *
+        * @param has_long              TNCCS connection supports long message types
+        * @param has_excl              TNCCS connection supports exclusive delivery
+        * @return                              TRUE if set, FALSE otherwise
+        */
+       void (*set_flags)(imc_state_t *this, bool has_long, bool has_excl);
+
+       /**
         * Change the connection state
         *
         * @param new_state             new connection state
index 503b803..f7ec0e6 100644 (file)
@@ -328,6 +328,8 @@ METHOD(imv_agent_t, create_state, TNC_Result,
        t_p = get_str_attribute(this, conn_id, TNC_ATTRIBUTEID_IFT_PROTOCOL);
        t_v = get_str_attribute(this, conn_id, TNC_ATTRIBUTEID_IFT_VERSION);
 
+       state->set_flags(state, has_long, has_excl);
+
        DBG2(DBG_IMV, "IMV %u \"%s\" created a state for Connection ID %u: "
                                  "%s %s with %slong %sexcl %ssoh over %s %s",
                                  this->id, this->name, conn_id, tnccs_p ? tnccs_p:"?",
index 26d07bb..9e7a29a 100644 (file)
@@ -40,6 +40,29 @@ struct imv_state_t {
         TNC_ConnectionID (*get_connection_id)(imv_state_t *this);
 
        /**
+        * Checks if long message types are supported for this TNCCS connection
+        *
+        * @return                              TRUE if set, FALSE otherwise
+        */
+       bool (*has_long)(imv_state_t *this);
+
+       /**
+        * Checks if the exclusive delivery is supported for this TNCCS connection
+        *
+        * @return                              TRUE if set, FALSE otherwise
+        */
+       bool (*has_excl)(imv_state_t *this);
+
+       /**
+        * Sets the long message types and exclusive flags for this TNCCS connection
+        *
+        * @param has_long              TNCCS connection supports long message types
+        * @param has_excl              TNCCS connection supports exclusive delivery
+        * @return                              TRUE if set, FALSE otherwise
+        */
+       void (*set_flags)(imv_state_t *this, bool has_long, bool has_excl);
+
+       /**
         * Change the connection state
         *
         * @param new_state             new connection state
index dce7bca..5631055 100644 (file)
@@ -37,6 +37,17 @@ struct private_imc_scanner_state_t {
         * TNCCS connection state
         */
        TNC_ConnectionState state;
+
+       /**
+        * Does the TNCCS connection support long message types?
+        */
+       bool has_long;
+
+       /**
+        * Does the TNCCS connection support exclusive delivery?
+        */
+       bool has_excl;
+
 };
 
 METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
@@ -45,6 +56,25 @@ METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
        return this->connection_id;
 }
 
+METHOD(imc_state_t, has_long, bool,
+       private_imc_scanner_state_t *this)
+{
+       return this->has_long;
+}
+
+METHOD(imc_state_t, has_excl, bool,
+       private_imc_scanner_state_t *this)
+{
+       return this->has_excl;
+}
+
+METHOD(imc_state_t, set_flags, void,
+       private_imc_scanner_state_t *this, bool has_long, bool has_excl)
+{
+       this->has_long = has_long;
+       this->has_excl = has_excl;
+}
+
 METHOD(imc_state_t, change_state, void,
        private_imc_scanner_state_t *this, TNC_ConnectionState new_state)
 {
@@ -68,6 +98,9 @@ imc_state_t *imc_scanner_state_create(TNC_ConnectionID connection_id)
                .public = {
                        .interface = {
                                .get_connection_id = _get_connection_id,
+                               .has_long = _has_long,
+                               .has_excl = _has_excl,
+                               .set_flags = _set_flags,
                                .change_state = _change_state,
                                .destroy = _destroy,
                        },
index cc7e18a..d0cae88 100644 (file)
@@ -39,6 +39,16 @@ struct private_imc_test_state_t {
        TNC_ConnectionState state;
 
        /**
+        * Does the TNCCS connection support long message types?
+        */
+       bool has_long;
+
+       /**
+        * Does the TNCCS connection support exclusive delivery?
+        */
+       bool has_excl;
+
+       /**
         * Command to transmit to IMV
         */
        char *command;
@@ -60,6 +70,25 @@ METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
        return this->connection_id;
 }
 
+METHOD(imc_state_t, has_long, bool,
+       private_imc_test_state_t *this)
+{
+       return this->has_long;
+}
+
+METHOD(imc_state_t, has_excl, bool,
+       private_imc_test_state_t *this)
+{
+       return this->has_excl;
+}
+
+METHOD(imc_state_t, set_flags, void,
+       private_imc_test_state_t *this, bool has_long, bool has_excl)
+{
+       this->has_long = has_long;
+       this->has_excl = has_excl;
+}
+
 METHOD(imc_state_t, change_state, void,
        private_imc_test_state_t *this, TNC_ConnectionState new_state)
 {
@@ -123,6 +152,9 @@ imc_state_t *imc_test_state_create(TNC_ConnectionID connection_id,
                .public = {
                        .interface = {
                                .get_connection_id = _get_connection_id,
+                               .has_long = _has_long,
+                               .has_excl = _has_excl,
+                               .set_flags = _set_flags,
                                .change_state = _change_state,
                                .destroy = _destroy,
                        },
index a9b048b..422cb98 100644 (file)
@@ -40,6 +40,16 @@ struct private_imv_scanner_state_t {
        TNC_ConnectionState state;
 
        /**
+        * Does the TNCCS connection support long message types?
+        */
+       bool has_long;
+
+       /**
+        * Does the TNCCS connection support exclusive delivery?
+        */
+       bool has_excl;
+
+       /**
         * IMV action recommendation
         */
        TNC_IMV_Action_Recommendation rec;
@@ -86,6 +96,25 @@ METHOD(imv_state_t, get_connection_id, TNC_ConnectionID,
        return this->connection_id;
 }
 
+METHOD(imv_state_t, has_long, bool,
+       private_imv_scanner_state_t *this)
+{
+       return this->has_long;
+}
+
+METHOD(imv_state_t, has_excl, bool,
+       private_imv_scanner_state_t *this)
+{
+       return this->has_excl;
+}
+
+METHOD(imv_state_t, set_flags, void,
+       private_imv_scanner_state_t *this, bool has_long, bool has_excl)
+{
+       this->has_long = has_long;
+       this->has_excl = has_excl;
+}
+
 METHOD(imv_state_t, change_state, void,
        private_imv_scanner_state_t *this, TNC_ConnectionState new_state)
 {
@@ -191,6 +220,9 @@ imv_state_t *imv_scanner_state_create(TNC_ConnectionID connection_id)
                .public = {
                        .interface = {
                                .get_connection_id = _get_connection_id,
+                               .has_long = _has_long,
+                               .has_excl = _has_excl,
+                               .set_flags = _set_flags,
                                .change_state = _change_state,
                                .get_recommendation = _get_recommendation,
                                .set_recommendation = _set_recommendation,
index 930da93..9df117a 100644 (file)
@@ -40,6 +40,16 @@ struct private_imv_test_state_t {
        TNC_ConnectionState state;
 
        /**
+        * Does the TNCCS connection support long message types?
+        */
+       bool has_long;
+
+       /**
+        * Does the TNCCS connection support exclusive delivery?
+        */
+       bool has_excl;
+
+       /**
         * IMV action recommendation
         */
        TNC_IMV_Action_Recommendation rec;
@@ -82,6 +92,25 @@ METHOD(imv_state_t, get_connection_id, TNC_ConnectionID,
        return this->connection_id;
 }
 
+METHOD(imv_state_t, has_long, bool,
+       private_imv_test_state_t *this)
+{
+       return this->has_long;
+}
+
+METHOD(imv_state_t, has_excl, bool,
+       private_imv_test_state_t *this)
+{
+       return this->has_excl;
+}
+
+METHOD(imv_state_t, set_flags, void,
+       private_imv_test_state_t *this, bool has_long, bool has_excl)
+{
+       this->has_long = has_long;
+       this->has_excl = has_excl;
+}
+
 METHOD(imv_state_t, change_state, void,
        private_imv_test_state_t *this, TNC_ConnectionState new_state)
 {
@@ -177,6 +206,9 @@ imv_state_t *imv_test_state_create(TNC_ConnectionID connection_id)
                .public = {
                        .interface = {
                                .get_connection_id = _get_connection_id,
+                               .has_long = _has_long,
+                               .has_excl = _has_excl,
+                               .set_flags = _set_flags,
                                .change_state = _change_state,
                                .get_recommendation = _get_recommendation,
                                .set_recommendation = _set_recommendation,
index d900224..72a55f6 100644 (file)
@@ -41,6 +41,16 @@ struct private_imc_attestation_state_t {
        TNC_ConnectionState state;
 
        /**
+        * Does the TNCCS connection support long message types?
+        */
+       bool has_long;
+
+       /**
+        * Does the TNCCS connection support exclusive delivery?
+        */
+       bool has_excl;
+
+       /**
         * PTS object
         */
        pts_t *pts;
@@ -58,6 +68,25 @@ METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
        return this->connection_id;
 }
 
+METHOD(imc_state_t, has_long, bool,
+       private_imc_attestation_state_t *this)
+{
+       return this->has_long;
+}
+
+METHOD(imc_state_t, has_excl, bool,
+       private_imc_attestation_state_t *this)
+{
+       return this->has_excl;
+}
+
+METHOD(imc_state_t, set_flags, void,
+       private_imc_attestation_state_t *this, bool has_long, bool has_excl)
+{
+       this->has_long = has_long;
+       this->has_excl = has_excl;
+}
+
 METHOD(imc_state_t, change_state, void,
        private_imc_attestation_state_t *this, TNC_ConnectionState new_state)
 {
@@ -103,6 +132,9 @@ imc_state_t *imc_attestation_state_create(TNC_ConnectionID connection_id)
                .public = {
                        .interface = {
                                .get_connection_id = _get_connection_id,
+                               .has_long = _has_long,
+                               .has_excl = _has_excl,
+                               .set_flags = _set_flags,
                                .change_state = _change_state,
                                .destroy = _destroy,
                        },
index d2e5211..a58fd3e 100644 (file)
@@ -52,6 +52,16 @@ struct private_imv_attestation_state_t {
        TNC_ConnectionState state;
        
        /**
+        * Does the TNCCS connection support long message types?
+        */
+       bool has_long;
+
+       /**
+        * Does the TNCCS connection support exclusive delivery?
+        */
+       bool has_excl;
+
+       /**
         * IMV Attestation handshake state
         */
        imv_attestation_handshake_state_t handshake_state;
@@ -121,6 +131,25 @@ METHOD(imv_state_t, get_connection_id, TNC_ConnectionID,
        return this->connection_id;
 }
 
+METHOD(imv_state_t, has_long, bool,
+       private_imv_attestation_state_t *this)
+{
+       return this->has_long;
+}
+
+METHOD(imv_state_t, has_excl, bool,
+       private_imv_attestation_state_t *this)
+{
+       return this->has_excl;
+}
+
+METHOD(imv_state_t, set_flags, void,
+       private_imv_attestation_state_t *this, bool has_long, bool has_excl)
+{
+       this->has_long = has_long;
+       this->has_excl = has_excl;
+}
+
 METHOD(imv_state_t, change_state, void,
        private_imv_attestation_state_t *this, TNC_ConnectionState new_state)
 {
@@ -335,6 +364,9 @@ imv_state_t *imv_attestation_state_create(TNC_ConnectionID connection_id)
                .public = {
                        .interface = {
                                .get_connection_id = _get_connection_id,
+                               .has_long = _has_long,
+                               .has_excl = _has_excl,
+                               .set_flags = _set_flags,
                                .change_state = _change_state,
                                .get_recommendation = _get_recommendation,
                                .set_recommendation = _set_recommendation,