diff --git a/src/SDK_EthernetTap.cpp b/src/SDK_EthernetTap.cpp index 1b83fc8..c30163e 100644 --- a/src/SDK_EthernetTap.cpp +++ b/src/SDK_EthernetTap.cpp @@ -2055,28 +2055,40 @@ void NetconEthernetTap::handleConnect(PhySocket *sock, PhySocket *rpcSock, Conne // lwIP #if defined(SDK_LWIP) - struct sockaddr_in *rawAddr = (struct sockaddr_in *) &connect_rpc->addr; - int port = lwipstack->__lwip_ntohs(rawAddr->sin_port); - ip_addr_t connAddr = convert_ip(rawAddr); - int err = 0, ip = rawAddr->sin_addr.s_addr; + ip_addr_t ba; char addrstr[INET6_ADDRSTRLEN]; + struct sockaddr_in6 *rawAddr = (struct sockaddr_in6 *) &connect_rpc->addr; struct sockaddr *addr = (struct sockaddr*)rawAddr; - if(addr->sa_family == AF_INET) { - struct sockaddr_in *connaddr = (struct sockaddr_in *)addr; - inet_ntop(AF_INET, &(connaddr->sin_addr), addrstr, INET_ADDRSTRLEN); - sprintf(addrstr, "%s:%d", addrstr, lwipstack->__lwip_ntohs(connaddr->sin_port)); - } - if(addr->sa_family == AF_INET6) { - struct sockaddr_in6 *connaddr6 = (struct sockaddr_in6 *)addr; - inet_ntop(AF_INET6, &(connaddr6->sin6_addr), addrstr, INET6_ADDRSTRLEN); - sprintf(addrstr, "%s:%d", addrstr, lwipstack->__lwip_ntohs(connaddr6->sin6_port)); - } + int err, port = lwipstack->__lwip_ntohs(rawAddr->sin6_port); + + // ipv4 + #if defined(SDK_IPV4) + //ip4_addr_t ba; + if(addr->sa_family == AF_INET) { + struct sockaddr_in *connaddr = (struct sockaddr_in *)addr; + inet_ntop(AF_INET, &(connaddr->sin_addr), addrstr, INET_ADDRSTRLEN); + sprintf(addrstr, "%s:%d", addrstr, lwipstack->__lwip_ntohs(connaddr->sin_port)); + } + #endif + + // ipv6 + #if defined(SDK_IPV6) + //ip6_addr_t ba; + struct sockaddr_in6 *in6 = (struct sockaddr_in6*)&connect_rpc->addr; + in6_to_ip6((ip6_addr *)&ba, in6); + + if(addr->sa_family == AF_INET6) { + struct sockaddr_in6 *connaddr6 = (struct sockaddr_in6 *)addr; + inet_ntop(AF_INET6, &(connaddr6->sin6_addr), addrstr, INET6_ADDRSTRLEN); + sprintf(addrstr, "%s:%d", addrstr, lwipstack->__lwip_ntohs(connaddr6->sin6_port)); + } + #endif DEBUG_INFO("addr=%s", addrstr); if(conn->type == SOCK_DGRAM) { // Generates no network traffic - if((err = lwipstack->__udp_connect(conn->UDP_pcb,&connAddr,port)) < 0) + if((err = lwipstack->__udp_connect(conn->UDP_pcb,(ip_addr_t *)&ba,port)) < 0) DEBUG_ERROR("error while connecting to with UDP"); lwipstack->__udp_recv(conn->UDP_pcb, nc_udp_recved, new Larg(this, conn)); sendReturnValue(rpcSock, 0, ERR_OK); @@ -2095,13 +2107,7 @@ void NetconEthernetTap::handleConnect(PhySocket *sock, PhySocket *rpcSock, Conne sendReturnValue(rpcSock, -1, EAGAIN); return; } - - static ip_addr_t ba; - - IP6_ADDR2(&ba, 0xfd56,0x5799,0xd8f6,0x1238,0x8c99,0x9322,0x30ce,0x418a); - - - if((err = lwipstack->__tcp_connect(conn->TCP_pcb,&ba,port,nc_connected)) < 0) + if((err = lwipstack->__tcp_connect(conn->TCP_pcb,(ip_addr_t *)&ba,port,nc_connected)) < 0) { if(err == ERR_ISCONN) { sendReturnValue(rpcSock, -1, EISCONN); // Already in connected state