+ }
+ case TRANSFORMS:
+ {
+ this->logger->log(this->logger,CONTROL_MORE,"Generate Transforms");
+ /* before iterative generate the transforms, store the current length position */
+ u_int32_t payload_length_position_offset = this->last_payload_length_position_offset;
+
+ u_int16_t length_of_proposal = PROPOSAL_SUBSTRUCTURE_HEADER_LENGTH + this->last_spi_size;
+ u_int16_t int16_val;
+ linked_list_t *transforms = *((linked_list_t **)(this->data_struct + rules[i].offset));
+
+ linked_list_iterator_t *iterator;
+ /* create forward iterator */
+ status = transforms->create_iterator(transforms,&iterator,TRUE);
+ if (status != SUCCESS)
+ {
+ return status;
+ }
+ while (iterator->has_next(iterator))
+ {
+ payload_t *current_transform;
+ u_int32_t before_generate_position_offset;
+ u_int32_t after_generate_position_offset;
+
+ status = iterator->current(iterator,(void **)¤t_transform);
+ if (status != SUCCESS)
+ {
+ iterator->destroy(iterator);
+ return status;
+ }
+
+ before_generate_position_offset = (this->out_position - this->buffer);
+ this->public.generate_payload(&(this->public),current_transform);
+ after_generate_position_offset = (this->out_position - this->buffer);
+
+ /* increase size of transform */
+ length_of_proposal += (after_generate_position_offset - before_generate_position_offset);
+ }
+
+ iterator->destroy(iterator);
+
+ this->logger->log(this->logger,CONTROL_MORE,"Length of Transform is %d, offset is %d",length_of_proposal,payload_length_position_offset);
+
+ int16_val = htons(length_of_proposal);
+ this->write_bytes_to_buffer_at_offset(this,&int16_val,sizeof(u_int16_t),payload_length_position_offset);
+
+ break;
+ }