[spotify] Slightly improved version of recent commit 79fb65f

This commit is contained in:
ejurgensen 2022-05-24 20:34:45 +02:00
parent 5779bc56b8
commit d4a2b11c3e
3 changed files with 25 additions and 10 deletions

View File

@ -1033,9 +1033,6 @@ msg_make_client_response_encrypted(uint8_t *out, size_t out_len, struct sp_sessi
ClientResponseEncrypted client_response = CLIENT_RESPONSE_ENCRYPTED__INIT;
LoginCredentials login_credentials = LOGIN_CREDENTIALS__INIT;
SystemInfo system_info = SYSTEM_INFO__INIT;
const char *client_name;
const char *client_version;
const char *client_build_id;
char system_information_string[64];
char version_string[64];
ssize_t len;
@ -1064,12 +1061,10 @@ msg_make_client_response_encrypted(uint8_t *out, size_t out_len, struct sp_sessi
else
return -1;
// Note that Spotify seems to have whitelisting of client_name
client_name = (sp_sysinfo.client_name[0] != '\0') ? sp_sysinfo.client_name : "librespot";
client_version = (sp_sysinfo.client_version[0] != '\0') ? sp_sysinfo.client_version : "000000";
client_build_id = (sp_sysinfo.client_build_id[0] != '\0') ? sp_sysinfo.client_build_id : "0";
snprintf(system_information_string, sizeof(system_information_string), "%s_%s_%s", client_name, client_version, client_build_id);
snprintf(version_string, sizeof(version_string), "%s-%s", client_name, client_version);
snprintf(system_information_string, sizeof(system_information_string), "%s_%s_%s",
sp_sysinfo.client_name, sp_sysinfo.client_version, sp_sysinfo.client_build_id);
snprintf(version_string, sizeof(version_string), "%s-%s",
sp_sysinfo.client_name, sp_sysinfo.client_version);
system_info.cpu_family = CPU_FAMILY__CPU_UNKNOWN;
system_info.os = OS__OS_UNKNOWN;

View File

@ -70,6 +70,13 @@
// large enough that the file can be probed from the first chunk.
#define SP_CHUNK_LEN_WORDS 1024 * 8
// Used to create default sysinfo, which should be librespot_[short sha]_[random 8 characters build id],
// ref https://github.com/plietar/librespot/pull/218. User may override, but
// as of 20220516 Spotify seems to have whitelisting of client name.
#define SP_CLIENT_NAME_DEFAULT "librespot"
#define SP_CLIENT_VERSION_DEFAULT "000000"
#define SP_CLIENT_BUILD_ID_DEFAULT "aabbccdd"
// Shorthand for error handling
#define RETURN_ERROR(r, m) \
do { ret = (r); sp_errmsg = (m); goto error; } while(0)

View File

@ -948,6 +948,19 @@ librespotc_last_errmsg(void)
return sp_errmsg ? sp_errmsg : "(no error)";
}
static void
system_info_set(struct sp_sysinfo *si_out, struct sp_sysinfo *si_user)
{
memcpy(si_out, si_user, sizeof(struct sp_sysinfo));
if (si_out->client_name[9] == '\0')
snprintf(si_out->client_name, sizeof(si_out->client_name), SP_CLIENT_NAME_DEFAULT);
if (si_out->client_version[9] == '\0')
snprintf(si_out->client_version, sizeof(si_out->client_version), SP_CLIENT_VERSION_DEFAULT);
if (si_out->client_build_id[9] == '\0')
snprintf(si_out->client_build_id, sizeof(si_out->client_build_id), SP_CLIENT_BUILD_ID_DEFAULT);
}
int
librespotc_init(struct sp_sysinfo *sysinfo, struct sp_callbacks *callbacks)
{
@ -959,7 +972,7 @@ librespotc_init(struct sp_sysinfo *sysinfo, struct sp_callbacks *callbacks)
sp_cb = *callbacks;
sp_initialized = true;
memcpy(&sp_sysinfo, sysinfo, sizeof(struct sp_sysinfo));
system_info_set(&sp_sysinfo, sysinfo);
sp_evbase = event_base_new();
if (!sp_evbase)