int a2dp_register(DBusConnection *conn, const bdaddr_t *src, GKeyFile *config) { int sbc_srcs = 1, sbc_sinks = 1; int mpeg12_srcs = 0, mpeg12_sinks = 0; gboolean source = TRUE, sink = FALSE, delay_reporting; char *str; GError *err = NULL; int i; struct a2dp_server *server; if (!config) goto proceed; str = g_key_file_get_string(config, "General", "Enable", &err); if (err) { DBG("audio.conf: %s", err->message); g_clear_error(&err); } else { if (strstr(str, "Sink")) source = TRUE; if (strstr(str, "Source")) sink = TRUE; g_free(str); } str = g_key_file_get_string(config, "General", "Disable", &err); if (err) { DBG("audio.conf: %s", err->message); g_clear_error(&err); } else { if (strstr(str, "Sink")) source = FALSE; if (strstr(str, "Source")) sink = FALSE; g_free(str); } str = g_key_file_get_string(config, "A2DP", "SBCSources", &err); if (err) { DBG("audio.conf: %s", err->message); g_clear_error(&err); } else { sbc_srcs = atoi(str); g_free(str); } str = g_key_file_get_string(config, "A2DP", "MPEG12Sources", &err); if (err) { DBG("audio.conf: %s", err->message); g_clear_error(&err); } else { mpeg12_srcs = atoi(str); g_free(str); } str = g_key_file_get_string(config, "A2DP", "SBCSinks", &err); if (err) { DBG("audio.conf: %s", err->message); g_clear_error(&err); } else { sbc_sinks = atoi(str); g_free(str); } str = g_key_file_get_string(config, "A2DP", "MPEG12Sinks", &err); if (err) { DBG("audio.conf: %s", err->message); g_clear_error(&err); } else { mpeg12_sinks = atoi(str); g_free(str); } proceed: if (!connection) connection = dbus_connection_ref(conn); server = find_server(servers, src); if (!server) { int av_err; server = g_new0(struct a2dp_server, 1); if (!server) return -ENOMEM; av_err = avdtp_init(src, config, &server->version); if (av_err < 0) { g_free(server); return av_err; } bacpy(&server->src, src); servers = g_slist_append(servers, server); }
int a2dp_init(DBusConnection *conn, GKeyFile *config) { int sbc_srcs = 1, sbc_sinks = 0; int mpeg12_srcs = 0, mpeg12_sinks = 0; gboolean source = TRUE, sink = TRUE; char *str; GError *err = NULL; int i; if (!config) goto proceed; str = g_key_file_get_string(config, "General", "Disable", &err); if (err) { debug("audio.conf: %s", err->message); g_error_free(err); err = NULL; } else { if (strstr(str, "Sink")) source = FALSE; if (strstr(str, "Source")) sink = FALSE; g_free(str); } str = g_key_file_get_string(config, "A2DP", "SBCSources", &err); if (err) { debug("audio.conf: %s", err->message); g_error_free(err); err = NULL; } else { sbc_srcs = atoi(str); g_free(str); } str = g_key_file_get_string(config, "A2DP", "MPEG12Sources", &err); if (err) { debug("audio.conf: %s", err->message); g_error_free(err); err = NULL; } else { mpeg12_srcs = atoi(str); g_free(str); } str = g_key_file_get_string(config, "A2DP", "SBCSinks", &err); if (err) { debug("audio.conf: %s", err->message); g_error_free(err); err = NULL; } else { sbc_sinks = atoi(str); g_free(str); } str = g_key_file_get_string(config, "A2DP", "MPEG12Sinks", &err); if (err) { debug("audio.conf: %s", err->message); g_error_free(err); err = NULL; } else { mpeg12_sinks = atoi(str); g_free(str); } proceed: connection = dbus_connection_ref(conn); avdtp_init(config); if (source) { for (i = 0; i < sbc_srcs; i++) a2dp_add_sep(conn, AVDTP_SEP_TYPE_SOURCE, A2DP_CODEC_SBC); for (i = 0; i < mpeg12_srcs; i++) a2dp_add_sep(conn, AVDTP_SEP_TYPE_SOURCE, A2DP_CODEC_MPEG12); } if (sink) { for (i = 0; i < sbc_sinks; i++) a2dp_add_sep(conn, AVDTP_SEP_TYPE_SINK, A2DP_CODEC_SBC); for (i = 0; i < mpeg12_sinks; i++) a2dp_add_sep(conn, AVDTP_SEP_TYPE_SINK, A2DP_CODEC_MPEG12); } return 0; }