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); }
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; }
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)); }