Skip to content

Commit 3b09d63

Browse files
authored
Add beta support from appledb, cmake shared lib (#20)
1 parent eada4cd commit 3b09d63

File tree

5 files changed

+102
-11
lines changed

5 files changed

+102
-11
lines changed

CMakeLists.txt

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,64 @@ endif()
4141
set(CMAKE_C_FLAGS_RELEASE "-Os -DNDEBUG")
4242
set(CMAKE_C_FLAGS_DEBUG "-g -O0 -DDEBUG")
4343
set(CMAKE_C_STANDARD 17)
44-
add_library(tsschecker
44+
set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
45+
add_library(tsschecker STATIC
4546
tsschecker/tsschecker.c
4647
tsschecker/download.c)
48+
add_library(tsschecker_shared SHARED
49+
tsschecker/tsschecker.c
50+
tsschecker/download.c
51+
tsschecker/common.c
52+
tsschecker/tss.c
53+
tsschecker/main.c)
4754
target_include_directories(tsschecker PRIVATE
4855
"${CMAKE_SOURCE_DIR}/dep_root/include/"
4956
tsschecker
5057
external/jssy/jssy)
58+
target_include_directories(tsschecker_shared PRIVATE
59+
"${CMAKE_SOURCE_DIR}/dep_root/include/"
60+
tsschecker
61+
external/jssy/jssy)
5162
target_link_directories(tsschecker PRIVATE
5263
"${CMAKE_SOURCE_DIR}/dep_root/lib/")
64+
target_link_directories(tsschecker_shared PRIVATE
65+
"${CMAKE_SOURCE_DIR}/dep_root/lib/"
66+
.)
5367
if(NOT DEFINED NO_PKGCFG AND NOT "$ENV{NO_PKGCFG}" MATCHES "1")
54-
message("$ENV{NO_PKGCFG}")
5568
find_package(PkgConfig REQUIRED)
5669
pkg_check_modules(DEPS REQUIRED
5770
libplist-2.0
5871
libirecovery-1.0
5972
libfragmentzip)
6073
target_include_directories(tsschecker PRIVATE "${DEPS_INCLUDE_DIRS}")
74+
else()
75+
target_link_libraries(tsschecker_shared PRIVATE
76+
curl
77+
plist-2.0
78+
irecovery-1.0
79+
fragmentzip
80+
usbmuxd-2.0
81+
imobiledevice-glue-1.0
82+
imobiledevice-1.0
83+
z
84+
jssy)
85+
endif()
86+
if("${CMAKE_HOST_SYSTEM_NAME}" MATCHES "Darwin")
87+
target_link_libraries(tsschecker_shared PRIVATE
88+
compression
89+
"-framework CoreFoundation"
90+
"-framework IOKit")
91+
endif()
92+
set_target_properties(tsschecker_shared PROPERTIES OUTPUT_NAME "tsschecker.0")
93+
if(NOT DEFINED VERSION_COMMIT_COUNT)
94+
execute_process(COMMAND git rev-list --count HEAD WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" OUTPUT_VARIABLE VERSION_COMMIT_COUNT ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
95+
endif()
96+
if(NOT DEFINED VERSION_COMMIT_SHA)
97+
execute_process(COMMAND git rev-parse HEAD WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" OUTPUT_VARIABLE VERSION_COMMIT_SHA ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
6198
endif()
99+
add_definitions(
100+
-DTSSCHECKER_VERSION_COUNT="${VERSION_COMMIT_COUNT}"
101+
-DTSSCHECKER_VERSION_SHA="${VERSION_COMMIT_SHA}")
62102
add_definitions(-DTSSCHECKER_NOMAIN=1)
63103
project(tsschecker)
64104
add_subdirectory(external)

tsschecker/common.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
#include "common.h"
2929

30+
int idevicerestore_debug;
31+
3032
#define MAX_PRINT_LEN 64*1024
3133
#ifndef NO_DEBUG_PLIST
3234
void debug_plist(plist_t plist) {

tsschecker/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#define FLAG_BUILDMANIFEST (1 << 2)
3131
#define FLAG_LATEST_IOS (1 << 3)
3232

33-
int idevicerestore_debug;
33+
extern int idevicerestore_debug;
3434
#define reterror(code,a ...) {error(a); err = code; goto error;}
3535

3636
static struct option longopts[] = {

tsschecker/tsschecker.c

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
#define FIRMWARE_JSON_URL "https://api.ipsw.me/v2.1/firmwares.json/condensed"
4646
#define FIRMWARE_BETA_JSON_URL "https://api.m1sta.xyz/betas/"
47+
#define FIRMWARE_BETA_JSON_URL2 "https://api.appledb.dev/ios/"
4748
#define FIRMWARE_OTA_JSON_URL "https://api.ipsw.me/v2.1/ota.json/condensed"
4849

4950
/* for KTRR devices this value - 32 */
@@ -69,7 +70,7 @@ static const char *win_pathvars[]={
6970
"\\tsschecker",
7071
"\\ota.json",
7172
"\\firmwares.json",
72-
"\\betas_"
73+
"\\firmwares_betas.json"
7374
};
7475

7576
static const char *win_path_get(enum paths path){
@@ -473,15 +474,38 @@ char *getFirmwareJson(){
473474
return fJson;
474475
}
475476

477+
char *getBetaFirmwareJson2(const char *type, const char *buildid) {
478+
char url[256], path[256];
479+
memset(url, 0, 256);
480+
memset(path, 0, 256);
481+
strcat(url, FIRMWARE_BETA_JSON_URL2);
482+
strcat(url, type);
483+
strcat(url, ";");
484+
strcat(url, buildid);
485+
strcat(url, ".json");
486+
strcat(path, FIRMWARE_BETA_JSON_PATH);
487+
debug("[TSSC] opening %s\n", path);
488+
FILE *f = fopen(path, "rb");
489+
if (!f || nocache){
490+
downloadFile(url, path);
491+
f = fopen(path, "rb");
492+
}
493+
fseek(f, 0, SEEK_END);
494+
long fsize = ftell(f);
495+
fseek(f, 0, SEEK_SET);
496+
char *fJson = calloc(1, fsize + 1);
497+
fread(fJson, fsize, 1, f);
498+
fclose(f);
499+
return fJson;
500+
}
501+
476502
char *getBetaFirmwareJson(const char *device) {
477503
char url[50], path[50];
478504
memset(url, 0, 50);
479505
memset(path, 0, 50);
480506
strcat(url, FIRMWARE_BETA_JSON_URL);
481507
strcat(url, device);
482508
strcat(path, FIRMWARE_BETA_JSON_PATH);
483-
strcat(path, device);
484-
strcat(path, ".json");
485509
debug("[TSSC] opening %s\n", path);
486510
FILE *f = fopen(path, "rb");
487511
if (!f || nocache){
@@ -490,11 +514,15 @@ char *getBetaFirmwareJson(const char *device) {
490514
}
491515
fseek(f, 0, SEEK_END);
492516
long fsize = ftell(f);
493-
fseek(f, 0, SEEK_SET);
494-
char *fJson = calloc(1, fsize + 1);
495-
fread(fJson, fsize, 1, f);
496-
fclose(f);
497-
return fJson;
517+
if(fsize < 1) {
518+
return NULL;
519+
} else {
520+
fseek(f, 0, SEEK_SET);
521+
char *fJson = calloc(1, fsize + 1);
522+
fread(fJson, fsize, 1, f);
523+
fclose(f);
524+
return fJson;
525+
}
498526
}
499527

500528
char *getOtaJson(){
@@ -1547,6 +1575,25 @@ char **getListOfiOSForDevice2(jssytok_t *tokens, const char *device, int isOTA,
15471575
return versions;
15481576
}
15491577

1578+
char *getBetaURLForDevice2(jssytok_t *tokens, const char *deviceid) {
1579+
if (!tokens)
1580+
return error("[TSSC] beta tokens empty\n"),NULL;
1581+
jssytok_t *tmp = jssy_dictGetValueForKey(tokens, "devices");
1582+
if (!tmp)
1583+
return error("[TSSC] beta devices empty\n"),NULL;
1584+
tmp = jssy_dictGetValueForKey(tmp, deviceid);
1585+
if (!tmp)
1586+
return error("[TSSC] beta device not found\n"),NULL;
1587+
tmp = jssy_dictGetValueForKey(tmp, "ipsw");
1588+
if (!tmp)
1589+
return error("[TSSC] beta ipsw not found\n"),NULL;
1590+
if (!tmp->size)
1591+
return error("[TSSC] beta ipsw name is empty\n"),NULL;
1592+
char *url_str = calloc(1, tmp->size + 1);
1593+
strncpy(url_str, tmp->value, tmp->size);
1594+
return url_str;
1595+
}
1596+
15501597
char *getBetaURLForDevice(jssytok_t *tokens, const char *buildid) {
15511598
if (!tokens)
15521599
return error("[TSSC] beta tokens empty\n"),NULL;

tsschecker/tsschecker.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,13 @@ typedef struct{
8787
int parseHex(const char *nonce, size_t *parsedLen, char *ret, size_t *retSize);
8888

8989
char *getFirmwareJson(void);
90+
char *getBetaFirmwareJson2(const char *type, const char *buildid);
9091
char *getBetaFirmwareJson(const char *device);
9192
char *getOtaJson(void);
9293
long parseTokens(const char *json, jssytok_t **tokens);
9394
char **getListOfiOSForDevice(jssytok_t *tokens, const char *device, int isOTA, int *versionCntt, bool beta);
9495
char **getListOfiOSForDevice2(jssytok_t *tokens, const char *device, int isOTA, int *versionCntt, int buildid, bool beta);
96+
char *getBetaURLForDevice2(jssytok_t *tokens, const char *buildid);
9597
char *getBetaURLForDevice(jssytok_t *tokens, const char *buildid);
9698
int printListOfDevices(jssytok_t *tokens);
9799
int printListOfiOSForDevice(jssytok_t *tokens, char *device, int isOTA);

0 commit comments

Comments
 (0)