Changeset 35


Ignore:
Timestamp:
Aug 29, 2012 1:59:38 PM (5 years ago)
Author:
psaiteja
Message:

This version corrects an error in handling UDP packets received by the client. The earlier version did not take into account the timestamp accompanying the new hash entry and so had a string processing error.

Also, it has been made sure that the timestamps for hash entries in the client hashlist match with the timestamps in the server hashlist - except for the case where the client receives the object directly from the VSN server (when the current timestamp on the server is used for the hash entry).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • VSNClient/appClientModule/ClientProxy.java

    r29 r35  
    1111import java.sql.SQLException; 
    1212import java.sql.Statement; 
     13import java.sql.Timestamp; 
    1314 
    1415public class ClientProxy extends Thread 
     
    5455                } 
    5556                 
     57                String forward_ip = ""; 
     58                try{ 
     59                        forward_ip = InetAddress.getByName(fProxyServer).getHostAddress(); 
     60                }catch(UnknownHostException e){ 
     61                        System.out.println("UnknownHostException: provided forward proxy server is not valid"); 
     62                        e.printStackTrace(); 
     63                        return; 
     64                }catch(Exception e){ 
     65                        e.printStackTrace(); 
     66                        return; 
     67                } 
     68                fProxyServer = forward_ip; 
     69                 
    5670                // create and start the ClientProxy thread, using a 20 second timeout 
    5771                // value to keep the threads from piling up too much 
     
    121135        { 
    122136                return thisPort; 
    123         } 
    124           
     137        }        
    125138         
    126139        /* return whether or not the socket is currently open 
     
    312325                        try{ 
    313326                                UDPClient.receive(receivePacket); 
     327                                 
    314328                                String IPAddress = receivePacket.getAddress().getHostAddress();  
    315329                                int port = receivePacket.getPort();  
     330                                System.out.println("Received a UDP packet from IP:"+IPAddress+" Port:"+port); 
    316331                                 
    317332                                if(IPAddress.equalsIgnoreCase(fwdServer) && port == fwdUdpPort){ 
    318333                                        String data = new String(receivePacket.getData()); 
    319                                         String [] data_array = data.split("\n"); 
     334                                        System.out.println("UDP data:"+data); 
     335                                         
     336                                        String [] data_array = data.split("\\n"); 
    320337                                         
    321338                                        for(int i=0;i<data_array.length;i++){ 
    322339                                                if(data_array[i].length()>0){ 
    323340                                                        String urlhash = data_array[i].substring(0, data_array[i].indexOf("\t")); 
    324                                                         String objecthash = data_array[i].substring(data_array[i].indexOf("\t")+1); 
     341                                                        data_array[i] = data_array[i].substring(data_array[i].indexOf("\t")+1); 
     342                                                        String objecthash = data_array[i].substring(0, data_array[i].indexOf("\t")); 
     343                                                        String timestamp = data_array[i].substring(data_array[i].indexOf("\t")+1); 
    325344                                                        urlhash = urlhash.trim(); 
    326345                                                        objecthash = objecthash.trim(); 
     346                                                        timestamp = timestamp.trim(); 
    327347                                                         
    328348                                                        try {            
     
    332352                                                                        PreparedStatement psUpdate = database_conn.prepareStatement("UPDATE ClientHashlist SET ObjectHash=?, hashTime=? WHERE UrlHash=?"); 
    333353                                                                        psUpdate.setString(1, objecthash); 
    334                                                                         java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); 
     354                                                                        java.sql.Timestamp currentTimestamp = Timestamp.valueOf(timestamp); 
    335355                                                                        psUpdate.setTimestamp(2, currentTimestamp); 
    336356                                                                        psUpdate.setString(3, urlhash); 
     
    342362                                                                        psInsert.setString(1, urlhash); 
    343363                                                                        psInsert.setString(2, objecthash); 
    344                                                                         java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); 
     364                                                                        java.sql.Timestamp currentTimestamp = Timestamp.valueOf(timestamp); 
    345365                                                                        psInsert.setTimestamp(3, currentTimestamp); 
    346366 
     
    435455                        // other variables 
    436456                        byte[] request = null; 
    437                         byte[] response = null; 
    438457                        int requestLength = 0; 
    439458                        int responseLength = 0; 
     
    449468                        StringBuffer VSNobjectdigest = new StringBuffer(""); 
    450469                        StringBuffer vsnrequest = new StringBuffer(""); 
     470                        StringBuffer VSNtimestamp = new StringBuffer(""); 
    451471                         
    452472                        // get the header info (the web browser won't disconnect after 
     
    495515                                        urldigest.append(Integer.toHexString(0xFF & udigest[i])); 
    496516                                } 
    497                                 System.out.println(urldigest); 
     517                                 
    498518                                        try {            
    499519                                                Statement stmt2 = conn.createStatement(); 
     
    585605                                        //responseLength = Array.getLength(response); 
    586606                                //}  else  { 
    587                                         responseLength = streamHTTPData2(serverIn, clientOut,host,url, true,toVSN,VSNurldigest,VSNobjectdigest); 
     607                                        responseLength = streamHTTPData2(serverIn, clientOut,host,url, true,toVSN,VSNurldigest,VSNobjectdigest, VSNtimestamp); 
    588608                                         
    589609                                        if(responseLength==-2){ 
     
    592612                                                psInsert.setString(1, VSNurldigest.toString()); 
    593613                                                psInsert.setString(2, VSNobjectdigest.toString()); 
    594                                                 java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); 
     614                                                java.sql.Timestamp currentTimestamp = Timestamp.valueOf(VSNtimestamp.toString());; 
    595615                                                psInsert.setTimestamp(3, currentTimestamp); 
    596616                                                psInsert.executeUpdate(); 
     
    612632                                                        redirect_serverOut.flush(); 
    613633                                                         
    614                                                         responseLength = streamHTTPData2(redirect_serverIn, clientOut,host,url, true,toVSN,VSNurldigest,VSNobjectdigest); 
     634                                                        responseLength = streamHTTPData2(redirect_serverIn, clientOut,host,url, true,toVSN,VSNurldigest,VSNobjectdigest, VSNtimestamp); 
    615635                                                         
    616636                                                        redirect_serverIn.close(); 
     
    651671                                                        third_serverOut.flush(); 
    652672                                                         
    653                                                         responseLength = streamHTTPData2(third_serverIn, clientOut,host,url, true,toVSN,VSNurldigest,VSNobjectdigest); 
     673                                                        responseLength = streamHTTPData2(third_serverIn, clientOut,host,url, true,toVSN,VSNurldigest,VSNobjectdigest, VSNtimestamp); 
    654674                                                         
    655675                                                        third_serverIn.close(); 
     
    699719                } 
    700720 
    701         } 
    702          
    703          
    704         private byte[] getHTTPData (InputStream in, boolean waitForDisconnect) 
    705         { 
    706                 // get the HTTP data from an InputStream, and return it as 
    707                 // a byte array 
    708                 // the waitForDisconnect parameter tells us what to do in case 
    709                 // the HTTP header doesn't specify the Content-Length of the 
    710                 // transmission 
    711                 StringBuffer host = new StringBuffer(""); 
    712                 StringBuffer url = new StringBuffer(""); 
    713                 return getHTTPData(in, host, url, waitForDisconnect); 
    714         } 
    715          
     721        }        
    716722         
    717723        private byte[] getHTTPData (InputStream in, StringBuffer host, StringBuffer url, boolean waitForDisconnect) 
     
    725731                streamHTTPData(in, bs, host, url, waitForDisconnect); 
    726732                return bs.toByteArray(); 
    727         } 
    728          
    729  
    730         private int streamHTTPData (InputStream in, OutputStream out, boolean waitForDisconnect) 
    731         { 
    732                 StringBuffer host = new StringBuffer(""); 
    733                 StringBuffer url = new StringBuffer(""); 
    734                 return streamHTTPData(in, out, host, url, waitForDisconnect); 
    735733        } 
    736734         
     
    754752                        if (data != null) { 
    755753                                pos = data.indexOf(" "); 
    756 //                              if ((data.toLowerCase().startsWith("http")) && (pos >= 0) 
    757 //                                              && (data.indexOf(" ", pos + 1) >= 0)) { 
    758 //                                      String rcString = data.substring(pos + 1, 
    759 //                                                      data.indexOf(" ", pos + 1)); 
    760 //                                      try { 
    761 //                                              responseCode = Integer.parseInt(rcString); 
    762 //                                      } catch (Exception e) { 
    763 //                                              if (debugLevel > 0) 
    764 //                                                      debugOut.println("Error parsing response code " 
    765 //                                                                      + rcString); 
    766 //                                      } 
    767 //                              } else { 
    768                                         if ((pos >= 0) && (data.indexOf(" ", pos + 1) >= 0)) {                                           
    769                                                 pre_url.setLength(0); 
    770                                                 pre_url.append(data.substring(0,pos)); 
    771                                                 url.setLength(0); 
    772                                                 url.append(data.substring(pos + 1,data.indexOf(" ", pos + 1))); 
    773                                                 post_url.setLength(0); 
    774                                                 post_url.append(data.substring(data.indexOf(" ", pos + 1)+1)); 
    775                                         } 
    776 //                              } 
     754                                if ((pos >= 0) && (data.indexOf(" ", pos + 1) >= 0)) {                                           
     755                                        pre_url.setLength(0); 
     756                                        pre_url.append(data.substring(0,pos)); 
     757                                        url.setLength(0); 
     758                                        url.append(data.substring(pos + 1,data.indexOf(" ", pos + 1))); 
     759                                        post_url.setLength(0); 
     760                                        post_url.append(data.substring(data.indexOf(" ", pos + 1)+1)); 
     761                                } 
    777762                        } 
    778763 
     
    857842        private int streamHTTPData2 (InputStream in, OutputStream out,  
    858843                                                                        StringBuffer host, StringBuffer url, boolean waitForDisconnect,boolean toVSN, 
    859                                                                         StringBuffer VSNurldigest, StringBuffer VSNobjectdigest) 
     844                                                                        StringBuffer VSNurldigest, StringBuffer VSNobjectdigest, StringBuffer VSNtimestamp) 
    860845        { 
    861846                // get the HTTP data from an InputStream, and send it to 
     
    891876                                        VSNurldigest.setLength(0); 
    892877                                        VSNobjectdigest.setLength(0); 
     878                                        VSNtimestamp.setLength(0); 
     879                                         
    893880                                        data = readLine(in); 
    894881                                        VSNurldigest.append(data.substring(13)); 
    895882                                        data = readLine(in); 
    896883                                        VSNobjectdigest.append(data.substring(16)); 
    897                                          
     884                                        data = readLine(in); 
     885                                        VSNtimestamp.append(data.substring(13)); 
    898886                                        return -2; 
    899887                                } 
     
    908896                                        break; 
    909897                                header.append(data + "\r\n"); 
    910                                  
    911 //                              // check for the Host header 
    912 //                              pos = data.toLowerCase().indexOf("host:"); 
    913 //                              if (pos >= 0) 
    914 //                              { 
    915 //                                      host.setLength(0); 
    916 //                                      host.append(data.substring(pos + 5).trim()); 
    917 //                              } 
    918898                                 
    919899                                // check for the Content-Length header 
     
    930910                        // add a blank line to terminate the header info 
    931911                        header.append("\r\n"); 
    932                          
    933 //                      // convert the header to a byte array, and write it to our stream 
    934 //                      out.write(header.toString().getBytes(), 0, header.length()); 
    935912                         
    936913                        // if the header indicated that this was not a 200 response, 
Note: See TracChangeset for help on using the changeset viewer.