Add option 'bad_ad' to udp_proxy
diff --git a/programs/test/udp_proxy.c b/programs/test/udp_proxy.c
index 0ba9216..a0ff873 100644
--- a/programs/test/udp_proxy.c
+++ b/programs/test/udp_proxy.c
@@ -90,6 +90,7 @@
" drop 1 packet every N packets\n" \
" mtu=%%d default: 0 (unlimited)\n" \
" drop packets larger than N bytes\n" \
+ " bad_ad=%%d default: 0 (don't add bad ApplicationData)\n" \
"\n"
/*
@@ -107,6 +108,7 @@
int delay_ccs; /* delay ChangeCipherSpec */
int drop; /* drop 1 packet in N (none if 0) */
int mtu; /* drop packets larger than this */
+ int bad_ad; /* inject corrupted ApplicationData record */
} opt;
/*
@@ -206,6 +208,12 @@
if( opt.mtu < 0 || opt.mtu > MAX_MSG_SIZE )
exit_usage( p, q );
}
+ else if( strcmp( p, "bad_ad" ) == 0 )
+ {
+ opt.bad_ad = atoi( q );
+ if( opt.bad_ad < 0 || opt.bad_ad > 1 )
+ exit_usage( p, q );
+ }
else
exit_usage( p, NULL );
}
@@ -265,6 +273,22 @@
{
int ret;
+ /* insert corrupted ApplicationData record? */
+ if( opt.bad_ad &&
+ strcmp( p->type, "ApplicationData" ) == 0 )
+ {
+ unsigned char buf[MAX_MSG_SIZE];
+ memcpy( buf, p->buf, p->len );
+ ++buf[p->len - 1];
+
+ print_packet( p, "corrupted" );
+ if( ( ret = net_send( p->dst, buf, p->len ) ) <= 0 )
+ {
+ printf( " ! net_send returned %d\n", ret );
+ return( ret );
+ }
+ }
+
print_packet( p, why );
if( ( ret = net_send( p->dst, p->buf, p->len ) ) <= 0 )
{