penguin/tinyproxy

An L4 proxy designed to act as a tiny transparent shim

src/stream_route.h

raw ยท 892 bytes

#ifndef STREAM_ROUTE_H
#define STREAM_ROUTE_H

#include <event2/listener.h>
#include <event2/bufferevent.h>
#include <event2/util.h>

#include "compat_socket.h"

struct worker;
struct route;
struct event_base;
struct evconnlistener;

struct stream_route_ctx {
	struct event_base *accept_base;
	struct worker *worker;
	const struct route *route;
	struct evconnlistener *listener;
};

typedef struct conn_s {
	struct worker *owner;
	const struct route *route;

	struct bufferevent *client;
	struct bufferevent *upstream;

	struct sockaddr_storage peer_addr;
	socklen_t peer_addr_len;
} conn_t;

struct accepted_client {
	evutil_socket_t fd;
	struct sockaddr_storage peer_addr;
	socklen_t peer_addr_len;
	const struct route *route;
};

int start_stream_route(struct worker *w, const struct route *r,
	struct stream_route_ctx *ctx);

void stop_stream_route(struct stream_route_ctx *ctx);

#endif