Skip to content

Commit 4e70f02

Browse files
committed
init
Signed-off-by: George Lemon <[email protected]>
1 parent ecd4a93 commit 4e70f02

File tree

9 files changed

+792
-15
lines changed

9 files changed

+792
-15
lines changed

README.md

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
1+
<p align="center">👑 Nim Bindings for LibEvent</p>
12
<p align="center">
2-
<img src="https://github.com/openpeeps/PKG/blob/main/.github/logo.png" width="90px"><br>
3-
OpenPeeps repository template for developing libraries,<br>projects and other cool things. 👑 Written in Nim language
3+
<code>nimble install libevent</code>
44
</p>
55

66
<p align="center">
7-
<code>nimble install {PKG}</code>
7+
<a href="https://openpeeps.github.io/libevent/">API reference</a><br>
8+
<img src="https://github.com/openpeeps/libevent/workflows/test/badge.svg" alt="Github Actions"> <img src="https://github.com/openpeeps/libevent/workflows/docs/badge.svg" alt="Github Actions">
89
</p>
910

10-
<p align="center">
11-
<a href="https://github.com/">API reference</a><br>
12-
<img src="https://github.com/openpeeps/pistachio/workflows/test/badge.svg" alt="Github Actions"> <img src="https://github.com/openpeeps/pistachio/workflows/docs/badge.svg" alt="Github Actions">
13-
</p>
11+
## About
12+
Libevent is an event notification library with a focus on asynchronous IO. It provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. It also supports callbacks due to signals or regular timeouts.
13+
14+
Libevent additionally provides a sophisticated framework for buffered network IO, with support for sockets, filters, rate-limiting, SSL, zero-copy file transmission, and IOCP. Libevent includes support for several useful protocols, including DNS, HTTP, and a minimal RPC framework.
1415

