/// <summary> /// Send a request to send a file to a user. /// </summary> /// <param name="Nickname">The nick name of the user to receive the file.</param> /// <param name="Filename">The filename of the file to send.</param> /// <returns>A DCC transfer.</returns> public DCCTransfer SendFile(string Nickname, string Filename) { if (parent.Channels.IsOnChannel(Nickname)) { throw(new Exception("Cannot DCC request channels.")); } if (File.Exists(Filename)) { int Port = FreePort(); string strRemote = Filename; if (Filename.IndexOf("\\") > -1) { strRemote = Filename.Substring(Filename.LastIndexOf("\\") + 1, Filename.Length - (Filename.LastIndexOf("\\") + 1)); } strRemote.Replace(" ", "_"); FileInfo fileInfo = new FileInfo(Filename); DCCTransfer newTransfer = new DCCTransfer(base.CurrentConnection, Nickname, Port, Filename, strRemote, transfer); transfer.AddDcc(newTransfer); base.CurrentConnection.SendData("NOTICE " + Nickname + " :DCC Send " + strRemote + " (" + parent.LocalIP.ToString() + ")"); base.CurrentConnection.SendData("PRIVMSG " + Nickname + " :\x01" + "DCC SEND " + strRemote + " " + IRCHost(parent.LocalIP.ToString()) + " " + Port.ToString() + " " + fileInfo.Length.ToString() + "\x01"); return(newTransfer); } else { throw(new FileNotFoundException("The file was not found.", Filename)); } }
internal void FireDCCTransferRequest(DCCTransfer newTransfer) { if (this.DCCTransferRequested != null) { this.DCCTransferRequested(this, new DCCTransferRequestEventArgs(newTransfer)); } }
/// <summary> /// Finds a DCC transfer in the array. /// </summary> /// <param name="ToFind">An DCCTransfer object to find.</param> /// <returns>The position of the DCCTransfer object.</returns> public int Find(DCCTransfer ToFind) { for (int x=0;x<dccs.Count;x++) if ((DCCTransfer) dccs[x]==ToFind) return x; throw(new ArgumentException("Item not in list.", "ToFind")); }
/// <summary> /// Finds a DCC transfer in the array. /// </summary> /// <param name="ToFind">An DCCTransfer object to find.</param> /// <returns>The position of the DCCTransfer object.</returns> public int Find(DCCTransfer ToFind) { for (int x = 0; x < dccs.Count; x++) { if ((DCCTransfer)dccs[x] == ToFind) { return(x); } } throw(new ArgumentException("Item not in list.", "ToFind")); }
/// <summary> /// Send a request to send a file to a user. /// </summary> /// <param name="Nickname">The nick name of the user to receive the file.</param> /// <param name="Filename">The filename of the file to send.</param> /// <returns>A DCC transfer.</returns> public DCCTransfer SendFile(string Nickname, string Filename) { if (parent.Channels.IsOnChannel(Nickname)) throw(new Exception("Cannot DCC request channels.")); if (File.Exists(Filename)) { int Port = FreePort(); string strRemote = Filename; if (Filename.IndexOf("\\")>-1) strRemote = Filename.Substring(Filename.LastIndexOf("\\") + 1, Filename.Length - (Filename.LastIndexOf("\\") + 1)); strRemote.Replace(" ", "_"); FileInfo fileInfo = new FileInfo(Filename); DCCTransfer newTransfer = new DCCTransfer(base.CurrentConnection, Nickname, Port, Filename, strRemote, transfer); transfer.AddDcc(newTransfer); base.CurrentConnection.SendData("NOTICE " + Nickname + " :DCC Send " + strRemote + " (" + parent.LocalIP.ToString() + ")"); base.CurrentConnection.SendData("PRIVMSG " + Nickname + " :\x01" + "DCC SEND " + strRemote + " " + IRCHost(parent.LocalIP.ToString()) + " " + Port.ToString() + " " + fileInfo.Length.ToString() + "\x01"); return newTransfer; } else throw(new FileNotFoundException("The file was not found.", Filename)); }
internal DCCTransferRequestEventArgs(DCCTransfer __newtransfer) { _newtransfer = __newtransfer; }
private void ParseCTCP(UserInfo user, MessageReciever Target, string CTCPData, bool blNotice) { CTCPData = CTCPData.Trim(); string strCommand = ""; string strParams = ""; if (CTCPData.IndexOf(" ")>-1) { strCommand = CTCPData.Substring(0, CTCPData.IndexOf(" ")); strParams = CTCPData.Substring(CTCPData.IndexOf(" ") + 1, CTCPData.Length - (CTCPData.IndexOf(" ") + 1)); } else strCommand = CTCPData; if (!blNotice) { #region CtCp Requests switch (strCommand.ToLower()) { case "ping": base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01PING " + strParams + "\x01", false); break; case "version": string clientInfo = "TNets IRC Library v.0.7"; if (this.CtCpVersionNeedsClientInfo != null) clientInfo = this.CtCpVersionNeedsClientInfo(this, new EventArgs()); base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01VERSION " + clientInfo + "\x01", false); break; case "finger": TimeSpan time = (TimeSpan) DateTime.Now.Subtract(base.CurrentConnection.LastActive); string strReadable = ""; #region Calculate readable idle time if (time.TotalSeconds>60) { string strHours = ""; string strMinutes = ""; string strSeconds = ""; if (time.Hours>0) { if (time.Hours>1) strHours = time.Hours.ToString() + " hours "; else strHours = time.Hours.ToString() + " hour "; } if (time.Minutes>0) { if (time.Minutes>1) strMinutes = time.Minutes.ToString() + " minutes "; else strMinutes = time.Minutes.ToString() + " minute "; } if (time.Seconds>0) { if (time.Seconds>1) strSeconds = time.Seconds.ToString() + " seconds "; else strSeconds = time.Seconds.ToString() + " second "; } strReadable = strHours + strMinutes + strSeconds; strReadable = " (" + strReadable.Trim() + ")"; } #endregion base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01" + "FINGER Idle " + Math.Floor(time.TotalSeconds).ToString() + " seconds" + strReadable + "\x01", false); break; case "time": base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01TIME " + mIRCDateTime(DateTime.Now) + "\x01", false); break; case "action": Target.FireRecievedMessage(users.GetUser(user), strParams, true); break; case "dcc": if (Target.GetType() == typeof(User)) { User userTarget = (User) Target; string[] strDccParams = strParams.Split(new char[] {' '}); if (strDccParams.Length>=4) { switch (strDccParams[0].ToLower()) { case "chat": DCCChat newChat = new DCCChat(base.CurrentConnection, long.Parse(strDccParams[2]), int.Parse(strDccParams[3]), user.Nick, dcc.Chats); dcc.Chats.AddDcc(newChat); userTarget.FireDCCChatRequest(newChat); break; case "send": DCCTransfer newTransfer = new DCCTransfer(base.CurrentConnection, long.Parse(strDccParams[2]), int.Parse(strDccParams[3]), user.Nick, strDccParams[1], long.Parse(strDccParams[4]), dcc.Transfer); dcc.Transfer.AddDcc(newTransfer); userTarget.FireDCCTransferRequest(newTransfer); break; case "accept": for (int x=0;x<dcc.Transfer.Count;x++) { if (dcc.Transfer[x].Identifier==int.Parse(strDccParams[2])) { dcc.Transfer[x].ResumeAccepted(long.Parse(strDccParams[3])); break; } } break; case "resume": for (int x=0;x<dcc.Transfer.Count;x++) { if (dcc.Transfer[x].Identifier==int.Parse(strDccParams[2])) { dcc.Transfer[x].ResumeRequested(long.Parse(strDccParams[3])); break; } } break; } } } break; default: Target.FireRecievedCtCpMessage(users.GetUser(user), strCommand, strParams); break; } #endregion } else { #region CtCp Responses switch (strCommand.ToLower()) { case "ping": users.GetUser(user).FireCtCpPingReplied(new TimeSpan(TimeSpan.TicksPerMillisecond * long.Parse(strParams))); break; case "time": users.GetUser(user).FireCtCpTimeReplied(strParams); break; case "finger": users.GetUser(user).FireCtCpFingerReplied(strParams); break; case "version": users.GetUser(user).FireCtCpVersionReplied(strParams); break; default: users.GetUser(user).FireCtCpReplied(strCommand, strParams); break; } #endregion } }
private void ParseCTCP(UserInfo user, MessageReciever Target, string CTCPData, bool blNotice) { CTCPData = CTCPData.Trim(); string strCommand = ""; string strParams = ""; if (CTCPData.IndexOf(" ") > -1) { strCommand = CTCPData.Substring(0, CTCPData.IndexOf(" ")); strParams = CTCPData.Substring(CTCPData.IndexOf(" ") + 1, CTCPData.Length - (CTCPData.IndexOf(" ") + 1)); } else { strCommand = CTCPData; } if (!blNotice) { #region CtCp Requests switch (strCommand.ToLower()) { case "ping": base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01PING " + strParams + "\x01", false); break; case "version": string clientInfo = "TNets IRC Library v.0.7"; if (this.CtCpVersionNeedsClientInfo != null) { clientInfo = this.CtCpVersionNeedsClientInfo(this, new EventArgs()); } base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01VERSION " + clientInfo + "\x01", false); break; case "finger": TimeSpan time = (TimeSpan)DateTime.Now.Subtract(base.CurrentConnection.LastActive); string strReadable = ""; #region Calculate readable idle time if (time.TotalSeconds > 60) { string strHours = ""; string strMinutes = ""; string strSeconds = ""; if (time.Hours > 0) { if (time.Hours > 1) { strHours = time.Hours.ToString() + " hours "; } else { strHours = time.Hours.ToString() + " hour "; } } if (time.Minutes > 0) { if (time.Minutes > 1) { strMinutes = time.Minutes.ToString() + " minutes "; } else { strMinutes = time.Minutes.ToString() + " minute "; } } if (time.Seconds > 0) { if (time.Seconds > 1) { strSeconds = time.Seconds.ToString() + " seconds "; } else { strSeconds = time.Seconds.ToString() + " second "; } } strReadable = strHours + strMinutes + strSeconds; strReadable = " (" + strReadable.Trim() + ")"; } #endregion base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01" + "FINGER Idle " + Math.Floor(time.TotalSeconds).ToString() + " seconds" + strReadable + "\x01", false); break; case "time": base.CurrentConnection.SendData("NOTICE " + user.Nick + " :\x01TIME " + mIRCDateTime(DateTime.Now) + "\x01", false); break; case "action": Target.FireRecievedMessage(users.GetUser(user), strParams, true); break; case "dcc": if (Target.GetType() == typeof(User)) { User userTarget = (User)Target; string[] strDccParams = strParams.Split(new char[] { ' ' }); if (strDccParams.Length >= 4) { switch (strDccParams[0].ToLower()) { case "chat": DCCChat newChat = new DCCChat(base.CurrentConnection, long.Parse(strDccParams[2]), int.Parse(strDccParams[3]), user.Nick, dcc.Chats); dcc.Chats.AddDcc(newChat); userTarget.FireDCCChatRequest(newChat); break; case "send": DCCTransfer newTransfer = new DCCTransfer(base.CurrentConnection, long.Parse(strDccParams[2]), int.Parse(strDccParams[3]), user.Nick, strDccParams[1], long.Parse(strDccParams[4]), dcc.Transfer); dcc.Transfer.AddDcc(newTransfer); userTarget.FireDCCTransferRequest(newTransfer); break; case "accept": for (int x = 0; x < dcc.Transfer.Count; x++) { if (dcc.Transfer[x].Identifier == int.Parse(strDccParams[2])) { dcc.Transfer[x].ResumeAccepted(long.Parse(strDccParams[3])); break; } } break; case "resume": for (int x = 0; x < dcc.Transfer.Count; x++) { if (dcc.Transfer[x].Identifier == int.Parse(strDccParams[2])) { dcc.Transfer[x].ResumeRequested(long.Parse(strDccParams[3])); break; } } break; } } } break; default: Target.FireRecievedCtCpMessage(users.GetUser(user), strCommand, strParams); break; } #endregion } else { #region CtCp Responses switch (strCommand.ToLower()) { case "ping": users.GetUser(user).FireCtCpPingReplied(new TimeSpan(TimeSpan.TicksPerMillisecond * long.Parse(strParams))); break; case "time": users.GetUser(user).FireCtCpTimeReplied(strParams); break; case "finger": users.GetUser(user).FireCtCpFingerReplied(strParams); break; case "version": users.GetUser(user).FireCtCpVersionReplied(strParams); break; default: users.GetUser(user).FireCtCpReplied(strCommand, strParams); break; } #endregion } }
internal void FireDCCTransferRequest(DCCTransfer newTransfer) { if (this.DCCTransferRequested != null) this.DCCTransferRequested(this, new DCCTransferRequestEventArgs(newTransfer)); }