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
7576static 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+
476502char * 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
500528char * 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+
15501597char * getBetaURLForDevice (jssytok_t * tokens , const char * buildid ) {
15511598 if (!tokens )
15521599 return error ("[TSSC] beta tokens empty\n" ),NULL ;
0 commit comments