Пример #1
0
void cavan_mux_append_send_package(struct cavan_mux *mux, struct cavan_mux_package *package)
{
	struct cavan_mux_package_raw *package_raw = CAVAN_MUX_PACKAGE_GET_RAW(package);

	package->magic = CAVAN_MUX_MAGIC;

	cavan_lock_acquire(&mux->lock);

	*mux->package_tail = package_raw;
	package_raw->next = NULL;
	mux->package_tail = &package_raw->next;
	cavan_thread_resume(&mux->send_thread);

	cavan_lock_release(&mux->lock);
}
Пример #2
0
int cavan_mux_link_append_receive_package(struct cavan_mux_link *link, struct cavan_mux_package *package)
{
	struct cavan_mux_package_raw *package_raw = CAVAN_MUX_PACKAGE_GET_RAW(package);

	cavan_lock_acquire(&link->lock);

	*link->package_tail = package_raw;
	package_raw->next = NULL;
	link->package_tail = &package_raw->next;

	link->remote_port = package->src_port;

	if (link->on_received) {
		link->on_received(link);
	}

	cavan_lock_release(&link->lock);

	return 0;
}
Пример #3
0
void cavan_mux_package_free(struct cavan_mux *mux, struct cavan_mux_package *package)
{
	cavan_mux_append_package(mux, CAVAN_MUX_PACKAGE_GET_RAW(package));
}