mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
raop.c,dnssd.c: use true PK as string (not a fake from dnssdint.h)
This commit is contained in:
10
lib/dnssd.c
10
lib/dnssd.c
@@ -146,6 +146,8 @@ struct dnssd_s {
|
||||
char *hw_addr;
|
||||
int hw_addr_len;
|
||||
|
||||
char *pk;
|
||||
|
||||
uint32_t features1;
|
||||
uint32_t features2;
|
||||
|
||||
@@ -313,7 +315,7 @@ dnssd_register_raop(dnssd_t *dnssd, unsigned short port)
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", strlen(RAOP_SF), RAOP_SF);
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "vs", strlen(RAOP_VS), RAOP_VS);
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "vn", strlen(RAOP_VN), RAOP_VN);
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pk", strlen(PK), PK);
|
||||
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pk", strlen(dnssd->pk), dnssd->pk);
|
||||
|
||||
/* Convert hardware address to string */
|
||||
if (utils_hwaddr_raop(servname, sizeof(servname), dnssd->hw_addr, dnssd->hw_addr_len) < 0) {
|
||||
@@ -365,7 +367,7 @@ dnssd_register_airplay(dnssd_t *dnssd, unsigned short port)
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "features", strlen(features), features);
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", strlen(AIRPLAY_FLAGS), AIRPLAY_FLAGS);
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "model", strlen(GLOBAL_MODEL), GLOBAL_MODEL);
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pk", strlen(PK), PK);
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pk", strlen(dnssd->pk), dnssd->pk);
|
||||
if (dnssd->require_pw) {
|
||||
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true");
|
||||
} else {
|
||||
@@ -456,6 +458,10 @@ uint64_t dnssd_get_airplay_features(dnssd_t *dnssd) {
|
||||
return features;
|
||||
}
|
||||
|
||||
void dnssd_set_pk(dnssd_t *dnssd, char * pk_str) {
|
||||
dnssd->pk = pk_str;
|
||||
}
|
||||
|
||||
void dnssd_set_airplay_features(dnssd_t *dnssd, int bit, int val) {
|
||||
uint32_t mask;
|
||||
uint32_t *features;
|
||||
|
||||
@@ -48,7 +48,8 @@ DNSSD_API const char *dnssd_get_name(dnssd_t *dnssd, int *length);
|
||||
DNSSD_API const char *dnssd_get_hw_addr(dnssd_t *dnssd, int *length);
|
||||
DNSSD_API void dnssd_set_airplay_features(dnssd_t *dnssd, int bit, int val);
|
||||
DNSSD_API uint64_t dnssd_get_airplay_features(dnssd_t *dnssd);
|
||||
|
||||
DNSSD_API void dnssd_set_pk(dnssd_t *dnssd, char * pk_str);
|
||||
|
||||
DNSSD_API void dnssd_destroy(dnssd_t *dnssd);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
#define PK "b07727d6f6cd6e08b58ede525ec3cdeaa252ad9f683feb212ef8a205246554e7"
|
||||
//#define PK "b07727d6f6cd6e08b58ede525ec3cdeaa252ad9f683feb212ef8a205246554e7"
|
||||
|
||||
#define RAOP_TXTVERS "1"
|
||||
#define RAOP_CH "2" /* Audio channels: 2 */
|
||||
|
||||
11
lib/raop.c
11
lib/raop.c
@@ -68,6 +68,9 @@ struct raop_s {
|
||||
|
||||
/* for temporary storage of pin during pair-pin start */
|
||||
unsigned short pin;
|
||||
|
||||
/* public key as string */
|
||||
char pk_str[2*ED25519_KEY_SIZE + 1];
|
||||
};
|
||||
|
||||
struct raop_conn_s {
|
||||
@@ -431,6 +434,13 @@ raop_init(int max_clients, raop_callbacks_t *callbacks) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* store PK as a string in raop->pk_str */
|
||||
unsigned char public_key[ED25519_KEY_SIZE];
|
||||
pairing_get_public_key(pairing, public_key);
|
||||
char *pk_str = utils_pk_to_string(public_key, ED25519_KEY_SIZE);
|
||||
strncpy(raop->pk_str, (const char *) pk_str, 2*ED25519_KEY_SIZE + 1);
|
||||
free(pk_str);
|
||||
|
||||
/* Set HTTP callbacks to our handlers */
|
||||
memset(&httpd_cbs, 0, sizeof(httpd_cbs));
|
||||
httpd_cbs.opaque = raop;
|
||||
@@ -586,6 +596,7 @@ raop_set_log_callback(raop_t *raop, raop_log_callback_t callback, void *cls) {
|
||||
void
|
||||
raop_set_dnssd(raop_t *raop, dnssd_t *dnssd) {
|
||||
assert(dnssd);
|
||||
dnssd_set_pk(dnssd, raop->pk_str);
|
||||
raop->dnssd = dnssd;
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ raop_handler_info(raop_conn_t *conn,
|
||||
utils_hwaddr_airplay(hw_addr, 3 * hw_addr_raw_len, hw_addr_raw, hw_addr_raw_len);
|
||||
|
||||
int pk_len = 0;
|
||||
char *pk = utils_parse_hex(PK, strlen(PK), &pk_len);
|
||||
char *pk = utils_parse_hex(conn->raop->pk_str, strlen(conn->raop->pk_str), &pk_len);
|
||||
|
||||
plist_t r_node = plist_new_dict();
|
||||
|
||||
|
||||
10
lib/utils.c
10
lib/utils.c
@@ -186,6 +186,16 @@ char *utils_parse_hex(const char *str, int str_len, int *data_len) {
|
||||
return data;
|
||||
}
|
||||
|
||||
char *utils_pk_to_string(const unsigned char *pk, int pk_len) {
|
||||
char *pk_str = (char *) malloc(2*pk_len + 1);
|
||||
char* pos = pk_str;
|
||||
for (int i = 0; i < pk_len; i++) {
|
||||
snprintf(pos, 3, "%2.2x", *(pk + i));
|
||||
pos +=2;
|
||||
}
|
||||
return pk_str;
|
||||
}
|
||||
|
||||
char *utils_data_to_string(const unsigned char *data, int datalen, int chars_per_line) {
|
||||
assert(datalen >= 0);
|
||||
assert(chars_per_line > 0);
|
||||
|
||||
@@ -25,6 +25,7 @@ int utils_read_file(char **dst, const char *pemstr);
|
||||
int utils_hwaddr_raop(char *str, int strlen, const char *hwaddr, int hwaddrlen);
|
||||
int utils_hwaddr_airplay(char *str, int strlen, const char *hwaddr, int hwaddrlen);
|
||||
char *utils_parse_hex(const char *str, int str_len, int *data_len);
|
||||
char *utils_pk_to_string(const unsigned char *pk, int pk_len);
|
||||
char *utils_data_to_string(const unsigned char *data, int datalen, int chars_per_line);
|
||||
char *utils_data_to_text(const char *data, int datalen);
|
||||
void ntp_timestamp_to_time(uint64_t ntp_timestamp, char *timestamp, size_t maxsize);
|
||||
|
||||
Reference in New Issue
Block a user