char result_str[BUF_LEN], *error_str = "", *command;
char *target, *separator;
int tag_id_count, tag_count, i;
+ size_t max_attr_size, attr_size, entry_size;
chunk_t tag_creator, unique_sw_id;
json_object *jrequest, *jresponse, *jvalue;
tcg_swid_attr_req_t *cast_attr;
json_object_put(jresponse);
break;
}
+
+ /* Compute the maximum TCG SWID Request attribute size */
+ max_attr_size = state->get_max_msg_len(state) -
+ PA_TNC_HEADER_SIZE;
+
+ /* Create the [first] TCG SWID Request attribute */
+ attr_size = PA_TNC_ATTR_HEADER_SIZE + TCG_SWID_REQ_MIN_SIZE;
attr = tcg_swid_attr_req_create(TCG_SWID_ATTR_REQ_FLAG_NONE,
swid_state->get_request_id(swid_state), 0);
- cast_attr = (tcg_swid_attr_req_t*)attr;
tag_id_count = json_object_array_length(jresponse);
DBG1(DBG_IMV, "%d SWID tag targets", tag_id_count);
tag_creator.len - 1);
tag_id = swid_tag_id_create(tag_creator, unique_sw_id,
chunk_empty);
+ entry_size = 2 + tag_creator.len + 2 + unique_sw_id.len;
+
+ /* Have we reached the maximum attribute size? */
+ if (attr_size + entry_size > max_attr_size)
+ {
+ out_msg->add_attribute(out_msg, attr);
+ attr_size = PA_TNC_ATTR_HEADER_SIZE +
+ TCG_SWID_REQ_MIN_SIZE;
+ attr = tcg_swid_attr_req_create(
+ TCG_SWID_ATTR_REQ_FLAG_NONE,
+ swid_state->get_request_id(swid_state), 0);
+ }
+ cast_attr = (tcg_swid_attr_req_t*)attr;
cast_attr->add_target(cast_attr, tag_id);
}
json_object_put(jresponse);
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
-#define SWID_REQ_SIZE 12
#define SWID_REQ_RESERVED_MASK 0x03
/**
return;
}
- writer = bio_writer_create(SWID_REQ_SIZE);
+ writer = bio_writer_create(TCG_SWID_REQ_MIN_SIZE);
writer->write_uint8 (writer, this->flags);
writer->write_uint24(writer, this->targets->get_count(this->targets));
writer->write_uint32(writer, this->request_id);
chunk_t tag_creator, unique_sw_id;
swid_tag_id_t *tag_id;
- if (this->value.len < SWID_REQ_SIZE)
+ if (this->value.len < TCG_SWID_REQ_MIN_SIZE)
{
DBG1(DBG_TNC, "insufficient data for SWID Request");
*offset = 0;
*offset = 4;
return FAILED;
}
- *offset = SWID_REQ_SIZE;
+ *offset = TCG_SWID_REQ_MIN_SIZE;
this->flags &= SWID_REQ_RESERVED_MASK;
/*
- * Copyright (C) 2013 Andreas Steffen
+ * Copyright (C) 2013-2014 Andreas Steffen
* HSR Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
#ifndef TCG_SWID_ATTR_REQ_H_
#define TCG_SWID_ATTR_REQ_H_
+#define TCG_SWID_REQ_MIN_SIZE 12
+
typedef struct tcg_swid_attr_req_t tcg_swid_attr_req_t;
typedef enum tcg_swid_attr_req_flag_t tcg_swid_attr_req_flag_t;