struct midi * midi_new(struct midiops *ops, void *arg, int mode) { int i; struct midi *ep; for (i = 0, ep = midi_ep;; i++, ep++) { if (i == MIDI_NEP) return NULL; if (ep->ops == NULL) break; } ep->ops = ops; ep->arg = arg; ep->used = 0; ep->len = 0; ep->idx = 0; ep->st = 0; ep->txmask = 0; ep->self = 1 << i; ep->tickets = 0; ep->mode = mode; /* * the output buffer is the client intput */ if (ep->mode & MODE_MIDIIN) abuf_init(&ep->obuf, MIDI_BUFSZ); midi_tickets(ep); return ep; }
/** * Add a new interface to this dlep instance * @param interf pointer to interface * @param ifname name of interface * @param l2_origin layer2 originator that shall be used * @param log_src logging source that shall be used * @param radio true if it is a radio interface, false for router * @return -1 if an error happened, 0 otherwise */ int dlep_if_add(struct dlep_if *interf, const char *ifname, uint32_t l2_origin, enum oonf_log_source log_src, bool radio) { struct dlep_extension *ext; /* initialize key */ strscpy(interf->l2_ifname, ifname, sizeof(interf->l2_ifname)); interf->_node.key = interf->l2_ifname; if (abuf_init(&interf->udp_out)) { return -1; } /* add dlep prefix to buffer */ abuf_memcpy(&interf->udp_out, _DLEP_PREFIX, sizeof(_DLEP_PREFIX) - 1); if (dlep_session_add(&interf->session, interf->l2_ifname, l2_origin, &interf->udp_out, radio, log_src)) { abuf_free(&interf->udp_out); return -1; } /* initialize stream list */ avl_init(&interf->session_tree, avl_comp_netaddr_socket, false); /* initialize discovery socket */ interf->udp.config.user = interf; interf->udp.config.receive_data = _cb_receive_udp; oonf_packet_add_managed(&interf->udp); /* initialize session */ interf->session.cb_send_buffer = _cb_send_multicast; interf->session.cb_end_session = NULL; interf->session.restrict_signal = radio ? DLEP_PEER_DISCOVERY : DLEP_PEER_OFFER; interf->session.writer.out = &interf->udp_out; /* inform all extension */ avl_for_each_element(dlep_extension_get_tree(), ext, _node) { if (radio) { if (ext->cb_session_init_radio) { ext->cb_session_init_radio(&interf->session); } } else { if (ext->cb_session_init_router) { ext->cb_session_init_router(&interf->session); } } } return 0; }
static void _packet_add(struct oonf_packet_socket *pktsocket, union netaddr_socket *local, struct os_interface *interf) { pktsocket->os_if = interf; pktsocket->scheduler_entry.process = _cb_packet_event_unicast; oonf_socket_add(&pktsocket->scheduler_entry); oonf_socket_set_read(&pktsocket->scheduler_entry, true); abuf_init(&pktsocket->out); list_add_tail(&_packet_sockets, &pktsocket->node); memcpy(&pktsocket->local_socket, local, sizeof(pktsocket->local_socket)); if (pktsocket->config.input_buffer_length == 0) { pktsocket->config.input_buffer = _input_buffer; pktsocket->config.input_buffer_length = sizeof(_input_buffer); } }
int olsrd_write_cnf(struct olsrd_config *cnf, const char *fname) { FILE *fd; struct autobuf abuf; fd = fopen(fname, "w"); if (fd == NULL) { fprintf(stderr, "Could not open file %s for writing\n%s\n", fname, strerror(errno)); return -1; } printf("Writing config to file \"%s\".... ", fname); abuf_init(&abuf, 1024); olsrd_write_cnf_autobuf(&abuf, cnf); if (fwrite(abuf.buf, abuf.len, 1, fd) < (size_t)abuf.len) { fprintf(stderr, "Error, could not write the complete config file.\n"); } abuf_free(&abuf); fclose(fd); printf("DONE\n"); return 1; }