mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
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:
44
lib/raop.c
44
lib/raop.c
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user