{
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;
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;
}