From ff5aac826ae2019476b20ab7143e7f80e3cf26c7 Mon Sep 17 00:00:00 2001 From: Anselm Martin Hoffmeister Date: Mon, 9 Apr 2007 17:34:10 +0000 Subject: [PATCH] hoffmeis: Fixing situation where absence of a newdata() handler for UDP connections might break things. Only-sending applications like syslog() do not need a newdata() handler, so added a check if that handler exists. --- src/net/udp.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/net/udp.c b/src/net/udp.c index 34acc53f..1f74d65b 100644 --- a/src/net/udp.c +++ b/src/net/udp.c @@ -260,7 +260,7 @@ static int udp_rx ( struct pk_buff *pkb, struct sockaddr_tcpip *st_src, struct udp_connection *conn; size_t ulen; uint16_t csum; - int rc; + int rc = 0; /* Sanity check packet */ if ( pkb_len ( pkb ) < sizeof ( *udphdr ) ) { @@ -314,11 +314,16 @@ static int udp_rx ( struct pk_buff *pkb, struct sockaddr_tcpip *st_src, } /* Pass data to application */ - rc = conn->udp_op->newdata ( conn, pkb->data, pkb_len ( pkb ), + if ( conn->udp_op->newdata ) { + rc = conn->udp_op->newdata ( conn, pkb->data, pkb_len ( pkb ), st_src, st_dest ); - if ( rc != 0 ) { - DBGC ( conn, "UDP %p application rejected packet: %s\n", - conn, strerror ( rc ) ); + if ( rc != 0 ) { + DBGC ( conn, "UDP %p application rejected packet: %s\n", + conn, strerror ( rc ) ); + } + } else { + DBGC ( conn, "UDP %p application has no newdata handler for " \ + "incoming packet\n", conn ); } done: