Example #1
0
extern CFDataRef GPDuplexClient_Send(GPDuplexClientRef client, SInt32 type, CFDataRef data, Boolean expectsReturn) {
	CFMessagePortRef serverPort;
	if (client != NULL)
		serverPort = client->serverPort;
	else {
		serverPort = CFMessagePortCreateRemote(NULL, CFSTR("hk.kennytm.GriP.server"));
		if (serverPort == NULL) {
			CFShow(CFSTR("GPDuplexClient_Send(): Cannot create server port. Is GriP running?"));
			return NULL;
		}
	}
	
	if (expectsReturn) {
		CFDataRef retData = NULL;
		SInt32 errorCode = CFMessagePortSendRequest(serverPort, type, data, 4, 1, kCFRunLoopDefaultMode, &retData);
		if (client == NULL)
			CFRelease(serverPort);
		if (errorCode != kCFMessagePortSuccess) {
			CFLog(4, CFSTR("GPDuplexClient_Send(): Cannot send data %@ of type %d to server. Returning NULL. Error code = %d"), data, type, errorCode);
			if (retData != NULL) {
				CFRelease(retData);
				retData = NULL;
			}
		}
		return retData;
	} else {
		SInt32 errorCode = CFMessagePortSendRequest(serverPort, type, data, 4, 0, NULL, NULL);
		if (client == NULL)
			CFRelease(serverPort);
		if (errorCode != kCFMessagePortSuccess) {
			CFLog(4, CFSTR("GPDuplexClient_Send(): Cannot send data %@ of type %d to server. Error code = %d"), data, type, errorCode);
		}
		return NULL;
	}
}
static void mach_reply_func(struct ReplyAddress * addr, char* msg, int size)
{
    CFMessagePortRef replyPort = (CFMessagePortRef) addr->mSocket;
    CFDataRef data = CFDataCreateWithBytesNoCopy(NULL, (const UInt8*)msg, size, kCFAllocatorNull);
    CFMessagePortSendRequest(replyPort, 0, data, 0, 0, NULL, NULL);
    CFRelease(data);
}
Example #3
0
void Zirk2PortClient::SendConnect()
{
	if (!mRemoteMessagePort) return;
	
	CFDataRef returnData;
	SInt32 ans = CFMessagePortSendRequest(GetRemoteMessagePort(), kZirkPort_Connect, mData, 1., 1., NULL, &returnData);
	if (ans != 0) return;
}
static OSStatus BIMSendMessageToUIServer( BasicMessageID inMessageID )
{
    OSStatus result;
    CFDataRef sendData;
    CFDataRef replyData;
    CFMessagePortRef serverPortRef;
    BasicMessageHeader header;

    result = noErr;
    sendData = NULL;
    replyData = NULL;
    serverPortRef = NULL;

    //  Create a reference to the remote message port. We identify the port using a unique,
    //  system-wide name, in this case defined by kBasicServerPortName.

    serverPortRef = CFMessagePortCreateRemote( NULL, CFSTR( kBasicServerPortName ) );
    if( serverPortRef == NULL )
        result = -1;
        
    //  Create our message header.

    if( result == noErr )
        result = GetCurrentProcess( &header.fProcessSerialNumber );

    if( result == noErr ) {
        sendData = CFDataCreate( NULL, (UInt8 *) &header, sizeof( BasicMessageHeader ) );
        if (sendData == NULL)
            result = memFullErr;
    }

    //  Send the message specified in iMessageID to the server. We send the message header
    //  as data.

    if( result == noErr ) {
        if( CFMessagePortSendRequest( serverPortRef, inMessageID, sendData,
                                      10, 10, NULL, &replyData ) != kCFMessagePortSuccess )
            result = -2;
    }

    //	Release everything.

    if( sendData )
	CFRelease( sendData );
    if( replyData )
	CFRelease( replyData );
    if( serverPortRef )
	CFRelease( serverPortRef );
  
    //  Return an error code to the caller.
 
    return result;
}
Example #5
0
extern GPDuplexClientRef GPDuplexClient_Create() {
	CFRunLoopRef runLoop = CFRunLoopGetCurrent();
	GPDuplexClientRef client = calloc(1, sizeof(GPDuplexClientRef));
	client->refcount = 1;
	client->observers = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
	
	// (1) Obtain the server port.
	client->serverPort = CFMessagePortCreateRemote(NULL, CFSTR("hk.kennytm.GriP.server"));
	if (client->serverPort == NULL) {
		CFShow(CFSTR("GPDuplexClient_Init(): Cannot create server port. Is GriP running?"));
		GPDuplexClient_Release(client);
		return NULL;
	}
	
	// (2) ask the server port for a unique ID.
	CFDataRef pidData = NULL;
	SInt32 errorCode = CFMessagePortSendRequest(client->serverPort, GPMessage_GetClientPortID, NULL, 1, 1, kCFRunLoopDefaultMode, &pidData);
	if (errorCode != kCFMessagePortSuccess || pidData == NULL) {
		CFLog(4, CFSTR("GPDuplexClient_Init(): Cannot obtain a unique client port ID from server. Error code = %d and pidData = %@."), errorCode, pidData);
		if (pidData != NULL)
			CFRelease(pidData);
		GPDuplexClient_Release(client);
		return NULL;
	}
	
	// (3) Create client port from UID.
	const char* clientPortCString = (const char*)CFDataGetBytePtr(pidData);
	CFStringRef clientPortName = CFStringCreateWithCString(NULL, clientPortCString, kCFStringEncodingUTF8);
	CFMessagePortContext clientContext = {0, client, NULL, NULL, NULL};
	Boolean shouldFreeInfo = false;
	client->clientPort = CFMessagePortCreateLocal(NULL, clientPortName, &GPClientCallback, &clientContext, &shouldFreeInfo);
	if (shouldFreeInfo || client->clientPort == NULL) {
		CFLog(4, CFSTR("GPDuplexClient_Init(): Cannot create client port with port name %@."), clientPortName);
		CFRelease(clientPortName);
		CFRelease(pidData);
		GPDuplexClient_Release(client);
		return NULL;
	}
	CFRelease(clientPortName);
	
	// (4) Add client port to run loop.
	client->clientSource = CFMessagePortCreateRunLoopSource(NULL, client->clientPort, 0);
	CFRunLoopAddSource(runLoop, client->clientSource, kCFRunLoopDefaultMode);
	
	CFRelease(pidData);
	
	CFLog(4, CFSTR("create client = %@"), client->clientPort);
	
	return client;
}
Example #6
0
/*
 *  Call from CoreMIDI IO threaded callback,
 *  we can't call Wine debug channels, critical section or anything using NtCurrentTeb here.
 */
void MIDIIn_SendMessage(MIDIMessage msg)
{
    CFDataRef data;

    CFMessagePortRef messagePort;
    messagePort = CFMessagePortCreateRemote(kCFAllocatorDefault, MIDIInThreadPortName);

    data = CFDataCreate(kCFAllocatorDefault, (UInt8 *) &msg, sizeof(msg));
    if (data)
    {
        CFMessagePortSendRequest(messagePort, 0, data, 0.0, 0.0, NULL, NULL);
        CFRelease(data);
        CFRelease(messagePort);
    }
}
Example #7
0
void Zirk2PortClient::SendPan(UInt32 channel, Float32 azimuth, Float32 zenith, Float32 azimuthSpan, Float32 zenithSpan, Float32 gain)
{
	if (!mRemoteMessagePort) return;
	
	ClearData();
	CFDataAppendBytes(mData, (const UInt8*) &channel, sizeof(channel));
	CFDataAppendBytes(mData, (const UInt8*) &azimuth, sizeof(azimuth));
	CFDataAppendBytes(mData, (const UInt8*) &zenith, sizeof(zenith));
	CFDataAppendBytes(mData, (const UInt8*) &azimuthSpan, sizeof(azimuthSpan));
	CFDataAppendBytes(mData, (const UInt8*) &zenithSpan, sizeof(zenithSpan));
	CFDataAppendBytes(mData, (const UInt8*) &gain, sizeof(gain));	
	
	CFDataRef returnData;
	SInt32 ans = CFMessagePortSendRequest(GetRemoteMessagePort(), kZirkPort_Pan, mData, 1., 1., NULL, &returnData);
	if (ans != 0) return;	
}
Example #8
0
static int SBA_sendMessage(UInt8 cmd, UInt16 dataLen, UInt8 *data, CFDataRef *resultData){
		
	SBA_refresh();
	
	// well, won't work
	if (!springBoardAccessMessagePort) {
		return kCFMessagePortIsInvalid;
	}
	// create and send message
	CFDataRef cfData = CFDataCreate(NULL, data, dataLen);
	CFStringRef replyMode = NULL;
	if (resultData) {
		replyMode = kCFRunLoopDefaultMode;
	}
	int result = CFMessagePortSendRequest(springBoardAccessMessagePort, cmd, cfData, 1, 1, replyMode, resultData);
	CFRelease(cfData);
	return result;
}
Example #9
0
static void target_send(CFMessagePortRef port, CFMutableStringRef inputstr) {
    CFDataRef inputData = CFStringCreateExternalRepresentation(NULL, inputstr, kCFStringEncodingUTF8, 0);

    CFDataRef returnedData;
    SInt32 code = CFMessagePortSendRequest(port, 0, inputData, 2, recvTimeout, kCFRunLoopDefaultMode, &returnedData);
    CFRelease(inputData);

    if (code != kCFMessagePortSuccess) {
        const char* errstr = "unknown error";
        switch (code) {
            case kCFMessagePortSendTimeout: errstr = "send timeout"; break;
            case kCFMessagePortReceiveTimeout: errstr = "receive timeout"; break;
            case kCFMessagePortIsInvalid: errstr = "dunno something went wrong"; break;
            case kCFMessagePortTransportError: errstr = "error occurred while sending"; break;
            case kCFMessagePortBecameInvalidError: errstr = "osx is suddenly broken"; break;
        }

        fprintf(stderr, "error: %s\n", errstr);
        exit(2);
    }

//     CFStringRef responseString = CFStringCreateFromExternalRepresentation(NULL, returnedData, kCFStringEncodingUTF8);
//     CFRelease(returnedData);
//     CFIndex maxSize = CFStringGetMaximumSizeForEncoding(CFStringGetLength(responseString), kCFStringEncodingUTF8) + 1;
//     const char* responseCStringPtr = CFStringGetCStringPtr(responseString, kCFStringEncodingUTF8);
//     char responseCString[maxSize];
//
//     if (!responseCStringPtr)
//         CFStringGetCString(responseString, responseCString, maxSize, kCFStringEncodingUTF8);
//     printf("%s%s%s\n", COLOR_OUTPUT, responseCStringPtr ? responseCStringPtr : responseCString, COLOR_RESET);
//
//     CFRelease(responseString);

    CFIndex maxSize = CFDataGetLength(returnedData) ;
    char  responseCString[maxSize] ;

    CFDataGetBytes(returnedData, CFRangeMake(0,maxSize), (UInt8 *)responseCString );

    printf("%s", COLOR_OUTPUT) ;
    fwrite(responseCString, 1, maxSize, stdout);
    printf("%s", COLOR_RESET) ;
}
Example #10
0
LONG CoreAudio_MIDIRelease(void)
{
    TRACE("\n");
    if (MIDIIn_NumDevs > 0)
    {
        CFMessagePortRef messagePort;
        /* Stop CFRunLoop in MIDIIn_MessageThread */
        messagePort = CFMessagePortCreateRemote(kCFAllocatorDefault, MIDIInThreadPortName);
        CFMessagePortSendRequest(messagePort, 1, NULL, 0.0, 0.0, NULL, NULL);
        CFRelease(messagePort);

        DeleteCriticalSection(&midiInLock);
    }

    if (wineMIDIClient) MIDIClientDispose(wineMIDIClient); /* MIDIClientDispose will close all ports */

    HeapFree(GetProcessHeap(), 0, sources);
    HeapFree(GetProcessHeap(), 0, destinations);
    return DRV_SUCCESS;
}