// ============================================
        // PRIVATE Methods
        // ============================================
        private void AcceptFileQuestion(PeerSocket peer, XmlRequest xml)
        {
            string name = (string) xml.Attributes["name"];
            string size = (string) xml.Attributes["size"];
            ulong id = ulong.Parse((string) xml.Attributes["id"]);

            UserInfo userInfo = peer.Info as UserInfo;

            StringBuilder questionMsg = new StringBuilder();
            questionMsg.AppendFormat("Accept File '<b>{0}</b>' ", name);
            questionMsg.AppendFormat("(Size <b>{0}</b>)\n", FileUtils.GetSizeString(long.Parse(size)));
            questionMsg.AppendFormat("From User '<b>{0}</b>' ?", userInfo.Name);

            // Accept Yes/No Dialog
            bool accept = Base.Dialogs.QuestionDialog("Accept File", questionMsg.ToString());
            if (accept == false) return;

            // Save File Dialog
            string savePath = FileAlreadyInUse(name);
            if (savePath == null) return;

            // Send Accept File Command
            Debug.Log("Accept File '{0}' From '{1}', Save as '{2}'", userInfo.Name, name, savePath);

            DownloadManager.Accept(peer, id, name, savePath);
            Cmd.RequestFile(peer, id);
        }
        /// Create New Accept User Dialog
        public AcceptUser(PeerSocket peer)
        {
            XML xml = new XML(null, "AcceptUserDialog.glade", "dialog", null);
            xml.Autoconnect(this);

            // Get UserInfo
            UserInfo userInfo = peer.Info as UserInfo;

            // Initialize GUI
            this.labelTitle.Text = "<span size='x-large'><b>Accept User</b> (";
            if (userInfo.SecureAuthentication == true) {
                this.image.Pixbuf = StockIcons.GetPixbuf("SecureAuth");
                this.labelTitle.Text += "Secure";
                this.dialog.Title += " (Secure Authentication)";
            } else {
                this.image.Pixbuf = StockIcons.GetPixbuf("InsecureAuth");
                this.labelTitle.Text += "Insecure";
                this.dialog.Title += " (Insecure Authentication)";
            }
            this.labelTitle.Text += ")</span>";
            this.labelTitle.UseMarkup = true;

            entryName.Text = userInfo.Name;
            entryIP.Text = peer.GetRemoteIP().ToString();

            this.dialog.ShowAll();
        }
Exemple #3
0
 /// Send Error
 public static void Error(PeerSocket peer, string message)
 {
     XmlRequest xmlRequest = new XmlRequest();
     xmlRequest.FirstTag = "error";
     xmlRequest.BodyText = message;
     peer.Send(xmlRequest.GenerateXml());
 }
Exemple #4
0
 /// Request File By Path
 public static void RequestFile(PeerSocket peer, string path)
 {
     XmlRequest xmlRequest = new XmlRequest();
     xmlRequest.FirstTag = "get";
     xmlRequest.Attributes.Add("what", "file");
     xmlRequest.Attributes.Add("path", path);
     peer.Send(xmlRequest.GenerateXml());
 }
        // ============================================
        // PUBLIC Methods
        // ============================================
        /// Add Peer's File Info to his list
        public void Add(PeerSocket peer, FileInfo fileInfo)
        {
            // Add FileInfo into Peer's ArrayList
            ArrayList fileList = GetPeerFileList(peer);
            fileList.Add(fileInfo);
            UpdatePeerFileList(peer, fileList);

            // Add Disk Path
            this.diskPaths.Add(fileInfo.MyDiskName, fileInfo);
        }
        // Evento Scatenato quando un utente accetta un qualcosa...
        // Indica al Ricevente di Iniziare ad Inviare...
        //        <accept what='file' name='...' path='...' size='...' />
        public void OnAcceptEvent(PeerSocket peer, XmlRequest xml)
        {
            Gtk.Application.Invoke(delegate {
                string what = (string) xml.Attributes["what"];

                if (what == "file") {
                    OnAcceptFileEvent(peer, xml);
                }
            });
        }
        /// Create New File Receiver
        public FileReceiver(PeerSocket peer, XmlRequest xml, string name)
        {
            this.peer = peer;
            this.fileSaved = 0;
            fileName = (string) xml.Attributes["name"];
            fileSize = Int32.Parse((string) xml.Attributes["size"]);

            // Create File Stream
            FileStream stream = FileUtils.CreateNullFile(name, fileSize);
            binaryWriter = new BinaryWriter(stream);
        }
        /// Create New File Info with id, its owner and its name
        public FileInfo(ulong id, PeerSocket peer,
						 string diskName, string dispName)
        {
            this.id = id;
            this.peer = peer;
            if (this.peer != null) {
                this.peer.Disconnecting += new PeerEventHandler(OnPeerDisconnect);
            }
            this.diskName = diskName;
            this.dispName = dispName;
        }
