Only add pack option to UDP proxy if MBEDTLS_TIMING_C is enabled
diff --git a/programs/test/udp_proxy.c b/programs/test/udp_proxy.c
index 39b3bed..7e8d309 100644
--- a/programs/test/udp_proxy.c
+++ b/programs/test/udp_proxy.c
@@ -53,6 +53,7 @@
#include "mbedtls/net_sockets.h"
#include "mbedtls/error.h"
#include "mbedtls/ssl.h"
+#include "mbedtls/timing.h"
#include <string.h>
@@ -74,11 +75,6 @@
#include <unistd.h>
#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */
-/* For gettimeofday() */
-#if !defined(_WIN32)
-#include <sys/time.h>
-#endif
-
#define MAX_MSG_SIZE 16384 + 2048 /* max record/datagram size */
#define DFL_SERVER_ADDR "localhost"
@@ -87,6 +83,14 @@
#define DFL_LISTEN_PORT "5556"
#define DFL_PACK 0
+#if defined(MBEDTLS_TIMING_C)
+#define USAGE_PACK \
+ " pack=%%d default: 0 (don't pack)\n" \
+ " options: t > 0 (pack for t milliseconds)\n"
+#else
+#define USAGE_PACK
+#endif
+
#define USAGE \
"\n usage: udp_proxy param=<>...\n" \
"\n acceptable parameters:\n" \
@@ -106,11 +110,10 @@
" drop packets larger than N bytes\n" \
" bad_ad=0/1 default: 0 (don't add bad ApplicationData)\n" \
" protect_hvr=0/1 default: 0 (don't protect HelloVerifyRequest)\n" \
- " protect_len=%%d default: (don't protect packets of this size)\n" \
+ " protect_len=%%d default: (don't protect packets of this size)\n" \
"\n" \
" seed=%%d default: (use current time)\n" \
- " pack=%%d default: 0 (don't merge)\n" \
- " options: t > 0 (merge for t milliseconds)\n" \
+ USAGE_PACK \
"\n"
/*
@@ -133,7 +136,6 @@
int protect_len; /* never drop/delay packet of the given size*/
int pack; /* merge packets into single datagram for
* at most \c merge milliseconds if > 0 */
-
unsigned int seed; /* seed for "random" events */
} opt;
@@ -201,7 +203,12 @@
}
else if( strcmp( p, "pack" ) == 0 )
{
+#if defined(MBEDTLS_TIMING_C)
opt.pack = atoi( q );
+#else
+ mbedtls_printf( " option pack only defined if MBEDTLS_TIMING_C is enabled\n" );
+ exit( 1 );
+#endif
}
else if( strcmp( p, "mtu" ) == 0 )
{
@@ -277,6 +284,7 @@
}
}
+#if defined(MBEDTLS_TIMING_C)
/* Return elapsed time in milliseconds since the first call */
static unsigned long ellapsed_time( void )
{
@@ -369,6 +377,7 @@
size_t len )
{
ctx_buffer *buf = NULL;
+
if( outbuf[0].ctx == ctx )
buf = &outbuf[0];
else if( outbuf[1].ctx == ctx )
@@ -380,6 +389,17 @@
return( ctx_buffer_append( buf, data, len ) );
}
+#else /* MBEDTLS_TIMING_C */
+
+static int dispatch_data( mbedtls_net_context *ctx,
+ const unsigned char * data,
+ size_t len )
+{
+ return( mbedtls_net_send( ctx, data, len ) );
+}
+
+#endif /* MBEDTLS_TIMING_C */
+
typedef struct
{
mbedtls_net_context *dst;
@@ -392,12 +412,22 @@
/* Print packet. Outgoing packets come with a reason (forward, dupl, etc.) */
void print_packet( const packet *p, const char *why )
{
+#if defined(MBEDTLS_TIMING_C)
if( why == NULL )
mbedtls_printf( " %05lu dispatch %s %s (%u bytes)\n",
ellapsed_time(), p->way, p->type, p->len );
else
+ mbedtls_printf( " %05lu dispatch %s %s (%u bytes): %s\n",
+ ellapsed_time(), p->way, p->type, p->len, why );
+#else
+ if( why == NULL )
+ mbedtls_printf( " dispatch %s %s (%u bytes)\n",
+ p->way, p->type, p->len );
+ else
mbedtls_printf( " dispatch %s %s (%u bytes): %s\n",
p->way, p->type, p->len, why );
+#endif
+
fflush( stdout );
}
@@ -664,6 +694,7 @@
nb_fds = listen_fd.fd;
++nb_fds;
+#if defined(MBEDTLS_TIMING_C)
if( opt.pack > 0 )
{
outbuf[0].ctx = &server_fd;
@@ -676,6 +707,12 @@
outbuf[1].num_datagrams = 0;
outbuf[1].len = 0;
}
+ else
+ {
+ outbuf[0].ctx = NULL;
+ outbuf[1].ctx = NULL;
+ }
+#endif /* MBEDTLS_TIMING_C */
while( 1 )
{
@@ -684,8 +721,10 @@
FD_SET( client_fd.fd, &read_fds );
FD_SET( listen_fd.fd, &read_fds );
+#if defined(MBEDTLS_TIMING_C)
ctx_buffer_check( &outbuf[0] );
ctx_buffer_check( &outbuf[1] );
+#endif
if( ( ret = select( nb_fds, &read_fds, NULL, NULL, &tm ) ) < 0 )
{