- void AddData(unsigned char* data, int data_length)
- {
- //printf("ADDDATA\n");
- buffer.append((const char*)data, data_length);
- this->NextFrameSize();
- //printf("SIZE=%d %d\n",buffer.length(), data_length);
- }
-
- void NextFrameSize()
- {
- if ((!amount_expected) && (buffer.length() >= 4))
- {
- /* We have enough to read an int -
- * Yes, this is safe, but its ugly. Give me
- * a nicer way to read 4 bytes from a binary
- * stream, and push them into a 32 bit int,
- * and i'll consider replacing this.
- */
- amount_expected = ntohl((buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0]);
- //printf("EXPECT: %02x %02x %02x %02x\n", buffer[0], buffer[1], buffer[2], buffer[3]);
- buffer = buffer.substr(4);
- //printf("NEXTFRAME FS=%d SIZE=%d\n",amount_expected, buffer.length());
- }
- }
-
- int GetFrame(unsigned char* frame, int maxsize)
- {
- if (amount_expected)
- {
- /* We know how much we're expecting...
- * Do we have enough yet?
- */
- if (buffer.length() >= amount_expected)
- {
- int j = 0;
- for (unsigned int i = 0; i < amount_expected; i++, j++)
- frame[i] = buffer[i];
-
- buffer = buffer.substr(j);
- amount_expected = 0;
- NextFrameSize();
- return j;
- }
- }
- /* Not enough for a frame yet, COME AGAIN! */
- return 0;
- }
-};
-
-/** Represents an ZIP user's extra data