Changeset 12


Ignore:
Timestamp:
Aug 2, 2012 11:20:37 PM (5 years ago)
Author:
psaiteja
Message:

making modifications to the client code, so it can interact with the VSN server during redirects and coordinate multiple requests (atmost one request to the origin server and atmost two requests to the VSN server).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • VSNClient/appClientModule/jProxy.java

    r10 r12  
    340340                        int hostPort = 80; 
    341341                        StringBuffer url = new StringBuffer(""); 
     342                        boolean contacted_origin = false; 
     343                        boolean toVSN = false; 
     344                        StringBuffer VSNurldigest = new StringBuffer(""); 
     345                        StringBuffer VSNobjectdigest = new StringBuffer(""); 
     346                        StringBuffer vsnrequest = new StringBuffer(""); 
    342347                         
    343348                        // get the header info (the web browser won't disconnect after 
     
    364369                        try 
    365370                        { 
    366                                 if ((fwdServer.length() > 0) && (fwdPort > 0)) 
    367                                 { 
    368                                         server = new Socket(fwdServer, fwdPort); 
    369                                 }  else  { 
    370                                         server = new Socket(hostName, hostPort); 
    371                                 } 
     371                                MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); 
     372                                byte [] udigest = sha1.digest((host.toString()+url.toString()).getBytes()); 
     373                        StringBuffer urldigest = new StringBuffer(); 
     374                        for (int i=0;i<udigest.length;i++) { 
     375                                urldigest.append(Integer.toHexString(0xFF & udigest[i])); 
     376                        } 
     377                         
     378                                try {            
     379                                        Statement stmt2 = conn.createStatement(); 
     380                                        ResultSet rs = stmt2.executeQuery("select * from ClientHashlist where UrlHash='"+urldigest+"'"); 
     381                                        int num = 0; 
     382                                        if (rs.next()) { 
     383                                                server = new Socket(hostName, hostPort); 
     384                                                contacted_origin = true; 
     385                                        } else { 
     386                                                if ((fwdServer.length() > 0) && (fwdPort > 0)) 
     387                                                { 
     388                                                        toVSN = true; 
     389                                                        server = new Socket(fwdServer, fwdPort); 
     390                                                }  else  { 
     391                                                        server = new Socket(hostName, hostPort); 
     392                                                        contacted_origin = true; 
     393                                                } 
     394                                        } 
     395                                        rs.close(); 
     396 
     397                                } catch (Exception e) { 
     398                                        e.printStackTrace(); 
     399                                } 
     400                                 
    372401                        }  catch (Exception e)  { 
    373402                                // tell the client there was an error 
     
    384413                                BufferedOutputStream serverOut = new BufferedOutputStream(server.getOutputStream()); 
    385414                                try{ 
     415                                 
     416                                        //modifying request header to add if VSN server was contacted before and we are sending the request to VSN server 
     417                                        if(toVSN){ 
     418                                                String temp_request = request.toString(); 
     419                                                vsnrequest.setLength(0); 
     420                                                while(temp_request.indexOf("\r\n")>=0){ 
     421                                                        String templine = temp_request.substring(0,temp_request.indexOf("\r\n")); 
     422                                                        temp_request = temp_request.substring(temp_request.indexOf("\r\n")+2); 
     423                                                        if(templine.length()!=0){ 
     424                                                                vsnrequest.append(templine+"\r\n"); 
     425                                                        } 
     426                                                        else{ 
     427                                                                break; 
     428                                                        } 
     429                                                } 
     430                                                vsnrequest.append("VSNContactedOrigin:"+contacted_origin+"\r\n\r\n"); 
     431                                                vsnrequest.append(temp_request); 
     432                                                serverOut.write(vsnrequest.toString().getBytes(), 0, vsnrequest.length()); 
     433                                        } 
     434                                        else{ 
     435                                                // send the request to origin server 
     436                                                serverOut.write(request, 0, requestLength); 
     437                                        } 
    386438                                         
    387                                          
    388                                         // send the request out 
    389                                         serverOut.write(request, 0, requestLength); 
    390439                                        serverOut.flush(); 
    391440                                 
     
    403452                                        //responseLength = Array.getLength(response); 
    404453                                //}  else  { 
    405                                         responseLength = streamHTTPData2(serverIn, clientOut,new StringBuffer(""),url, true); 
     454                                        responseLength = streamHTTPData2(serverIn, clientOut,host,url, true,contacted_origin,VSNurldigest,VSNobjectdigest); 
     455                                         
     456                                        if(responseLength==-2){ 
     457                                                PreparedStatement psInsert = conn.prepareStatement("insert into ClientHashlist values (?,?,?)"); 
     458                                                psInsert.setString(1, VSNurldigest.toString()); 
     459                                                psInsert.setString(2, VSNobjectdigest.toString()); 
     460                                                java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); 
     461                                                psInsert.setTimestamp(3, currentTimestamp); 
     462                                                psInsert.executeUpdate(); 
     463                                                 
     464                                                Socket redirect_socket=null; 
     465                                                try {            
     466                                                        redirect_socket = new Socket(hostName, hostPort); 
     467                                                        contacted_origin = true; 
     468                                                } catch (Exception e) { 
     469                                                        e.printStackTrace(); 
     470                                                } 
     471                                                if(redirect_socket!=null){ 
     472                                                        redirect_socket.setSoTimeout(socketTimeout); 
     473                                                        BufferedInputStream redirect_serverIn = new BufferedInputStream(redirect_socket.getInputStream()); 
     474                                                        BufferedOutputStream redirect_serverOut = new BufferedOutputStream(redirect_socket.getOutputStream()); 
     475                                                         
     476                                                        redirect_serverOut.write(request, 0, requestLength); 
     477                                                        redirect_serverOut.flush(); 
     478                                                         
     479                                                        responseLength = streamHTTPData2(serverIn, clientOut,host,url, true,contacted_origin,VSNurldigest,VSNobjectdigest); 
     480                                                } 
     481                                        } 
     482                                         
    406483                                } 
    407484                                catch (SocketTimeoutException ste) 
     
    613690         
    614691        private int streamHTTPData2 (InputStream in, OutputStream out,  
    615                                                                         StringBuffer host, StringBuffer url, boolean waitForDisconnect) 
     692                                                                        StringBuffer host, StringBuffer url, boolean waitForDisconnect,boolean contacted_origin, 
     693                                                                        StringBuffer VSNurldigest, StringBuffer VSNobjectdigest) 
    616694        { 
    617695                // get the HTTP data from an InputStream, and send it to 
     
    626704                ByteArrayOutputStream bs = new ByteArrayOutputStream(); 
    627705                 
     706                 
    628707                try 
    629708                { 
     
    634713                                header.append(data + "\r\n"); 
    635714                                pos = data.indexOf(" "); 
    636                                 if ((data.toLowerCase().startsWith("http")) &&  
    637                                         (pos >= 0) && (data.indexOf(" ", pos+1) >= 0)) 
     715                                if ((data.toLowerCase().startsWith("http")) && (pos >= 0) && (data.indexOf(" ", pos+1) >= 0)) 
    638716                                { 
    639717                                        String rcString = data.substring(pos+1, data.indexOf(" ", pos+1)); 
     
    646724                                        } 
    647725                                } 
    648 //                              else{ 
    649 //                                      if((pos >= 0) && (data.indexOf(" ", pos+1) >= 0)){ 
    650 //                                              String suffix = data.substring(pos+1, data.indexOf(" ", pos+1)); 
    651 //                                              url.setLength(0); 
    652 //                                              url.append(suffix.trim()); 
    653 //                                      } 
    654 //                              } 
     726                                if(data.startsWith("VSNRedirect:")){ 
     727                                        VSNurldigest.setLength(0); 
     728                                        VSNobjectdigest.setLength(0); 
     729                                        data = readLine(in); 
     730                                        VSNurldigest.append(data.substring(13)); 
     731                                        data = readLine(in); 
     732                                        VSNobjectdigest.append(data.substring(16)); 
     733                                         
     734                                        return -2; 
     735                                } 
    655736                        } 
    656737                         
Note: See TracChangeset for help on using the changeset viewer.