/** * @author rogo * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. * To enable and disable the creation of type comments go to * Window>Preferences>Java>Code Generation. */ import java.net.*; import java.io.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.security.*; import java.util.*; public class ServerWriter extends JApplet implements ActionListener { static File startFile; static int count = 0; static JFileChooser fileChooser; static String url; static long id = 0L; static Hashtable connections=new Hashtable(); JButton upload = new JButton("Upload"); JRadioButton proxy = new JRadioButton("Proxy"); static int fileCount = 0; // static UploadInfo dialog = new UploadInfo(); static String mode = ""; static String destination = ""; static String prefix = ""; static String proxyHost = ""; ServerWriter uploader = this; static final int md5Length = 32; public ServerWriter() { } public void init() { this.getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); this.getContentPane().add(upload); this.getContentPane().add(proxy); upload.addActionListener(this); proxy.addActionListener(this); id = System.currentTimeMillis(); Properties prop = System.getProperties(); // prop.put("proxySet", "true"); // prop.put("http.proxyHost","proxy.unibe.ch"); // prop.put("proxyPort", "80"); prop.put("java.protocol.handler.pkgs","HTTPClient"); fileChooser=null; } public void actionPerformed(ActionEvent e) { if (e.getSource().equals(proxy)) { proxyHost = JOptionPane.showInputDialog("Please enter proxy host (format host:port)!"); if (proxyHost != null) { if (proxyHost.length() == 0) { proxyHost = ""; Properties prop = System.getProperties(); prop.remove("proxySet"); prop.remove("http.proxyHost"); prop.remove("proxyPort"); } else { Properties prop = System.getProperties(); int index = proxyHost.indexOf(":"); String pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length()); String pPort = (index > 0) ? proxyHost.substring(index + 1) : "80"; prop.put("proxySet", "true"); prop.put("http.proxyHost",pHost); prop.put("proxyPort", pPort); } System.out.println("pr "); // proxyHost=""; } else proxyHost = ""; // proxy.setSelected(false); } if (e.getActionCommand().equals("Upload")) { //url=getParameter("url"); set(); System.out.println("url " + url); //+ " " + getCodeBase()); upload.setEnabled(false); main(new String[] { "", "" }); upload.setEnabled(true); } } public void set() { String url = getParameter("baseURL"); String servletURL = getParameter("servletURL"); destination = ""; destination = getParameter("destinationFolder"); if (destination == null) destination = ""; prefix = getParameter("prefix"); if(prefix == null) prefix=""; // e.g."/rogo/servlet/RWServlet/" URL appletUrl = getCodeBase(); String serverInfo = appletUrl.getHost() + ":" + appletUrl.getPort(); this.url = (servletURL.startsWith("http")) ? servletURL + url : "http://" + serverInfo + servletURL + url; Properties prop = System.getProperties(); // prop.put("proxySet", "true"); // prop.put("http.proxyHost","proxy.unibe.ch"); // prop.put("proxyPort", "80"); // prop.put("java.protocol.handler.pkgs","HTTPClient"); Enumeration en = prop.propertyNames(); while (en.hasMoreElements()) { String key = (String) en.nextElement(); System.out.println("key: " + key + " value: " + prop.get(key)); } } public static void main(String[] args) { try { if (fileChooser == null) { fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(fileChooser.FILES_AND_DIRECTORIES); fileChooser.setFileFilter(new ImageFilter()); fileChooser.setDialogType(JFileChooser.OPEN_DIALOG); fileChooser.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e2) { System.out.println(e2.getActionCommand()); if (!e2.getActionCommand().toString().equals("ApproveSelection")) return; // { Thread thread = new Thread() { public void run() { UploadInfo dialog = new UploadInfo(); File startFile=new File("."); try { dialog.thread=Thread.currentThread(); System.out.println("Called run with " + fileChooser.getSelectedFile()); dialog.setTitle("Upload Status Window"); dialog.setSize(400, 175); dialog.setLocation(new java.awt.Point(150, 100)); Update update = new Update(); startFile = fileChooser.getSelectedFile(); //new File(fileChooser.getFile()); int fileCount = 0; int count = 1; System.out.println(startFile); long time = System.currentTimeMillis(); if( connections.get(startFile.getAbsolutePath())!=null) throw new Error("Upload already running!"); if (startFile.isDirectory()) { fileCount = countFiles(startFile, fileCount); System.out.println("Number of files to send: " + fileCount); writeDirectory(startFile, startFile, fileCount, count, dialog, update); } else { fileCount = 1; writeStream(startFile, startFile, fileCount, count, dialog, update); } long time2 = System.currentTimeMillis(); System.out.println("needed " + (time2 - time) + " ms for " + count--); dialog.setVisible(false); if (startFile.isDirectory()) showDialog("Finished upload of " + startFile + " containing " + fileCount + " " + ((fileCount > 1) ? " files" : " file") + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload"); else showDialog("Finished upload of " + startFile + " in " + ((time2 - time) / 1000) + " seconds", "Finished Upload"); connections.remove(startFile.getAbsolutePath()); } catch (Exception e) { dialog.setVisible(false); ByteArrayOutputStream b = new ByteArrayOutputStream(); PrintStream stream = new PrintStream(b); e.printStackTrace(stream); connections.remove(startFile.getAbsolutePath()); showErrorDialog(b.toString(), "Upload failed"); } catch (Error e8) { dialog.setVisible(false); if( e8.toString().indexOf("Upload already running!")<0) connections.remove(startFile.getAbsolutePath()); showErrorDialog(e8.toString(), "Upload failed"); } } }; thread.setPriority(Thread.MIN_PRIORITY); /* dialog = new UploadInfo(); dialog.setTitle("Upload Status Window"); dialog.setSize(400, 155); dialog.setLocation(new java.awt.Point(150, 100)); */ thread.start(); // } // else //System.exit(0); } }); } count = 1; mode = ""; fileChooser.showDialog(new JFrame(), "Upload"); } catch (Exception e) { System.out.println("Ha " + e); } } private static int countFiles(File file, int fileCount) { if (file.isDirectory()) { String[] files = file.list(new DotFileFilter()); for (int j = 0; j < files.length; ++j) { File f = new File(file + File.separator + files[j]); if (f.isDirectory()) { fileCount = countFiles(f, fileCount); } else fileCount = fileCount + 1; } } return fileCount; } private static int writeDirectory(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update update) throws Exception { if (file.isDirectory()) { String[] files = file.list(new DotFileFilter()); for (int j = 0; j < files.length; ++j) { File f = new File(file + File.separator + files[j]); System.out.println(file + " " + f); if (f.isDirectory()) { count = writeDirectory(f, startFile, fileCount, count, dialog, update); } else count = writeStream(f, startFile, fileCount, count, dialog, update); } } return count; } private static int writeStream(File file, File startFile, int fileCount, int count, UploadInfo dialog, Update updateMode) throws Exception { // try //{ String response = "", mode = ""; String path = file.getAbsolutePath(); String fName=file.getName(); String name = (startFile.isDirectory()) ? startFile.getName() + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : file.getName(); if (destination != "") name = (startFile.isDirectory()) ? destination + "/" + path.substring(startFile.getAbsolutePath().length() + 1) : destination + "/" + file.getName(); if(prefix!="") name=name.substring(0,name.indexOf(fName))+prefix+fName; System.out.println("hi " + name + " " + destination + " " + startFile.getName()+" "+file.getName()); FileInputStream f = new FileInputStream(file.getAbsolutePath()); int length = f.available(); int readCount = 0; byte[] b = (length > 8192) ? new byte[8192] : new byte[length]; System.out.println(file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes")); String fileName = file.getName() + " " + ((length > 1000000) ? (length / 1048576) + " MByte" : length + " Bytes"); dialog.title.setText("Uploading " + startFile); dialog.progress.setValue(0); dialog.file.setText(fileName); dialog.status.setText(count + " of " + fileCount + ((fileCount > 1) ? " files" : " file")); //dialog.pack(); //dialog.validate(); if (dialog.isVisible()) dialog.repaint(); else dialog.show(); MessageDigest md = MessageDigest.getInstance("MD5"); FileInputStream f2 = new FileInputStream(file.getAbsolutePath()); readCount = 0; /* while (readCount < length) { if (readCount + b.length > length) f2.read(b, 0, length - readCount); // mout.flush(); else f2.read(b); if (readCount + b.length > length) md.update(b, 0, length - readCount); else md.update(b, 0, b.length); readCount += b.length; //System.out.println("rock " + readCount); }*/ String md5 = "rogo";getMD5(md); //md = null; f2.close(); f2 = null; if (updateMode.value) mode = "replace"; URL httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode); /* HttpURLConnection con = (HttpURLConnection) httpCon.openConnection(); con.setUseCaches(false); con.setRequestMethod("PUT"); con.setDoOutput(true); con.connect(); */ Connection con = null; con=(Connection)connections.get(startFile.getAbsolutePath()); if(con==null) { con=new Connection(httpCon); connections.put(startFile.getAbsolutePath(),con); } else con.url=httpCon; OutputStream mout = con.out; //con.getOutputStream(); // InputStream min= con.getInputStream(); // System.out.println(httpCon); //System.out.println("Response " + con.getResponseMessage()+" "+con.getContentLength()); boolean update = con.update(); System.out.println("update is" + update); if (!update || mode.equals("update") || mode.equals("replace")) //if(true) { con.connect(length+md5Length); mout = con.out; md.reset(); /* System.out.println("Free memory "+(Runtime.getRuntime().freeMemory()/ 1048576)); System.gc(); System.out.println("Free memory after"+(Runtime.getRuntime().freeMemory()/ 1048576)); System.out.println("Total memory after"+(Runtime.getRuntime().totalMemory()/ 1048576)); */ readCount = 0; while (readCount < length) { if (readCount + b.length > length) f.read(b, 0, length - readCount); // mout.flush(); else f.read(b); if (readCount + b.length > length) mout.write(b, 0, length - readCount); // mout.flush(); else mout.write(b); if (readCount + b.length > length) md.update(b, 0, length - readCount); else md.update(b, 0, b.length); readCount += b.length; if(((PrintStream)mout).checkError()) throw new Error("Error while sending data"); dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0)); if (readCount % 1000 == 0) { //System.out.println("Free memory while writing"+(Runtime.getRuntime().freeMemory()/ 1048576)); //System.out.println("Total memory while writing"+(Runtime.getRuntime().totalMemory()/ 1048576)); //mout.flush(); //System.out.println(con.getClass()); } } md5 = getMD5(md); mout.write(md5.getBytes()); if(((PrintStream)mout).checkError()) throw new Error("Error while sending md5"); //mout.close(); //con.disconnect(); response = con.getResponseMessage(); System.out.println(response + " " + md5); } if (update && !mode.equals("update") && !mode.equals("replace")) //(response.indexOf("Conflict")>=0 && !mode.equals("update") && !mode.equals("replace")) { updateMode.value = true; Object[] options = new Object[] { "Replace folder", "Cancel" }, options2 = new Object[] { "Replace file", "Cancel" }; int option = showDialog("Warning destination exists! \n What do you want to do?", "Destination exists!", (startFile.isDirectory()) ? options : options2); if (option == 0) mode = "replace"; //System.out.println("performing update"); else throw new Error("Upload cancelled"); //mode = "cancel"; //System.out.println("performing replace"); //System.out.println("Watershine" + name + " " + mode); // mout.close(); con.disconnect(); httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode); /* con = (HttpURLConnection) httpCon.openConnection(); con.setRequestMethod("PUT"); con.setDoOutput(true); con.connect(); mout = con.getOutputStream(); */ //con=new Connection(httpCon); con.url = httpCon; con.connect(length+md5Length); md.reset(); mout = con.out; readCount = 0; FileInputStream f3 = new FileInputStream(file.getAbsolutePath()); while (readCount < length) { if (readCount + b.length > length) f3.read(b, 0, length - readCount); // mout.flush(); else f3.read(b); if (readCount + b.length > length) mout.write(b, 0, length - readCount); // mout.flush(); else mout.write(b); if (readCount + b.length > length) md.update(b, 0, length - readCount); else md.update(b, 0, b.length); readCount += b.length; if(((PrintStream)mout).checkError()) throw new Error("Error while sending data"); dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0)); } f3.close(); // mout.flush(); md5=getMD5(md); mout.write(md5.getBytes()); // write md5 code if(((PrintStream)mout).checkError()) throw new Error("Error while sending md5"); response = con.getResponseMessage(); System.out.println("MyResponse " + response); } else if (response.indexOf(" Checksums not identical!") >= 0) { Object[] options = { "Retry", "Cancel" }; int option = showDialog("Transfer failed! \n What do you want to do?", "Transfer failed ", options); con.disconnect(); if (option == 0) { httpCon = new URL(url + getSHA((id + "").getBytes()) + "/" + convertUml(name) + "?id=" + getSHA((id + "").getBytes()) + "&count=" + count + "&nf=" + fileCount + "&md5=" + md5 + "&mode=" + mode); /* con = (HttpURLConnection) httpCon.openConnection(); // con.setRequestMethod("GET"); con.setRequestMethod("PUT"); con.setDoOutput(true); con.connect(); mout = con.getOutputStream(); // System.out.println(htt readCount = 0; */ con.url = httpCon; con.connect(length+md5Length); mout = con.out; FileInputStream f4 = new FileInputStream(file.getAbsolutePath()); readCount = 0; while (readCount < length) { if (readCount + b.length > length) f4.read(b, 0, length - readCount); // mout.flush(); else f4.read(b); if (readCount + b.length > length) mout.write(b, 0, length - readCount); // mout.flush(); else mout.write(b); readCount += b.length; if(((PrintStream)mout).checkError()) throw new Error("Error while sending data"); dialog.progress.setValue((int) (((double) readCount / (double) length) * 100.0)); } f4.close(); mout.write(md5.getBytes()); if(((PrintStream)mout).checkError()) throw new Error("Error while sending md5"); response = con.getResponseMessage(); System.out.println("MyResponse " + response); } } else con.disconnect(); f.close(); count++; /* } catch (IOException ioe) { System.out.println("IOException: " + ioe); ioe.printStackTrace(); throw(ioe); } catch (Exception e) { System.out.println("IOException: " + e); showErrorDialog(e.toString(),"Upload failed"); }*/ return count; } public static String getMD5(MessageDigest md) throws Exception { byte[] bytes = md.digest(); System.out.println("digest " + bytes.length); StringBuffer sb = new StringBuffer(); int decValue; for (int i = 0; i < bytes.length; i++) { String hexVal = Integer.toHexString(bytes[i] & 0xFF); if (hexVal.length() == 1) hexVal = "0" + hexVal; // put a leading zero sb.append(hexVal); } return sb.toString(); } public static String getSHA(byte[] b) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(b, 0, b.length); //System.out.println("digest"); byte[] bytes = md.digest(); StringBuffer sb = new StringBuffer(); int decValue; for (int i = 0; i < bytes.length; i++) { String hexVal = Integer.toHexString(bytes[i] & 0xFF); if (hexVal.length() == 1) hexVal = "0" + hexVal; // put a leading zero sb.append(hexVal); } return sb.toString(); } public static String convertUml(String newName) { StringBuffer alterMe = new StringBuffer(newName.trim()); int length = alterMe.length(); int j = 0; while (j < length) { //if(Character.isSpaceChar(alterMe.charAt(j))) // alterMe.setCharAt(j,'_'); if (alterMe.charAt(j) == ' ') { alterMe.setCharAt(j, '%'); alterMe.insert(j + 1, "20"); length = length + 2; } /* if(Character.isSpaceChar(alterMe.charAt(j)) alterMe.setCharAt(j,'_'); */ ++j; } return alterMe.toString(); } public static class UploadInfo extends JDialog { JLabel file = new JLabel(" "); JLabel status = new JLabel(" "); JLabel title = new JLabel(" "); JPanel content = new JPanel(); JPanel titlePanel = new JPanel(); JPanel labelPanel = new JPanel(); JPanel statusPanel = new JPanel(); JPanel buttonPanel = new JPanel(); JProgressBar progress = new JProgressBar(); JButton cancel = new JButton("Cancel"); Thread thread; public UploadInfo() { content = new JPanel(true); //content.setBorder(BorderFactory.createRaisedBevelBorder()); content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); title = new JLabel("Uploading " + startFile); title.setHorizontalTextPosition(title.CENTER); titlePanel.add(title); buttonPanel.add(cancel); // content.add(titlePanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); content.add(labelPanel); content.add(new JLabel("")); content.add(progress); content.add(statusPanel); content.add(buttonPanel); content.add(Box.createRigidArea(new java.awt.Dimension(0, 15))); labelPanel.add(file); statusPanel.add(status); getContentPane().add(titlePanel, "North"); getContentPane().add(content, "Center"); cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); thread.stop(); } }); pack(); } } public static int showDialog(String message, String title, Object[] options) { int option = JOptionPane.showOptionDialog(null, message, title, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); return option; } public static void showDialog(String message, String title) { JOptionPane.showMessageDialog(null, message, title, JOptionPane.PLAIN_MESSAGE); } public static void showErrorDialog(String message, String title) { JOptionPane.showMessageDialog(null, message, title, JOptionPane.ERROR_MESSAGE); } static class Connection { Socket socket; URL url; BufferedInputStream in; PrintStream out; String pHost; int pPort = 80; HttpURLConnection con; public Connection(URL url) throws Exception { Properties prop = System.getProperties(); pHost = null; pPort = 80; Enumeration en = prop.propertyNames(); while (en.hasMoreElements()) { String key = (String) en.nextElement(); if (key.toString().indexOf("proxyHost") >= 0) { Object host = prop.get(key); if (host != null) pHost = host.toString(); } if (key.toString().indexOf("proxyPort") >= 0) { Object port = prop.get(key); if (port != null) pPort = Integer.parseInt(port.toString()); } } if (proxyHost != "") { int index = proxyHost.indexOf(":"); pHost = proxyHost.substring(0, (index > 0) ? index : proxyHost.length()); pPort = (index > 0) ? Integer.parseInt(proxyHost.substring(index + 1)) : 80; } socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort()); socket.setTcpNoDelay(true); in = new BufferedInputStream(socket.getInputStream()); out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true); this.url = url; } public void connect(int size) throws Exception { try { //System.out.println("Yeah i called connect"); // socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort()); // socket.setTcpNoDelay(true); in = new BufferedInputStream(socket.getInputStream()); out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true); out.print(("PUT " + url + " HTTP/1.1\r\nContent-Type: text/html\r\nContent-Length:" + size + "\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes()); out.flush(); } catch (Exception e) { socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort()); socket.setTcpNoDelay(true); in = new BufferedInputStream(socket.getInputStream()); out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true); out.print(("PUT " + url + " HTTP/1.1\r\nContent-Type:text/html\r\nContent-Length:" + size + "\r\nHost: " + url.getHost() + "\r\n\r\n"));//).getBytes()); out.flush(); //System.out.println("Error "+e); } /* con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET"); con.setUseCaches(false); con.setRequestMethod("PUT"); con.setDoOutput(true); con.setRequestProperty("Content-Length", ""+size); // con.connect(); System.out.println(con.getClass()); out = new DataOutputStream(con.getOutputStream()); */ } public boolean update() throws Exception { boolean exists = false; String response = ""; try { URL url = createURL(this.url.toString(), getSHA((id + "").getBytes())); // con = new HTTPClient.HttpURLConnection(url);//(HttpURLConnection) url.openConnection(); // con.setRequestMethod("GET"); //con.setUseCaches(false); // con.setRequestMethod("HEAD"); //con.setDoOutput(true); // con.connect(); out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes()); out.flush(); response = getResponseMessage(); exists = response.indexOf("OK") >= 0; System.out.println("Head "+response); } catch (Exception e) { socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort : url.getPort()); socket.setTcpNoDelay(true); in = new BufferedInputStream(socket.getInputStream()); out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true); // out.writeBytes("HEAD " + url + " HTTP/1.1\r\n Connection:Keep-Alive\r\n \r\nHost: " + url.getHost() + //"\r\n\r\n"); URL url = createURL(this.url.toString(), getSHA((id + "").getBytes())); out.print(("HEAD " + url + " HTTP/1.1\r\nConnection:Keep-Alive\r\nHost: " + url.getHost() + "\r\n\r\n"));//.getBytes()); out.flush(); response = getResponseMessage(); System.out.println("Head " + response); exists = response.indexOf("OK") >= 0; //System.out.println("Error from Head "+e); // e.printStackTrace(); return exists; } return exists; } public URL createURL(String fileToPut, String id) throws Exception { int index = fileToPut.lastIndexOf("/") + 1; String source = fileToPut; //.substring(0, index); // String fileName = fileToPut.substring(index); index = source.indexOf(id); int index2 = index + id.length() + 1; int index3 = source.indexOf("/", index2); // System.out.println(fileToPut+" "+index2+" "+index3+" "+id); // String dest = (index3 > 0) ? source.substring(0, index) + source.substring(index2, index3)+"/"+fileName : //source.substring(0, index) + fileName; // file check versus folder Check if destination !="" folder check is performed String dest = (destination!="") ? source.substring(0, index) + source.substring(index2,index3):source.substring(0, index) + source.substring(index2); // System.out.println("dest "+source.substring(0,index)+ source.substring(index2)); // File f = new File(dest); //return f.exists(); return new URL(dest); } public String getResponseMessage() { int b=0;StringBuffer between=new StringBuffer();int count=0; // while(!between.toString().equals("\r")) // { // between=new StringBuffer(40); try { int loop =0;int available = 0; while((available=in.available())==0) { if(loop>=600) throw new Error("Connection timed out"); long time = System.currentTimeMillis(); while(System.currentTimeMillis()-time<100); if(available==0) loop++; else loop=0; } // System.out.println("heh there are bytes "+in.available()+" available"); int limit = in.available(); while(true ) { //Thread.sleep(10); b=in.read(); /* if(b=='\r') { b=in.read(); b=in.read(); count=count+2; // if(b=='\r') break; //else between.append('\n'); } */ between.append((char)b); // System.out.print((char)b); //System.out.println("read "+count+" bytes"); count++; if(count==limit) break; } } catch(Exception e) { e.printStackTrace(); System.out.println("Error found"); if(e.toString().indexOf("peer")>=0) return getResponseMessage(); else throw new Error("Error while reading response"); } String response = between.toString(); if(response.indexOf("close") >= 0) reconnect(); return response; /* String response = ""; try { response = con.getResponseMessage(); // con.disconnect(); } catch (Exception e) { showErrorDialog(e.getMessage(),"Shit happens"); } */ // return response; } public void disconnect() throws Exception { //socket.close(); // con.disconnect(); } public void reconnect() { try { System.out.println("Reconnect called"); int port= (url.getPort()>=0) ? url.getPort():80; socket = new Socket((pHost != null) ? pHost : url.getHost(), (pHost != null) ? pPort :port); socket.setTcpNoDelay(true); in = new BufferedInputStream(socket.getInputStream()); out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()),true); } catch(Exception e) { showErrorDialog(e.getMessage(),"Shit happens"); } } } static class Update { boolean value = false; public Update() { value = false; } } static class DotFileFilter implements FilenameFilter { public DotFileFilter() {} public boolean accept(File dir, String name) { if(name.startsWith(".")) return false; else return true; } } static class ImageFilter extends javax.swing.filechooser.FileFilter { public boolean accept(java.io.File file) { String name=file.getName().toLowerCase(); if(name.endsWith(".gif")||name.endsWith(".jpg")||name.endsWith(".tif")||name.endsWith(".png")||name.endsWith(".jpeg")||file.isDirectory()) return true ; else return false; } public String getDescription() { return "Image File"; } } }