ffserver: reflow handle_connection()

Signed-off-by: Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
This commit is contained in:
Reynaldo H. Verdejo Pinochet 2015-01-24 01:35:39 -03:00
parent 7d3857b7ab
commit eadd66a4af

View File

@ -870,6 +870,7 @@ static void close_connection(HTTPContext *c)
static int handle_connection(HTTPContext *c) static int handle_connection(HTTPContext *c)
{ {
int len, ret; int len, ret;
uint8_t *ptr;
switch(c->state) { switch(c->state) {
case HTTPSTATE_WAIT_REQUEST: case HTTPSTATE_WAIT_REQUEST:
@ -885,16 +886,16 @@ static int handle_connection(HTTPContext *c)
return 0; return 0;
/* read the data */ /* read the data */
read_loop: read_loop:
len = recv(c->fd, c->buffer_ptr, 1, 0); if (!(len = recv(c->fd, c->buffer_ptr, 1, 0)))
return -1;
if (len < 0) { if (len < 0) {
if (ff_neterrno() != AVERROR(EAGAIN) && if (ff_neterrno() != AVERROR(EAGAIN) &&
ff_neterrno() != AVERROR(EINTR)) ff_neterrno() != AVERROR(EINTR))
return -1; return -1;
} else if (len == 0) { break;
return -1; }
} else {
/* search for end of request. */ /* search for end of request. */
uint8_t *ptr;
c->buffer_ptr += len; c->buffer_ptr += len;
ptr = c->buffer_ptr; ptr = c->buffer_ptr;
if ((ptr >= c->buffer + 2 && !memcmp(ptr-2, "\n\n", 2)) || if ((ptr >= c->buffer + 2 && !memcmp(ptr-2, "\n\n", 2)) ||
@ -911,7 +912,7 @@ static int handle_connection(HTTPContext *c)
/* request too long: cannot do anything */ /* request too long: cannot do anything */
return -1; return -1;
} else goto read_loop; } else goto read_loop;
}
break; break;
case HTTPSTATE_SEND_HEADER: case HTTPSTATE_SEND_HEADER:
@ -927,7 +928,8 @@ static int handle_connection(HTTPContext *c)
ff_neterrno() != AVERROR(EINTR)) { ff_neterrno() != AVERROR(EINTR)) {
goto close_connection; goto close_connection;
} }
} else { break;
}
c->buffer_ptr += len; c->buffer_ptr += len;
if (c->stream) if (c->stream)
c->stream->bytes_served += len; c->stream->bytes_served += len;
@ -942,7 +944,6 @@ static int handle_connection(HTTPContext *c)
c->state = HTTPSTATE_SEND_DATA_HEADER; c->state = HTTPSTATE_SEND_DATA_HEADER;
c->buffer_ptr = c->buffer_end = c->buffer; c->buffer_ptr = c->buffer_end = c->buffer;
} }
}
break; break;
case HTTPSTATE_SEND_DATA: case HTTPSTATE_SEND_DATA:
@ -994,7 +995,8 @@ static int handle_connection(HTTPContext *c)
ff_neterrno() != AVERROR(EINTR)) { ff_neterrno() != AVERROR(EINTR)) {
goto close_connection; goto close_connection;
} }
} else { break;
}
c->buffer_ptr += len; c->buffer_ptr += len;
c->data_count += len; c->data_count += len;
if (c->buffer_ptr >= c->buffer_end) { if (c->buffer_ptr >= c->buffer_end) {
@ -1002,7 +1004,6 @@ static int handle_connection(HTTPContext *c)
av_freep(&c->pb_buffer); av_freep(&c->pb_buffer);
start_wait_request(c, 1); start_wait_request(c, 1);
} }
}
break; break;
case RTSPSTATE_SEND_PACKET: case RTSPSTATE_SEND_PACKET:
if (c->poll_entry->revents & (POLLERR | POLLHUP)) { if (c->poll_entry->revents & (POLLERR | POLLHUP)) {
@ -1021,14 +1022,14 @@ static int handle_connection(HTTPContext *c)
av_freep(&c->packet_buffer); av_freep(&c->packet_buffer);
return -1; return -1;
} }
} else { break;
}
c->packet_buffer_ptr += len; c->packet_buffer_ptr += len;
if (c->packet_buffer_ptr >= c->packet_buffer_end) { if (c->packet_buffer_ptr >= c->packet_buffer_end) {
/* all the buffer was sent : wait for a new request */ /* all the buffer was sent : wait for a new request */
av_freep(&c->packet_buffer); av_freep(&c->packet_buffer);
c->state = RTSPSTATE_WAIT_REQUEST; c->state = RTSPSTATE_WAIT_REQUEST;
} }
}
break; break;
case HTTPSTATE_READY: case HTTPSTATE_READY:
/* nothing to do */ /* nothing to do */