- IOBuffer IOB;
- StrBuf *Line, *OutBuf;
- int Finished = 0;
-
- memset(&IOB, 0, sizeof(IOB));
- IOB.Buf = NewStrBufPlain(NULL, SIZ);
- IOB.fd = serv_sock;
- Line = NewStrBufPlain(NULL, SIZ);
- OutBuf = NewStrBufPlain(NULL, SIZ * 10);
-
- while (!Finished && (StrBuf_read_one_chunk_callback (serv_sock, 0, &IOB) >= 0))
- {
- eReadState State;
-
- State = eReadSuccess;
- while (!Finished && (State == eReadSuccess))
- {
- if (IOBufferStrLength(&IOB) == 0)
- {
- State = eMustReadMore;
- break;
- }
- State = StrBufChunkSipLine(Line, &IOB);
- switch (State)
- {
- case eReadSuccess:
- if (!strcmp(ChrPtr(Line), "000"))
- {
- Finished = 1;
- break;
- }
- StrBufAppendBuf(OutBuf, Line, 0);
- StrBufAppendBufPlain(OutBuf, HKEY("\n"), 0);
- alarm(watchdog); /* reset the watchdog timer */
- break;
- case eBufferNotEmpty:
- break;
- case eMustReadMore:
- continue;
- case eReadFail:
- fprintf(stderr, "WTF? Exit!\n");
- exit(-1);
- break;
- }
- if (StrLength(OutBuf) > 5*SIZ)
- {
- fwrite(ChrPtr(OutBuf), 1, StrLength(OutBuf), stdout);
- FlushStrBuf(OutBuf);
- }
- }
- }
- if (StrLength(OutBuf) > 0)
- {
- fwrite(ChrPtr(OutBuf), 1, StrLength(OutBuf), stdout);