static sw_result sw_socket_udp_recvfrom( sw_socket self, sw_octets buffer, sw_size_t max, sw_size_t * len, sw_ipv4_address * from, sw_port * from_port, sw_ipv4_address * dest, sw_uint32 * interface_index) { struct sockaddr_in from_addr; struct in_addr dest_addr; sw_result err; err = sw_socket_udp_really_recvfrom(self, buffer, max, len, (struct sockaddr*) &from_addr, sizeof(from_addr), &dest_addr, interface_index); sw_check_okay(err, exit); sw_ipv4_address_init_from_saddr(from, from_addr.sin_addr.s_addr); *from_port = ntohs(from_addr.sin_port); if (dest) { sw_ipv4_address_init_from_saddr(dest, dest_addr.s_addr); } exit: return err; }
static sw_result HOWL_API query_record_reply( sw_discovery session, sw_discovery_oid oid, sw_discovery_query_record_status status, sw_uint32 interface_index, sw_const_string fullname, sw_uint16 rrtype, sw_uint16 rrclass, sw_uint16 rrdatalen, sw_const_octets rrdata, sw_uint32 ttl, sw_opaque extra) { sw_ipv4_address address; fprintf(stderr, "interface index = 0x%x, fullname is %s\n", interface_index, fullname); if ((rrtype == 1) && (rrclass == 1)) { sw_ipv4_address address; sw_char name[16]; sw_ipv4_address_init_from_saddr(&address, *(sw_saddr*) rrdata); fprintf(stderr, "address is %s\n", sw_ipv4_address_name(address, name, sizeof(name))); } return SW_OKAY; }
sw_ipv4_address sw_socket_ipv4_address( sw_socket self) { sw_ipv4_address address; sw_ipv4_address_init_from_saddr(&address, self->m_addr.sin_addr.s_addr); return address; }
static sw_result sw_socket_tcp_recvfrom( sw_socket self, sw_octets buffer, sw_size_t max, sw_size_t * len, sw_ipv4_address * from, sw_port * from_port, sw_ipv4_address * dest, sw_uint32 * interface_index) { SW_UNUSED_PARAM(dest); SW_UNUSED_PARAM(interface_index); sw_ipv4_address_init_from_saddr(from, self->m_dest_addr.sin_addr.s_addr); *from_port = ntohs(self->m_dest_addr.sin_port); return sw_socket_tcp_recv(self, buffer, max, len); }