add -pin [nnnn] with option to allow a fixed pin

This commit is contained in:
F. Duncanh
2023-11-24 10:19:06 -05:00
parent bcc7244fb6
commit 7270dd4d52
4 changed files with 45 additions and 21 deletions

View File

@@ -535,7 +535,9 @@ int raop_set_plist(raop_t *raop, const char *plist_item, const int value) {
raop->audio_delay_micros = value;
}
if (raop->audio_delay_micros != value) retval = 1;
} else {
} else if (strcmp(plist_item, "pin") == 0) {
raop->pin = value;
} else {
retval = -1;
}
return retval;

View File

@@ -178,18 +178,23 @@ raop_handler_pairpinstart(raop_conn_t *conn,
http_request_t *request, http_response_t *response,
char **response_data, int *response_datalen) {
logger_log(conn->raop->logger, LOGGER_INFO, "client sent PAIR-PIN-START request");
int pin_4 = random_pin();
conn->raop->pin = (unsigned short) pin_4;
if (pin_4 < 0) {
logger_log(conn->raop->logger, LOGGER_ERR, "Failed to generate random pin");
int pin_4;
if (conn->raop->pin > 9999) {
pin_4 = conn->raop->pin % 10000;
} else {
char pin[6];
snprintf(pin, 5, "%04u", pin_4);
if (conn->raop->callbacks.display_pin) {
conn->raop->callbacks.display_pin(conn->raop->callbacks.cls, pin);
pin_4 = random_pin();
if (pin_4 < 0) {
logger_log(conn->raop->logger, LOGGER_ERR, "Failed to generate random pin");
} else {
conn->raop->pin = (unsigned short) pin_4 % 10000;
}
logger_log(conn->raop->logger, LOGGER_INFO, "*** CLIENT MUST NOW ENTER PIN = \"%s\" AS AIRPLAY PASSWORD", pin);
}
char pin[6];
snprintf(pin, 5, "%04u", pin_4);
if (conn->raop->callbacks.display_pin) {
conn->raop->callbacks.display_pin(conn->raop->callbacks.cls, pin);
}
logger_log(conn->raop->logger, LOGGER_INFO, "*** CLIENT MUST NOW ENTER PIN = \"%s\" AS AIRPLAY PASSWORD", pin);
*response_data = NULL;
response_datalen = 0;
return;
@@ -248,8 +253,10 @@ raop_handler_pairsetup_pin(raop_conn_t *conn,
free (method);
plist_get_string_val(req_user_node, &user);
logger_log(conn->raop->logger, LOGGER_INFO, "pair-setup-pin: device_id = %s", user);
snprintf(pin, 6, "%04u", conn->raop->pin);
conn->raop->pin = 0;
snprintf(pin, 6, "%04u", conn->raop->pin % 10000);
if (conn->raop->pin < 10000) {
conn->raop->pin = 0;
}
int ret = srp_new_user(conn->pairing, conn->raop->pairing, (const char *) user,
(const char *) pin, &salt, &len_salt, &pk, &len_pk);
free(user);