}
case PROPOSALS:
{
- this->logger->log(this->logger,CONTROL_MORE,"Generate Proposals");
- /* before iterative generate the transforms, store the current length position */
+ /* before iterative generate the transforms, store the current payload length position */
u_int32_t payload_length_position_offset = this->last_payload_length_position_offset;
-
+ /* Length of SA_PAYLOAD is calculated */
u_int16_t length_of_sa_payload = SA_PAYLOAD_HEADER_LENGTH;
u_int16_t int16_val;
+ /* proposals are stored in a linked list and so accessed */
linked_list_t *proposals = *((linked_list_t **)(this->data_struct + rules[i].offset));
+ this->logger->log(this->logger,CONTROL_MORE,"Generate Proposals");
+
linked_list_iterator_t *iterator;
/* create forward iterator */
status = proposals->create_iterator(proposals,&iterator,TRUE);
if (status != SUCCESS)
{
+ this->logger->log(this->logger,CONTROL_MORE,"Could not iterator of proposals");
return status;
}
+ /* every proposal is processed (iterative call )*/
while (iterator->has_next(iterator))
{
payload_t *current_proposal;
iterator->destroy(iterator);
return status;
}
-
- before_generate_position_offset = (this->out_position - this->buffer);
+ before_generate_position_offset = this->get_current_buffer_offset(this);
status = this->public.generate_payload(&(this->public),current_proposal);
- after_generate_position_offset = (this->out_position - this->buffer);
+ after_generate_position_offset = this->get_current_buffer_offset(this);
if (status != SUCCESS)
{
+ iterator->destroy(iterator);
return status;
}
/* increase size of transform */
length_of_sa_payload += (after_generate_position_offset - before_generate_position_offset);
}
-
iterator->destroy(iterator);
-
this->logger->log(this->logger,CONTROL_MORE,"Length of Payload is %d, offset is %d",length_of_sa_payload,payload_length_position_offset);
int16_val = htons(length_of_sa_payload);
- this->write_bytes_to_buffer_at_offset(this,&int16_val,sizeof(u_int16_t),payload_length_position_offset);
-
+ status = this->write_bytes_to_buffer_at_offset(this,&int16_val,sizeof(u_int16_t),payload_length_position_offset);
+ if (status != SUCCESS)
+ {
+ this->logger->log(this->logger,CONTROL_MORE,"Could no write payload length into buffer");
+ return status;
+ }
break;
}
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;
+
+ this->logger->log(this->logger,CONTROL_MORE,"Generate Transforms");
+
/* create forward iterator */
status = transforms->create_iterator(transforms,&iterator,TRUE);
if (status != SUCCESS)
return status;
}
- before_generate_position_offset = (this->out_position - this->buffer);
+ before_generate_position_offset = this->get_current_buffer_offset(this);
status = this->public.generate_payload(&(this->public),current_transform);
- after_generate_position_offset = (this->out_position - this->buffer);
+ after_generate_position_offset = this->get_current_buffer_offset(this);
if (status != SUCCESS)
{
+ iterator->destroy(iterator);
return status;
}
return status;
}
- before_generate_position_offset = (this->out_position - this->buffer);
+ before_generate_position_offset = this->get_current_buffer_offset(this);
this->public.generate_payload(&(this->public),current_attribute);
- after_generate_position_offset = (this->out_position - this->buffer);
+ after_generate_position_offset = this->get_current_buffer_offset(this);
/* increase size of transform */
length_of_transform += (after_generate_position_offset - before_generate_position_offset);
}
case ATTRIBUTE_FORMAT:
{
- this->logger->log(this->logger,CONTROL_MORE,"Generate Attribute Format flag");
- /* Attribute format is a flag which is stored in context*/
-
status = this->generate_flag(this,rules[i].offset);
+ /* Attribute format is a flag which is stored in context*/
this->attribute_format = *((bool *) (this->data_struct + rules[i].offset));
break;
}
break;
}
default:
+ this->logger->log(this->logger,CONTROL_MORE,"Field Type %s is not supported",mapping_find(encoding_type_t_mappings,rules[i].type));
return NOT_SUPPORTED;
}
}
this->last_payload_length_position_offset = 0;
this->header_length_position_offset = 0;
this->logger = global_logger_manager->create_logger(global_logger_manager,GENERATOR,NULL);
+
+ if (this->logger == NULL)
+ {
+ allocator_free(this->buffer);
+ allocator_free(this);
+ return NULL;
+ }
return &(this->public);
}