+ return CFDictionaryCreateForCFTypes(kCFAllocatorDefault, NULL);
+}
+
+static HandleIDSMessageReason checkMessageValidity(SOSAccountRef account, CFStringRef fromDeviceID, CFStringRef fromPeerID, CFStringRef *peerID, SOSPeerInfoRef *theirPeerInfo){
+
+ __block HandleIDSMessageReason reason = kHandleIDSMessageDontHandle;
+
+ SOSCircleForEachPeer(account->trusted_circle, ^(SOSPeerInfoRef peer) {
+ CFStringRef deviceID = SOSPeerInfoCopyDeviceID(peer);
+ CFStringRef pID = SOSPeerInfoGetPeerID(peer);
+
+ if( deviceID && pID && fromPeerID && fromDeviceID && CFStringGetLength(fromPeerID) != 0 ){
+ if(CFStringCompare(pID, fromPeerID, 0) == 0){
+ if(CFStringGetLength(deviceID) == 0){
+ secnotice("ids transport", "device ID was empty in the peer list, holding on to message");
+ CFReleaseNull(deviceID);
+ reason = kHandleIDSMessageNotReady;
+ return;
+ }
+ else if(CFStringCompare(fromDeviceID, deviceID, 0) != 0){ //IDSids do not match, ghost
+ reason = kHandleIDSmessageDeviceIDMismatch;
+ CFReleaseNull(deviceID);
+ return;
+ }
+ else if(CFStringCompare(deviceID, fromDeviceID, 0) == 0){
+ *peerID = pID;
+ *theirPeerInfo = peer;
+ CFReleaseNull(deviceID);
+ reason = kHandleIDSMessageSuccess;
+ return;
+ }
+ }
+ }
+ CFReleaseNull(deviceID);
+ });
+
+ return reason;