protected static void Psrv_POP3incomming(System.Net.Sockets.TcpClient c) { if (POP3 == null) { P3S = new POP3state(); P3S.passOK = P3S.userOK = false; POP3 = new POP3connection(c); POP3.POP3command += new POP3commandHandler(POP3_POP3command); POP3.POP3dropped += new POP3droppedHandler(POP3_POP3dropped); POP3.ok("WAKE UP BITCH! I'M READY TO KICK ASS, AND IT BETTER BE IMPORTANT"); } else { new POP3connection(c).err("Try again later you fool!", true); } }
protected static void POP3_POP3command(POP3connection POP3, string command, string[] args, string raw) { lock (POP3) { Console.WriteLine(raw); switch (command) { case "USER": if (P3S.userOK || P3S.passOK) { POP3.err("YOU ALREADY SET THE USERNAME STUPID BITCH!", false); } else { P3S.userOK = true; POP3.ok("Obviously you need to send the password now"); } break; case "PASS": if (P3S.userOK) { if (P3S.passOK) { POP3.err("WE F*****G DID THIS ALREADY!", false); } else { P3S.passOK = true; var allMsg = Bitmessage.getMessages(BitAPIserver.BA); if (allMsg == null) { NFI.ShowBalloonTip(5000, "API Error", "POP3: Cannot retreive Messages.\r\nVerify Bitmessage runs and the API Parameters are correct", ToolTipIcon.Error); POP3.err("CONFIGURE ME PROPERLY!",true); break; } else { myAddr=Bitmessage.getAddresses(BitAPIserver.BA); POP3msg = new POP3message[allMsg.Length]; for (int i = 0; i < POP3msg.Length; i++) { POP3msg[i] = new POP3message(i + 1, allMsg[i],myAddr); } POP3.ok("Thanks. next time do it faster"); } } } else { POP3.err("I NEED YOUR NAME ASSHOLE!", false); } break; case "CAPA": POP3.sendRaw(@"+OK I don't know why I am so nice to you... USER PASS TOP STAT RETR UIDL NOOP AYRA CAPA LIST DELE HELP RSET QUIT . "); break; case "STAT": if (P3S.passOK && P3S.userOK) { long size = 0; int count = 0; int i = 0; for (i = 0; i < POP3msg.Length; i++) { if (!POP3msg[i].Deleted) { count++; size += POP3msg[i].Body.Length; } } for (i = 0; i < AuxMessages.Count; i++) { if (!AuxMessages[i].Deleted) { count++; size += AuxMessages[i].Body.Length; } } POP3.ok(string.Format("{0} {1}", POP3msg.Length+AuxMessages.Count, size)); } break; case "LIST": if (P3S.passOK && P3S.userOK) { POP3.ok("INCOMMING MAILS! BITCH"); int i = 0; int j = 0; for (i = 0; i < POP3msg.Length; i++) { if (!POP3msg[i].Deleted) { POP3.sendRaw(string.Format("{0} {1}\r\n", i + 1, POP3msg[i].Body.Length)); } j++; } for (i = 0; i < AuxMessages.Count; i++) { if (!AuxMessages[i].Deleted) { POP3.sendRaw(string.Format("{0} {1}\r\n", j + 1, AuxMessages[i].Body.Length)); } j++; } POP3.sendRaw(".\r\n"); } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "TOP": if (P3S.passOK && P3S.userOK) { if (args.Length >= 1) { int linesHeader = 0; int i = 0; if (args.Length == 2 && !int.TryParse(args[1], out linesHeader)) { POP3.err("WRONG ARGUMENT ASSHOLE!", false); return; } if (int.TryParse(args[0], out i) && i > 0 && i <= POP3msg.Length && !POP3msg[i - 1].Deleted) { POP3.ok("listen carefully!"); bool countlines = false; foreach (string s in POP3msg[i - 1].Body.Split('\n')) { if (s.Trim() == string.Empty && !countlines) { countlines = true; POP3.sendRaw("\r\n"); } else { if (!countlines) { POP3.sendRaw(s.TrimEnd() + "\r\n"); } else if (linesHeader > 0) { linesHeader--; POP3.sendRaw(s.TrimEnd() + "\r\n"); } } } POP3.sendRaw("\r\n.\r\n"); } else if (int.TryParse(args[0], out i) && i > 0 && i-POP3msg.Length <= AuxMessages.Count) { i -= POP3msg.Length; POP3.ok("listen carefully!"); bool countlines = false; foreach (string s in AuxMessages[i - 1].Body.Split('\n')) { if (s.Trim() == string.Empty && !countlines) { countlines = true; POP3.sendRaw("\r\n"); } else { if (!countlines) { POP3.sendRaw(s.TrimEnd() + "\r\n"); } else if (linesHeader > 0) { linesHeader--; POP3.sendRaw(s.TrimEnd() + "\r\n"); } } } POP3.sendRaw("\r\n.\r\n"); } else { POP3.err("I DO NOT HAVE YOUR STUFF!", false); } } else { POP3.err("LEARN COMMANDS BITCH!", false); } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "DELE": if (P3S.passOK && P3S.userOK) { int ID = 0; if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length && !POP3msg[ID - 1].Deleted) { POP3.ok("I will take care of it!"); POP3msg[ID - 1].MarkDelete(); } else if(int.TryParse(args[0], out ID)) { //shifts the Message ID ID -= POP3msg.Length; if (ID <= AuxMessages.Count) { for (int i = 0; i < AuxMessages.Count; i++) { POP3.ok("I will take care of it!"); AuxMessages[ID - 1].MarkDelete(); } } else { POP3.err("I DO NOT HAVE YOUR STUFF!", false); } } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "HELP": POP3.ok("WHAT THE F**K YOU WANT? see RFC 1939 you douchebag"); break; case "AYRA": POP3.ok("I still hate you"); break; case "RETR": if (P3S.passOK && P3S.userOK) { int ID = 0; if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length && !POP3msg[ID - 1].Deleted) { POP3.ok("listen carefully!"); POP3.sendRaw(POP3msg[ID - 1].Body + "\r\n.\r\n"); } else if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length + AuxMessages.Count && !AuxMessages[ID - 1 - (POP3msg.Length)].Deleted) { ID -= POP3msg.Length; POP3.ok("listen carefully!"); POP3.sendRaw(AuxMessages[ID - 1].Body + "\r\n.\r\n"); } else { POP3.err("I DO NOT HAVE YOUR STUFF!", false); } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "QUIT": POP3.ok("It's about time you go already"); if (POP3msg != null) { foreach (var P in POP3msg) { if (P.Deleted) { BitAPIserver.BA.trashMessage(P.UID); } } for (int i = 0; i < AuxMessages.Count; i++) { if (AuxMessages[i].Deleted) { AuxMessages.RemoveAt(i--); } } } POP3.close(); break; case "NOOP": POP3.ok("Bitch Please, stop it!"); break; case "RSET": if (P3S.passOK && P3S.userOK) { foreach (var P in POP3msg) { if (P.Deleted) { P.Reset(); } } for (int i = 0; i < AuxMessages.Count; i++) { AuxMessages[i].Reset(); } POP3.ok("Don't make mistakes in the future!"); } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "UIDL": if (P3S.passOK && P3S.userOK) { int ID = 0; if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length) { POP3.ok(string.Format("{0} {1}", ID, POP3msg[ID - 1].UID)); } else { POP3.ok("Here you go!"); int i = 0; int j = 0; for (i = 0; i < POP3msg.Length; i++) { j++; POP3.sendRaw(string.Format("{0} {1}\r\n", j, POP3msg[i].UID)); } for (i = 0; i < AuxMessages.Count; i++) { j++; POP3.sendRaw(string.Format("{0} {1}\r\n", j, AuxMessages[i].UID)); } POP3.sendRaw(".\r\n"); } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; default: POP3.err("Watch your language!", false); break; } } }
protected static void POP3_POP3command(POP3connection POP3, string command, string[] args, string raw) { lock (POP3) { Console.WriteLine(raw); switch (command) { case "USER": if (P3S.userOK || P3S.passOK) { POP3.err("YOU ALREADY SET THE USERNAME STUPID BITCH!", false); } else { P3S.userOK = true; POP3.ok("Obviously you need to send the password now"); } break; case "PASS": if (P3S.userOK) { if (P3S.passOK) { POP3.err("WE F*****G DID THIS ALREADY!", false); } else { P3S.passOK = true; var allMsg = Bitmessage.getMessages(BitAPIserver.BA); if (allMsg == null) { NFI.ShowBalloonTip(5000, "API Error", "POP3: Cannot retreive Messages.\r\nVerify Bitmessage runs and the API Parameters are correct", ToolTipIcon.Error); POP3.err("CONFIGURE ME PROPERLY!", true); break; } else { myAddr = Bitmessage.getAddresses(BitAPIserver.BA); POP3msg = new POP3message[allMsg.Length]; for (int i = 0; i < POP3msg.Length; i++) { POP3msg[i] = new POP3message(i + 1, allMsg[i], myAddr); } POP3.ok("Thanks. next time do it faster"); } } } else { POP3.err("I NEED YOUR NAME ASSHOLE!", false); } break; case "CAPA": POP3.sendRaw(@"+OK I don't know why I am so nice to you... USER PASS TOP STAT RETR UIDL NOOP AYRA CAPA LIST DELE HELP RSET QUIT . "); break; case "STAT": if (P3S.passOK && P3S.userOK) { long size = 0; int count = 0; int i = 0; for (i = 0; i < POP3msg.Length; i++) { if (!POP3msg[i].Deleted) { count++; size += POP3msg[i].Body.Length; } } for (i = 0; i < AuxMessages.Count; i++) { if (!AuxMessages[i].Deleted) { count++; size += AuxMessages[i].Body.Length; } } POP3.ok(string.Format("{0} {1}", POP3msg.Length + AuxMessages.Count, size)); } break; case "LIST": if (P3S.passOK && P3S.userOK) { POP3.ok("INCOMMING MAILS! BITCH"); int i = 0; int j = 0; for (i = 0; i < POP3msg.Length; i++) { if (!POP3msg[i].Deleted) { POP3.sendRaw(string.Format("{0} {1}\r\n", i + 1, POP3msg[i].Body.Length)); } j++; } for (i = 0; i < AuxMessages.Count; i++) { if (!AuxMessages[i].Deleted) { POP3.sendRaw(string.Format("{0} {1}\r\n", j + 1, AuxMessages[i].Body.Length)); } j++; } POP3.sendRaw(".\r\n"); } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "TOP": if (P3S.passOK && P3S.userOK) { if (args.Length >= 1) { int linesHeader = 0; int i = 0; if (args.Length == 2 && !int.TryParse(args[1], out linesHeader)) { POP3.err("WRONG ARGUMENT ASSHOLE!", false); return; } if (int.TryParse(args[0], out i) && i > 0 && i <= POP3msg.Length && !POP3msg[i - 1].Deleted) { POP3.ok("listen carefully!"); bool countlines = false; foreach (string s in POP3msg[i - 1].Body.Split('\n')) { if (s.Trim() == string.Empty && !countlines) { countlines = true; POP3.sendRaw("\r\n"); } else { if (!countlines) { POP3.sendRaw(s.TrimEnd() + "\r\n"); } else if (linesHeader > 0) { linesHeader--; POP3.sendRaw(s.TrimEnd() + "\r\n"); } } } POP3.sendRaw("\r\n.\r\n"); } else if (int.TryParse(args[0], out i) && i > 0 && i - POP3msg.Length <= AuxMessages.Count) { i -= POP3msg.Length; POP3.ok("listen carefully!"); bool countlines = false; foreach (string s in AuxMessages[i - 1].Body.Split('\n')) { if (s.Trim() == string.Empty && !countlines) { countlines = true; POP3.sendRaw("\r\n"); } else { if (!countlines) { POP3.sendRaw(s.TrimEnd() + "\r\n"); } else if (linesHeader > 0) { linesHeader--; POP3.sendRaw(s.TrimEnd() + "\r\n"); } } } POP3.sendRaw("\r\n.\r\n"); } else { POP3.err("I DO NOT HAVE YOUR STUFF!", false); } } else { POP3.err("LEARN COMMANDS BITCH!", false); } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "DELE": if (P3S.passOK && P3S.userOK) { int ID = 0; if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length && !POP3msg[ID - 1].Deleted) { POP3.ok("I will take care of it!"); POP3msg[ID - 1].MarkDelete(); } else if (int.TryParse(args[0], out ID)) { //shifts the Message ID ID -= POP3msg.Length; if (ID <= AuxMessages.Count) { for (int i = 0; i < AuxMessages.Count; i++) { POP3.ok("I will take care of it!"); AuxMessages[ID - 1].MarkDelete(); } } else { POP3.err("I DO NOT HAVE YOUR STUFF!", false); } } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "HELP": POP3.ok("WHAT THE F**K YOU WANT? see RFC 1939 you douchebag"); break; case "AYRA": POP3.ok("I still hate you"); break; case "RETR": if (P3S.passOK && P3S.userOK) { int ID = 0; if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length && !POP3msg[ID - 1].Deleted) { POP3.ok("listen carefully!"); POP3.sendRaw(POP3msg[ID - 1].Body + "\r\n.\r\n"); } else if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length + AuxMessages.Count && !AuxMessages[ID - 1 - (POP3msg.Length)].Deleted) { ID -= POP3msg.Length; POP3.ok("listen carefully!"); POP3.sendRaw(AuxMessages[ID - 1].Body + "\r\n.\r\n"); } else { POP3.err("I DO NOT HAVE YOUR STUFF!", false); } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "QUIT": POP3.ok("It's about time you go already"); if (POP3msg != null) { foreach (var P in POP3msg) { if (P.Deleted) { BitAPIserver.BA.trashMessage(P.UID); } } for (int i = 0; i < AuxMessages.Count; i++) { if (AuxMessages[i].Deleted) { AuxMessages.RemoveAt(i--); } } } POP3.close(); break; case "NOOP": POP3.ok("Bitch Please, stop it!"); break; case "RSET": if (P3S.passOK && P3S.userOK) { foreach (var P in POP3msg) { if (P.Deleted) { P.Reset(); } } for (int i = 0; i < AuxMessages.Count; i++) { AuxMessages[i].Reset(); } POP3.ok("Don't make mistakes in the future!"); } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; case "UIDL": if (P3S.passOK && P3S.userOK) { int ID = 0; if (args.Length == 1 && int.TryParse(args[0], out ID) && ID > 0 && ID <= POP3msg.Length) { POP3.ok(string.Format("{0} {1}", ID, POP3msg[ID - 1].UID)); } else { POP3.ok("Here you go!"); int i = 0; int j = 0; for (i = 0; i < POP3msg.Length; i++) { j++; POP3.sendRaw(string.Format("{0} {1}\r\n", j, POP3msg[i].UID)); } for (i = 0; i < AuxMessages.Count; i++) { j++; POP3.sendRaw(string.Format("{0} {1}\r\n", j, AuxMessages[i].UID)); } POP3.sendRaw(".\r\n"); } } else { POP3.err("LOGIN FIRST YOU SON OF A BITCH", false); } break; default: POP3.err("Watch your language!", false); break; } } }