Hacker News new | ask | show | jobs
by jpollock 1151 days ago
phind needed two additional prompts to get to correct code.

It needed:

1) write a function in java to decode a rfc 3588 diameter header

2) 32 bit values will not fit into a java int, please fix the code.

3) 24 bit values will not fit into a java int, please fix the code.

I think I'm going to have to come up with a more complicated problem!

Pretty impressively, this is what it produced:

  public class DiameterHeader {
    private int version;
    private long messageLength;
    private int commandFlags;
    private long commandCode;
    private long applicationId;
    private long hopByHopId;
    private long endToEndId;

    public DiameterHeader(byte[] data) {
        if (data == null || data.length != 20) {
            throw new IllegalArgumentException("Invalid Diameter header data");
        }

        version = data[0] & 0xFF;
        messageLength = ((long) data[1] & 0xFF) << 16 | ((long) data[2] & 0xFF) << 8 | ((long) data[3] & 0xFF);
        commandFlags = data[4] & 0xFF;
        commandCode = ((long) data[5] & 0xFF) << 16 | ((long) data[6] & 0xFF) << 8 | ((long) data[7] & 0xFF);
        applicationId = (((long) data[8] & 0xFF) << 24) | (((long) data[9] & 0xFF) << 16) | (((long) data[10] & 0xFF) << 8) | ((long) data[11] & 0xFF);
        hopByHopId = (((long) data[12] & 0xFF) << 24) | (((long) data[13] & 0xFF) << 16) | (((long) data[14] & 0xFF) << 8) | ((long) data[15] & 0xFF);
        endToEndId = (((long) data[16] & 0xFF) << 24) | (((long) data[17] & 0xFF) << 16) | (((long) data[18] & 0xFF) << 8) | ((long) data[19] & 0xFF);
    }

    // Getters for the fields
  }