Changeset 122 for VSNServer


Ignore:
Timestamp:
Oct 6, 2012 8:28:44 PM (6 years ago)
Author:
psaiteja
Message:

Removed the timestamp field in the server hash list database. Made sure the UDP packets sent by the VSN server do not contain any hash entry timestamps. Also made sure that the content type and the actual content size for videos/for files which do not indicate contentlength is recorded in the log.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • VSNServer/src/ServerProxy.java

    r120 r122  
    2020        private int thisPort = DEFAULT_PORT; 
    2121        private int ptTimeout = ServerProxyThread.DEFAULT_TIMEOUT/1000; 
    22         private int debugLevel = 0; 
    2322        private FileOutputStream out; 
    2423        private PrintStream debugOut = System.out; 
    2524        private String database_driver = "org.apache.derby.jdbc.EmbeddedDriver"; 
    2625        private Connection conn; 
    27         private double alpha = 21969.6; 
     26         
     27        private double alpha = 26363; 
    2828        private int max_users = 100; 
    29         private int m_threshold = (int)((70*max_users+1.206*(alpha*0.1+70))/(0.14004*alpha+70*2.4004)); 
     29        private int hashentrysize = 42; 
     30        private double RTTlatency = 50.0/1000; 
     31        private int m_threshold = (int)((hashentrysize*max_users+1.206*(alpha*RTTlatency+hashentrysize))/(1.4004*alpha*RTTlatency+hashentrysize*2.4004)); 
    3032         
    3133        private int UDPport = DEFAULT_UDP_PORT; 
     
    3739                int port = 5556; 
    3840                int udp_port = 5601; 
    39                 double alpha_main =  21969.6; 
     41                double alpha_main =  26363; 
    4042                int maxusers_main = 100; 
    4143                 
     
    117119         
    118120        public void setMThreshold(){ 
    119                 m_threshold = (int)((70*max_users+1.206*(alpha*0.1+70))/(0.14004*alpha+70*2.4004)); 
     121                m_threshold = (int)((hashentrysize*max_users+1.206*(alpha*RTTlatency+hashentrysize))/(1.4004*alpha*RTTlatency+hashentrysize*2.4004)); 
    120122        } 
    121123         
     
    124126         * output to the console or some other PrintStream 
    125127         */ 
    126         public void setDebug (int level, PrintStream out) 
    127         { 
    128                 debugLevel = level; 
     128        public void setDebug (PrintStream out) 
     129        { 
    129130                debugOut = out; 
    130131        } 
     
    165166                server = null; 
    166167        } 
    167          
    168168         
    169169        public void run() 
     
    196196                                        System.out.println("Table does not exist"); 
    197197                                        Statement stmt = conn.createStatement(); 
    198                                         String createtable = "CREATE TABLE ServerHashlist (UrlHash VARCHAR(40) NOT NULL PRIMARY KEY, ObjectHash VARCHAR(40) NOT NULL, HashTime TIMESTAMP NOT NULL, Occurrence INT DEFAULT 0"; 
     198                                        String createtable = "CREATE TABLE ServerHashlist (UrlHash VARCHAR(40) NOT NULL PRIMARY KEY, ObjectHash VARCHAR(40) NOT NULL, Occurrence INT DEFAULT 0"; 
    199199                                        for(int ct=0;ct<m_threshold;ct++){ 
    200200                                                createtable += ", IP"+(ct+1)+" VARCHAR(15)"; 
     
    213213                                        conn = DriverManager.getConnection("jdbc:derby:serverdatabase;create=true"); 
    214214                                        Statement stmt = conn.createStatement(); 
    215                                         String createtable = "CREATE TABLE ServerHashlist (UrlHash VARCHAR(40) NOT NULL PRIMARY KEY, ObjectHash VARCHAR(40) NOT NULL, HashTime TIMESTAMP NOT NULL, Occurrence INT DEFAULT 0"; 
     215                                        String createtable = "CREATE TABLE ServerHashlist (UrlHash VARCHAR(40) NOT NULL PRIMARY KEY, ObjectHash VARCHAR(40) NOT NULL, Occurrence INT DEFAULT 0"; 
    216216                                        for(int ct=0;ct<m_threshold;ct++){ 
    217217                                                createtable += ", IP"+(ct+1)+" VARCHAR(15)"; 
     
    260260                        // client connections 
    261261                        server = new ServerSocket(thisPort); 
    262                         if (debugLevel > 0) 
    263                                 debugOut.println("Started server on port " + thisPort); 
     262                        debugOut.println("Started server on port " + thisPort); 
    264263                         
    265264                        try{ 
     
    307306                                 
    308307                                ServerProxyThread t = new ServerProxyThread(client, conn, udpthread, m_threshold, debugOut); 
    309                                 t.setDebug(debugLevel, debugOut); 
     308                                t.setDebug(debugOut); 
    310309                                t.setTimeout(ptTimeout); 
    311310                                t.start(); 
     
    411410                        //java sql timestamp of the format: yyyy-mm-dd hh:mm:ss.fffffffff 
    412411                        //considering 75 bytes (2 sha1 digests (40 bytes) + timestamp (30 bytes) +3 tabs (3 bytes)+ 1 newline (1 byte) ) per hash entry, and max 1400 MTU for the UDP packet 
    413                         int MAX_per_packet = 18;  
     412                        //UPDATE Oct 6th 2012: We dont need to send timestamps. Considering 42 bytes (2 sha1 digests (40 bytes))+1 tabs (1 byte)+ 1 newline (1 byte) ) per hash entry, and max 1400 MTU for the UDP packet 
     413                        int MAX_per_packet = 32;  
    414414                        String sendhashdata = ""; 
    415415                        while (rs.next()) { 
    416                                 sendhashdata += rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getTimestamp(3)+"\n"; 
     416                                sendhashdata += rs.getString(1)+"\t"+rs.getString(2)+"\n"; 
    417417                                num++; 
    418418                                count++; 
     
    423423                                        sendhashdata = ""; 
    424424                                        num = 0; 
    425                                         debugOut.println("UDP: Sent 18 hash entries to IP:"+ip+" port:"+port); 
     425                                        //debugOut.println("UDP: Sent 18 hash entries to IP:"+ip+" port:"+port); 
    426426                                } 
    427427                        } 
     
    432432                                sendhashdata = ""; 
    433433                                num = 0; 
    434                                 debugOut.println("UDP: Sent "+count+" hash entries to IP:"+ip+" port:"+port); 
    435                         } 
    436                          
     434                        } 
     435                        debugOut.println("UDP: Sent "+count+" hash entries to IP:"+ip+" port:"+port); 
    437436                        rs.close(); 
    438437                } catch (Exception e) { 
     
    454453                                if(rs1.next()){ 
    455454                                        for(int i=0;i<m_threshold;i++){ 
    456                                                 ip[i] = rs1.getString(5+i); 
     455                                                ip[i] = rs1.getString(4+i); 
    457456                                        } 
    458457                                } 
     
    488487{ 
    489488        private Socket clientSocket; 
    490         private int debugLevel = 0; 
    491489        private PrintStream debugOut = System.out; 
    492490        private Connection conn; 
     
    519517 
    520518 
    521         public void setDebug (int level, PrintStream out) 
    522         { 
    523                 debugLevel = level; 
     519        public void setDebug (PrintStream out) 
     520        { 
    524521                debugOut = out; 
    525522        } 
     
    552549                        StringBuffer url = new StringBuffer(""); 
    553550                        StringBuffer contactedorigin = new StringBuffer(""); 
     551                        StringBuffer filetype = new StringBuffer(""); 
    554552                         
    555553                        // get the header info (the web browser won't disconnect after 
     
    591589                                        if (rs.next()) { 
    592590                                                debugOut.println("ENTRY EXISTS -  UrlHash: " + rs.getString(1) 
    593                                                                 + " ObjectHash:" + rs.getString(2) + " Time:" 
    594                                                                 + rs.getString(3)+ " Count:"+rs.getInt(4)); 
    595                                                 int m = rs.getInt(4); 
     591                                                                + " ObjectHash:" + rs.getString(2) + " Count:"+rs.getInt(3)); 
     592                                                int m = rs.getInt(3); 
    596593                                                if(m<m_threshold){                                                       
    597594                                                        String [] ip = new String[m_threshold]; 
    598595                                                        for(int ip_c = 0;ip_c<m_threshold;ip_c++){ 
    599                                                                 ip[ip_c] = rs.getString(5+ip_c); 
     596                                                                ip[ip_c] = rs.getString(4+ip_c); 
    600597                                                        } 
    601598                                                         
     
    606603                                                                if(m+1==m_threshold){ 
    607604                                                                        String objectdigest = rs.getString(2); 
    608                                                                         String timestamp = rs.getTimestamp(3).toString(); 
    609                                                                         udpthread.sendhashtoall(urldigest+"\t"+objectdigest+"\t"+timestamp, false); 
     605                                                                        udpthread.sendhashtoall(urldigest+"\t"+objectdigest, false); 
    610606                                                                } 
    611607                                                        } 
    612608                                                } 
    613609                                                debugOut.println("redirecting user to origin"); 
    614                                                 String redirectmsg ="VSNRedirect:true\r\nVSNurldigest:"+rs.getString(1)+"\r\nVSNobjectdigest:"+rs.getString(2)+"\r\nVSNtimestamp:"+rs.getTimestamp(3)+"\r\ncontent-length:0\r\n\r\n"; 
     610                                                String redirectmsg ="VSNRedirect:true\r\nVSNurldigest:"+rs.getString(1)+"\r\nVSNobjectdigest:"+rs.getString(2)+"\r\ncontent-length:0\r\n\r\n"; 
    615611                                                clientOut.write(redirectmsg.getBytes()); 
    616612                                                clientOut.flush(); 
     
    627623                        } 
    628624 
    629                          
    630                          
    631                          
    632625                        try 
    633626                        { 
     
    658651                                        serverOut.flush(); 
    659652                                        String clientip = clientSocket.getInetAddress().getHostAddress(); 
    660                                         responseLength = streamHTTPData2(serverIn, clientOut,host,url, true,clientip); 
     653                                        filetype.setLength(0); 
     654                                        responseLength = streamHTTPData2(serverIn, clientOut,host,url, true,clientip, filetype); 
    661655                                } 
    662656                                catch (SocketTimeoutException ste) 
     
    683677                        // keep in mind that because we're using threads, the output won't 
    684678                        // necessarily be synchronous 
    685                         if (debugLevel > 0) 
    686                         { 
    687                                 long endTime = System.currentTimeMillis(); 
    688                                 debugOut.println(endTime+" Request from " + clientSocket.getInetAddress().getHostAddress() +  
    689                                                                         " on Port " + clientSocket.getLocalPort() +  
    690                                                                         " to host " + hostName + ":" + hostPort +  
    691                                                                         "\n  "+url_string+ 
    692                                                                         "\n"+"(" + requestLength + " bytes sent, " +  
    693                                                                         responseLength + " bytes returned, " +  
    694                                                                         Long.toString(endTime - startTime) + " ms elapsed)"); 
    695                                 debugOut.flush(); 
    696                         } 
     679 
     680                        long endTime = System.currentTimeMillis(); 
     681                        debugOut.println(endTime+" Request from " + clientSocket.getInetAddress().getHostAddress() +  
     682                                        " on Port " + clientSocket.getLocalPort() +  
     683                                        " to host " + hostName + ":" + hostPort +  
     684                                        "\n  "+url_string+ 
     685                                        "\n"+"(" + requestLength + " bytes sent, " +  
     686                                        responseLength + " bytes returned, " +  
     687                                        "ContentType:"+filetype+", "+ 
     688                                        Long.toString(endTime - startTime) + " ms elapsed)"); 
     689                        debugOut.flush(); 
     690                         
    697691                         
    698692                        // close all the client streams so we can listen again 
     
    834828         
    835829        private int streamHTTPData2 (InputStream in, OutputStream out,  
    836                                                                         StringBuffer host, StringBuffer url, boolean waitForDisconnect,String clientip) 
     830                                                                        StringBuffer host, StringBuffer url, boolean waitForDisconnect,String clientip, StringBuffer filetype) 
    837831        { 
    838832                // get the HTTP data from an InputStream, and send it to 
     
    850844                { 
    851845                        // get the first line of the header, so we know the response code 
     846                        //reading blank lines before the header, as some website like studentuniverse.com were appending blank lines before 302 response header 
    852847                        data = readLine(in); 
    853848                        while(data!=null && data.length()==0){ 
    854849                                data = readLine(in); 
    855850                        } 
     851                         
    856852                        if (data != null) 
    857853                        { 
     
    891887                                if (pos >= 0) 
    892888                                        contentType = data.substring(pos + 13).trim(); 
     889                                filetype.append(contentType); 
    893890                        } 
    894891                         
     
    966963                                                                                if (rs.next()) { 
    967964                                                                                        //debugOut.println("ENTRY EXISTS -  UrlHash: " + rs.getString(1) 
    968                                                                                         //              + " ObjectHash:" + rs.getString(2) + " Time:" 
    969                                                                                         //              + rs.getString(3)+ " Count:"+rs.getInt(4)); 
     965                                                                                        //              + " ObjectHash:" + rs.getString(2) + " Count:"+rs.getInt(3)); 
    970966                                                                                        String old_objecthash = rs.getString(2); 
    971                                                                                         int m = rs.getInt(4); 
     967                                                                                        int m = rs.getInt(3); 
    972968                                                                                        if(m<m_threshold){                                                                                               
    973969                                                                                                String [] ip = new String[m_threshold]; 
    974970                                                                                                for(int ip_c = 0;ip_c<m_threshold;ip_c++){ 
    975                                                                                                         ip[ip_c] = rs.getString(5+ip_c); 
     971                                                                                                        ip[ip_c] = rs.getString(4+ip_c); 
    976972                                                                                                } 
    977973                                                                                                 
    978974                                                                                                if(!Arrays.asList(ip).contains(clientip)){ 
    979                                                                                                         PreparedStatement psUpdate = conn.prepareStatement("UPDATE ServerHashlist SET ObjectHash=?,hashTime=?, Occurrence=?, IP"+(m+1)+"=? WHERE UrlHash=?"); 
     975                                                                                                        PreparedStatement psUpdate = conn.prepareStatement("UPDATE ServerHashlist SET ObjectHash=?, Occurrence=?, IP"+(m+1)+"=? WHERE UrlHash=?"); 
    980976                                                                                                        psUpdate.setString(1, objectdigest.toString()); 
    981                                                                                                         java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); 
    982                                                                                                         psUpdate.setTimestamp(2, currentTimestamp); 
    983                                                                                                         psUpdate.setInt(3, m+1); 
    984                                                                                                         psUpdate.setString(4, clientip); 
    985                                                                                                         psUpdate.setString(5, urldigest.toString()); 
     977                                                                                                        psUpdate.setInt(2, m+1); 
     978                                                                                                        psUpdate.setString(3, clientip); 
     979                                                                                                        psUpdate.setString(4, urldigest.toString()); 
    986980                                                                                                        psUpdate.executeUpdate(); 
    987981                                                                                                         
    988982                                                                                                        if(m+1==m_threshold){ 
    989983                                                                                                                if(!old_objecthash.equalsIgnoreCase(objectdigest.toString())){ 
    990                                                                                                                         udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString()+"\t"+currentTimestamp.toString(), true); 
     984                                                                                                                        udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString(), true); 
    991985                                                                                                                } 
    992986                                                                                                                else{ 
    993                                                                                                                         udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString()+"\t"+currentTimestamp.toString(), false); 
     987                                                                                                                        udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString(), false); 
    994988                                                                                                                } 
    995989                                                                                                        } 
     
    997991                                                                                        } 
    998992                                                                                        else{ 
    999                                                                                                 PreparedStatement psUpdate = conn.prepareStatement("UPDATE ServerHashlist SET ObjectHash=?, hashTime=? WHERE UrlHash=?"); 
     993                                                                                                PreparedStatement psUpdate = conn.prepareStatement("UPDATE ServerHashlist SET ObjectHash=? WHERE UrlHash=?"); 
    1000994                                                                                                psUpdate.setString(1, objectdigest.toString()); 
    1001                                                                                                 java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); 
    1002                                                                                                 psUpdate.setTimestamp(2, currentTimestamp); 
    1003                                                                                                 psUpdate.setString(3, urldigest.toString()); 
     995                                                                                                psUpdate.setString(2, urldigest.toString()); 
    1004996                                                                                                psUpdate.executeUpdate(); 
    1005997                                                                                                 
    1006998                                                                                                if(!old_objecthash.equalsIgnoreCase(objectdigest.toString())){ 
    1007                                                                                                         udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString()+"\t"+currentTimestamp.toString(), true); 
     999                                                                                                        udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString(), true); 
    10081000                                                                                                } 
    10091001                                                                                        } 
    10101002                                                                                } else { 
    1011                                                                                         String insertstatement = "insert into ServerHashlist values (?,?,?,?"; 
     1003                                                                                        String insertstatement = "insert into ServerHashlist values (?,?,?"; 
    10121004                                                                                        for(int psi=0;psi<m_threshold;psi++){ 
    10131005                                                insertstatement +=",?"; 
     
    10181010                                                                                        psInsert.setString(1, urldigest.toString()); 
    10191011                                                                                        psInsert.setString(2, objectdigest.toString()); 
    1020                                                                                         java.sql.Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); 
    1021                                                                                         psInsert.setTimestamp(3, currentTimestamp); 
    1022                                             psInsert.setInt(4, 1); 
    1023                                             psInsert.setString(5, clientip); 
     1012                                            psInsert.setInt(3, 1); 
     1013                                            psInsert.setString(4, clientip); 
    10241014                                            for(int psi=1;psi<m_threshold;psi++){ 
    1025                                                 psInsert.setString(5+psi, ""); 
     1015                                                psInsert.setString(4+psi, ""); 
    10261016                                            } 
    10271017                                                                                        psInsert.executeUpdate(); 
    10281018                                                                                        if(m_threshold==1) 
    1029                                                                                                 udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString()+"\t"+currentTimestamp.toString(), false); 
     1019                                                                                                udpthread.sendhashtoall(urldigest.toString()+"\t"+objectdigest.toString(), false); 
    10301020                                                                                } 
    10311021                                                                                rs.close(); 
     
    10571047                //flush the OutputStream and return 
    10581048                try  {  out.flush();  }  catch (Exception e)  {} 
    1059                 return bs.size(); 
     1049                return byteCount; 
    10601050        } 
    10611051                 
Note: See TracChangeset for help on using the changeset viewer.