15-
## 😍 Key Features
16-
- [x] Open Source | `MIT` License
17-
- [x] Written in Nim language
16+
### Requirements
17+
- [Libevent](https://libevent.org/) 2.1.12 or later
18+
- Nim 2.0 or later
1819

19-
## Examples
20-
...
2120

2221
### ❤ Contributions & Support
23-
- 🐛 Found a bug? [Create a new Issue](/issues)
24-
- 👋 Wanna help? [Fork it!](/fork)
22+
- 🐛 Found a bug? [Create a new Issue](https://github.com/openpeeps/libevent-nim/issues)
23+
- 👋 Wanna help? [Fork it!](https://github.com/openpeeps/libevent-nim/fork)
2524
- 😎 [Get €20 in cloud credits from Hetzner](https://hetzner.cloud/?ref=Hm0mYGM9NxZ4)
2625

2726
### 🎩 License
28-
{PKG} | MIT license. [Made by Humans from OpenPeeps](https://github.com/openpeeps).<br>
27+
MIT license. [Made by Humans from OpenPeeps](https://github.com/openpeeps).<br>
2928
Copyright OpenPeeps & Contributors &mdash; All rights reserved.

libevent.nimble

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Package
2+
3+
version = "0.1.0"
4+
author = "George Lemon"
5+
description = "Bindings for Libevent"
6+
license = "MIT"
7+
srcDir = "src"
8+
9+
10+
# Dependencies
11+
12+
requires "nim >= 2.0.0"

src/libevent.nim

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Nim bindings for Libevent HTTP server.
2+
#
3+
# Official page: https://libevent.org/
4+
#
5+
# This module implements high-level API bindings for
6+
# creating an HTTP server using Libevent.
7+
#
8+
# (c) 2025 George Lemon | MIT License
9+
# Made by Humans from OpenPeeps
10+
# https://github.com/openpeeps/libevent-nim
11+
12+
{.passL:"-L/opt/local/lib -levent", passC:"-I /opt/local/include".}
13+
14+
import ./libevent/bindings/[buffer, bufferevent, event, http, listener]
15+
export buffer, bufferevent, event, http, listener

src/libevent/bindings/buffer.nim

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# Nim bindings for Libevent HTTP server.
2+
#
3+
# Official page: https://libevent.org/
4+
#
5+
# (c) 2025 George Lemon | MIT License
6+
# Made by Humans from OpenPeeps
7+
# https://github.com/openpeeps/libevent-nim
8+
9+
import ./event
10+
11+
{.push, importc, header:"<event2/buffer.h>".}
12+
13+
type
14+
Evbuffer* = object
15+
EvbufferPtr* = object
16+
pos*: int64
17+
internal*: array[2, pointer] # Opaque, do not access directly
18+
19+
EvbufferIovec* = object
20+
iov_base*: pointer
21+
iov_len*: csize_t
22+
23+
EvbufferCbInfo* = object
24+
orig_size*: csize_t
25+
n_added*: csize_t
26+
n_deleted*: csize_t
27+
28+
EvbufferCbEntry* = object
29+
30+
EvbufferCbFunc* = proc(buf: ptr Evbuffer, info: ptr EvbufferCbInfo, arg: pointer) {.cdecl.}
31+
EvbufferRefCleanupCb* = proc(data: pointer, datalen: csize_t, extra: pointer) {.cdecl.}
32+
EvbufferFileSegment* = object
33+
EvbufferFileSegmentCleanupCb* = proc(seg: ptr EvbufferFileSegment, flags: cint, arg: pointer) {.cdecl.}
34+
35+
const
36+
EVBUFFER_FLAG_DRAINS_TO_FD* = 1
37+
EVBUF_FS_CLOSE_ON_FREE* = 0x01
38+
EVBUF_FS_DISABLE_MMAP* = 0x02
39+
EVBUF_FS_DISABLE_SENDFILE* = 0x04
40+
EVBUF_FS_DISABLE_LOCKING* = 0x08
41+
EVBUFFER_CB_ENABLED* = 1
42+
43+
type
44+
EvbufferEolStyle* = enum
45+
EVBUFFER_EOL_ANY,
46+
EVBUFFER_EOL_CRLF,
47+
EVBUFFER_EOL_CRLF_STRICT,
48+
EVBUFFER_EOL_LF,
49+
EVBUFFER_EOL_NUL
50+
51+
EvbufferPtrHow* = enum
52+
EVBUFFER_PTR_SET,
53+
EVBUFFER_PTR_ADD
54+
55+
56+
# Core buffer functions
57+
proc evbuffer_new*(): ptr Evbuffer
58+
proc evbuffer_free*(buf: ptr Evbuffer)
59+
proc evbuffer_enable_locking*(buf: ptr Evbuffer, lock: pointer): cint
60+
proc evbuffer_lock*(buf: ptr Evbuffer)
61+
proc evbuffer_unlock*(buf: ptr Evbuffer)
62+
proc evbuffer_set_flags*(buf: ptr Evbuffer, flags: uint64): cint
63+
proc evbuffer_clear_flags*(buf: ptr Evbuffer, flags: uint64): cint
64+
proc evbuffer_get_length*(buf: ptr Evbuffer): csize_t
65+
proc evbuffer_get_contiguous_space*(buf: ptr Evbuffer): csize_t
66+
proc evbuffer_expand*(buf: ptr Evbuffer, datlen: csize_t): cint
67+
proc evbuffer_reserve_space*(buf: ptr Evbuffer, size: int64, vec: ptr EvbufferIovec, n_vec: cint): cint
68+
proc evbuffer_commit_space*(buf: ptr Evbuffer, vec: ptr EvbufferIovec, n_vecs: cint): cint
69+
proc evbuffer_add*(buf: ptr Evbuffer, data: pointer, datlen: csize_t): cint
70+
proc evbuffer_remove*(buf: ptr Evbuffer, data: pointer, datlen: csize_t): cint
71+
proc evbuffer_copyout*(buf: ptr Evbuffer, data_out: pointer, datlen: csize_t): int64
72+
proc evbuffer_copyout_from*(buf: ptr Evbuffer, pos: ptr EvbufferPtr, data_out: pointer, datlen: csize_t): int64
73+
proc evbuffer_remove_buffer*(src: ptr Evbuffer, dst: ptr Evbuffer, datlen: csize_t): cint
74+
proc evbuffer_readln*(buffer: ptr Evbuffer, n_read_out: ptr csize_t, eol_style: EvbufferEolStyle): cstring
75+
proc evbuffer_add_buffer*(outbuf: ptr Evbuffer, inbuf: ptr Evbuffer): cint
76+
proc evbuffer_add_buffer_reference*(outbuf: ptr Evbuffer, inbuf: ptr Evbuffer): cint
77+
proc evbuffer_add_reference*(outbuf: ptr Evbuffer, data: pointer, datlen: csize_t, cleanupfn: EvbufferRefCleanupCb, cleanupfn_arg: pointer): cint
78+
proc evbuffer_add_file*(outbuf: ptr Evbuffer, fd: cint, offset: int64, length: int64): cint
79+
proc evbuffer_file_segment_new*(fd: cint, offset: int64, length: int64, flags: cuint): ptr EvbufferFileSegment
80+
proc evbuffer_file_segment_free*(seg: ptr EvbufferFileSegment)
81+
proc evbuffer_file_segment_add_cleanup_cb*(seg: ptr EvbufferFileSegment, cb: EvbufferFileSegmentCleanupCb, arg: pointer)
82+
proc evbuffer_add_file_segment*(buf: ptr Evbuffer, seg: ptr EvbufferFileSegment, offset: int64, length: int64): cint
83+
proc evbuffer_add_printf*(buf: ptr Evbuffer, fmt: cstring): cint {.importc, varargs, header: "<event2/buffer.h>".}
84+
proc evbuffer_add_vprintf*(buf: ptr Evbuffer, fmt: cstring, ap: pointer): cint
85+
proc evbuffer_drain*(buf: ptr Evbuffer, len: csize_t): cint
86+
proc evbuffer_write*(buffer: ptr Evbuffer, fd: cint): cint
87+
proc evbuffer_write_atmost*(buffer: ptr Evbuffer, fd: cint, howmuch: int64): cint
88+
proc evbuffer_read*(buffer: ptr Evbuffer, fd: cint, howmuch: cint): cint
89+
proc evbuffer_search*(buffer: ptr Evbuffer, what: cstring, len: csize_t, start: ptr EvbufferPtr): EvbufferPtr
90+
proc evbuffer_search_range*(buffer: ptr Evbuffer, what: cstring, len: csize_t, start: ptr EvbufferPtr, `end`: ptr EvbufferPtr): EvbufferPtr
91+
proc evbuffer_ptr_set*(buffer: ptr Evbuffer, `ptr`: ptr EvbufferPtr, position: csize_t, how: EvbufferPtrHow): cint
92+
proc evbuffer_search_eol*(buffer: ptr Evbuffer, start: ptr EvbufferPtr, eol_len_out: ptr csize_t, eol_style: EvbufferEolStyle): EvbufferPtr
93+
proc evbuffer_peek*(buffer: ptr Evbuffer, len: int64, start_at: ptr EvbufferPtr, vec_out: ptr EvbufferIovec, n_vec: cint): cint
94+
proc evbuffer_add_cb*(buffer: ptr Evbuffer, cb: EvbufferCbFunc, cbarg: pointer): ptr EvbufferCbEntry
95+
proc evbuffer_remove_cb_entry*(buffer: ptr Evbuffer, ent: ptr EvbufferCbEntry): cint
96+
proc evbuffer_remove_cb*(buffer: ptr Evbuffer, cb: EvbufferCbFunc, cbarg: pointer): cint
97+
proc evbuffer_cb_set_flags*(buffer: ptr Evbuffer, cb: ptr EvbufferCbEntry, flags: uint32): cint
98+
proc evbuffer_cb_clear_flags*(buffer: ptr Evbuffer, cb: ptr EvbufferCbEntry, flags: uint32): cint
99+
proc evbuffer_pullup*(buf: ptr Evbuffer, size: int64): ptr uint8
100+
proc evbuffer_prepend*(buf: ptr Evbuffer, data: pointer, size: csize_t): cint
101+
proc evbuffer_prepend_buffer*(dst: ptr Evbuffer, src: ptr Evbuffer): cint
102+
proc evbuffer_freeze*(buf: ptr Evbuffer, at_front: cint): cint
103+
proc evbuffer_unfreeze*(buf: ptr Evbuffer, at_front: cint): cint
104+
proc evbuffer_defer_callbacks*(buffer: ptr Evbuffer, base: ptr event_base): cint
105+
proc evbuffer_add_iovec*(buffer: ptr Evbuffer, vec: ptr EvbufferIovec, n_vec: cint): csize_t
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# Nim bindings for Libevent HTTP server.
2+
#
3+
# Official page: https://libevent.org/
4+
#
5+
# (c) 2025 George Lemon | MIT License
6+
# Made by Humans from OpenPeeps
7+
# https://github.com/openpeeps/libevent-nim
8+
9+
import ./[event, buffer]
10+
import std/[os]
11+
12+
# Bufferevent event codes
13+
const
14+
BEV_EVENT_READING* = 0x01
15+
BEV_EVENT_WRITING* = 0x02
16+
BEV_EVENT_EOF* = 0x10
17+
BEV_EVENT_ERROR* = 0x20
18+
BEV_EVENT_TIMEOUT* = 0x40
19+
BEV_EVENT_CONNECTED* = 0x80
20+
21+
# Bufferevent options
22+
const
23+
BEV_OPT_CLOSE_ON_FREE* = 1 shl 0
24+
BEV_OPT_THREADSAFE* = 1 shl 1
25+
BEV_OPT_DEFER_CALLBACKS* = 1 shl 2
26+
BEV_OPT_UNLOCK_CALLBACKS* = 1 shl 3
27+
28+
# Bufferevent flush modes
29+
type
30+
BuffereventFlushMode* = enum
31+
BEV_NORMAL = 0,
32+
BEV_FLUSH = 1,
33+
BEV_FINISHED = 2
34+
35+
# Bufferevent trigger options
36+
const
37+
BEV_TRIG_IGNORE_WATERMARKS* = 1 shl 16
38+
BEV_TRIG_DEFER_CALLBACKS* = BEV_OPT_DEFER_CALLBACKS
39+
40+
# Bufferevent filter result
41+
type
42+
BuffereventFilterResult* = enum
43+
BEV_OK = 0,
44+
BEV_NEED_MORE = 1,
45+
BEV_ERROR = 2
46+
47+
# Opaque types
48+
type
49+
bufferevent* {.importc: "struct bufferevent", header: "<event2/bufferevent.h>", incompleteStruct.} = object
50+
ev_token_bucket_cfg* {.importc: "struct ev_token_bucket_cfg", header: "<event2/bufferevent.h>", incompleteStruct.} = object
51+
bufferevent_rate_limit_group* {.importc: "struct bufferevent_rate_limit_group", header: "<event2/bufferevent.h>", incompleteStruct.} = object
52+
53+
# Callback types
54+
type
55+
bufferevent_data_cb* = proc(bev: ptr bufferevent, ctx: pointer) {.cdecl.}
56+
bufferevent_event_cb* = proc(bev: ptr bufferevent, what: cshort, ctx: pointer) {.cdecl.}
57+
bufferevent_filter_cb* = proc(
58+
src: ptr Evbuffer,
59+
dst: ptr Evbuffer,
60+
dst_limit: csize_t,
61+
mode: BuffereventFlushMode,
62+
ctx: pointer
63+
): BuffereventFilterResult {.cdecl.}
64+
65+
# Bufferevent API
66+
proc bufferevent_socket_new*(base: ptr event_base, fd: evutil_socket_t, options: cint): ptr bufferevent {.cdecl, importc, header: "<event2/bufferevent.h>".}
67+
proc bufferevent_socket_connect*(bufev: ptr bufferevent, `addr`: pointer, socklen: cint): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
68+
proc bufferevent_socket_connect_hostname*(bufev: ptr bufferevent, evdns_base: pointer, family: cint, hostname: cstring, port: cint): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
69+
proc bufferevent_socket_connect_hostname_hints*(bufev: ptr bufferevent, evdns_base: pointer, hints_in: pointer, hostname: cstring, port: cint): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
70+
proc bufferevent_socket_get_dns_error*(bev: ptr bufferevent): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
71+
proc bufferevent_base_set*(base: ptr event_base, bufev: ptr bufferevent): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
72+
proc bufferevent_get_base*(bev: ptr bufferevent): ptr event_base {.cdecl, importc, header: "<event2/bufferevent.h>".}
73+
proc bufferevent_priority_set*(bufev: ptr bufferevent, pri: cint): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
74+
proc bufferevent_get_priority*(bufev: ptr bufferevent): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
75+
proc bufferevent_free*(bufev: ptr bufferevent) {.cdecl, importc, header: "<event2/bufferevent.h>".}
76+
proc bufferevent_setcb*(bufev: ptr bufferevent, readcb: bufferevent_data_cb, writecb: bufferevent_data_cb, eventcb: bufferevent_event_cb, cbarg: pointer) {.cdecl, importc, header: "<event2/bufferevent.h>".}
77+
proc bufferevent_getcb*(bufev: ptr bufferevent, readcb_ptr: ptr bufferevent_data_cb, writecb_ptr: ptr bufferevent_data_cb, eventcb_ptr: ptr bufferevent_event_cb, cbarg_ptr: ptr pointer) {.cdecl, importc, header: "<event2/bufferevent.h>".}
78+
proc bufferevent_setfd*(bufev: ptr bufferevent, fd: evutil_socket_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
79+
proc bufferevent_replacefd*(bufev: ptr bufferevent, fd: evutil_socket_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
80+
proc bufferevent_getfd*(bufev: ptr bufferevent): evutil_socket_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
81+
proc bufferevent_get_underlying*(bufev: ptr bufferevent): ptr bufferevent {.cdecl, importc, header: "<event2/bufferevent.h>".}
82+
proc bufferevent_write*(bufev: ptr bufferevent, data: pointer, size: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
83+
proc bufferevent_write_buffer*(bufev: ptr bufferevent, buf: ptr Evbuffer): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
84+
proc bufferevent_read*(bufev: ptr bufferevent, data: pointer, size: csize_t): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
85+
proc bufferevent_read_buffer*(bufev: ptr bufferevent, buf: ptr Evbuffer): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
86+
proc bufferevent_get_input*(bufev: ptr bufferevent): ptr Evbuffer {.cdecl, importc, header: "<event2/bufferevent.h>".}
87+
proc bufferevent_get_output*(bufev: ptr bufferevent): ptr Evbuffer {.cdecl, importc, header: "<event2/bufferevent.h>".}
88+
proc bufferevent_enable*(bufev: ptr bufferevent, event: cshort): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
89+
proc bufferevent_disable*(bufev: ptr bufferevent, event: cshort): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
90+
proc bufferevent_get_enabled*(bufev: ptr bufferevent): cshort {.cdecl, importc, header: "<event2/bufferevent.h>".}
91+
proc bufferevent_set_timeouts*(bufev: ptr bufferevent, timeout_read: pointer, timeout_write: pointer): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
92+
proc bufferevent_setwatermark*(bufev: ptr bufferevent, events: cshort, lowmark: csize_t, highmark: csize_t) {.cdecl, importc, header: "<event2/bufferevent.h>".}
93+
proc bufferevent_getwatermark*(bufev: ptr bufferevent, events: cshort, lowmark: ptr csize_t, highmark: ptr csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
94+
proc bufferevent_lock*(bufev: ptr bufferevent) {.cdecl, importc, header: "<event2/bufferevent.h>".}
95+
proc bufferevent_unlock*(bufev: ptr bufferevent) {.cdecl, importc, header: "<event2/bufferevent.h>".}
96+
proc bufferevent_incref*(bufev: ptr bufferevent) {.cdecl, importc, header: "<event2/bufferevent.h>".}
97+
proc bufferevent_decref*(bufev: ptr bufferevent): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
98+
proc bufferevent_flush*(bufev: ptr bufferevent, iotype: cshort, mode: BuffereventFlushMode): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
99+
proc bufferevent_trigger*(bufev: ptr bufferevent, iotype: cshort, options: cint) {.cdecl, importc, header: "<event2/bufferevent.h>".}
100+
proc bufferevent_trigger_event*(bufev: ptr bufferevent, what: cshort, options: cint) {.cdecl, importc, header: "<event2/bufferevent.h>".}
101+
proc bufferevent_filter_new*(underlying: ptr bufferevent, input_filter: bufferevent_filter_cb, output_filter: bufferevent_filter_cb, options: cint, free_context: proc(ctx: pointer) {.cdecl.}, ctx: pointer): ptr bufferevent {.cdecl, importc, header: "<event2/bufferevent.h>".}
102+
proc bufferevent_pair_new*(base: ptr event_base, options: cint, pair: ptr ptr bufferevent): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
103+
proc bufferevent_pair_get_partner*(bev: ptr bufferevent): ptr bufferevent {.cdecl, importc, header: "<event2/bufferevent.h>".}
104+
proc ev_token_bucket_cfg_new*(read_rate, read_burst, write_rate, write_burst: csize_t, tick_len: pointer): ptr ev_token_bucket_cfg {.cdecl, importc, header: "<event2/bufferevent.h>".}
105+
proc ev_token_bucket_cfg_free*(cfg: ptr ev_token_bucket_cfg) {.cdecl, importc, header: "<event2/bufferevent.h>".}
106+
proc bufferevent_set_rate_limit*(bev: ptr bufferevent, cfg: ptr ev_token_bucket_cfg): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
107+
proc bufferevent_rate_limit_group_new*(base: ptr event_base, cfg: ptr ev_token_bucket_cfg): ptr bufferevent_rate_limit_group {.cdecl, importc, header: "<event2/bufferevent.h>".}
108+
proc bufferevent_rate_limit_group_set_cfg*(group: ptr bufferevent_rate_limit_group, cfg: ptr ev_token_bucket_cfg): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
109+
proc bufferevent_rate_limit_group_set_min_share*(group: ptr bufferevent_rate_limit_group, min_share: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
110+
proc bufferevent_rate_limit_group_free*(group: ptr bufferevent_rate_limit_group) {.cdecl, importc, header: "<event2/bufferevent.h>".}
111+
proc bufferevent_add_to_rate_limit_group*(bev: ptr bufferevent, group: ptr bufferevent_rate_limit_group): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
112+
proc bufferevent_remove_from_rate_limit_group*(bev: ptr bufferevent): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
113+
proc bufferevent_set_max_single_read*(bev: ptr bufferevent, size: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
114+
proc bufferevent_set_max_single_write*(bev: ptr bufferevent, size: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
115+
proc bufferevent_get_max_single_read*(bev: ptr bufferevent): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
116+
proc bufferevent_get_max_single_write*(bev: ptr bufferevent): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
117+
proc bufferevent_get_read_limit*(bev: ptr bufferevent): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
118+
proc bufferevent_get_write_limit*(bev: ptr bufferevent): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
119+
proc bufferevent_get_max_to_read*(bev: ptr bufferevent): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
120+
proc bufferevent_get_max_to_write*(bev: ptr bufferevent): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
121+
proc bufferevent_get_token_bucket_cfg*(bev: ptr bufferevent): ptr ev_token_bucket_cfg {.cdecl, importc, header: "<event2/bufferevent.h>".}
122+
proc bufferevent_rate_limit_group_get_read_limit*(group: ptr bufferevent_rate_limit_group): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
123+
proc bufferevent_rate_limit_group_get_write_limit*(group: ptr bufferevent_rate_limit_group): csize_t {.cdecl, importc, header: "<event2/bufferevent.h>".}
124+
proc bufferevent_decrement_read_limit*(bev: ptr bufferevent, decr: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
125+
proc bufferevent_decrement_write_limit*(bev: ptr bufferevent, decr: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
126+
proc bufferevent_rate_limit_group_decrement_read*(group: ptr bufferevent_rate_limit_group, decr: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
127+
proc bufferevent_rate_limit_group_decrement_write*(group: ptr bufferevent_rate_limit_group, decr: csize_t): cint {.cdecl, importc, header: "<event2/bufferevent.h>".}
128+
proc bufferevent_rate_limit_group_get_totals*(grp: ptr bufferevent_rate_limit_group, total_read_out: ptr ev_uint64_t, total_written_out: ptr ev_uint64_t) {.cdecl, importc, header: "<event2/bufferevent.h>".}
129+
proc bufferevent_rate_limit_group_reset_totals*(grp: ptr bufferevent_rate_limit_group) {.cdecl, importc, header: "<event2/bufferevent.h>".}

0 commit comments

Comments
 (0)