- const char *Err = NULL;
- eReadState Finished = eBufferNotEmpty;
-
- become_session(IO->CitContext);
-
- while ((Finished == eBufferNotEmpty) &&
- ((IO->NextState == eReadMessage)||
- (IO->NextState == eReadMore)||
- (IO->NextState == eReadFile)||
- (IO->NextState == eReadPayload)))
- {
- if (IO->RecvBuf.nBlobBytesWanted != 0) {
-
- }
- else { /* Reading lines... */
-//// lex line reply in callback, or do it ourselves. as nnn-blabla means continue reading in SMTP
- if ((IO->NextState == eReadFile) &&
- (Finished == eBufferNotEmpty))
- {
- Finished = WriteIOBAlreadyRead(&IO->IOB, &Err);
- if (Finished == eReadSuccess)
- {
- IO->NextState = eSendReply;
- }
- }
- else if (IO->LineReader)
- Finished = IO->LineReader(IO);
- else
- Finished = StrBufChunkSipLine(IO->IOBuf, &IO->RecvBuf);
-
- switch (Finished) {
- case eMustReadMore: /// read new from socket...
- break;
- case eBufferNotEmpty: /* shouldn't happen... */
- case eReadSuccess: /// done for now...
- break;
- case eReadFail: /// WHUT?
- ///todo: shut down!
- break;
- }
-
- }
-
- if (Finished != eMustReadMore) {
- assert(IO->ReadDone);
- ev_io_stop(event_base, &IO->recv_event);
- IO->NextState = IO->ReadDone(IO);
- Finished = StrBufCheckBuffer(&IO->RecvBuf);
- }
- }
-