raop.c,dnssd.c: use true PK as string (not a fake from dnssdint.h)

This commit is contained in:
F. Duncanh
2023-11-24 15:40:58 -05:00
parent 7270dd4d52
commit e615493b06
7 changed files with 34 additions and 5 deletions

View File

@@ -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;

View File

@@ -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

View File

@@ -20,7 +20,7 @@
#include "global.h"
#define PK "b07727d6f6cd6e08b58ede525ec3cdeaa252ad9f683feb212ef8a205246554e7"
//#define PK "b07727d6f6cd6e08b58ede525ec3cdeaa252ad9f683feb212ef8a205246554e7"
#define RAOP_TXTVERS "1"
#define RAOP_CH "2" /* Audio channels: 2 */

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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);

View File

@@ -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);