]> granicus.if.org Git - libevent/commitdiff
Move SSL rate-limit enforcement into bytes_to_read()
authorNick Mathewson <nickm@torproject.org>
Thu, 17 Nov 2011 16:54:07 +0000 (11:54 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 17 Nov 2011 16:54:07 +0000 (11:54 -0500)
bufferevent_openssl.c

index 7d822d9ef78e7c2b164c4cfb3ce3fbce45ccbdc5..07dcdf8edb95a5f7cc2adb0aff5bc18c237848b0 100644 (file)
@@ -711,6 +711,10 @@ bytes_to_read(struct bufferevent_openssl *bev)
 {
        struct evbuffer *input = bev->bev.bev.input;
        struct event_watermark *wm = &bev->bev.bev.wm_read;
+       int result = READ_DEFAULT;
+       ev_ssize_t limit;
+       /* XXX 99% of this is generic code that nearly all bufferevents will
+        * want. */
 
        if (bev->write_blocked_on_read) {
                return 0;
@@ -729,10 +733,18 @@ bytes_to_read(struct bufferevent_openssl *bev)
                        return 0;
                }
 
-               return wm->high - evbuffer_get_length(input);
+               result = wm->high - evbuffer_get_length(input);
+       } else {
+               result = READ_DEFAULT;
+       }
+
+       /* Respect the rate limit */
+       limit = _bufferevent_get_read_max(&bev->bev);
+       if (result > limit) {
+               result = limit;
        }
 
-       return READ_DEFAULT;
+       return result;
 }