public override bool ValidateInvitation(SLPMessage invite) { bool ret = base.ValidateInvitation(invite); if (ret) { MSNObject validObject = new MSNObject(); validObject.SetContext(invite.BodyValues["Context"].Value, true); if (validObject.ObjectType == MSNObjectType.UserDisplay || validObject.ObjectType == MSNObjectType.Unknown) { msnObject = Local.DisplayImage; objStream = Local.DisplayImage.OpenStream(); ret |= true; } else if (validObject.ObjectType == MSNObjectType.Scene) { msnObject = Local.SceneImage; objStream = Local.SceneImage.OpenStream(); ret |= true; } else if (validObject.ObjectType == MSNObjectType.Emoticon && Local.Emoticons.ContainsKey(validObject.Sha)) { msnObject = Local.Emoticons[msnObject.Sha]; objStream = ((Emoticon)msnObject).OpenStream(); ret |= true; } } return(ret); }
/// <summary> /// We are receiver /// </summary> public ObjectTransfer(MSNObject obj, Contact remote) : base(remote.P2PVersionSupported, remote, remote.SelectBestEndPointId()) { msnObject = obj; if (msnObject.ObjectType == MSNObjectType.UserDisplay) { msnObject = new DisplayImage(); applicationId = 12; msnObject.SetContext(remote.UserTileLocation, false); } else if (msnObject.ObjectType == MSNObjectType.Scene) { msnObject = new SceneImage(); applicationId = 12; msnObject.SetContext(remote.SceneContext, false); } else if (msnObject.ObjectType == MSNObjectType.Emoticon || msnObject.ObjectType == MSNObjectType.Wink) { applicationId = 11; } else { applicationId = 1; } sending = false; }
/// <summary> /// We are sender /// </summary> /// <param name="p2pSession"></param> public ObjectTransfer(P2PSession p2pSession) : base(p2pSession) { msnObject = new MSNObject(); msnObject.SetContext(p2pSession.Invitation.BodyValues["Context"].Value, true); if (msnObject.ObjectType == MSNObjectType.UserDisplay || msnObject.ObjectType == MSNObjectType.Unknown) { msnObject = NSMessageHandler.Owner.DisplayImage; objStream = NSMessageHandler.Owner.DisplayImage.OpenStream(); } else if (msnObject.ObjectType == MSNObjectType.Scene) { msnObject = NSMessageHandler.Owner.SceneImage; objStream = NSMessageHandler.Owner.SceneImage.OpenStream(); } else if (msnObject.ObjectType == MSNObjectType.Emoticon && Local.Emoticons.ContainsKey(msnObject.Sha)) { msnObject = Local.Emoticons[msnObject.Sha]; objStream = ((Emoticon)msnObject).OpenStream(); } sending = true; if (p2pSession.Invitation.BodyValues.ContainsKey("AppID")) { applicationId = uint.Parse(p2pSession.Invitation.BodyValues["AppID"]); } }
public ObjectTransfer RequestMsnObject(Contact remoteContact, MSNObject msnObject) { ObjectTransfer objectTransferApp = new ObjectTransfer(msnObject, remoteContact); AddTransfer(objectTransferApp); return(objectTransferApp); }
public override bool ProcessData(P2PBridge bridge, byte[] data, bool reset) { if (sending) { // We are sender but remote client want to kill me :) return(false); } if (reset) { // Data prep or TFCombination.First objStream.SetLength(0); } if (data.Length > 0) { objStream.Write(data, 0, data.Length); Trace.WriteLineIf(Settings.TraceSwitch.TraceVerbose, String.Format("Received {0} / {1}", objStream.Length, msnObject.Size), GetType().Name); if (objStream.Length == msnObject.Size) { // Finished transfer byte[] allData = new byte[msnObject.Size]; objStream.Seek(0, SeekOrigin.Begin); objStream.Read(allData, 0, allData.Length); string dataSha = Convert.ToBase64String(new SHA1Managed().ComputeHash(allData)); if (dataSha != msnObject.Sha) { Trace.WriteLineIf(Settings.TraceSwitch.TraceWarning, "Object hash doesn't match data hash, data invalid", GetType().Name); return(false); } MemoryStream ms = new MemoryStream(allData); ms.Position = 0; // Data CHECKSUM is ok, update MsnObject if (msnObject.ObjectType == MSNObjectType.UserDisplay) { DisplayImage newDisplayImage = new DisplayImage(Remote.Account.ToLowerInvariant(), ms); Remote.SetDisplayImageAndFireDisplayImageChangedEvent(newDisplayImage); msnObject = newDisplayImage; } else if (msnObject.ObjectType == MSNObjectType.Scene) { SceneImage newSceneImage = new SceneImage(Remote.Account.ToLowerInvariant(), ms); Remote.SetSceneImageAndFireSceneImageChangedEvent(newSceneImage); msnObject = newSceneImage; } else if (msnObject.ObjectType == MSNObjectType.Emoticon) { ((Emoticon)msnObject).Image = Image.FromStream(objStream); } else if (msnObject.ObjectType == MSNObjectType.Wink) { Stream s = ((Wink)msnObject).OpenStream(); s.Write(allData, 0, allData.Length); } objStream.Close(); OnTransferFinished(EventArgs.Empty); if (P2PSession != null) { P2PSession.Close(); // Send first BYE } } } return(true); }
internal UserDisplayPictureEventArgs(User user, MSNObject displayPicture, bool loginEvent) { User = user; DisplayPicture = displayPicture; LoginEvent = LoginEvent; }