blob: b1122e9320156a3f243ec5e6cee8193a20733ae1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.directory.server.dhcp.messages;
import java.net.InetAddress;
import org.apache.directory.server.dhcp.options.OptionsField;
/**
* A DHCP (RFC 2131) message. Field descriptions contain the oroginal RFC field
* names in brackets.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class DhcpMessage
{
/**
* Flag value: request broadcast answer.
*/
public static final int FLAG_BROADCAST = 0x01;
/**
* [yiaddr] 'your' (client) IP address.
*/
private InetAddress assignedClientAddress;
/**
* [file] Boot file name, null terminated string; "generic" name or null in
* DHCPDISCOVER, fully qualified directory-path name in DHCPOFFER.
*/
private String bootFileName;
/**
* [ciaddr] Current client IP address; only filled in if client is in BOUND,
* RENEW or REBINDING state and can respond to ARP requests.
*/
private InetAddress currentClientAddress;
/**
* [flags] Flags. (LSB is broadcast flag)
*/
private short flags;
/**
* [hops] Client sets to zero, optionally used by relay agents when booting
* via a relay agent.
*/
private short hopCount;
/**
* [op] Message op code. 1 = BOOTREQUEST, 2 = BOOTREPLY, ...
*/
private byte op;
/**
* Operation constant: boot request (client to server).
*
* @see #op
*/
public static final byte OP_BOOTREQUEST = 1;
/**
* Operation constant: boot reply (server to client).
*
* @see #op
*/
public static final byte OP_BOOTREPLY = 2;
/**
* [siaddr] IP address of next server to use in bootstrap; returned in
* DHCPOFFER, DHCPACK by server.
*/
private InetAddress nextServerAddress;
/**
* [options] Optional parameters field. See the options documents for a list
* of defined options.
*/
private OptionsField options = new OptionsField();
/**
* [giaddr] Relay agent IP address, used in booting via a relay agent.
*/
private InetAddress relayAgentAddress;
/**
* [secs] Filled in by client, seconds elapsed since client began address
* acquisition or renewal process.
*/
private int seconds;
/**
* [sname] Optional server host name, null terminated string.
*/
private String serverHostname;
/**
* [xid] Transaction ID, a random number chosen by the client, used by the
* client and server to associate messages and responses between a client and
* a server.
*/
private int transactionId;
/**
* The DHCP message type option.
*/
private MessageType messageType;
private HardwareAddress hardwareAddress;
/**
* Create a default dhcp message.
*/
public DhcpMessage()
{
}
/**
* Create a DHCP message based on the supplied values.
*
* @param messageType
* @param op
* @param hardwareAddress
* @param hops
* @param transactionId
* @param seconds
* @param flags
* @param currentClientAddress
* @param assignedClientAddress
* @param nextServerAddress
* @param relayAgentAddress
* @param serverHostname
* @param bootFileName
* @param options
*/
public DhcpMessage( MessageType messageType, byte op,
HardwareAddress hardwareAddress, short hops, int transactionId,
int seconds, short flags, InetAddress currentClientAddress,
InetAddress assignedClientAddress, InetAddress nextServerAddress,
InetAddress relayAgentAddress, String serverHostname,
String bootFileName, OptionsField options )
{
this.messageType = messageType;
this.op = op;
this.hardwareAddress = hardwareAddress;
this.hopCount = hops;
this.transactionId = transactionId;
this.seconds = seconds;
this.flags = flags;
this.currentClientAddress = currentClientAddress;
this.assignedClientAddress = assignedClientAddress;
this.nextServerAddress = nextServerAddress;
this.relayAgentAddress = relayAgentAddress;
this.serverHostname = serverHostname;
this.bootFileName = bootFileName;
this.options = options;
}
public InetAddress getAssignedClientAddress()
{
return assignedClientAddress;
}
public String getBootFileName()
{
return bootFileName;
}
public InetAddress getCurrentClientAddress()
{
return currentClientAddress;
}
public short getFlags()
{
return flags;
}
public short getHopCount()
{
return hopCount;
}
public MessageType getMessageType()
{
return messageType;
}
public InetAddress getNextServerAddress()
{
return nextServerAddress;
}
public OptionsField getOptions()
{
return options;
}
public InetAddress getRelayAgentAddress()
{
return relayAgentAddress;
}
public int getSeconds()
{
return seconds;
}
public String getServerHostname()
{
return serverHostname;
}
public int getTransactionId()
{
return transactionId;
}
public void setAssignedClientAddress( InetAddress assignedClientAddress )
{
this.assignedClientAddress = assignedClientAddress;
}
public void setBootFileName( String bootFileName )
{
this.bootFileName = bootFileName;
}
public void setCurrentClientAddress( InetAddress currentClientAddress )
{
this.currentClientAddress = currentClientAddress;
}
public void setFlags( short flags )
{
this.flags = flags;
}
public void setHopCount( short hopCount )
{
this.hopCount = hopCount;
}
public void setMessageType( MessageType messageType )
{
this.messageType = messageType;
}
public void setNextServerAddress( InetAddress nextServerAddress )
{
this.nextServerAddress = nextServerAddress;
}
public void setOptions( OptionsField options )
{
this.options = options;
}
public void setRelayAgentAddress( InetAddress relayAgentAddress )
{
this.relayAgentAddress = relayAgentAddress;
}
public void setSeconds( int seconds )
{
this.seconds = seconds;
}
public void setServerHostname( String serverHostname )
{
this.serverHostname = serverHostname;
}
public void setTransactionId( int transactionId )
{
this.transactionId = transactionId;
}
public byte getOp()
{
return op;
}
public void setOp( byte op )
{
this.op = op;
}
public HardwareAddress getHardwareAddress()
{
return hardwareAddress;
}
public void setHardwareAddress( HardwareAddress hardwareAddress )
{
this.hardwareAddress = hardwareAddress;
}
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append( messageType ).append( ": hwAddress=" ).append( hardwareAddress )
.append( ", tx=" ).append( transactionId ).append( ", options=" ).append(
options );
return sb.toString();
}
}