C2C_server.java
Go to the documentation of this file.
1 package p2pclient;
2 
3 import java.rmi.Naming;
4 import java.rmi.registry.LocateRegistry;
5 import java.rmi.registry.Registry;
6 import java.rmi.server.UnicastRemoteObject;
7 import java.io.File;
8 import java.io.FileInputStream;
9 import java.io.DataInputStream;
10 import java.io.FileOutputStream;
11 import java.io.DataOutputStream;
12 import javax.swing.JOptionPane;
13 import javax.swing.JFileChooser;
14 import javax.swing.table.DefaultTableModel;
15 
16 
25 public class C2C_server extends UnicastRemoteObject implements C2C_RMIFuncConstructor{
26 
30  public static boolean DBG = true;
31  static C2C_server obj;
32 
37  protected C2C_server() throws java.rmi.RemoteException{
38  super();
39  }
40 
47  public static void main(String[] args) throws java.rmi.RemoteException{
48 
49  try
50  {
51  obj = new C2C_server();
52 
53  Registry registry;
54 
56  registry = LocateRegistry.createRegistry(p2putility.Config.r_rmiregport());
57  else
58  registry = LocateRegistry.getRegistry();
59  registry.rebind("C2C_server",obj);
60  Naming.rebind("C2C_server", obj);
61 
62  if(DBG) p2putility.Util.logClient("C2C_server e' stato registrato");
63  }
64  catch (Exception e)
65  {
66  if(DBG) p2putility.Util.logClient("C2C_server err: " + e);
67  }
68  }
69 
70 
78  private boolean authorize(String k, String v)
79  {
80  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: authorize("+k+","+v+")="+p2putility.Config.cauth);
81  try
82  {
83  if(v.length()>5)
84  if(v.compareTo(p2putility.Config.cauth.get(k).toString())==0)
85  return true;
86  }
87  catch(Exception e)
88  {
89  return false;
90  }
91 
92  return false;
93  }
94 
100  @SuppressWarnings("static-access")
101  private String clientIP()
102  {
103  try{
104  return obj.getClientHost();
105  }
106  catch(Exception e)
107  {
108  return "unknown";
109  }
110  }
111 
112 
117  public String serverOn()
118  {
119  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: ON! from: "+clientIP());
120  return "CLIENT SIDE: SERVER ON!";
121  }
122 
132  public byte[] getFile(String k, String v, String name, String path)
133  {
134 
135  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: getFile("+path+","+name+") from: "+clientIP());
136 
137  // ****** INDISPENSABILE PER LE FUNZIONI CHE FANNO QUALCOSA DI PRATICO
138  // ****** Un utente qualsiasi potrebbe prendere e/o cancellare tutti i file del tuo PC
139  if(!authorize(k,v)){
140  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: client "+clientIP()+" logged as ("+k+","+v+") is not authorized.");
141  return null;
142  }
143  // END **************************************
144  File remf = new File(path+name);
145 
146  if(!remf.exists()){
147  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: file does not exist.");
148  return null;
149  }
150 
151  long size = remf.length();
152  long maxsize = p2putility.Config.r_filemaxsizetorecv();
153  if(size>maxsize){
154  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: file too big (size: "+size+" byte, max: "+maxsize+" byte).");
155  return null;
156  }
157 
158  byte content[] = new byte[(int)size];
159 
160  try
161  {
162  DataInputStream remfr = new DataInputStream(new FileInputStream(remf));
163  remfr.read(content);
164  remfr.close();
165  }
166  catch(Exception xe)
167  {
168  if(DBG) p2putility.Util.logClient("C2C_server err: " + xe);
169  return null;
170  }
171 
172  return content;
173  }
174 
184  public boolean deleteFile(String k, String v, String name, String path)
185  {
186 
187  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: deleteFile("+path+","+name+") from: "+clientIP());
188 
189  // ****** INDISPENSABILE PER LE FUNZIONI CHE FANNO QUALCOSA DI PRATICO
190  // ****** Un utente qualsiasi potrebbe prendere e/o cancellare tutti i file del tuo PC
191  if(!authorize(k,v)){
192  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: client "+clientIP()+" logged as ("+k+","+v+") is not authorized.");
193  return false;
194  }
195 
196  File remf = new File(path+name);
197 
198  if(!remf.exists()){
199  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: file "+name+" does not exist.");
200  return false;
201  }
202 
203  try
204  {
205  boolean ris = remf.delete();
206  if(ris){
207  DefaultTableModel model = (DefaultTableModel) p2pgui.ClientFrame.jtabshare.getModel();
208  int numrow = model.getRowCount();
209  for(int i=0; i< numrow; i++)
210  if(((model.getValueAt(i, 0)).toString().equals(name))&&((model.getValueAt(i, 1)).toString().equals(path))){
211  model.removeRow(i);
212  model.fireTableRowsDeleted(i, i);
213  break;
214  }
215  p2putility.Config.cauth.remove(k);
216  p2pgui.ClientFrame.h.remove(remf.getAbsolutePath());
217  }
218  return ris;
219  }
220  catch(Exception xe){
221  if(DBG) p2putility.Util.logClient("C2C_server err: " + xe);
222  return false;
223  }
224 
225  }
226 
236  @SuppressWarnings("static-access")
237  public boolean sendFile(String k, String v, byte[] content, String name){
238  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: sendFile("+name+") from: "+clientIP());
239 
240  // ****** INDISPENSABILE PER LE FUNZIONI CHE FANNO QUALCOSA DI PRATICO
241  // ****** Un utente qualsiasi potrebbe prendere e/o cancellare tutti i file del tuo PC
242  if(!authorize(k,v)){
243  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: client "+clientIP()+" logged as ("+k+","+v+") is not authorized.");
244  return false;
245  }
246  // *********************************************************************
247 
248  if(!p2putility.Config.open_upload_conn()) { // troppe connessioni attive
249  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: too much connection");
250  return false;
251  }
252 
253  // ************* FINE POLITICHE DI ACCETTAZIONE
254 
255  JFileChooser f = new JFileChooser(".");
256  f.setSelectedFile(new File(name));
257  //f.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
258  int r = f.showSaveDialog(null);
259 
260  if (r != f.APPROVE_OPTION)
261  {
262  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: rejected send");
263  return false;
264  }
265 
266 
267  File fs = f.getSelectedFile();
268 
269  if(fs.exists())
270  {
271  r = JOptionPane.showConfirmDialog(null,"Overwrite file?","File already exist",1,JOptionPane.YES_NO_OPTION);
272 
273  if(r!=JOptionPane.YES_OPTION)
274  {
275  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: rejected send (no overwrite)");
276  return false;
277  }
278  }
279 
280 
281  try
282  {
283  DataOutputStream fw = new DataOutputStream(new FileOutputStream(fs));
284  fw.write(content);
285  fw.close();
286 
287  p2putility.Config.close_upload_conn(); // decrementa il numero di connessioni dei client
288 
289  return true;
290  }
291  catch(Exception xe)
292  {
293  if(DBG) p2putility.Util.logClient("C2C_server err: " + xe);
294  return false;
295  }
296 
297  }
298 
299 
310  public void addAuthUser(String myu, String myp, String authu, String authp) throws java.rmi.RemoteException{
311  if(p2pgui.ClientFrame.isMyUser(myu)){ // user e' una var privata! Funzione public boolean che la verifica.
312  if(p2pgui.ClientFrame.isMyPswd(myp)) // pw e' una var privata! Funzione public boolean che la verifica.
313  {
314  if(!p2putility.Config.cauth.containsKey(authu))
315  p2putility.Config.cauth.put(authu,authp);
316  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: Client "+authu+" accepted.");
317  return;
318  }
319 
320  if(DBG) p2putility.Util.logClient("Client SERVER SIDE: Connection refused! You are not my server.");
321  }
322  }
323 
324 }
Classe che permette la configurazione di tutto il programma in base alle specifiche esigenze dell&#39;ute...
Definition: Config.java:14
Classe che implementa metodi vari di utilita&#39; generale.
Definition: Util.java:14
Classe che implementa il servizio Client.
static Hashtable h
static boolean isMyPswd(String p)
Metodo che verifica se la stringa passata corrisponde alla password del client.
static boolean open_upload_conn()
Permette la lettura della varibile relativa in modo sicuro.
Definition: Config.java:378
C2C_server()
Costruttore della classe C2C_server.
Definition: C2C_server.java:37
boolean deleteFile(String k, String v, String name, String path)
Funzione che cancella il file indicato tramite name e path.
String clientIP()
Funzione che ritorna il valore dell&#39;host del client.
static boolean DBG
Variabile boolean per attivare il degug.
Definition: C2C_server.java:30
boolean authorize(String k, String v)
Metodo che controlla se (k,v) fornite dal client sono gia&#39; presenti dell&#39;hashtable.
Definition: C2C_server.java:78
static long r_filemaxsizetorecv()
Permette la lettura della varibile relativa in modo sicuro.
Definition: Config.java:360
static void main(String[] args)
Main che crea un&#39;istanza di RMIRegistry se non e&#39; gia&#39; stata creata da ServerRMI e registra le sue fu...
Definition: C2C_server.java:47
byte [] getFile(String k, String v, String name, String path)
Funzione che restituisce il file chiesto sottoforma di array di byte.
void addAuthUser(String myu, String myp, String authu, String authp)
Funzione utilizzata da ServerRMI per inviare a C2C_server le coppie di identificazione (k...
static int r_rmiregport()
Permette la lettura della varibile relativa in modo sicuro.
Definition: Config.java:335
static boolean isMyUser(String u)
Metodo che verifica se la stringa passata corrisponde allo username del client.
static boolean r_serverOpen()
Permette la lettura della varibile relativa in modo sicuro.
Definition: Config.java:400
static Hashtable cauth
Hashtable contenente le coppie (k,v) fornite dal server, per autenticare un client che vuole accedere...
Definition: Config.java:50
String serverOn()
Funzione di test che non necessita di autorizzazione per verificare se il server e&#39; attivo...
static boolean close_upload_conn()
Permette la lettura della varibile relativa in modo sicuro.
Definition: Config.java:388
Classe che implementa il server RMI C2C_server e le funzioni messe a disposizione dall&#39;interfaccia C2...
Definition: C2C_server.java:25
boolean sendFile(String k, String v, byte[] content, String name)
Funzione che riceve il file inviato.
static JTable jtabshare
static void logClient(String data)
Scrive i dati in input sul file di log del Client (se questo esiste valido)
Definition: Util.java:121