1 5 package org.h2.server.ftp; 6 7 import java.io.IOException ; 8 import java.io.InputStream ; 9 import java.io.OutputStream ; 10 import java.net.InetAddress ; 11 import java.net.ServerSocket ; 12 import java.net.Socket ; 13 14 public class FtpData extends Thread { 15 16 private FtpServer server; 17 private InetAddress address; 18 private ServerSocket serverSocket; 19 private volatile Socket socket; 20 21 public FtpData(FtpServer server, InetAddress address, ServerSocket serverSocket) throws IOException { 22 this.server = server; 23 this.address = address; 24 this.serverSocket = serverSocket; 25 } 26 27 public void run() { 28 try { 29 synchronized(this) { 30 Socket s = serverSocket.accept(); 31 if(s.getInetAddress().equals(address)) { 32 server.log("Data connected:" + s.getInetAddress() + " expected:" + address); 33 socket = s; 34 notifyAll(); 35 } else { 36 server.log("Data REJECTED:" + s.getInetAddress() + " expected:" + address); 37 close(); 38 } 39 } 40 } catch(IOException e) { 41 e.printStackTrace(); 42 } 43 } 44 45 private void waitUntilConnected() { 46 while(serverSocket != null && socket == null) { 47 try { 48 wait(); 49 } catch(InterruptedException e) { 50 } 52 } 53 server.log("connected"); 54 } 55 56 public void close() { 57 serverSocket = null; 58 socket = null; 59 } 60 61 public synchronized void receive(FileObject file) throws IOException { 62 waitUntilConnected(); 63 try { 64 InputStream in = socket.getInputStream(); 65 file.write(in); 66 } finally { 67 socket.close(); 68 } 69 server.log("closed"); 70 } 71 72 public synchronized void send(FileObject file, long skip) throws IOException { 73 waitUntilConnected(); 74 try { 75 OutputStream out = socket.getOutputStream(); 76 file.read(skip, out); 77 } finally { 78 socket.close(); 79 } 80 server.log("closed"); 81 } 82 83 public synchronized void send(byte[] data) throws IOException { 84 waitUntilConnected(); 85 try { 86 OutputStream out = socket.getOutputStream(); 87 out.write(data); 88 } finally { 89 socket.close(); 90 } 91 server.log("closed"); 92 } 93 94 } 95 | Popular Tags |