extend API to allow choices for udp ports, tcp ports, display size

to writen into raop_t raop for later use when connections are made.
new functions : raop_set_udp_ports, raop_set_tcp_ports, raop_set_display_size
The behavior of the library is unchanged if these functions are not used.
This commit is contained in:
fduncanh
2021-07-31 23:24:50 -04:00
parent 623b638357
commit 57e9287df1
7 changed files with 69 additions and 12 deletions

View File

@@ -45,6 +45,14 @@ struct raop_s {
dnssd_t *dnssd;
unsigned short port;
unsigned short timing_lport;
unsigned short control_lport;
unsigned short data_lport;
unsigned short mirror_data_lport;
unsigned short display_width;
unsigned short display_height;
};
struct raop_conn_s {
@@ -303,6 +311,18 @@ raop_init(int max_clients, raop_callbacks_t *callbacks) {
memcpy(&raop->callbacks, callbacks, sizeof(raop_callbacks_t));
raop->pairing = pairing;
raop->httpd = httpd;
/* initialize network port list */
raop->port = 0;
raop->timing_lport = 0;
raop->control_lport = 0;
raop->data_lport = 0;
raop->mirror_data_lport = 0;
/* initialize display width, height */
raop->display_width = 1920;
raop->display_height = 1080;
return raop;
}
@@ -334,12 +354,34 @@ raop_set_log_level(raop_t *raop, int level) {
logger_set_level(raop->logger, level);
}
void raop_set_display_size(raop_t *raop, unsigned short width, unsigned short height){
assert(raop);
if (width) raop->display_width = width;
if (height) raop->display_height = height;
}
void
raop_set_port(raop_t *raop, unsigned short port) {
assert(raop);
raop->port = port;
}
void
raop_set_udp_ports(raop_t *raop, unsigned short udp[3]) {
assert(raop);
raop->timing_lport = udp[0];
raop->control_lport = udp[1];
raop->data_lport = udp[2];
}
void
raop_set_tcp_ports(raop_t *raop, unsigned short tcp[2]) {
assert(raop);
raop->mirror_data_lport = tcp[0];
raop->port = tcp[1];
}
unsigned short
raop_get_port(raop_t *raop) {
assert(raop);
@@ -377,4 +419,4 @@ void
raop_stop(raop_t *raop) {
assert(raop);
httpd_stop(raop->httpd);
}
}

View File

@@ -54,7 +54,10 @@ RAOP_API raop_t *raop_init(int max_clients, raop_callbacks_t *callbacks);
RAOP_API void raop_set_log_level(raop_t *raop, int level);
RAOP_API void raop_set_log_callback(raop_t *raop, raop_log_callback_t callback, void *cls);
RAOP_API void raop_set_display_size(raop_t *raop, unsigned short width, unsigned short height);
RAOP_API void raop_set_port(raop_t *raop, unsigned short port);
RAOP_API void raop_set_udp_ports(raop_t *raop, unsigned short port[3]);
RAOP_API void raop_set_tcp_ports(raop_t *raop, unsigned short port[2]);
RAOP_API unsigned short raop_get_port(raop_t *raop);
RAOP_API void *raop_get_callback_cls(raop_t *raop);
RAOP_API int raop_start(raop_t *raop, unsigned short *port);

View File

@@ -134,10 +134,10 @@ raop_handler_info(raop_conn_t *conn,
plist_t displays_0_uuid_node = plist_new_string("e0ff8a27-6738-3d56-8a16-cc53aacee925");
plist_t displays_0_width_physical_node = plist_new_uint(0);
plist_t displays_0_height_physical_node = plist_new_uint(0);
plist_t displays_0_width_node = plist_new_uint(1920);
plist_t displays_0_height_node = plist_new_uint(1080);
plist_t displays_0_width_pixels_node = plist_new_uint(1920);
plist_t displays_0_height_pixels_node = plist_new_uint(1080);
plist_t displays_0_width_node = plist_new_uint(conn->raop->display_width);
plist_t displays_0_height_node = plist_new_uint(conn->raop->display_height);
plist_t displays_0_width_pixels_node = plist_new_uint(conn->raop->display_width);
plist_t displays_0_height_pixels_node = plist_new_uint(conn->raop->display_height);
plist_t displays_0_rotation_node = plist_new_bool(0);
plist_t displays_0_refresh_rate_node = plist_new_real(1.0 / 60.0);
plist_t displays_0_overscanned_node = plist_new_bool(1);
@@ -372,12 +372,14 @@ raop_handler_setup(raop_conn_t *conn,
plist_get_uint_val(time_note, &timing_rport);
logger_log(conn->raop->logger, LOGGER_DEBUG, "timing_rport = %llu", timing_rport);
unsigned short timing_lport;
unsigned short timing_lport = conn->raop->timing_lport;
conn->raop_ntp = raop_ntp_init(conn->raop->logger, conn->remote, conn->remotelen, timing_rport);
raop_ntp_start(conn->raop_ntp, &timing_lport);
conn->raop_rtp = raop_rtp_init(conn->raop->logger, &conn->raop->callbacks, conn->raop_ntp, conn->remote, conn->remotelen, aeskey, aesiv, ecdh_secret);
conn->raop_rtp_mirror = raop_rtp_mirror_init(conn->raop->logger, &conn->raop->callbacks, conn->raop_ntp, conn->remote, conn->remotelen, aeskey, ecdh_secret);
conn->raop_rtp = raop_rtp_init(conn->raop->logger, &conn->raop->callbacks, conn->raop_ntp, conn->remote,conn->remotelen,
aeskey, aesiv, ecdh_secret, conn->raop->control_lport, conn->raop->data_lport);
conn->raop_rtp_mirror = raop_rtp_mirror_init(conn->raop->logger, &conn->raop->callbacks, conn->raop_ntp, conn->remote, conn->remotelen,
aeskey, ecdh_secret, conn->raop->mirror_data_lport);
plist_t res_event_port_node = plist_new_uint(conn->raop->port);
plist_t res_timing_port_node = plist_new_uint(timing_lport);

View File

@@ -133,7 +133,8 @@ raop_rtp_parse_remote(raop_rtp_t *raop_rtp, const unsigned char *remote, int rem
raop_rtp_t *
raop_rtp_init(logger_t *logger, raop_callbacks_t *callbacks, raop_ntp_t *ntp, const unsigned char *remote, int remotelen,
const unsigned char *aeskey, const unsigned char *aesiv, const unsigned char *ecdh_secret)
const unsigned char *aeskey, const unsigned char *aesiv, const unsigned char *ecdh_secret,
unsigned short control_lport, unsigned short data_lport)
{
raop_rtp_t *raop_rtp;
@@ -144,6 +145,8 @@ raop_rtp_init(logger_t *logger, raop_callbacks_t *callbacks, raop_ntp_t *ntp, co
if (!raop_rtp) {
return NULL;
}
raop_rtp->control_lport = control_lport;
raop_rtp->data_lport = data_lport;
raop_rtp->logger = logger;
raop_rtp->ntp = ntp;
@@ -232,6 +235,8 @@ raop_rtp_init_sockets(raop_rtp_t *raop_rtp, int use_ipv6, int use_udp)
assert(raop_rtp);
cport = raop_rtp->control_lport;
dport = raop_rtp->data_lport;
csock = netutils_init_socket(&cport, use_ipv6, 1);
dsock = netutils_init_socket(&dport, use_ipv6, 1);

View File

@@ -27,7 +27,8 @@
typedef struct raop_rtp_s raop_rtp_t;
raop_rtp_t *raop_rtp_init(logger_t *logger, raop_callbacks_t *callbacks, raop_ntp_t *ntp, const unsigned char *remote, int remotelen,
const unsigned char *aeskey, const unsigned char *aesiv, const unsigned char *ecdh_secret);
const unsigned char *aeskey, const unsigned char *aesiv, const unsigned char *ecdh_secret,
unsigned short control_lport , unsigned short data_lport);
void raop_rtp_start_audio(raop_rtp_t *raop_rtp, int use_udp, unsigned short control_rport,
unsigned short *control_lport, unsigned short *data_lport);

View File

@@ -102,7 +102,8 @@ raop_rtp_parse_remote(raop_rtp_mirror_t *raop_rtp_mirror, const unsigned char *r
#define NO_FLUSH (-42)
raop_rtp_mirror_t *raop_rtp_mirror_init(logger_t *logger, raop_callbacks_t *callbacks, raop_ntp_t *ntp,
const unsigned char *remote, int remotelen,
const unsigned char *aeskey, const unsigned char *ecdh_secret)
const unsigned char *aeskey, const unsigned char *ecdh_secret,
unsigned short mirror_data_lport)
{
raop_rtp_mirror_t *raop_rtp_mirror;
@@ -113,6 +114,7 @@ raop_rtp_mirror_t *raop_rtp_mirror_init(logger_t *logger, raop_callbacks_t *call
if (!raop_rtp_mirror) {
return NULL;
}
raop_rtp_mirror->mirror_data_lport = mirror_data_lport;
raop_rtp_mirror->logger = logger;
raop_rtp_mirror->ntp = ntp;
@@ -507,6 +509,7 @@ raop_rtp_init_mirror_sockets(raop_rtp_mirror_t *raop_rtp_mirror, int use_ipv6)
assert(raop_rtp_mirror);
dport = raop_rtp_mirror->mirror_data_lport;
dsock = netutils_init_socket(&dport, use_ipv6, 0);
if (dsock == -1) {
goto sockets_cleanup;

View File

@@ -25,7 +25,8 @@ typedef struct h264codec_s h264codec_t;
raop_rtp_mirror_t *raop_rtp_mirror_init(logger_t *logger, raop_callbacks_t *callbacks, raop_ntp_t *ntp,
const unsigned char *remote, int remotelen,
const unsigned char *aeskey, const unsigned char *ecdh_secret);
const unsigned char *aeskey, const unsigned char *ecdh_secret,
unsigned short mirror_data_lport);
void raop_rtp_init_mirror_aes(raop_rtp_mirror_t *raop_rtp_mirror, uint64_t streamConnectionID);
void raop_rtp_start_mirror(raop_rtp_mirror_t *raop_rtp_mirror, int use_udp, unsigned short *mirror_data_lport);