mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-18 01:35:47 -04:00
Update to rcheevos v10.2.0
Leaderboard rurl hacks are now replaced by proper calls
This commit is contained in:
@ -6,6 +6,12 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#if RCHEEVOS_URL_SSL
|
||||
#define RCHEEVOS_URL_PROTOCOL "https"
|
||||
#else
|
||||
#define RCHEEVOS_URL_PROTOCOL "http"
|
||||
#endif
|
||||
|
||||
static int rc_url_encode(char* encoded, size_t len, const char* str) {
|
||||
for (;;) {
|
||||
switch (*str) {
|
||||
@ -67,7 +73,7 @@ int rc_url_award_cheevo(char* buffer, size_t size, const char* user_name, const
|
||||
written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=awardachievement&u=%s&t=%s&a=%u&h=%d",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=awardachievement&u=%s&t=%s&a=%u&h=%d",
|
||||
urle_user_name,
|
||||
urle_login_token,
|
||||
cheevo_id,
|
||||
@ -106,7 +112,7 @@ int rc_url_submit_lboard(char* buffer, size_t size, const char* user_name, const
|
||||
written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=submitlbentry&u=%s&t=%s&i=%u&s=%d&v=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=submitlbentry&u=%s&t=%s&i=%u&s=%d&v=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
|
||||
urle_user_name,
|
||||
urle_login_token,
|
||||
lboard_id,
|
||||
@ -122,7 +128,7 @@ int rc_url_get_gameid(char* buffer, size_t size, const char* hash) {
|
||||
int written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=gameid&m=%s",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=gameid&m=%s",
|
||||
hash
|
||||
);
|
||||
|
||||
@ -145,7 +151,7 @@ int rc_url_get_patch(char* buffer, size_t size, const char* user_name, const cha
|
||||
written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=patch&u=%s&t=%s&g=%u",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=patch&u=%s&t=%s&g=%u",
|
||||
urle_user_name,
|
||||
urle_login_token,
|
||||
gameid
|
||||
@ -181,7 +187,7 @@ int rc_url_login_with_password(char* buffer, size_t size, const char* user_name,
|
||||
written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=login&u=%s&p=%s",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=login&u=%s&p=%s",
|
||||
urle_user_name,
|
||||
urle_password
|
||||
);
|
||||
@ -205,7 +211,7 @@ int rc_url_login_with_token(char* buffer, size_t size, const char* user_name, co
|
||||
written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=login&u=%s&t=%s",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=login&u=%s&t=%s",
|
||||
urle_user_name,
|
||||
urle_login_token
|
||||
);
|
||||
@ -229,7 +235,7 @@ int rc_url_get_unlock_list(char* buffer, size_t size, const char* user_name, con
|
||||
written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=unlocks&u=%s&t=%s&g=%u&h=%d",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=unlocks&u=%s&t=%s&g=%u&h=%d",
|
||||
urle_user_name,
|
||||
urle_login_token,
|
||||
gameid,
|
||||
@ -255,7 +261,7 @@ int rc_url_post_playing(char* buffer, size_t size, const char* user_name, const
|
||||
written = snprintf(
|
||||
buffer,
|
||||
size,
|
||||
"https://retroachievements.org/dorequest.php?r=postactivity&u=%s&t=%s&a=3&m=%u",
|
||||
RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php?r=postactivity&u=%s&t=%s&a=3&m=%u",
|
||||
urle_user_name,
|
||||
urle_login_token,
|
||||
gameid
|
||||
@ -293,15 +299,14 @@ static int rc_url_append_param_equals(char* buffer, size_t buffer_size, size_t b
|
||||
return written + (int)buffer_offset;
|
||||
}
|
||||
|
||||
int rc_url_append_unum(char* buffer, size_t buffer_size, size_t* buffer_offset, const char* param, unsigned value)
|
||||
static int rc_url_append_unum(char* buffer, size_t buffer_size, size_t* buffer_offset, const char* param, unsigned value)
|
||||
{
|
||||
int written = rc_url_append_param_equals(buffer, buffer_size, *buffer_offset, param);
|
||||
if (written > 0) {
|
||||
char num[16];
|
||||
int chars = snprintf(num, sizeof(num), "%u", value);
|
||||
|
||||
if (chars + written < (int)buffer_size)
|
||||
{
|
||||
if (chars + written < (int)buffer_size) {
|
||||
memcpy(&buffer[written], num, chars + 1);
|
||||
*buffer_offset = written + chars;
|
||||
return 0;
|
||||
@ -311,16 +316,14 @@ int rc_url_append_unum(char* buffer, size_t buffer_size, size_t* buffer_offset,
|
||||
return -1;
|
||||
}
|
||||
|
||||
int rc_url_append_str(char* buffer, size_t buffer_size, size_t* buffer_offset, const char* param, const char* value)
|
||||
static int rc_url_append_str(char* buffer, size_t buffer_size, size_t* buffer_offset, const char* param, const char* value)
|
||||
{
|
||||
int written = rc_url_append_param_equals(buffer, buffer_size, *buffer_offset, param);
|
||||
if (written > 0)
|
||||
{
|
||||
if (written > 0) {
|
||||
buffer += written;
|
||||
buffer_size -= written;
|
||||
|
||||
if (rc_url_encode(buffer, buffer_size, value) == 0)
|
||||
{
|
||||
if (rc_url_encode(buffer, buffer_size, value) == 0) {
|
||||
written += (int)strlen(buffer);
|
||||
*buffer_offset = written;
|
||||
return 0;
|
||||
@ -330,10 +333,10 @@ int rc_url_append_str(char* buffer, size_t buffer_size, size_t* buffer_offset, c
|
||||
return -1;
|
||||
}
|
||||
|
||||
int rc_url_build_dorequest(char* url_buffer, size_t url_buffer_size, size_t* buffer_offset,
|
||||
static int rc_url_build_dorequest(char* url_buffer, size_t url_buffer_size, size_t* buffer_offset,
|
||||
const char* api, const char* user_name)
|
||||
{
|
||||
const char* base_url = "https://retroachievements.org/dorequest.php";
|
||||
const char* base_url = RCHEEVOS_URL_PROTOCOL"://retroachievements.org/dorequest.php";
|
||||
size_t written = strlen(base_url);
|
||||
int failure = 0;
|
||||
|
||||
@ -343,7 +346,8 @@ int rc_url_build_dorequest(char* url_buffer, size_t url_buffer_size, size_t* buf
|
||||
url_buffer[written++] = '?';
|
||||
|
||||
failure |= rc_url_append_str(url_buffer, url_buffer_size, &written, "r", api);
|
||||
failure |= rc_url_append_str(url_buffer, url_buffer_size, &written, "u", user_name);
|
||||
if (user_name)
|
||||
failure |= rc_url_append_str(url_buffer, url_buffer_size, &written, "u", user_name);
|
||||
|
||||
*buffer_offset += written;
|
||||
return failure;
|
||||
@ -371,3 +375,28 @@ int rc_url_ping(char* url_buffer, size_t url_buffer_size, char* post_buffer, siz
|
||||
|
||||
return failure;
|
||||
}
|
||||
|
||||
int rc_url_get_lboard_entries(char* buffer, size_t size, unsigned lboard_id, unsigned first_index, unsigned count)
|
||||
{
|
||||
size_t written = 0;
|
||||
int failure = rc_url_build_dorequest(buffer, size, &written, "lbinfo", NULL);
|
||||
failure |= rc_url_append_unum(buffer, size, &written, "i", lboard_id);
|
||||
if (first_index > 1)
|
||||
failure |= rc_url_append_unum(buffer, size, &written, "o", first_index - 1);
|
||||
failure |= rc_url_append_unum(buffer, size, &written, "c", count);
|
||||
|
||||
return failure;
|
||||
}
|
||||
|
||||
int rc_url_get_lboard_entries_near_user(char* buffer, size_t size, unsigned lboard_id, const char* user_name, unsigned count)
|
||||
{
|
||||
size_t written = 0;
|
||||
int failure = rc_url_build_dorequest(buffer, size, &written, "lbinfo", NULL);
|
||||
failure |= rc_url_append_unum(buffer, size, &written, "i", lboard_id);
|
||||
failure |= rc_url_append_str(buffer, size, &written, "u", user_name);
|
||||
failure |= rc_url_append_unum(buffer, size, &written, "c", count);
|
||||
|
||||
return failure;
|
||||
}
|
||||
|
||||
#undef RCHEEVOS_URL_PROTOCOL
|
||||
|
Reference in New Issue
Block a user