}
pa_xfree(dname);
- /*
- TODO: allow this syntax of server name in things....
- args = pa_sprintf_malloc("server=[%s]:%u "
- "sink_name=%s",
- avahi_address_snprint(at, sizeof(at), a), port,
- vname);*/
if (nicename) {
- args = pa_sprintf_malloc("server=%s "
+ args = pa_sprintf_malloc("server=[%s]:%u "
"sink_name=%s "
"sink_properties=device.description=\"%s\"",
- avahi_address_snprint(at, sizeof(at), a),
+ avahi_address_snprint(at, sizeof(at), a), port,
vname,
nicename);
} else {
- args = pa_sprintf_malloc("server=%s "
+ args = pa_sprintf_malloc("server=[%s]:%u "
"sink_name=%s",
- avahi_address_snprint(at, sizeof(at), a),
+ avahi_address_snprint(at, sizeof(at), a), port,
vname);
}
#include <pulsecore/iochannel.h>
#include <pulsecore/socket-util.h>
#include <pulsecore/log.h>
+#include <pulsecore/parseaddr.h>
#include <pulsecore/macro.h>
#include <pulsecore/memchunk.h>
#include <pulsecore/random.h>
#define VOLUME_MIN -144
#define VOLUME_MAX 0
+#define RAOP_PORT 5000
+
struct pa_raop_client {
pa_core *core;
char *host;
+ uint16_t port;
char *sid;
pa_rtsp_client *rtsp;
}
pa_raop_client* pa_raop_client_new(pa_core *core, const char* host) {
+ pa_parsed_address a;
pa_raop_client* c = pa_xnew0(pa_raop_client, 1);
pa_assert(core);
pa_assert(host);
+ if (pa_parse_address(host, &a) < 0 || a.type == PA_PARSED_ADDRESS_UNIX)
+ return NULL;
+
c->core = core;
c->fd = -1;
- c->host = pa_xstrdup(host);
+
+ c->host = pa_xstrdup(a.path_or_host);
+ if (a.port)
+ c->port = a.port;
+ else
+ c->port = RAOP_PORT;
if (pa_raop_connect(c)) {
pa_raop_client_free(c);
return 0;
}
- c->rtsp = pa_rtsp_client_new(c->core->mainloop, c->host, 5000, "iTunes/4.6 (Macintosh; U; PPC Mac OS X 10.3)");
+ c->rtsp = pa_rtsp_client_new(c->core->mainloop, c->host, c->port, "iTunes/4.6 (Macintosh; U; PPC Mac OS X 10.3)");
/* Initialise the AES encryption system */
pa_random(c->aes_iv, sizeof(c->aes_iv));
pa_xfree(c->session);
c->session = NULL;
+ pa_log_debug("Attempting to connect to server '%s:%d'", c->hostname, c->port);
if (!(c->sc = pa_socket_client_new_string(c->mainloop, TRUE, c->hostname, c->port))) {
pa_log("failed to connect to server '%s:%d'", c->hostname, c->port);
return -1;