public String packet_inspect() { StringBuffer hwaddr_sb = new StringBuffer(); String sep = ""; for (byte b: hwaddr()) { hwaddr_sb.append(sep); sep = ":"; hwaddr_sb.append(String.format("%02x", b)); } return "PACKET[protocol=0 " + interfaceName + " hatype=" + hatype() + " HOST hwaddr=" + hwaddr_sb + "]"; }
public String packet_inspect() { StringBuffer hwaddr_sb = new StringBuffer(); String sep = ""; for (byte b: hwaddr()) { hwaddr_sb.append(sep); sep = ":"; hwaddr_sb.append(String.format("%02x", b)); } return "PACKET[protocol=0 " + interfaceName + " hatype=" + hatype() + " HOST hwaddr=" + hwaddr_sb + "]"; }
@JRubyMethod(name = {"to_sockaddr", "to_s"}) public IRubyObject to_sockaddr(ThreadContext context) { switch (getAddressFamily()) { case AF_INET: case AF_INET6: InetAddress inetAddress = ((InetSocketAddress) socketAddress).getAddress(); int port = ((InetSocketAddress) socketAddress).getPort(); return Sockaddr.pack_sockaddr_in(context, port, inetAddress.getHostAddress()); case AF_UNIX: return Sockaddr.pack_sockaddr_un(context, getUnixSocketAddress().path()); case AF_UNSPEC: ByteArrayOutputStream bufS = new ByteArrayOutputStream(); DataOutputStream ds = new DataOutputStream(bufS); try { // struct sockaddr_ll { (see: man 7 packet) ds.writeShort(swapShortEndian(AF_PACKET)); // unsigned short sll_family; /* Always AF_PACKET */ ds.writeShort(0); // unsigned short sll_protocol; /* Physical layer protocol */ ds.writeInt(swapIntEndian(networkInterface.getIndex())); // int sll_ifindex; /* Interface number */ ds.writeShort(swapShortEndian(hatype())); // unsigned short sll_hatype; /* ARP hardware type */ ds.writeByte(PACKET_HOST); // unsigned char sll_pkttype; /* Packet type */ byte[] hw = hwaddr(); ds.writeByte(hw.length); // unsigned char sll_halen; /* Length of address */ ds.write(hw); // unsigned char sll_addr[8]; /* Physical layer address */ } catch (IOException e) { throw SocketUtils.sockerr(context.runtime, "to_sockaddr: " + e.getMessage()); } return context.runtime.newString(new ByteList(bufS.toByteArray(), false)); } return context.nil; }
@JRubyMethod(name = {"to_sockaddr", "to_s"}) public IRubyObject to_sockaddr(ThreadContext context) { switch (getAddressFamily()) { case AF_INET: case AF_INET6: InetAddress inetAddress = ((InetSocketAddress) socketAddress).getAddress(); int port = ((InetSocketAddress) socketAddress).getPort(); return Sockaddr.pack_sockaddr_in(context, port, inetAddress.getHostAddress()); case AF_UNIX: return Sockaddr.pack_sockaddr_un(context, getUnixSocketAddress().path()); case AF_UNSPEC: ByteArrayOutputStream bufS = new ByteArrayOutputStream(); DataOutputStream ds = new DataOutputStream(bufS); try { // struct sockaddr_ll { (see: man 7 packet) ds.writeShort(swapShortEndian(AF_PACKET)); // unsigned short sll_family; /* Always AF_PACKET */ ds.writeShort(0); // unsigned short sll_protocol; /* Physical layer protocol */ ds.writeInt(swapIntEndian(networkInterface.getIndex())); // int sll_ifindex; /* Interface number */ ds.writeShort(swapShortEndian(hatype())); // unsigned short sll_hatype; /* ARP hardware type */ ds.writeByte(PACKET_HOST); // unsigned char sll_pkttype; /* Packet type */ byte[] hw = hwaddr(); ds.writeByte(hw.length); // unsigned char sll_halen; /* Length of address */ ds.write(hw); // unsigned char sll_addr[8]; /* Physical layer address */ } catch (IOException e) { throw SocketUtils.sockerr(context.runtime, "to_sockaddr: " + e.getMessage()); } return context.runtime.newString(new ByteList(bufS.toByteArray(), false)); } return context.nil; }