parent
8a2b10f890
commit
b60375e6ea
|
@ -20,10 +20,6 @@
|
|||
<true/>
|
||||
<key>com.apple.private.hid.client.service-protected</key>
|
||||
<true/>
|
||||
<key>com.apple.private.hid.manager.client</key>
|
||||
<true/>
|
||||
<key>com.apple.private.hid.client.admin</key>
|
||||
<true/>
|
||||
<key>com.apple.private.IOSurface.protected-access</key>
|
||||
<true/>
|
||||
<key>com.apple.QuartzCore.displayable-context</key>
|
||||
|
@ -36,8 +32,6 @@
|
|||
<true/>
|
||||
<key>com.apple.private.allow-explicit-graphics-priority</key>
|
||||
<true/>
|
||||
<key>com.apple.private.xpc.launchd.app-server</key>
|
||||
<true/>
|
||||
<key>com.apple.CommCenter.fine-grained</key>
|
||||
<array>
|
||||
<string>spi</string>
|
||||
|
@ -46,15 +40,5 @@
|
|||
<true/>
|
||||
<key>com.apple.private.security.disk-device-access</key>
|
||||
<true/>
|
||||
<key>com.apple.private.touch.eeprom.access</key>
|
||||
<true/>
|
||||
<key>com.apple.security.exception.iokit-user-client-class</key>
|
||||
<string>RootDomainUserClient</string>
|
||||
<key>com.apple.private.ioaccelmemoryinfo</key>
|
||||
<true/>
|
||||
<key>com.apple.gpumemd.client</key>
|
||||
<true/>
|
||||
<key>com.apple.backboardd.virtualDisplay</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -7,6 +7,6 @@ Description: VNC for ios
|
|||
Maintainer: Julio
|
||||
Author: julioverne, Sharat M R
|
||||
Section: Tweaks
|
||||
Version: 0.0.3a
|
||||
Version: 0.0.3d
|
||||
Depiction: http://julioverne.github.io/description.html?id=com.julioverne.screendump13
|
||||
Icon: file:///Library/PreferenceLoader/Preferences/screendump/ScreenDump@2x.png
|
||||
|
|
Binary file not shown.
|
@ -19,6 +19,9 @@ static size_t bits_per_sample = 8;
|
|||
|
||||
static size_t size_image;
|
||||
|
||||
static size_t prefferH;
|
||||
static size_t prefferW;
|
||||
|
||||
static CFTypeRef (*$GSSystemCopyCapability)(CFStringRef);
|
||||
static CFTypeRef (*$GSSystemGetCapability)(CFStringRef);
|
||||
static BOOL (*$MGGetBoolAnswer)(CFStringRef);
|
||||
|
@ -83,10 +86,15 @@ static rfbBool VNCCheck(rfbClientPtr client, const char *data, int size)
|
|||
return good;
|
||||
}
|
||||
|
||||
static void upFrameLoop();
|
||||
static IOSurfaceRef screenSurface = NULL;
|
||||
static IOMobileFramebufferRef framebufferConnection = NULL;
|
||||
|
||||
@interface FrameUpdater : NSObject
|
||||
@property (nonatomic, retain) NSTimer* myTimer;
|
||||
- (void)startFrameLoop;
|
||||
- (void)stopFrameLoop;
|
||||
@end
|
||||
|
||||
static void VNCSetup()
|
||||
{
|
||||
if(!screenSurface) {
|
||||
|
@ -100,8 +108,8 @@ static void VNCSetup()
|
|||
//width = size.width/2;
|
||||
//height = size.height/2;
|
||||
|
||||
width = IOSurfaceGetWidth(screenSurface) / 2;
|
||||
height = IOSurfaceGetHeight(screenSurface) / 2;
|
||||
width = prefferW==0?IOSurfaceGetWidth(screenSurface):prefferW;
|
||||
height = prefferW==0?IOSurfaceGetHeight(screenSurface):prefferH;
|
||||
|
||||
size_image = IOSurfaceGetAllocSize(screenSurface);
|
||||
bytesPerRow = IOSurfaceGetBytesPerRow(screenSurface);
|
||||
|
@ -149,11 +157,15 @@ static void VNCSettings(bool shouldStart, NSString* password)
|
|||
VNCUpdateRunState(CCSisEnabled);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void VNCUpdateRunState(bool shouldStart)
|
||||
{
|
||||
if(screen == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if(CCSPassword && CCSPassword.length) {
|
||||
screen->authPasswdData = (void *) CCSPassword;
|
||||
} else {
|
||||
|
@ -167,12 +179,14 @@ static void VNCUpdateRunState(bool shouldStart)
|
|||
rfbRunEventLoop(screen, -1, true);
|
||||
|
||||
isLoopFrame = YES;
|
||||
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
|
||||
upFrameLoop();
|
||||
});
|
||||
|
||||
[[FrameUpdater shared] startFrameLoop];
|
||||
|
||||
} else {
|
||||
isLoopFrame = NO;
|
||||
|
||||
[[FrameUpdater shared] stopFrameLoop];
|
||||
|
||||
rfbShutdownServer(screen, true);
|
||||
}
|
||||
isVNCRunning = shouldStart;
|
||||
|
@ -188,35 +202,90 @@ static void loadPrefs(void)
|
|||
defaults = (NSDictionary *)CFPreferencesCopyMultiple(keyList, appID, CFSTR("mobile"), kCFPreferencesAnyHost)?:@{};
|
||||
CFRelease(keyList);
|
||||
}
|
||||
|
||||
prefferH = [[defaults objectForKey:@"height"]?:@(0) intValue];
|
||||
prefferW = [[defaults objectForKey:@"width"]?:@(0) intValue];
|
||||
|
||||
BOOL isEnabled = [[defaults objectForKey:@"CCSisEnabled"]?:@NO boolValue];
|
||||
NSString *password = [defaults objectForKey:@"CCSPassword"];
|
||||
VNCSettings(isEnabled, password);
|
||||
}
|
||||
}
|
||||
|
||||
static void upFrameLoop()
|
||||
|
||||
static uint32_t oldSeed;
|
||||
|
||||
@implementation FrameUpdater
|
||||
{
|
||||
NSOperationQueue *q;
|
||||
}
|
||||
@synthesize myTimer;
|
||||
+ (id)shared
|
||||
{
|
||||
static __strong FrameUpdater* initFrame;
|
||||
if(!initFrame) {
|
||||
initFrame = [[[self class] alloc] init];
|
||||
}
|
||||
return initFrame;
|
||||
}
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
|
||||
q = [[NSOperationQueue alloc] init];
|
||||
|
||||
return self;
|
||||
}
|
||||
- (void)_upFrameLoop
|
||||
{
|
||||
if(isLoopFrame && CCSisEnabled) {
|
||||
//check if screen changed
|
||||
uint32_t newSeed = IOSurfaceGetSeed(screenSurface);
|
||||
|
||||
if(oldSeed != newSeed && rfbIsActive(screen)) {
|
||||
oldSeed = newSeed;
|
||||
[q addOperationWithBlock: ^{
|
||||
IOSurfaceAcceleratorTransferSurface(accelerator, screenSurface, static_buffer, NULL, NULL, NULL, NULL);
|
||||
rfbMarkRectAsModified(screen, 0, 0, width, height);
|
||||
}];
|
||||
}
|
||||
} else {
|
||||
[self stopFrameLoop];
|
||||
}
|
||||
}
|
||||
- (void)stopFrameLoop
|
||||
{
|
||||
if(myTimer && [myTimer isValid]) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^(void){
|
||||
[myTimer invalidate];
|
||||
});
|
||||
}
|
||||
}
|
||||
- (void)startFrameLoop
|
||||
{
|
||||
if(size_image == 0) {
|
||||
VNCSetup();
|
||||
}
|
||||
while(isLoopFrame && CCSisEnabled) {
|
||||
if(rfbIsActive(screen) && IOSurfaceIsInUse(screenSurface)) {
|
||||
IOSurfaceAcceleratorTransferSurface(accelerator, screenSurface, static_buffer, NULL, NULL, NULL, NULL);
|
||||
//check if screen changed
|
||||
void * buffBytes = IOSurfaceGetBaseAddress(static_buffer);
|
||||
if(buffBytes && !(memcmp(buffBytes, "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF", 9) == 0)) {
|
||||
rfbMarkRectAsModified(screen, 0, 0, width, height);
|
||||
}
|
||||
//sleep(1/100);
|
||||
}
|
||||
[self stopFrameLoop];
|
||||
dispatch_async(dispatch_get_main_queue(), ^(void){
|
||||
myTimer = [NSTimer scheduledTimerWithTimeInterval:1/400 target:self selector:@selector(_upFrameLoop) userInfo:nil repeats:YES];
|
||||
});
|
||||
}
|
||||
-(void)dealloc
|
||||
{
|
||||
[self stopFrameLoop];
|
||||
}
|
||||
@end
|
||||
|
||||
|
||||
static void restartServer()
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int main(int argc, const char *argv[])
|
||||
{
|
||||
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)loadPrefs, CFSTR("com.cosmosgenius.screendump/preferences.changed"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
|
||||
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)restartServer, CFSTR("com.cosmosgenius.screendump/restart"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
|
||||
|
||||
loadPrefs();
|
||||
|
||||
|
|
|
@ -20,10 +20,6 @@
|
|||
<true/>
|
||||
<key>com.apple.private.hid.client.service-protected</key>
|
||||
<true/>
|
||||
<key>com.apple.private.hid.manager.client</key>
|
||||
<true/>
|
||||
<key>com.apple.private.hid.client.admin</key>
|
||||
<true/>
|
||||
<key>com.apple.private.IOSurface.protected-access</key>
|
||||
<true/>
|
||||
<key>com.apple.QuartzCore.displayable-context</key>
|
||||
|
@ -36,9 +32,6 @@
|
|||
<true/>
|
||||
<key>com.apple.private.allow-explicit-graphics-priority</key>
|
||||
<true/>
|
||||
<key>com.apple.private.xpc.launchd.app-server</key>
|
||||
<true/>
|
||||
|
||||
<key>com.apple.CommCenter.fine-grained</key>
|
||||
<array>
|
||||
<string>spi</string>
|
||||
|
@ -47,15 +40,5 @@
|
|||
<true/>
|
||||
<key>com.apple.private.security.disk-device-access</key>
|
||||
<true/>
|
||||
<key>com.apple.private.touch.eeprom.access</key>
|
||||
<true/>
|
||||
<key>com.apple.security.exception.iokit-user-client-class</key>
|
||||
<string>RootDomainUserClient</string>
|
||||
<key>com.apple.private.ioaccelmemoryinfo</key>
|
||||
<true/>
|
||||
<key>com.apple.gpumemd.client</key>
|
||||
<true/>
|
||||
<key>com.apple.backboardd.virtualDisplay</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -7,4 +7,3 @@ Maintainer: Sharat M R <cosmosgenius@gmail.com>
|
|||
Author: Sharat M R <cosmosgenius@gmail.com>
|
||||
Section: Tweaks
|
||||
Version: 0.0.3
|
||||
Installed-Size: 3100
|
||||
|
|
Loading…
Reference in New Issue