@@ -447,47 +447,117 @@ enum string libraryPath = "lib/" ~ architectureIdentifier ~ "/";
447
447
}
448
448
}
449
449
450
- public class AnisetteException : Exception {
451
- this (int error, string file = __FILE__ , size_t line = __LINE__ ) {
452
- super (format! " ADI error: %s." (translateADIErrorCode(error)), file, line);
450
+ enum AnisetteError: int {
451
+ invalidParams = - 45001 ,
452
+ invalidParams2 = - 45002 ,
453
+ invalidTrustKey = - 45003 ,
454
+ ptmTkNotMatchingState = - 45006 ,
455
+ invalidInputDataParamHeader = - 45018 ,
456
+ unknownAdiFunction = - 45019 ,
457
+ invalidInputDataParamBody = - 45020 ,
458
+ unknownSession = - 45025 ,
459
+ emptySession = - 45026 ,
460
+ invalidDataHeader = - 45031 ,
461
+ dataTooShort = - 45032 ,
462
+ invalidDataBody = - 45033 ,
463
+ unknownADICallFlags = - 45034 ,
464
+ timeError = - 45036 ,
465
+ emptyHardwareIds = - 45046 ,
466
+ filesystemError = - 45054 ,
467
+ notProvisioned = - 45061 ,
468
+ noProvisioningToErase = - 45062 ,
469
+ pendingSession = - 45063 ,
470
+ sessionAlreadyDone = - 45066 ,
471
+ libraryLoadingFailed = - 45075 ,
472
+ }
473
+
474
+ string toString (AnisetteError error) {
475
+ string formatString;
476
+ switch (cast (int ) error) {
477
+ case - 45001 :
478
+ formatString = " invalid parameters (%d)" ;
479
+ break ;
480
+ case - 45002 :
481
+ formatString = " invalid parameters (for decipher) (%d)" ;
482
+ break ;
483
+ case - 45003 :
484
+ formatString = " invalid Trust Key (%d)" ;
485
+ break ;
486
+ case - 45006 :
487
+ formatString = " ptm and tk are not matching the transmitted cpim (%d)" ;
488
+ break ;
489
+ // -45017: exists (observed: iOS), unknown meaning
490
+ case - 45018 :
491
+ formatString = " invalid input data header (first uint) (pointer is correct tho) (%d)" ;
492
+ break ;
493
+ case - 45019 :
494
+ formatString = " vdfut768ig doesn't know the asked function (%d)" ;
495
+ break ;
496
+ case - 45020 :
497
+ formatString = " invalid input data (not the first uint) (%d)" ;
498
+ break ;
499
+ case - 45025 :
500
+ formatString = " unknown session (%d)" ;
501
+ break ;
502
+ case - 45026 :
503
+ formatString = " empty session (%d)" ;
504
+ break ;
505
+ case - 45031 :
506
+ formatString = " invalid data (header) (%d)" ;
507
+ break ;
508
+ case - 45032 :
509
+ formatString = " data too short (%d)" ;
510
+ break ;
511
+ case - 45033 :
512
+ formatString = " invalid data (body) (%d)" ;
513
+ break ;
514
+ case - 45034 :
515
+ formatString = " unknown ADI call flags (%d)" ;
516
+ break ;
517
+ case - 45036 :
518
+ formatString = " time error (%d)" ;
519
+ break ;
520
+ // -45044: exists (observed: macOS iTunes, from Google), unknown meaning
521
+ // -45045: probably a typo of -45054
522
+ case - 45046 :
523
+ formatString = " identifier generation failure: empty hardware ids (%d)" ;
524
+ break ;
525
+ // -45048: exists (observed: windows iTunes, from Google), unknown meaning, resolved by adi file suppression
526
+ case - 45054 :
527
+ formatString = " generic libc/file manipulation error (%d)" ;
528
+ break ;
529
+ case - 45061 :
530
+ formatString = " not provisioned (%d)" ;
531
+ break ;
532
+ case - 45062 :
533
+ formatString = " cannot erase provisioning: not provisioned (%d)" ;
534
+ break ;
535
+ case - 45063 :
536
+ formatString = " provisioning first step is already pending (%d)" ;
537
+ break ;
538
+ case - 45066 :
539
+ formatString = " 2nd step fail: session already consumed (%d)" ;
540
+ break ;
541
+ case - 45075 :
542
+ formatString = " library loading error (%d)" ;
543
+ break ;
544
+ // -45076: exists (observed: macOS iTunes, from Google), unknown meaning, seems related to backward compatibility between 12.6.x and 12.7
545
+ default :
546
+ formatString = " unknown ADI error (%d)" ;
547
+ break ;
453
548
}
549
+ return format (formatString, error);
454
550
}
455
551
456
- enum knownErrorCodes = [
457
- - 45001 : " invalid parameters" ,
458
- - 45002 : " invalid parameters (for decipher)" ,
459
- - 45003 : " invalid Trust Key" ,
460
- - 45006 : " ptm and tk are not matching the transmitted cpim" ,
461
- // -45017: exists (observed: iOS), unknown meaning
462
- - 45018 : " invalid input data header (first uint) (pointer is correct tho)" ,
463
- - 45019 : " vdfut768ig doesn't know the asked function" ,
464
- - 45020 : " invalid input data (not the first uint)" ,
465
- - 45025 : " unknown session" ,
466
- - 45026 : " empty session" ,
467
- - 45031 : " invalid data (header)" ,
468
- - 45032 : " data too short" ,
469
- - 45033 : " invalid data (body)" ,
470
- - 45034 : " unknown ADI call flags" ,
471
- - 45036 : " time error" ,
472
- // -45044: exists (observed: macOS iTunes, from Google), unknown meaning
473
- // -45045: probably a typo of -45054
474
- - 45046 : " identifier generation failure: empty hardware ids" ,
475
- // -45048: exists (observed: windows iTunes, from Google), unknown meaning, resolved by adi file suppression
476
- - 45054 : " generic libc/file manipulation error" ,
477
- - 45061 : " not provisioned" ,
478
- - 45062 : " cannot erase provisioning: not provisioned" ,
479
- - 45063 : " provisioning first step is already pending" ,
480
- - 45066 : " 2nd step fail: session already consumed" ,
481
- - 45075 : " library loading error" ,
482
- // -45076: exists (observed: macOS iTunes, from Google), unknown meaning, seems related to backward compatibility between 12.6.x and 12.7
483
- ];
484
-
485
- string translateADIErrorCode (int errorCode) {
486
- foreach (knownErrorCode; knownErrorCodes.byKeyValue ) {
487
- if (errorCode == knownErrorCode.key) {
488
- return format! " %s (%d)" (knownErrorCode.value, errorCode);
489
- }
552
+ public class AnisetteException : Exception {
553
+ private AnisetteError errorCode;
554
+
555
+ this (int error, string file = __FILE__ , size_t line = __LINE__ ) {
556
+ this .errorCode = cast (AnisetteError) error;
557
+ super (errorCode.toString(), file, line);
490
558
}
491
559
492
- return format! " %d" (errorCode);
560
+ AnisetteError anisetteError () {
561
+ return errorCode;
562
+ }
493
563
}
0 commit comments