From 721d2371207eef15d0545a6a14cb7a782184f4f4 Mon Sep 17 00:00:00 2001 From: jani Date: Thu, 23 Jan 2003 16:46:01 +0000 Subject: [PATCH] Fixes so that UDP connect() works.Enable generation of ICMP destination unreachable when the port is unavailable --- src/api/sockets.c | 3 ++- src/core/udp.c | 13 ++++--------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/api/sockets.c b/src/api/sockets.c index cbaf573f..f71fa9af 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -272,6 +272,7 @@ lwip_recvfrom(int s, void *mem, int len, unsigned int flags, port = netbuf_fromport(buf); ((struct sockaddr_in *)from)->sin_addr.s_addr = addr->addr; ((struct sockaddr_in *)from)->sin_port = port; + ((struct sockaddr_in *)from)->sin_family = AF_INET; *fromlen = sizeof(struct sockaddr_in); } @@ -358,7 +359,7 @@ lwip_sendto(int s, void *data, int size, unsigned int flags, remote_addr.addr = ((struct sockaddr_in *)to)->sin_addr.s_addr; remote_port = ((struct sockaddr_in *)to)->sin_port; - netconn_connect(sock->conn, &remote_addr, remote_port); + netconn_connect(sock->conn, &remote_addr, ntohs(remote_port)); ret = lwip_send(s, data, size, flags); diff --git a/src/core/udp.c b/src/core/udp.c index 81608f54..88d8d163 100644 --- a/src/core/udp.c +++ b/src/core/udp.c @@ -28,7 +28,7 @@ * * Author: Adam Dunkels * - * $Id: udp.c,v 1.11 2003/01/22 16:18:05 jani Exp $ + * $Id: udp.c,v 1.12 2003/01/23 16:46:01 jani Exp $ */ /*-----------------------------------------------------------------------------------*/ @@ -217,9 +217,8 @@ udp_input(struct pbuf *p, struct netif *inp) /* Check checksum if this is a match or if it was directed at us. */ - /* if(pcb != NULL || - ip_addr_cmp(&inp->ip_addr, &iphdr->dest)) {*/ - if(pcb != NULL) { + if(pcb != NULL || ip_addr_cmp(&inp->ip_addr, &iphdr->dest)) + { DEBUGF(UDP_DEBUG, ("udp_input: calculating checksum\n")); pbuf_header(p, UDP_HLEN); #ifdef IPv6 @@ -266,7 +265,7 @@ udp_input(struct pbuf *p, struct netif *inp) #if LWIP_SNMP > 0 snmp_inc_udpindatagrams(); #endif - pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src), src); + pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src), udphdr->src); } else { DEBUGF(UDP_DEBUG, ("udp_input: not for us.\n")); @@ -276,10 +275,6 @@ udp_input(struct pbuf *p, struct netif *inp) if(!ip_addr_isbroadcast(&iphdr->dest, &inp->netmask) && !ip_addr_ismulticast(&iphdr->dest)) { - /* deconvert from host to network byte order */ - udphdr->src = htons(udphdr->src); - udphdr->dest = htons(udphdr->dest); - /* adjust pbuf pointer */ p->payload = iphdr; icmp_dest_unreach(p, ICMP_DUR_PORT);