struct dacp_client_t* dacp_client_create(endpoint_p endpoint, const char* identifier, const char* active_remote) { struct dacp_client_t* dc = (struct dacp_client_t*)object_create(sizeof(struct dacp_client_t), _dacp_client_destroy); dc->endpoint = endpoint_copy(endpoint); endpoint_set_port(dc->endpoint, 3689); dc->identifier = malloc(strlen(identifier) + 1); strcpy(dc->identifier, identifier); dc->active_remove = malloc(strlen(active_remote) + 1); strcpy(dc->active_remove, active_remote); dc->dacp_discover = zeroconf_dacp_discover_create(); zeroconf_dacp_discover_set_callback(dc->dacp_discover, _dacp_client_zeroconf_resolved_callback, dc); dc->playback_state = dacp_client_playback_state_stopped; return dc; }
void server_mc_read_cb(struct bufferevent *bev, void *ctx) { struct server *s = (struct server *)ctx; struct evbuffer *in = bufferevent_get_input(bev); struct mc *mc = v_mc_find_if(s->peers, (void *)find_bev, bev); size_t len; char *line; /* Do nothing: this peer seems to exists, but we didn't approve it yet*/ if (mc == v_mc_end(s->peers)) return ; while ((line = evbuffer_readln(in, &len, EVBUFFER_EOL_CRLF)) != NULL) { struct vector_cptr *splited; char *cmd_name; log_debug("[META] [%s]", line); splited = split(line); cmd_name = v_cptr_at(splited, 0); if (strncmp(cmd_name, "udp_port", strlen(cmd_name)) == 0) { char *s_udp_port = v_cptr_at(splited, 1); unsigned short port = atoi(s_udp_port); struct endpoint udp_remote_endpoint; endpoint_init(&udp_remote_endpoint, mc->p.address, mc->p.len); endpoint_set_port(&udp_remote_endpoint, port); udp_register_new_peer(s->udp, &udp_remote_endpoint, DTLS_DISABLE); } v_cptr_delete(splited); free(line); } }