// ============================================ // 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(); }
/// Send Error public static void Error(PeerSocket peer, string message) { XmlRequest xmlRequest = new XmlRequest(); xmlRequest.FirstTag = "error"; xmlRequest.BodyText = message; peer.Send(xmlRequest.GenerateXml()); }
/// 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; }
// ============================================ // 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); }
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()); }