KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > h2 > server > ftp > FtpData


1 /*
2  * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
3  * Initial Developer: H2 Group
4  */

5 package org.h2.server.ftp;
6
7 import java.io.IOException JavaDoc;
8 import java.io.InputStream JavaDoc;
9 import java.io.OutputStream JavaDoc;
10 import java.net.InetAddress JavaDoc;
11 import java.net.ServerSocket JavaDoc;
12 import java.net.Socket JavaDoc;
13
14 public class FtpData extends Thread JavaDoc {
15
16     private FtpServer server;
17     private InetAddress JavaDoc address;
18     private ServerSocket JavaDoc serverSocket;
19     private volatile Socket JavaDoc socket;
20     
21     public FtpData(FtpServer server, InetAddress JavaDoc address, ServerSocket JavaDoc serverSocket) throws IOException JavaDoc {
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 JavaDoc 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 JavaDoc e) {
41             e.printStackTrace();
42         }
43     }
44     
45     private void waitUntilConnected() {
46         while(serverSocket != null && socket == null) {
47             try {
48                 wait();
49             } catch(InterruptedException JavaDoc e) {
50                 // ignore
51
}
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 JavaDoc {
62         waitUntilConnected();
63         try {
64             InputStream JavaDoc 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 JavaDoc {
73         waitUntilConnected();
74         try {
75             OutputStream JavaDoc 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 JavaDoc {
84         waitUntilConnected();
85         try {
86             OutputStream JavaDoc out = socket.getOutputStream();
87             out.write(data);
88         } finally {
89             socket.close();
90         }
91         server.log("closed");
92     }
93
94 }
95
Popular Tags