1. Define and add parsing code for MTU, max message size, T1, T2. 2. Add common TLVs (message size, hostname, vendor ID) to all packets sent by the client. 3. Don't include requested IP and server ID in renew messages, since the RFC says MUST NOT. 4. Don't hardcode the broadcast flag to true in DISCOVER packets, use what the caller passed in. 5. Make some methods static. Bug: 19704592 Change-Id: I42a0997e468b12e19cad9b403b98fe266e6cea73
60 lines
1.9 KiB
Java
60 lines
1.9 KiB
Java
/*
|
|
* Copyright (C) 2010 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.net.dhcp;
|
|
|
|
import java.net.Inet4Address;
|
|
import java.nio.ByteBuffer;
|
|
|
|
/**
|
|
* This class implements the DHCP-DISCOVER packet.
|
|
*/
|
|
class DhcpDiscoverPacket extends DhcpPacket {
|
|
/**
|
|
* Generates a DISCOVER packet with the specified parameters.
|
|
*/
|
|
DhcpDiscoverPacket(int transId, byte[] clientMac, boolean broadcast) {
|
|
super(transId, INADDR_ANY, INADDR_ANY, INADDR_ANY, INADDR_ANY, clientMac, broadcast);
|
|
}
|
|
|
|
public String toString() {
|
|
String s = super.toString();
|
|
return s + " DISCOVER " +
|
|
(mBroadcast ? "broadcast " : "unicast ");
|
|
}
|
|
|
|
/**
|
|
* Fills in a packet with the requested DISCOVER parameters.
|
|
*/
|
|
public ByteBuffer buildPacket(int encap, short destUdp, short srcUdp) {
|
|
ByteBuffer result = ByteBuffer.allocate(MAX_LENGTH);
|
|
fillInPacket(encap, INADDR_BROADCAST, INADDR_ANY, destUdp,
|
|
srcUdp, result, DHCP_BOOTREQUEST, mBroadcast);
|
|
result.flip();
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Adds optional parameters to a DISCOVER packet.
|
|
*/
|
|
void finishPacket(ByteBuffer buffer) {
|
|
addTlv(buffer, DHCP_MESSAGE_TYPE, DHCP_MESSAGE_TYPE_DISCOVER);
|
|
addCommonClientTlvs(buffer);
|
|
addTlv(buffer, DHCP_PARAMETER_LIST, mRequestedParams);
|
|
addTlvEnd(buffer);
|
|
}
|
|
}
|