Exemple #9
0
        // ============================================
        // PUBLIC Events
        // ============================================
        // ============================================
        // PUBLIC Methods
        // ============================================
        /// Send Login
        public static void Login(PeerSocket peer, UserInfo userInfo)
        {
            XmlRequest xmlRequest = new XmlRequest();
            xmlRequest.FirstTag = "login";
            xmlRequest.Attributes.Add("name", userInfo.Name);
            xmlRequest.Attributes.Add("secure", userInfo.SecureAuthentication.ToString());

            string magic = Protocol.Login.GenerateMagic(peer);
            xmlRequest.Attributes.Add("magic", magic);

            peer.Send(xmlRequest.GenerateXml());
        }
            // ============================================
            // PUBLIC Constructors
            // ============================================
            public CmdParser(PeerSocket peer, ArrayList xmlCmds)
            {
                // Initialize Events (None)
                Error = null;

                // Initialize Members
                this.xmlCmds = xmlCmds;
                this.peer = peer;

                // Start Command Parser Thread
                this.thread = new Thread(new ThreadStart(ParseXml));
                this.thread.Start();
            }
        /// Create New Login Checker
        public Login(PeerSocket peer, XmlRequest xml)
        {
            // Get UserName
            string userName = (string) xml.Attributes["name"];
            if (userName == null) return;

            // Get SecureAuth
            bool secureAuth = false;
            string _secureAuth = (string) xml.Attributes["secure"];
            if (_secureAuth != null && _secureAuth == "True") secureAuth = true;

            // Get Magic
            string magic = (string) xml.Attributes["magic"];
            if (secureAuth == true && magic == null) return;

            // Initialize UserInfo
            this.userInfo = new UserInfo(userName, secureAuth, magic);
        }
