case 0x04: { /* cmd_readmem */
const unsigned char *ptr, *end;
ret = recvwait(bss, clientfd, buffer, 8);
CHECK_ERROR(ret < 0);
ptr = ((const unsigned char **) buffer)[0];
end = ((const unsigned char **) buffer)[1];
while (ptr != end) {
int len, i;
len = (int) (end - ptr);
if (len > DATA_BUFFER_SIZE)
len = DATA_BUFFER_SIZE;
for (i = 0; i < len; i++)
if (ptr[i] != 0) break;
if (i == len) { // all zero!
ret = sendbyte(bss, clientfd, 0xb0);
CHECK_ERROR(ret < 0);
} else {
/*TODO Compress ptr, pass status code 0xbd, size of compressed and data in buffer, let 1 + 4 + len(compressed) to be read */
memcpy(buffer + 1, ptr, len);
buffer[0] = 0xbd;
ret = sendwait(bss, clientfd, buffer, len + 1);
CHECK_ERROR(ret < 0);
}
ret = checkbyte(clientfd);
if (ret == 0xcc) /* GCFAIL */
goto next_cmd;
ptr += len;
}
break;
}