home *** CD-ROM | disk | FTP | other *** search
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.IOException;
- import java.io.PrintStream;
- import java.net.Socket;
- import java.util.Hashtable;
- import java.util.Properties;
- import java.util.Vector;
-
- public class JDPGetMail {
- JDPUser user;
- String result = "";
- String lastline;
- short port = 110;
- int maxCharLimit = 70;
- // $FF: renamed from: s java.net.Socket
- Socket field_0;
- // $FF: renamed from: p java.io.PrintStream
- PrintStream field_1;
- // $FF: renamed from: in java.io.BufferedInputStream
- BufferedInputStream field_2;
- String mailhost;
- byte[] fileContents;
- Vector messages;
- Properties messageProps;
- Vector messageContents;
- int currentPointer = -1;
- Properties currentMessageProps;
- int messageCount;
- int totalMessages;
- String attachmentDir = "temp";
- int received;
- int messageSize;
- int lastPercent;
- private char[] lineBuffer;
-
- public String getSubject() {
- return this.currentPointer < 0 ? null : (String)this.currentMessageProps.get("Subject");
- }
-
- public void setAttachmentDir(String var1) {
- if (var1 != null) {
- this.attachmentDir = var1;
- }
- }
-
- public String getToAddress() {
- return this.currentPointer < 0 ? null : (String)this.currentMessageProps.get("To");
- }
-
- String parseMessage(String var1, String var2) {
- try {
- if (var2 == null) {
- String var3 = (String)this.messageProps.get("Content-Type");
- if (var3 != null) {
- int var4 = var3.toUpperCase().indexOf("BOUNDARY=");
- if (var4 > 0) {
- var2 = var3.substring(var4 + 9);
- if (var2.startsWith("\"")) {
- var2 = var2.substring(1);
- }
-
- if (var2.indexOf("\"") > 0) {
- var2 = var2.substring(0, var2.indexOf("\""));
- }
- }
- }
- }
-
- while(var2 != null && var1 != null && !var1.equals("--" + var2)) {
- var1 = this.readDataLine();
- this.received += var1.length();
- }
-
- while(var1 != null && !var1.equals(".") && !var1.equals("--" + var2 + "--")) {
- if (var2 != null && var1 != null && var1.equals("--" + var2)) {
- var1 = this.readDataLine();
- this.received += var1.length();
- }
-
- Properties var13 = new Properties();
- String var14 = null;
- if (var1.startsWith("Content-")) {
- while(var1 != null && !var1.equals("") && !var1.equals(".") && !var1.equals("--" + var2 + "--")) {
- int var5 = var1.indexOf(": ");
- if (var5 > 0) {
- this.parseLine(var1);
- String var6 = var1.substring(0, var5);
- String var7 = var1.substring(var5 + 2);
- ((Hashtable)var13).put(var6, var7);
- if (var6.equals("Content-Type")) {
- int var8 = var7.toUpperCase().indexOf("BOUNDARY=");
- if (var8 > 0) {
- var14 = var7.substring(var8 + 9);
- if (var14.startsWith("\"")) {
- var14 = var14.substring(1);
- }
-
- if (var14.indexOf("\"") > 0) {
- var14 = var14.substring(0, var14.indexOf("\""));
- }
- }
- }
- }
-
- var1 = this.readLine();
- this.received += var1.length();
- this.displayProgress();
- }
- }
-
- if (var14 != null && !var14.equals(var2)) {
- var1 = this.parseMessage(var1, var14);
- } else {
- var1 = this.readDataLine();
- this.received += var1.length();
- this.displayProgress();
- String var15 = (String)((Hashtable)var13).get("Content-Transfer-Encoding");
- String var16 = (String)((Hashtable)var13).get("Content-Disposition");
- String var17 = null;
- if (var16 != null) {
- int var18 = var16.indexOf("filename=");
- if (var18 > 0) {
- var17 = var16.substring(var18 + 9);
- if (var17.startsWith("\"")) {
- var17 = var17.substring(1);
- }
-
- if (var17.indexOf("\"") > 0) {
- var17 = var17.substring(0, var17.indexOf("\""));
- }
- }
- }
-
- new StringBuffer();
-
- StringBuffer var19;
- try {
- if (var17 == null) {
- var19 = new StringBuffer();
- } else {
- var19 = new StringBuffer(this.messageSize);
- }
- } catch (Exception var11) {
- System.out.println("Could not allocate memory: " + Integer.toString(this.messageSize));
- ((Throwable)var11).printStackTrace();
- var19 = new StringBuffer(100000);
- }
-
- int var9 = 0;
-
- while(var1 != null && !var1.equals(".") && (var2 == null || !var1.startsWith("--" + var2))) {
- if (var15 != null && var15.equals("base64")) {
- var19.append(var1);
- var9 += var1.length();
- } else {
- var19.append(var1 + "\r\n");
- var9 += var1.length() + 2;
- }
-
- var1 = this.readDataLine();
- this.received += var1.length() + 2;
- this.displayProgress();
- }
-
- var19.setLength(var9);
- if (var17 != null && var19.length() > 0) {
- if (var15 != null && var15.equals("base64")) {
- this.user.u.writeToFile(this.attachmentDir + File.separator + var17, JDPEncode.base64Decode(var19.toString()), "w+");
- } else {
- this.user.u.writeToFile(this.attachmentDir + File.separator + var17, var19.toString(), "w+");
- }
-
- ((Hashtable)var13).put("Message", "\r\nAttachment converted: " + this.attachmentDir + File.separator + var17 + "\r\n");
- ((Hashtable)var13).put("Attachment", var17);
- } else {
- ((Hashtable)var13).put("Message", var19.toString());
- }
-
- this.messageContents.addElement(var13);
- }
- }
- } catch (Exception var12) {
- ((Throwable)var12).printStackTrace();
- }
-
- return var1;
- }
-
- String expect(String var1, String var2) throws Exception {
- this.lastline = this.readDataLine();
- if (var1 == null || this.lastline != null && this.lastline.startsWith(var1)) {
- return this.lastline;
- } else {
- throw new Exception(var2 + ":" + this.lastline);
- }
- }
-
- public String getDate() {
- return this.currentPointer < 0 ? null : (String)this.currentMessageProps.get("Date");
- }
-
- void displayProgress() {
- int var1 = 0;
- if (this.messageSize > 0) {
- var1 = this.received * 100 / this.messageSize;
- if (var1 > 100) {
- var1 = 100;
- }
-
- if (var1 <= this.lastPercent + 2) {
- return;
- }
-
- this.lastPercent = var1;
- }
-
- if (this.totalMessages > 0) {
- if (this.messageSize > 0) {
- this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + " of " + Integer.toString(this.totalMessages) + "... " + Integer.toString(var1) + "%...", 0);
- } else {
- this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + " of " + Integer.toString(this.totalMessages) + "... " + Integer.toString(this.received) + " bytes received...", 0);
- }
- } else if (this.messageSize > 0) {
- this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + "... " + Integer.toString(var1) + "%...", 0);
- } else {
- this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + "... " + Integer.toString(this.received) + " bytes received...", 0);
- }
- }
-
- public int retrieveMessages(String var1, String var2) {
- this.messages = new Vector();
- this.messageCount = 0;
- this.currentPointer = -1;
- this.currentMessageProps = null;
-
- try {
- this.field_1.print("USER " + var1 + "\r\n");
- String var3 = this.expect("+OK", "user");
- this.field_1.print("PASS " + var2 + "\r\n");
- this.expect("+OK", "password");
- this.field_1.print("STAT\r\n");
- var3 = this.readDataLine();
- if (var3.indexOf(" 0 messages") >= 0) {
- this.user.mainmsg.setStatusMsg("No messages to retrieve.", 10);
- return 0;
- }
-
- this.totalMessages = 0;
- int var5 = var3.indexOf(" message");
- if (var5 > 0) {
- int var6 = var3.lastIndexOf(" ", var5 - 1);
-
- try {
- this.totalMessages = Integer.parseInt(var3.substring(var6 + 1, var5));
- } catch (Exception var11) {
- }
- }
-
- while(this.totalMessages == 0 || this.messageCount < this.totalMessages) {
- if (this.totalMessages > 0) {
- this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + " of " + Integer.toString(this.totalMessages) + "...", 0);
- } else {
- this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(this.messageCount + 1) + "...", 0);
- }
-
- this.field_1.print("RETR " + Integer.toString(this.messageCount + 1) + "\r\n");
- var3 = this.expect("+OK", "retr");
- this.messageProps = new Properties();
- String var16 = var3;
- this.received += var3.length();
- if (var3.indexOf("octets") < 0) {
- var16 = this.readLine();
- this.received += var16.length();
- }
-
- this.displayProgress();
- int var7 = var16.indexOf(" ");
- int var8 = var16.indexOf(" ", var7 + 1);
- this.messageSize = 0;
-
- try {
- this.messageSize = Integer.parseInt(var16.substring(var7 + 1, var8));
- } catch (Exception var10) {
- }
-
- while(!var16.equals("")) {
- this.parseLine(var16);
- var16 = this.readLine();
- this.received += var16.length();
- }
-
- this.displayProgress();
- this.messageContents = new Vector();
-
- for(String var17 = this.parseMessage(var16, (String)null); var17 != null && !var17.equals("."); var17 = this.readDataLine()) {
- }
-
- this.messageProps.put("MessageContents", this.messageContents);
- String var4 = (String)this.messageProps.get("Subject");
- if (var4 != null) {
- var4 = var4.toUpperCase();
- }
-
- this.messages.addElement(this.messageProps);
- ++this.messageCount;
- this.received = 0;
- this.lastPercent = 0;
- }
-
- if (this.messageCount > 1) {
- this.user.mainmsg.setStatusMsg(Integer.toString(this.messageCount) + " messages received.", 10);
- } else {
- this.user.mainmsg.setStatusMsg("1 message received.", 10);
- }
- } catch (Exception var12) {
- this.user.mainmsg.setStatusMsg("Retrieval failed. See Java console.", 10);
- ((Throwable)var12).printStackTrace();
- }
-
- return this.messages.size();
- }
-
- public int retrieveMessage(int var1) {
- if (this.totalMessages < 0) {
- return 0;
- } else {
- try {
- this.user.mainmsg.setStatusMsg("Receiving message " + Integer.toString(var1 + 1) + " of " + Integer.toString(this.totalMessages) + "...", 0);
- this.field_1.print("RETR " + Integer.toString(var1 + 1) + "\r\n");
- String var2 = this.expect("+OK", "retr");
- this.messageProps = new Properties();
- String var4 = var2;
- this.received += var2.length();
- if (var2.indexOf("octets") < 0) {
- var4 = this.readLine();
- this.received += var4.length();
- }
-
- this.displayProgress();
- int var5 = var4.indexOf(" ");
- int var6 = var4.indexOf(" ", var5 + 1);
- this.messageSize = 0;
-
- try {
- this.messageSize = Integer.parseInt(var4.substring(var5 + 1, var6));
- } catch (Exception var8) {
- }
-
- while(!var4.equals("")) {
- this.parseLine(var4);
- var4 = this.readLine();
- this.received += var4.length();
- }
-
- this.displayProgress();
- this.messageContents = new Vector();
-
- for(String var11 = this.parseMessage(var4, (String)null); var11 != null && !var11.equals("."); var11 = this.readDataLine()) {
- }
-
- this.messageProps.put("MessageContents", this.messageContents);
- String var3 = (String)this.messageProps.get("Subject");
- if (var3 != null) {
- var3 = var3.toUpperCase();
- }
-
- this.messages.addElement(this.messageProps);
- ++this.messageCount;
- this.received = 0;
- this.lastPercent = 0;
- return 1;
- } catch (Exception var9) {
- this.user.mainmsg.setStatusMsg("Retrieval failed. See Java console.", 10);
- ((Throwable)var9).printStackTrace();
- return 0;
- }
- }
- }
-
- public String getMessage() {
- if (this.currentPointer < 0) {
- return null;
- } else {
- Vector var1 = (Vector)this.currentMessageProps.get("MessageContents");
- StringBuffer var2 = new StringBuffer();
-
- for(int var3 = 0; var3 < var1.size(); ++var3) {
- Properties var4 = (Properties)var1.elementAt(var3);
- var2.append(((Hashtable)var4).get("Message"));
- }
-
- return var2.toString();
- }
- }
-
- public String[] getAttachments() {
- if (this.currentPointer < 0) {
- return null;
- } else {
- Vector var1 = new Vector();
- Vector var2 = (Vector)this.currentMessageProps.get("MessageContents");
- new StringBuffer();
-
- for(int var3 = 0; var3 < var2.size(); ++var3) {
- Properties var4 = (Properties)var2.elementAt(var3);
- if (((Hashtable)var4).get("Attachment") != null) {
- var1.addElement(((Hashtable)var4).get("Attachment"));
- }
- }
-
- String[] var5 = new String[var1.size()];
-
- for(int var6 = 0; var6 < var5.length; ++var6) {
- var5[var6] = (String)var1.elementAt(var6);
- }
-
- return var5;
- }
- }
-
- public boolean removeMessage(int var1) {
- try {
- this.field_1.print("DELE " + Integer.toString(var1) + "\r\n");
- this.expect("+OK", "delete");
- return true;
- } catch (Exception var2) {
- return false;
- }
- }
-
- String readLine() throws IOException {
- String var1;
- for(var1 = this.readDataLine(); var1.trim().endsWith(";"); var1 = var1 + this.readDataLine()) {
- }
-
- return var1;
- }
-
- public boolean closePort() {
- if (this.field_1 == null) {
- return false;
- } else {
- try {
- this.field_1.print("QUIT\r\n");
- this.expect("+OK", "quit");
- return true;
- } catch (Exception var6) {
- this.result = ((Throwable)var6).getMessage();
- ((Throwable)var6).printStackTrace();
-
- try {
- if (this.field_0 != null) {
- this.field_0.close();
- }
- } catch (Exception var5) {
- ((Throwable)var5).printStackTrace();
- this.result = ((Throwable)var5).getMessage();
- }
-
- return false;
- }
- }
- }
-
- public boolean setMessagePointer(int var1) {
- if (var1 >= this.messages.size()) {
- return false;
- } else {
- this.currentPointer = var1;
- this.currentMessageProps = (Properties)this.messages.elementAt(var1);
- return true;
- }
- }
-
- void parseLine(String var1) {
- try {
- if (!var1.startsWith(" ")) {
- int var2 = var1.indexOf(":");
- if (var2 > 0) {
- String var3 = var1.substring(0, var2);
- String var4 = var1.substring(var2 + 1).trim();
- this.messageProps.put(var3, var4);
- return;
- }
- }
- } catch (Exception var6) {
- ((Throwable)var6).printStackTrace();
- }
-
- }
-
- String readDataLine() throws IOException {
- while(this.field_2.available() == 0) {
- try {
- Thread.sleep(500L);
- } catch (Exception var5) {
- }
- }
-
- char[] var1 = this.lineBuffer;
- if (var1 == null) {
- var1 = this.lineBuffer = new char[2049];
- }
-
- int var2 = var1.length;
- int var3 = 0;
- int var4 = -1;
-
- while(true) {
- var4 = this.field_2.read();
- switch (var4) {
- case 13:
- this.field_2.read();
- case -1:
- case 10:
- if (var4 == -1 && var3 == 0) {
- return null;
- }
-
- if (var3 == 0) {
- return "";
- }
-
- return String.copyValueOf(var1, 0, var3);
- case 180:
- case 8217:
- var4 = 39;
- }
-
- --var2;
- if (var2 < 0) {
- var1 = new char[var3 + 2049];
- var2 = var1.length - var3 - 1;
- System.arraycopy(this.lineBuffer, 0, var1, 0, var3);
- this.lineBuffer = var1;
- }
-
- var1[var3++] = (char)var4;
- }
- }
-
- public int getMessageCount() {
- return this.messageCount;
- }
-
- public JDPGetMail(JDPUser var1, String var2) {
- this.user = var1;
- this.mailhost = var2;
- if (!this.openPort()) {
- System.out.println("Mail port open failed.");
- }
-
- }
-
- public String getFromAddress() {
- if (this.currentPointer < 0) {
- return null;
- } else if (this.currentMessageProps.get("From") != null) {
- return (String)this.currentMessageProps.get("From");
- } else if (this.currentMessageProps.get("X-Sender") != null) {
- return (String)this.currentMessageProps.get("X-Sender");
- } else {
- return this.currentMessageProps.get("Return-Path") != null ? (String)this.currentMessageProps.get("Return-Path") : "";
- }
- }
-
- boolean openPort() {
- this.field_0 = null;
-
- try {
- this.field_0 = new Socket(this.mailhost, this.port);
- this.field_1 = new PrintStream(this.field_0.getOutputStream());
- this.field_2 = new BufferedInputStream(this.field_0.getInputStream());
- return true;
- } catch (Exception var3) {
- this.result = ((Throwable)var3).getMessage();
- ((Throwable)var3).printStackTrace();
- return false;
- }
- }
-
- public int connect(String var1, String var2) {
- this.messages = new Vector();
- this.messageCount = 0;
- this.currentPointer = -1;
- this.currentMessageProps = null;
- this.totalMessages = 0;
-
- try {
- this.field_1.print("USER " + var1 + "\r\n");
- String var3 = this.expect("+OK", "user");
- this.field_1.print("PASS " + var2 + "\r\n");
- this.expect("+OK", "password");
- this.field_1.print("STAT\r\n");
- var3 = this.readDataLine();
- if (var3.indexOf(" 0 messages") >= 0) {
- this.user.mainmsg.setStatusMsg("No messages to retrieve.", 10);
- return 0;
- }
-
- int var4 = var3.indexOf(" message");
- if (var4 > 0) {
- int var5 = var3.lastIndexOf(" ", var4 - 1);
-
- try {
- this.totalMessages = Integer.parseInt(var3.substring(var5 + 1, var4));
- } catch (Exception var7) {
- return -1;
- }
- }
- } catch (Exception var8) {
- this.user.mainmsg.setStatusMsg("Retrieval failed. See Java console.", 10);
- ((Throwable)var8).printStackTrace();
- return -1;
- }
-
- return this.totalMessages;
- }
- }
-