Exemple #12
0
        protected void OnUnknownEvent(PeerSocket peer, XmlRequest xml)
        {
            if (xml.FirstTag != "msg") return;

            Gtk.Application.Invoke(delegate {
                UserInfo userInfo = peer.Info as UserInfo;
                string type = (string) xml.Attributes["type"];
                if (type == null) {
                    TalkManager.InsertMessage(userInfo, xml.BodyText);
                } else if (type == "status") {
                    TalkManager.InsertStatus(userInfo, xml.BodyText);
                } else if (type == "error") {
                    TalkManager.InsertError(userInfo, xml.BodyText);
                }
            });
        }
 // ============================================
 // PUBLIC STATIC Methods
 // ============================================
 /// Generate Peer's Magic
 public static string GenerateMagic(PeerSocket peer)
 {
     UserInfo myInfo = MyInfo.GetInstance();
     string userIp = CryptoUtils.SHA1String(peer.GetRemoteIP().ToString());
     string userMagic = CryptoUtils.SHA1String((string) myInfo.Informations["magic"]);
     return(CryptoUtils.MD5String(userIp + userMagic));
 }
 private static void SendError(PeerSocket peer, string error)
 {
     XmlRequest xmlRequest = new XmlRequest();
     xmlRequest.FirstTag = "msg";
     xmlRequest.BodyText = error;
     xmlRequest.Attributes.Add("type", "error");
     if (peer != null) peer.Send(xmlRequest.GenerateXml());
 }
 private static void SendStatus(PeerSocket peer, string status)
 {
     XmlRequest xmlRequest = new XmlRequest();
     xmlRequest.FirstTag = "msg";
     xmlRequest.BodyText = status;
     xmlRequest.Attributes.Add("type", "status");
     if (peer != null) peer.Send(xmlRequest.GenerateXml());
 }
 private static void SendMessage(PeerSocket peer, string message)
 {
     XmlRequest xmlRequest = new XmlRequest();
     xmlRequest.FirstTag = "msg";
     xmlRequest.BodyText = message;
     if (peer != null) peer.Send(xmlRequest.GenerateXml());
 }
        /// Create New File Sender
        public FileSender(PeerSocket peer, string path, string displayName)
        {
            this.peer = peer;
            this.fileContent = null;

            // Initialize & Read Entire File
            this.fileName = displayName;
            this.realFileName = path;

            // Initialize Thread :)
            thread = null;
        }
        /// Create New File Sender
        public FileSender(PeerSocket peer, string fileName)
        {
            this.peer = peer;
            this.fileContent = null;

            // Initialize
            this.fileName = fileName;
            this.realFileName = fileName;

            // Initialize Thread :)
            thread = null;
        }
        public void OnSndStartEvent(PeerSocket peer, XmlRequest xml)
        {
            Gtk.Application.Invoke(delegate {
                string what = (string) xml.Attributes["what"];

                if (what == "file") {
                    try {
                        DownloadManager.InitFile(peer, xml);
                    } catch (Exception e) {
                        Glue.Dialogs.MessageError("Start File Download", e.Message);
                    }
                }
            });
        }
        /// <snd what='file' id='10' part='13'>...</snd>
        private void OnSndEvent(PeerSocket peer, XmlRequest xml)
        {
            Gtk.Application.Invoke(delegate {
            string what = (string) xml.Attributes["what"];

            switch (what) {
                case "file":
                    ulong id = ulong.Parse((string) xml.Attributes["id"]);
                    DownloadManager.GetFilePart(peer, id, xml);
                    break;
                case "file-list":
                    UserInfo userInfo = peer.Info as UserInfo;
                    FolderViewer folderViewer = notebookViewer.LookupPage(userInfo);
                    folderViewer.Fill((string) xml.Attributes["path"], xml.BodyText);
                    break;
            }
            });
        }
        // =================================================
        // PROTECTED (Methods) Protocol Cmds Event Handlers
        // =================================================
        /// <get what='file' id='10' />
        private void OnGetEvent(PeerSocket peer, XmlRequest xml)
        {
            Gtk.Application.Invoke(delegate {
            string what = (string) xml.Attributes["what"];

            switch (what) {
                case "file-id":
                    try {
                        ulong id = ulong.Parse((string) xml.Attributes["id"]);
                        UploadManager.Send(peer, id);
                        // TODO: Manage ID Not Found
                    } catch (Exception e) {
                        Base.Dialogs.MessageError("File Not Found", e.Message);
                    }
                    break;
                case "file":
                    string filePath = (string) xml.Attributes["path"];
                    filePath = Path.Combine(Paths.UserSharedDirectory(MyInfo.Name), filePath.Substring(1));
                    UploadManager.Send(peer, filePath);
                    break;
                case "file-list":
                    string folderPath = (string) xml.Attributes["path"];
                    Cmd.SendFileList(peer, folderPath);
                    break;
            }
            });
        }
 private void OnAskSendFile(PeerSocket peer, string path)
 {
     try {
         CmdManager.AskSendFile(peer, path);
     } catch (Exception e) {
         Glue.Dialogs.MessageError("Ask Send File Error", e.Message);
     }
 }
 // ===================================================
 // PRIVATE (Methods) Protocol Event Handler
 // ===================================================
 private void OnAcceptFileEvent(PeerSocket peer, XmlRequest xml)
 {
     try {
         string path = (string) xml.Attributes["path"];
         UserInfo userInfo = peer.Info as UserInfo;
         UploadManager.Add(userInfo, path);
     } catch (Exception e) {
         Glue.Dialogs.MessageError("Accept File", "Peer Ip: " +
                                   peer.GetRemoteIP().ToString() + "\n" +
                                   e.Message);
     }
 }
        // ============================================
        // PRIVATE Methods
        // ============================================
        // ============================================
        // PRIVATE Methods
        // ============================================
        private void AcceptFileQuestion(PeerSocket peer, XmlRequest xml)
        {
            string name = (string) xml.Attributes["name"];
            string path = (string) xml.Attributes["path"];
            string size = (string) xml.Attributes["size"];
            if (size == null) size = "0";

            UserInfo userInfo = peer.Info as UserInfo;

            StringBuilder questionMsg = new StringBuilder();
            questionMsg.AppendFormat("Accept File '<b>{0}</b>' ", name);
            questionMsg.AppendFormat("(Size <b>{0}</b>)\n", FileUtils.GetSizeString(long.Parse(size)));
            questionMsg.AppendFormat("From User '<b>{0}</b>' ?", userInfo.Name);

            // Accept Yes/No Dialog
            bool accept = Glue.Dialogs.QuestionDialog("Accept File", questionMsg.ToString());
            if (accept == false) return;

            // Save File Dialog
            string savePath = Glue.Dialogs.SaveFile(Paths.UserSharedDirectory(MyInfo.Name), name);
            if (savePath == null) return;

            // Send Accept File Command
            Debug.Log("Accept File '{0}' From '{1}', Save as '{2}'", userInfo.Name, path, savePath);

            DownloadManager.AddToAcceptList(peer, path, savePath);
            CmdManager.AcceptFile(peer, xml);
        }
        /// <recv-abort what='file' id='10' />
        private void OnRecvAbortEvent(PeerSocket peer, XmlRequest xml)
        {
            Gtk.Application.Invoke(delegate {
            string what = (string) xml.Attributes["what"];

            if (what == "file") {
                ulong id = ulong.Parse((string) xml.Attributes["id"]);
                UploadManager.Abort(peer, id);
            }
            });
        }
 public void OnGetEvent(PeerSocket peer, XmlRequest xml)
 {
     if (xml.Attributes["what"].Equals("imgthumb")) {
         SendImageThumb(peer, xml.BodyText);
     }
 }
        /// <snd-start what='file' id='10' name='/pippo.txt' size='1024' />  
        private void OnSndStartEvent(PeerSocket peer, XmlRequest xml)
        {
            Gtk.Application.Invoke(delegate {
            string what = (string) xml.Attributes["what"];

            if (what == "file") {
                ulong id = ulong.Parse((string) xml.Attributes["id"]);
                DownloadManager.InitDownload(peer, id, xml);
            }
            });
        }
 public void OnSndEvent(PeerSocket peer, XmlRequest xml)
 {
     if (xml.Attributes["what"].Equals("imgthumb")) {
         string path = (string) xml.Attributes["path"];
         ReceiveImageThumb((UserInfo) peer.Info, path, xml.BodyText);
     }
 }
        /// Create New File Receiver
        public FileReceiver(ulong id, PeerSocket peer, 
							 string fileName, string saveAs)
            : base(id, peer, saveAs, fileName)
        {
        }
        public void SendImageThumb(PeerSocket peer, string filePath)
        {
            string imgThumb = GenerateImageThumb(filePath);
            if (imgThumb == null) return;

            // Generate Xml Request
            XmlRequest xmlRequest = new XmlRequest();
            xmlRequest.FirstTag = "snd";
            xmlRequest.BodyText = imgThumb;
            xmlRequest.Attributes.Add("what", "imgthumb");
            xmlRequest.Attributes.Add("path", filePath);
            peer.Send(xmlRequest.GenerateXml());
        }