#import #import #import #import #include #include #include #define TAG @"[OQAdsLogger]" %hook IMAAdsRequest - (instancetype)initWithAdsResponse:(NSString *)adsResponse adDisplayContainer:(id)adDisplayContainer avPlayerVideoDisplay:(id)avPlayerVideoDisplay pictureInPictureProxy:(id)pipProxy userContext:(id)userContext { NSLog(@"%@-[IMAAdsRequest init] [PiP path]", TAG); NSLog(@"%@ adDisplayContainer = %@", TAG, adDisplayContainer); NSLog(@"%@ avPlayerVideoDisplay = %@", TAG, avPlayerVideoDisplay); NSLog(@"%@ pictureInPictureProxy = %@", TAG, pipProxy); NSLog(@"%@ VMAP payload (%lu bytes):\n%@", TAG, (unsigned long)adsResponse.length, adsResponse); id result = %orig; NSLog(@"%@ -> IMAAdsRequest = %p", TAG, result); return result; } // - (instancetype)initWithAdsResponse:(NSString *)adsResponse // adDisplayContainer:(id)adDisplayContainer // contentPlayhead:(id)contentPlayhead // userContext:(id)userContext { // NSLog(@"%@-[IMAAdsRequest init] [non-PiP path]", TAG); // NSLog(@"%@ adDisplayContainer = %@", TAG, adDisplayContainer); // NSLog(@"%@ contentPlayhead = %@", TAG, contentPlayhead); // NSLog(@"%@ VMAP payload (%lu bytes):\n%@", // TAG, (unsigned long)adsResponse.length, adsResponse); // id result = %orig; // NSLog(@"%@ -> IMAAdsRequest = %p", TAG, result); // return result; // } // - (instancetype)initWithAdsResponse:(NSString *)adsResponse // adDisplayContainer:(id)adDisplayContainer // contentPlayhead:(id)contentPlayhead // userContext:(id)userContext { // NSString *tweakedVMAP = @"\n" // @"\n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @" VizChoice\n" // @" Oqee Cine Break Intro\n" // @" \n" // @" \n" // @" \n" // @" 00:00:03\n" // @" \n" // @" https://noh.am/rick.mp4\n" // @" https://replay-01.bzn.oqee.net/oqee-static/barkers/oqee-cine/2025-10-21/adaptative/playlist_214c3e5132137e02.mpd\n" // @" https://replay-01.bzn.oqee.net/oqee-static/barkers/oqee-cine/2025-10-21/adaptative/playlist_214c3e5132137e02.m3u8\n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @" \n" // @"\n"; // NSLog(@"%@ Replaced VMAP (%lu bytes) with tweaked document", TAG, adsResponse.length); // return %orig(tweakedVMAP, adDisplayContainer, contentPlayhead, userContext); // } - (instancetype)initWithAdsResponse:(NSString *)adsResponse adDisplayContainer:(id)adDisplayContainer contentPlayhead:(id)contentPlayhead userContext:(id)userContext { // Replace the VMAP with an empty document NSString *emptyVMAP = @"" @""; NSLog(@"%@ Replaced VMAP (%lu bytes) with empty document", TAG, adsResponse.length); return %orig(emptyVMAP, adDisplayContainer, contentPlayhead, userContext); } %end // IMAAdsLoader — confirms dispatch to IMA SDK // // Called from OQPlayerAdsLoader.requestAds(_:loader:) (sub_10008FC08) // after Swift dynamic-cast guards pass. This is the point of no return — // the IMA SDK takes ownership of the request and starts network I/O. %hook IMAAdsLoader - (void)requestAdsWithRequest:(id)request { NSLog(@"%@ -[IMAAdsLoader requestAdsWithRequest:]", TAG); NSLog(@"%@ loader = %@", TAG, self); NSLog(@"%@ request = %@", TAG, [request debugDescription]); %orig; NSLog(@"%@ requestAdsWithRequest dispatched ✓", TAG); } %end // IMAAdsManager — SDK parsed the VMAP, breaks are scheduled // // Called from the IMAAdsLoaderDelegate callback in OQImaManager // At this point the IMA SDK has parsed the VMAP and knows all ad break // positions. Passing nil for renderingSettings means OQEE uses defaults. %hook IMAAdsManager - (void)initializeWithAdsRenderingSettings:(id)renderingSettings { NSLog(@"%@ -[IMAAdsManager initializeWithAdsRenderingSettings:]", TAG); NSLog(@"%@ adsManager = %@", TAG, self); NSLog(@"%@ renderingSettings = %@", TAG, renderingSettings ?: @"(nil — default)"); %orig; NSLog(@"%@ VMAP parsed, ad breaks scheduled ✓", TAG); } %end %hook VSSubscriptionRegistrationCenter - (void)setCurrentSubscription:(id)subscription { NSLog(@"Blocked VSSubscriptionRegistrationCenter"); NSLog(@"Subscription: %@", subscription); return; } %end %ctor { // activate dev mode NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool:YES forKey:@"tv.oqee.devModeEnabled"]; }