about summary refs log tree commit diff stats
path: root/src/uv_link_observer_t.c
blob: 7addd62bcf55ebd730b61d05621d8ffea2abd878 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdlib.h>
#include <string.h>

#include "src/common.h"


static void uv_link_observer_read_cb(uv_link_t* link,
                                     ssize_t nread,
                                     const uv_buf_t* buf) {
  uv_link_observer_t* observer;

  observer = (uv_link_observer_t*) link;

  if (observer->observer_read_cb != NULL)
    observer->observer_read_cb(observer, nread, buf);

  return uv_link_propagate_read_cb(link, nread, buf);
}


static uv_link_methods_t uv_link_observer_methods = {
  .read_start = uv_link_default_read_start,
  .read_stop = uv_link_default_read_stop,
  .write = uv_link_default_write,
  .try_write = uv_link_default_try_write,
  .shutdown = uv_link_default_shutdown,
  .close = uv_link_default_close,

  .alloc_cb_override = uv_link_default_alloc_cb,
  .read_cb_override = uv_link_observer_read_cb
};


int uv_link_observer_init(uv_link_observer_t* observer) {
  int err;

  observer->observer_read_cb = NULL;

  err = uv_link_init((uv_link_t*) observer, &uv_link_observer_methods);
  if (err != 0)
    return err;

  return 0;
}