diff --git a/ffserver.c b/ffserver.c index 1b5d4a049f..3fc8250a51 100644 --- a/ffserver.c +++ b/ffserver.c @@ -125,6 +125,8 @@ typedef struct FFStream { /* feed specific */ int feed_opened; /* true if someone if writing to feed */ int is_feed; /* true if it is a feed */ + int conns_served; + INT64 bytes_served; INT64 feed_max_size; /* maximum storage size */ INT64 feed_write_index; /* current write position in feed (it wraps round) */ INT64 feed_size; /* current size of feed */ @@ -272,7 +274,7 @@ static int http_server(struct sockaddr_in my_addr) /* need to catch errors */ c->poll_entry = poll_entry; poll_entry->fd = fd; - poll_entry->events = 0; + poll_entry->events = POLLIN;/* Maybe this will work */ poll_entry++; break; default: @@ -398,6 +400,8 @@ static int handle_http(HTTPContext *c, long cur_time) } } else { c->buffer_ptr += len; + c->stream->bytes_served += len; + c->data_count += len; if (c->buffer_ptr >= c->buffer_end) { /* if error, exit */ if (c->http_error) @@ -432,7 +436,7 @@ static int handle_http(HTTPContext *c, long cur_time) break; case HTTPSTATE_WAIT_FEED: /* no need to read if no events */ - if (c->poll_entry->revents & (POLLERR | POLLHUP)) + if (c->poll_entry->revents & (POLLIN | POLLERR | POLLHUP)) return -1; /* nothing to do, we'll be waken up by incoming feed packets */ @@ -647,6 +651,7 @@ static int http_parse_request(HTTPContext *c) } c->stream = stream; + stream->conns_served++; /* XXX: add there authenticate and IP match */ @@ -770,79 +775,113 @@ static void compute_stats(HTTPContext *c) q += sprintf(q, "
Path | Format | Bit rate (kbits/s) | Video | Audio | Feed\n");
+ q += sprintf(q, "
Feed %s", stream->filename); + q += sprintf(q, "
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
# | File | IP | State | Size\n"); c1 = first_http_ctx; i = 0; - while (c1 != NULL) { + while (c1 != NULL && q < (char *) c->buffer + sizeof(c->buffer) - 2048) { i++; p = inet_ntoa(c1->from_addr.sin_addr); q += sprintf(q, " | |||||||||||||||||||||||||||||||||||||||||||||||||||||
%d | %s%s | %s | %s | %Ld\n",
@@ -903,7 +942,7 @@ static void compute_stats(HTTPContext *c)
/* date */
ti = time(NULL);
p = ctime(&ti);
- q += sprintf(q, " Generated at %s", p); + q += sprintf(q, " Generated at %s", p); q += sprintf(q, " |