#if UIP_UDP
/* UDP input processing. */
udp_input:
/* UDP processing is really just a hack. We don't do anything to the
UDP/IP headers, but let the UDP application do all the hard
work. If the application sets uip_slen, it has a packet to
send. */
#if UIP_UDP_CHECKSUMS
uip_len = uip_len - UIP_IPUDPH_LEN;
uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) {
UIP_STAT(++uip_stat.udp.drop);
UIP_STAT(++uip_stat.udp.chkerr);
UIP_LOG("udp: bad checksum.");
goto drop;
}
#else /* UIP_UDP_CHECKSUMS */
uip_len = uip_len - UIP_IPUDPH_LEN;
#endif /* UIP_UDP_CHECKSUMS */
/*******************************添加代码起始***********************************/
if(uip_udp_conn !=0&&(uip_udp_conn->rport!=UDPBUF->srcport
||uip_udp_conn->ripaddr!=UDPBUF->srcipaddr)) //如果是已经连接并且和接收到的端口号或者IP地址不一致
{
uip_udp_remove(uip_udp_conn); //删除连接
uip_udp_conn->rport=UDPBUF->srcport; //将目的端口设置为收到的远端UDP包的端口
memcpy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr,sizeof(uip_ipaddr_t )); //将目的IP地址设置为收到的远端UDP包的源IP地址
}
if(uip_udp_conn->rport==0) //如果首次接收到某个远端UDP包
{
uip_udp_conn->rport=UDPBUF->srcport; //将目的端口设置为收到的远端UDP包的端口
memcpy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr,sizeof(uip_ipaddr_t )); //将目的IP地址设置为收到的远端UDP包的源IP地址
}
if(uip_udp_conn != 0)
{
uip_udp_bind(uip_udp_conn, HTONS(1999)); //绑定本地端口为LPORT,也就是LPORT-->RPORT 发数据
}
/*******************************添加代码截止***********************************/
/* Demultiplex this UDP packet between the UDP "connections". */