protected virtual void OnWinkDefinitionReceived(object sender, WinkEventArgs e) { if (!autoRequestObjects) { return; } MSNObject existing = MSNObjectCatalog.GetInstance().Get(e.Wink.CalculateChecksum()); if (existing == null) { // create a session and send the invitation ObjectTransfer winkTransfer = nsMessageHandler.P2PHandler.RequestMsnObject(e.Sender, e.Wink); winkTransfer.TransferAborted += (winkTransfer_TransferAborted); winkTransfer.TransferFinished += (winkTransfer_TransferFinished); MSNObjectCatalog.GetInstance().Add(e.Wink); if (WinkDefinitionReceived != null) { WinkDefinitionReceived(this, e); } } else { if (WinkDefinitionReceived != null) { WinkDefinitionReceived(this, new WinkEventArgs(e.Sender, existing as Wink, e.RoutingInfo)); } //If exists, fire the event. OnWinkReceived(this, new WinkEventArgs(e.Sender, existing as Wink, e.RoutingInfo)); } }
/// <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"]); }
protected virtual bool MSNObjectEqual(MSNObject obj2) { if ((object)obj2 == null) { return(false); } return(GetHashCode() == obj2.GetHashCode()); }
protected virtual void OnEmoticonDefinitionReceived(object sender, EmoticonDefinitionEventArgs e) { if (!autoRequestObjects) { return; } MSNObject existing = MSNObjectCatalog.GetInstance().Get(e.Emoticon.CalculateChecksum()); if (existing == null) { e.Sender.Emoticons[e.Emoticon.Sha] = e.Emoticon; // create a session and send the invitation ObjectTransfer emoticonTransfer = nsMessageHandler.P2PHandler.RequestMsnObject(e.Sender, e.Emoticon); emoticonTransfer.TransferAborted += (emoticonTransfer_TransferAborted); emoticonTransfer.TransferFinished += (emoticonTransfer_TransferFinished); MSNObjectCatalog.GetInstance().Add(e.Emoticon); if (EmoticonDefinitionReceived != null) { EmoticonDefinitionReceived(this, e); } } else { if (EmoticonDefinitionReceived != null) { EmoticonDefinitionReceived(this, e); } Emoticon existingEmoticon = existing as Emoticon; //If exists and data were ready, fire the event. if (existingEmoticon.DataReady) { OnEmoticonReceived(this, new EmoticonArrivedEventArgs(e.Sender, existingEmoticon, null, e.RoutingInfo)); } else { Trace.WriteLineIf(Settings.TraceSwitch.TraceWarning, "An emoticon definition has been received, but the emoticon data were not yet completed."); } } }
/// <summary> /// Removes the specified msn object from the collection. /// </summary> /// <param name="msnObject"></param> public void Remove(MSNObject msnObject) { Remove(msnObject.CalculateChecksum()); }
/// <summary> /// Adds the MSNObject (a user display, emoticon, etc) in the global collection, with the specified checksum as index. /// </summary> /// <param name="checksum"></param> /// <param name="msnObject"></param> public void Add(string checksum, MSNObject msnObject) { lock (SyncRoot) objectCollection[checksum] = msnObject; }
/// <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; }
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; }
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; }
/// <summary> /// Requests <paramref name="msnObject"/> from <paramref name="remoteContact"/>. /// </summary> /// <param name="remoteContact"></param> /// <param name="msnObject"></param> /// <returns></returns> public ObjectTransfer RequestMsnObject(Contact remoteContact, MSNObject msnObject) { return(P2PHandler.RequestMsnObject(remoteContact, msnObject)); }
/// <summary> /// Requests <paramref name="msnObject"/> from <paramref name="remoteContact"/>. /// </summary> /// <param name="remoteContact"></param> /// <param name="msnObject"></param> /// <returns></returns> public ObjectTransfer RequestMsnObject(Contact remoteContact, MSNObject msnObject) { return P2PHandler.RequestMsnObject(remoteContact, msnObject); }
/// <summary> /// Adds the MSNObject (a user display, emoticon, etc) in the global collection. /// </summary> /// <param name="msnObject"></param> public void Add(MSNObject msnObject) { string hash = msnObject.CalculateChecksum(); Add(hash, msnObject); }
public ObjectTransfer RequestMsnObject(Contact remoteContact, MSNObject msnObject) { ObjectTransfer objectTransferApp = new ObjectTransfer(msnObject, remoteContact); AddTransfer(objectTransferApp); return objectTransferApp; }
private void Handle(XmlNodeList nodeList) { if (nodeList == null || nodeList.Count == 0) { return; } foreach (XmlNode node in nodeList) { if (!String.IsNullOrEmpty(node.InnerText)) { // REMARK: All the MSNObject must use MSNObject.GetDecodeString(string) to get the decoded conext. switch (node.Name) { case "UserTileLocation": UserTileLocation = MSNObject.GetDecodeString(node.InnerText); break; case "FriendlyName": FriendlyName = node.InnerText; break; case "RUM": RUM = System.Web.HttpUtility.UrlDecode(node.InnerText, System.Text.Encoding.UTF8); break; case "PSM": Message = System.Web.HttpUtility.UrlDecode(node.InnerText, System.Text.Encoding.UTF8); break; case "DDP": DDP = System.Web.HttpUtility.UrlDecode(node.InnerText, System.Text.Encoding.UTF8); break; case "ColorScheme": ColorScheme = ColorTranslator.FromOle(int.Parse(node.InnerText)); break; case "Scene": Scene = MSNObject.GetDecodeString(node.InnerText); break; case "SignatureSound": SignatureSound = System.Web.HttpUtility.UrlDecode(node.InnerText, System.Text.Encoding.UTF8); break; case "CurrentMedia": string mediaString = System.Web.HttpUtility.UrlDecode(node.InnerText, System.Text.Encoding.UTF8); if (mediaString.Length > 0) { string[] vals = mediaString.Split(new string[] { @"\0" }, StringSplitOptions.None); if (!String.IsNullOrEmpty(vals[0])) { appName = vals[0]; } switch (vals[1]) { case "Music": MediaType = MediaType.Music; break; case "Games": MediaType = MediaType.Games; break; case "Office": MediaType = MediaType.Office; break; } /* * 0 * 1 Music * 2 1 * 3 {0} - {1} * 4 Evanescence * 5 Call Me When You're Sober * 6 Album * 7 WMContentID * 8 */ //vals[2] = Enabled/Disabled Format = vals[3]; int size = vals.Length - 4; CurrentMediaContent = new String[size]; for (int i = 0; i < size; i++) { CurrentMediaContent[i] = vals[i + 4]; } } break; } } } }
protected virtual bool MSNObjectEqual(MSNObject obj2) { if ((object)obj2 == null) return false; return GetHashCode() == obj2.GetHashCode(); }