Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        /// <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"]);
        }
Ejemplo n.º 3
0
        protected virtual bool MSNObjectEqual(MSNObject obj2)
        {
            if ((object)obj2 == null)
            {
                return(false);
            }

            return(GetHashCode() == obj2.GetHashCode());
        }
Ejemplo n.º 4
0
        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.");
                }
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Removes the specified msn object from the collection.
 /// </summary>
 /// <param name="msnObject"></param>
 public void Remove(MSNObject msnObject)
 {
     Remove(msnObject.CalculateChecksum());
 }
Ejemplo n.º 6
0
 /// <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;
 }
Ejemplo n.º 7
0
        /// <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;
        }
Ejemplo n.º 8
0
        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;
        }
Ejemplo n.º 9
0
        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;
        }
Ejemplo n.º 10
0
 /// <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));
 }
Ejemplo n.º 11
0
 /// <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);
 }
Ejemplo n.º 12
0
 /// <summary>
 /// Removes the specified msn object from the collection.
 /// </summary>
 /// <param name="msnObject"></param>
 public void Remove(MSNObject msnObject)
 {
     Remove(msnObject.CalculateChecksum());
 }
Ejemplo n.º 13
0
 /// <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;
 }
Ejemplo n.º 14
0
 /// <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);
 }
Ejemplo n.º 15
0
        public ObjectTransfer RequestMsnObject(Contact remoteContact, MSNObject msnObject)
        {
            ObjectTransfer objectTransferApp = new ObjectTransfer(msnObject, remoteContact);

            AddTransfer(objectTransferApp);

            return objectTransferApp;
        }
Ejemplo n.º 16
0
        /// <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);
        }
Ejemplo n.º 17
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 18
0
        protected virtual bool MSNObjectEqual(MSNObject obj2)
        {
            if ((object)obj2 == null)
                return false;

            return GetHashCode() == obj2.GetHashCode();
        }