summaryrefslogtreecommitdiff
path: root/src/charon/encoding/message.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/encoding/message.c')
-rw-r--r--src/charon/encoding/message.c81
1 files changed, 30 insertions, 51 deletions
diff --git a/src/charon/encoding/message.c b/src/charon/encoding/message.c
index 5f3f91f8b..b31b21afa 100644
--- a/src/charon/encoding/message.c
+++ b/src/charon/encoding/message.c
@@ -24,7 +24,6 @@
#include <stdlib.h>
#include <string.h>
-#include <printf.h>
#include "message.h"
@@ -603,72 +602,50 @@ static payload_t *get_payload(private_message_t *this, payload_type_t type)
}
/**
- * output handler in printf()
+ * get a string representation of the message
*/
-static int print(FILE *stream, const struct printf_info *info,
- const void *const *args)
+static char* get_string(private_message_t *this, char *buf, int len)
{
- private_message_t *this = *((private_message_t**)(args[0]));
iterator_t *iterator;
payload_t *payload;
- bool first = TRUE;
- size_t total_written = 0;
- size_t written;
+ int written;
+ char *pos = buf;
- if (this == NULL)
+ written = snprintf(pos, len, "%N %s [",
+ exchange_type_names, this->exchange_type,
+ this->is_request ? "request" : "response");
+ if (written >= len || written < 0)
{
- return fprintf(stream, "(null)");
+ return "";
}
+ pos += written;
+ len -= written;
- written = fprintf(stream, "%N %s [",
- exchange_type_names, this->exchange_type,
- this->is_request ? "request" : "response");
- if (written < 0)
+ if (this->payloads->get_count(this->payloads) == 0)
{
- return written;
+ snprintf(pos, len, "]");
+ return buf;
}
- total_written += written;
iterator = this->payloads->create_iterator(this->payloads, TRUE);
while (iterator->iterate(iterator, (void**)&payload))
{
- if (!first)
+ written = snprintf(pos, len, "%N ", payload_type_short_names,
+ payload->get_type(payload));
+ if (written >= len || written < 0)
{
- written = fprintf(stream, " ");
- if (written < 0)
- {
- return written;
- }
- total_written += written;
- }
- else
- {
- first = FALSE;
- }
- written = fprintf(stream, "%N", payload_type_short_names,
- payload->get_type(payload));
- if (written < 0)
- {
- return written;
+ return buf;
}
- total_written += written;
+ pos += written;
+ len -= written;
}
iterator->destroy(iterator);
- written = fprintf(stream, "]");
- if (written < 0)
- {
- return written;
- }
- total_written += written;
- return total_written;
-}
-
-/**
- * register printf() handlers
- */
-static void __attribute__ ((constructor))print_register()
-{
- register_printf_function(PRINTF_MESSAGE, print, arginfo_ptr);
+
+ /* remove last space */
+ pos--;
+ len++;
+ snprintf(pos, len, "]");
+ return buf;
}
/**
@@ -757,6 +734,7 @@ static status_t generate(private_message_t *this, crypter_t *crypter, signer_t*
iterator_t *iterator;
status_t status;
chunk_t packet_data;
+ char str[128];
if (is_encoded(this))
{
@@ -765,7 +743,7 @@ static status_t generate(private_message_t *this, crypter_t *crypter, signer_t*
return SUCCESS;
}
- DBG1(DBG_ENC, "generating %M", this);
+ DBG1(DBG_ENC, "generating %s", get_string(this, str, sizeof(str)));
if (this->exchange_type == EXCHANGE_TYPE_UNDEFINED)
{
@@ -1162,6 +1140,7 @@ static status_t parse_body(private_message_t *this, crypter_t *crypter, signer_t
{
status_t status = SUCCESS;
payload_type_t current_payload_type;
+ char str[128];
current_payload_type = this->first_payload;
@@ -1231,7 +1210,7 @@ static status_t parse_body(private_message_t *this, crypter_t *crypter, signer_t
return status;
}
- DBG1(DBG_ENC, "parsed %M", this);
+ DBG1(DBG_ENC, "parsed %s", get_string(this, str, sizeof(str)));
return SUCCESS;
}