+static status_t build_message(private_ike_sa_t *this, exchange_type_t type, bool request)
+{
+ status_t status;
+ message_t *message;
+ host_t *source, *destination;
+
+ message = message_create();
+ if (message == NULL)
+ {
+ return OUT_OF_RES;
+ }
+
+ status = this->me.host->clone(this->me.host, &source);
+ status |= this->other.host->clone(this->other.host, &destination);
+ if (status != SUCCESS)
+ {
+ message->destroy(message);
+ return status;
+ }
+ message->set_source(message, source);
+ message->set_destination(message, destination);
+
+ message->set_exchange_type(message, type);
+ message->set_request(message, request);
+
+ message->set_ike_sa_id(message, this->ike_sa_id);
+
+ return SUCCESS;
+}
+