10l, dont make bandwidth statistics negative when feed stops being sent (it was decre...
authorAlex Beregszaszi <alex@rtfs.hu>
Fri, 14 Oct 2005 17:29:00 +0000 (17:29 +0000)
committerAlex Beregszaszi <alex@rtfs.hu>
Fri, 14 Oct 2005 17:29:00 +0000 (17:29 +0000)
Originally committed as revision 4642 to svn://svn.ffmpeg.org/ffmpeg/trunk

ffserver.c

index 913520fa4c75dd333e59ab22c64c874104b059dc..78db9be5268dbbf60a281eb34bb9e16b02540125 100644 (file)
@@ -100,6 +100,7 @@ typedef struct HTTPContext {
     long timeout;
     uint8_t *buffer_ptr, *buffer_end;
     int http_error;
+    int post;
     struct HTTPContext *next;
     int got_key_frame; /* stream 0 => 1, stream 1 => 2, stream 2=> 4 */
     int64_t data_count;
@@ -767,7 +768,7 @@ static void close_connection(HTTPContext *c)
     for(i=0; i<ctx->nb_streams; i++) 
         av_free(ctx->streams[i]) ; 
 
-    if (c->stream)
+    if (c->stream && !c->post && c->stream->stream_type == STREAM_TYPE_LIVE)
         current_bandwidth -= c->stream->bandwidth;
     av_freep(&c->pb_buffer);
     av_freep(&c->packet_buffer);
@@ -1170,7 +1171,6 @@ enum RedirType {
 static int http_parse_request(HTTPContext *c)
 {
     char *p;
-    int post;
     enum RedirType redir_type;
     char cmd[32];
     char info[1024], *filename;
@@ -1188,9 +1188,9 @@ static int http_parse_request(HTTPContext *c)
     pstrcpy(c->method, sizeof(c->method), cmd);
 
     if (!strcmp(cmd, "GET"))
-        post = 0;
+        c->post = 0;
     else if (!strcmp(cmd, "POST"))
-        post = 1;
+        c->post = 1;
     else
         return -1;
 
@@ -1292,11 +1292,11 @@ static int http_parse_request(HTTPContext *c)
         }
     }
 
-    if (post == 0 && stream->stream_type == STREAM_TYPE_LIVE) {
+    if (c->post == 0 && stream->stream_type == STREAM_TYPE_LIVE) {
         current_bandwidth += stream->bandwidth;
     }
     
-    if (post == 0 && max_bandwidth < current_bandwidth) {
+    if (c->post == 0 && max_bandwidth < current_bandwidth) {
         c->http_error = 200;
         q = c->buffer;
         q += snprintf(q, q - (char *) c->buffer + c->buffer_size, "HTTP/1.0 200 Server too busy\r\n");
@@ -1439,7 +1439,7 @@ static int http_parse_request(HTTPContext *c)
 
     /* XXX: add there authenticate and IP match */
 
-    if (post) {
+    if (c->post) {
         /* if post, it means a feed is being sent */
         if (!stream->is_feed) {
             /* However it might be a status report from WMP! Lets log the data