Subversion Repositories programming

Rev

Rev 221 | Rev 224 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 221 Rev 222
Line 8... Line 8...
8
 * Date Last Modified: 2006-02-15
8
 * Date Last Modified: 2006-02-15
9
 *
9
 *
10
 * Purpose: //FIXME
10
 * Purpose: //FIXME
11
 ******************************************************************************/
11
 ******************************************************************************/
12
 
12
 
13
import java.util.Vector;
13
import java.util.Date;
14
 
14
 
15
public class DHCPTable
15
public class DHCPTable
16
{
16
{
17
    private int defaultVectorSize = 10;
-
 
18
    private Vector table = new Vector (defaultVectorSize);
17
    private DHCPTableEntry[] table = new DHCPTableEntry[100];
19
    private String lowestIP = "134.71.24.1";
18
    private IPAddr lowestIP = new IPAddr("134.71.24.1");
20
    private String highestIP = "134.71.24.100";
19
    private IPAddr highestIP = new IPAddr("134.71.24.100");
21
    private String lowestFreeIP = lowestIP;
20
    private long timeoutMS = 8000; // 8000 millisec by default
22
 
21
 
23
    public DHCPTable () {}
22
    public DHCPTable ()
-
 
23
    {
-
 
24
        int i;
-
 
25
        final String startStr = "134.71.24.";
-
 
26
        IPAddr ip = null;
-
 
27
 
-
 
28
        for (i=1; i<=table.length; i++)
-
 
29
        {
-
 
30
            ip = new IPAddr (startStr + i);
-
 
31
            table[i-1] = new DHCPTableEntry("", ip, 0);
-
 
32
        }
-
 
33
    }
24
 
34
 
25
    private String getFirstFreeIPAddr ()
35
    private DHCPTableEntry getFirstFreeEntry ()
26
    {
36
    {
27
        int i = 0;
37
        int i = 0;
28
 
38
 
29
        for (i=0; i<table.size(); i++)
39
        for (i=0; i<table.length; i++)
-
 
40
            if (table[i].getLeaseStart() == 0)
-
 
41
                return table[i];
30
 
42
 
-
 
43
        throw new ArrayIndexOutOfBoundsException();
-
 
44
    }
-
 
45
 
-
 
46
    public DHCPTableEntry addEntry (String HWAddr)
-
 
47
    {
-
 
48
        long curTime = new Date().getTime();
-
 
49
        DHCPTableEntry e = getFirstFreeEntry();
-
 
50
 
-
 
51
        e.setHWAddr (HWAddr);
-
 
52
        e.setLeaseStart (curTime);
-
 
53
 
-
 
54
        return e;
31
    }
55
    }
32
 
56
 
33
    /**
57
    /**
34
     * Method: compareIPAddr()
58
     * Method: timeoutEntry()
35
     * Purpose: Compare two IP Addresses, and figure out which is greater.
59
     * Purpose: tries to find an expired entry. If it has found one, it expires it
36
     * Return Values: 0 - Equal Addresses
-
 
37
     *                1 - IP #1 is greater
60
     * and returns it, otherwise it returns null.
38
     *                2 - IP #2 is greater
-
 
39
     */
61
     */
40
    public int compareIPAddr (String ip1, String ip2)
-
 
41
    {
-
 
42
        
-
 
43
    
-
 
44
    public DHCPTableEntry addEntry (String HWAddr)
62
    public DHCPTableEntry timeoutEntry ()
45
    {
63
    {
-
 
64
        int i;
46
        String freeIPAddr = lowestIP;
65
        long curTime = new Date().getTime();
47
        DHCPTableEntry te;
66
        DHCPTableEntry e = null;
-
 
67
 
48
        
68
        for (i=0; i<table.length; i++)
49
        for (Enumeration e = table.elements(); e.hasMoreElements(); )
69
            if (table[i].getLeaseStart() != 0 && curTime > (table[i].getLeaseStart() + timeoutMS))
50
        {
70
            {
-
 
71
                e = new DHCPTableEntry (table[i].getHWAddr(),
-
 
72
                                        table[i].getIPAddr(),
-
 
73
                                        table[i].getLeaseStart());
-
 
74
 
-
 
75
                table[i].setHWAddr ("");
-
 
76
                table[i].setLeaseStart (0);
51
            te = e.nextElement();
77
                return e;
-
 
78
            }
52
 
79
 
53
            if (te.getIPAddr() < 
80
        return e; // will be null if an entry was not found
-
 
81
    }
54
 
82
 
-
 
83
    public DHCPTableEntry timeoutEntry (IPAddr ip)
55
        }
84
    {
-
 
85
        int i = ip.getField(3) - 1;
-
 
86
        long curTime = new Date().getTime();
-
 
87
        DHCPTableEntry e = null;
56
 
88
 
-
 
89
        if (curTime > (table[i].getLeaseStart() + timeoutMS))
57
        
90
        {
-
 
91
            // Make a copy of the object
58
        DHCPTableEntry dte = new DHCPTableEntry (HWAddr, );
92
            e = new DHCPTableEntry (table[i].getHWAddr(),
-
 
93
                                    table[i].getIPAddr(),
-
 
94
                                    table[i].getLeaseStart());
-
 
95
 
59
        table.addEntry (dte);
96
            table[i].setHWAddr ("");
-
 
97
            table[i].setLeaseStart (0);
-
 
98
            return e;
-
 
99
        }
60
 
100
 
61
        return dte;
101
        return null;
62
    }
102
    }
63
}
103
}
64
 
104