Lines Matching defs:cre

845 	struct ctl_relay_event	*cre = arg;
846 struct rsession *con = cre->con;
852 if (cre->dst->bev)
853 bufferevent_enable(cre->dst->bev, EV_READ);
854 if (relay_splice(cre->dst) == -1)
866 relay_dump(struct ctl_relay_event *cre, const void *buf, size_t len)
877 if (cre->tls != NULL)
878 (void)tls_write(cre->tls, buf, len);
880 (void)write(cre->s, buf, len);
886 struct ctl_relay_event *cre = arg;
887 struct rsession *con = cre->con;
892 cre->timedout = 0;
896 if (relay_bufferevent_write_buffer(cre->dst, src) == -1)
900 if (cre->dst->bev)
901 bufferevent_enable(cre->dst->bev, EV_READ);
902 if (cre->dst->bev && EVBUFFER_LENGTH(EVBUFFER_OUTPUT(cre->dst->bev)) >
915 * Splice sockets from cre to cre->dst if applicable. Returns:
921 relay_splice(struct ctl_relay_event *cre)
923 struct rsession *con = cre->con;
932 if (cre->splicelen >= 0)
936 if (cre->bev == NULL || cre->dst->bev == NULL)
939 if (!(cre->toread == TOREAD_UNLIMITED || cre->toread > 0)) {
941 __func__, con->se_id, cre->dir, cre->toread);
946 if (EVBUFFER_LENGTH(cre->bev->input) ||
947 EVBUFFER_LENGTH(cre->dst->bev->output)) {
949 __func__, con->se_id, cre->dir);
950 bufferevent_disable(cre->bev, EV_READ);
955 sp.sp_fd = cre->dst->s;
956 sp.sp_max = cre->toread > 0 ? cre->toread : 0;
958 if (setsockopt(cre->s, SOL_SOCKET, SO_SPLICE, &sp, sizeof(sp)) == -1) {
960 __func__, con->se_id, cre->dir, strerror(errno));
963 cre->splicelen = 0;
964 bufferevent_enable(cre->bev, EV_READ);
967 __func__, con->se_id, cre->dir, cre->toread);
973 relay_splicelen(struct ctl_relay_event *cre)
975 struct rsession *con = cre->con;
979 if (cre->splicelen < 0)
983 if (getsockopt(cre->s, SOL_SOCKET, SO_SPLICE, &len, &optlen) == -1) {
985 __func__, con->se_id, cre->dir, strerror(errno));
990 __func__, con->se_id, cre->dir, len);
992 if (len > cre->splicelen) {
995 cre->splicelen = len;
1003 relay_spliceadjust(struct ctl_relay_event *cre)
1005 if (cre->splicelen < 0)
1007 if (relay_splicelen(cre) == -1)
1009 if (cre->splicelen > 0 && cre->toread > 0)
1010 cre->toread -= cre->splicelen;
1011 cre->splicelen = -1;
1019 struct ctl_relay_event *cre = arg;
1020 struct rsession *con = cre->con;
1024 __func__, con->se_id, cre->dir, cre->state, cre->toread, error);
1026 if (cre->splicelen >= 0) {
1028 } else if (cre->dst->splicelen >= 0) {
1029 switch (relay_splicelen(cre->dst)) {
1036 cre->timedout = 1;
1046 if (cre->dst->splicelen >= 0) {
1047 switch (relay_splicelen(cre->dst)) {
1057 } else if (cre->dst->timedout) {
1061 if (relay_spliceadjust(cre) == -1)
1063 if (relay_splice(cre) == -1)
1068 if (relay_spliceadjust(cre) == -1)
1070 bufferevent_enable(cre->bev, EV_READ);
1077 if (cre->dst->bev != NULL) {
1078 dst = EVBUFFER_OUTPUT(cre->dst->bev);
1081 } else if (cre->toread == TOREAD_UNLIMITED || cre->toread == 0)
1504 relay_connect_state(struct rsession *con, struct ctl_relay_event *cre,
1509 cre->dir == RELAY_DIR_REQUEST ? "accept" : "connect",
1510 relay_state(cre->state), relay_state(new));
1511 cre->state = new;
1815 relay_reset_event(struct rsession *con, struct ctl_relay_event *cre)
1819 if (cre->state != STATE_DONE)
1820 relay_connect_state(con, cre, STATE_CLOSED);
1821 if (cre->bev != NULL) {
1822 bufferevent_disable(cre->bev, EV_READ|EV_WRITE);
1823 bufferevent_free(cre->bev);
1825 if (cre->tls != NULL)
1826 tls_close(cre->tls);
1827 tls_free(cre->tls);
1828 tls_free(cre->tls_ctx);
1829 tls_config_free(cre->tls_cfg);
1830 free(cre->tlscert);
1831 if (cre->s != -1) {
1832 close(cre->s);
1835 cre->bev = NULL;
1836 cre->tls = NULL;
1837 cre->tls_cfg = NULL;
1838 cre->tlscert = NULL;
1839 cre->s = -1;
2307 relay_tls_inspect_create(struct relay *rlay, struct ctl_relay_event *cre)
2325 cre->tlscert, cre->tlscert_len, NULL, 0, NULL, 0) != 0) {
2343 cre->tls_cfg = tls_cfg;
2344 cre->tls_ctx = tls;
2352 relay_tls_transaction(struct rsession *con, struct ctl_relay_event *cre)
2359 if (cre->dir == RELAY_DIR_REQUEST) {
2360 if (cre->tlscert != NULL)
2361 tls_server = relay_tls_inspect_create(rlay, cre);
2369 if (tls_accept_socket(tls_server, &cre->tls, cre->s) == -1) {
2375 cre->tls = tls_client();
2376 if (cre->tls == NULL ||
2377 tls_configure(cre->tls, rlay->rl_tls_client_cfg) == -1) {
2381 if (tls_connect_socket(cre->tls, cre->s, NULL) == -1) {
2390 event_again(&con->se_ev, cre->s, EV_TIMEOUT|flag, relay_tls_handshake,
2391 &con->se_tv_start, &rlay->rl_conf.timeout, cre);
2401 struct ctl_relay_event *cre = arg;
2402 struct rsession *con = cre->con;
2413 ret = tls_handshake(cre->tls);
2422 cre->dir == RELAY_DIR_REQUEST ? "established" : "connected",
2425 if (cre->dir == RELAY_DIR_REQUEST) {
2459 tls_error(cre->tls)) >= 0) {
2471 &con->se_tv_start, &rlay->rl_conf.timeout, cre);
2475 relay_tls_connected(struct ctl_relay_event *cre)
2481 event_del(&cre->bev->ev_read);
2482 event_del(&cre->bev->ev_write);
2484 event_set(&cre->bev->ev_read, cre->s, EV_READ,
2485 relay_tls_readcb, cre->bev);
2486 event_set(&cre->bev->ev_write, cre->s, EV_WRITE,
2487 relay_tls_writecb, cre->bev);
2495 struct ctl_relay_event *cre = bufev->cbarg;
2509 ret = tls_read(cre->tls, rbuf, howmuch);
2556 struct ctl_relay_event *cre = bufev->cbarg;
2567 ret = tls_write(cre->tls, EVBUFFER_DATA(bufev->output),
2611 relay_bufferevent_printf(struct ctl_relay_event *cre, const char *fmt, ...)
2617 ret = evbuffer_add_vprintf(cre->output, fmt, ap);
2620 if (cre->bev != NULL &&
2621 ret != -1 && EVBUFFER_LENGTH(cre->output) > 0 &&
2622 (cre->bev->enabled & EV_WRITE))
2623 bufferevent_enable(cre->bev, EV_WRITE);
2630 relay_bufferevent_print(struct ctl_relay_event *cre, const char *str)
2632 if (cre->bev == NULL)
2633 return (evbuffer_add(cre->output, str, strlen(str)));
2634 return (bufferevent_write(cre->bev, str, strlen(str)));
2638 relay_bufferevent_write_buffer(struct ctl_relay_event *cre,
2641 if (cre->bev == NULL)
2642 return (evbuffer_add_buffer(cre->output, buf));
2643 return (bufferevent_write_buffer(cre->bev, buf));
2647 relay_bufferevent_write_chunk(struct ctl_relay_event *cre,
2651 ret = relay_bufferevent_write(cre, EVBUFFER_DATA(buf), size);
2658 relay_bufferevent_write(struct ctl_relay_event *cre, void *data, size_t size)
2660 if (cre->bev == NULL)
2661 return (evbuffer_add(cre->output, data, size));
2662 return (bufferevent_write(cre->bev, data, size));