You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by er...@apache.org on 2005/01/08 06:53:37 UTC

svn commit: r124628 - incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages

Author: erodriguez
Date: Fri Jan  7 21:53:35 2005
New Revision: 124628

URL: http://svn.apache.org/viewcvs?view=rev&rev=124628
Log:
DHCP message value object with mutable companion and typesafe enumerator.
Added:
   incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/
   incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessage.java
   incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessageModifier.java
   incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/MessageType.java

Added: incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessage.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessage.java?view=auto&rev=124628
==============================================================================
--- (empty file)
+++ incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessage.java	Fri Jan  7 21:53:35 2005
@@ -0,0 +1,207 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   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 org.apache.dhcp.messages;
+
+import org.apache.dhcp.options.OptionsField;
+
+
+public class DhcpMessage
+{
+	private MessageType messageType;
+	
+	private byte  opCode;
+	private byte  hardwareAddressType;
+	private byte  hardwareAddressLength;
+	private byte  hardwareOptions;
+	private int   transactionId;
+	private short seconds;
+	private short flags;
+	private byte  actualClientAddress[]   = new byte[4];
+	private byte  assignedClientAddress[] = new byte[4];
+	private byte  nextServerAddress[]     = new byte[4];
+	private byte  relayAgentAddress[]     = new byte[4];
+	private byte  clientHardwareAddress[] = new byte[16];
+	private byte  serverHostname[]        = new byte[64];
+	private byte  bootFileName[]          = new byte[128];
+	
+	private OptionsField options = new OptionsField();
+	
+	public DhcpMessage( MessageType messageType, byte opCode, byte hardwareAddressType,
+			byte hardwareAddressLength, byte hardwareOptions, int transactionId,
+			short seconds, short flags, byte[] actualClientAddress,
+			byte[] assignedClientAddress, byte[] nextServerAddress, byte[] relayAgentAddress,
+			byte[] clientHardwareAddress, byte[] serverHostname, byte[] bootFileName,
+			OptionsField options )
+	{
+		this.messageType           = messageType;
+		this.opCode                = opCode;
+		this.hardwareAddressType   = hardwareAddressType;
+		this.hardwareAddressLength = hardwareAddressLength;
+		this.hardwareOptions       = hardwareOptions;
+		this.transactionId         = transactionId;
+		this.seconds               = seconds;
+		this.flags                 = flags;
+		this.actualClientAddress   = actualClientAddress;
+		this.assignedClientAddress = assignedClientAddress;
+		this.nextServerAddress     = nextServerAddress;
+		this.relayAgentAddress     = relayAgentAddress;
+		this.clientHardwareAddress = clientHardwareAddress;
+		this.serverHostname        = serverHostname;
+		this.bootFileName          = bootFileName;
+		this.options               = options;
+	}
+	
+	/**
+	 * Message type.
+	 */
+	public MessageType getMessageType()
+	{
+		return messageType;
+	}
+	
+	/**
+	 * Message op code / message type.
+	 * 1 = BOOTREQUEST, 2 = BOOTREPLY
+	 */
+	public byte getOpCode()
+	{
+		return opCode;
+	}
+
+	/**
+	 * Hardware address type, see ARP section in
+	 * "Assigned Numbers" RFC; e.g., '1' = 10mb ethernet.
+	 */
+	public byte getHardwareAddressType()
+	{
+		return hardwareAddressType;
+	}
+
+	/**
+	 * Hardware address length (e.g.  '6' for 10mb ethernet).
+	 */
+	public byte getHardwareAddressLength()
+	{
+		return hardwareAddressLength;
+	}
+
+	/**
+	 * Client sets to zero, optionally used by relay agents
+	 * when booting via a relay agent.
+	 */
+	public byte getHardwareOptions()
+	{
+		return hardwareOptions;
+	}
+
+	/**
+	 * 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.
+	 */
+	public int getTransactionId()
+	{
+		return transactionId;
+	}
+
+	/**
+	 * Filled in by client, seconds elapsed since client
+	 * began address acquisition or renewal process.
+	 */
+	public short getSeconds()
+	{
+		return seconds;
+	}
+
+	/**
+	 * Flags.
+	 */
+	public short getFlags()
+	{
+		return flags;
+	}
+
+	/**
+	 * Client IP address; only filled in if client is in BOUND,
+	 * RENEW or REBINDING state and can respond to ARP requests.
+	 */
+	public byte[] getActualClientAddress()
+	{
+		return actualClientAddress;
+	}
+
+	/**
+	 * Get 'your' (client) IP address.
+	 */
+	public byte[] getAssignedClientAddress()
+	{
+		return assignedClientAddress;
+	}
+
+	/**
+	 * IP address of next server to use in bootstrap;
+	 * returned in DHCPOFFER, DHCPACK by server.
+	 */
+	public byte[] getNextServerAddress()
+	{
+		return nextServerAddress;
+	}
+
+	/**
+	 * Relay agent IP address, used in booting via a relay agent.
+	 */
+	public byte[] getRelayAgentAddress()
+	{
+		return relayAgentAddress;
+	}
+
+	/**
+	 * Client hardware address.
+	 */
+	public byte[] getClientHardwareAddress()
+	{
+		return clientHardwareAddress;
+	}
+
+	/**
+	 * Optional server host name, null terminated string.
+	 */
+	public byte[] getServerHostname()
+	{
+		return serverHostname;
+	}
+
+	/**
+	 * Boot file name, null terminated string; "generic" name or null
+	 * in DHCPDISCOVER, fully qualified directory-path name in DHCPOFFER.
+	 */
+	public byte[] getBootFileName()
+	{
+		return bootFileName;
+	}
+	
+	/**
+	 * Optional parameters field.  See the options
+	 * documents for a list of defined options.
+	 */
+	public OptionsField getOptions()
+	{
+		return options;
+	}
+}
+

Added: incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessageModifier.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessageModifier.java?view=auto&rev=124628
==============================================================================
--- (empty file)
+++ incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/DhcpMessageModifier.java	Fri Jan  7 21:53:35 2005
@@ -0,0 +1,190 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   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 org.apache.dhcp.messages;
+
+import org.apache.dhcp.options.OptionsField;
+
+
+public class DhcpMessageModifier
+{
+	private MessageType messageType;
+	
+	private byte  opCode;
+	private byte  hardwareAddressType;
+	private byte  hardwareAddressLength;
+	private byte  hardwareOptions;
+	private int   transactionId;
+	private short seconds;
+	private short flags;
+	private byte  actualClientAddress[]   = new byte[4];
+	private byte  assignedClientAddress[] = new byte[4];
+	private byte  nextServerAddress[]     = new byte[4];
+	private byte  relayAgentAddress[]     = new byte[4];
+	private byte  clientHardwareAddress[] = new byte[16];
+	private byte  serverHostname[]        = new byte[64];
+	private byte  bootFileName[]          = new byte[128];
+	
+	private OptionsField options = new OptionsField();
+	
+	public DhcpMessage getDhcpMessage()
+	{
+		return new DhcpMessage( messageType, opCode, hardwareAddressType, hardwareAddressLength,
+				hardwareOptions, transactionId, seconds, flags, actualClientAddress,
+				assignedClientAddress, nextServerAddress, relayAgentAddress,
+				clientHardwareAddress, serverHostname, bootFileName, options );
+	}
+	
+	/**
+	 * Message type.
+	 */
+	public void setMessageType( MessageType messageType )
+	{
+		this.messageType = messageType;
+	}
+	
+	/**
+	 * Message op code / message type.
+	 * 1 = BOOTREQUEST, 2 = BOOTREPLY
+	 */
+	public void setOpCode( byte opCode )
+	{
+		this.opCode = opCode;
+	}
+
+	/**
+	 * Hardware address type, see ARP section in
+	 * "Assigned Numbers" RFC; e.g., '1' = 10mb ethernet.
+	 */
+	public void setHardwareAddressType( byte hardwareAddressType )
+	{
+		this.hardwareAddressType = hardwareAddressType;
+	}
+
+	/**
+	 * Hardware address length (e.g.  '6' for 10mb ethernet).
+	 */
+	public void setHardwareAddressLength( byte hardwareAddressLength )
+	{
+		this.hardwareAddressLength = hardwareAddressLength;
+	}
+
+	/**
+	 * Set hops field.
+	 * 
+	 * @param inHops hops field
+	 */
+	public void setHardwareOptions( byte hardwareOptions )
+	{
+		this.hardwareOptions = hardwareOptions;
+	}
+
+	/**
+	 * 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.
+	 */
+	public void setTransactionId( int transactionId )
+	{
+		this.transactionId = transactionId;
+	}
+
+	/**
+	 * Filled in by client, seconds elapsed since client
+	 * began address acquisition or renewal process.
+	 */
+	public void setSeconds( short seconds )
+	{
+		this.seconds = seconds;
+	}
+
+	/**
+	 * Flags.
+	 */
+	public void setFlags( short flags )
+	{
+		this.flags = flags;
+	}
+
+	/**
+	 * Client IP address; only filled in if client is in BOUND,
+	 * RENEW or REBINDING state and can respond to ARP requests.
+	 */
+	public void setActualClientAddress( byte[] actualClientAddress )
+	{
+		this.actualClientAddress = actualClientAddress;
+	}
+
+	/**
+	 * Get 'your' (client) IP address.
+	 */
+	public void setAssignedClientAddress( byte[] assignedClientAddress )
+	{
+		this.assignedClientAddress = assignedClientAddress;
+	}
+
+	/**
+	 * IP address of next server to use in bootstrap;
+	 * returned in DHCPOFFER, DHCPACK by server.
+	 */
+	public void setNextServerAddress( byte[] nextServerAddress )
+	{
+		this.nextServerAddress = nextServerAddress;
+	}
+
+	/**
+	 * Relay agent IP address, used in booting via a relay agent.
+	 */
+	public void setRelayAgentAddress( byte[] relayAgentAddress )
+	{
+		this.relayAgentAddress = relayAgentAddress;
+	}
+
+	/**
+	 * Client hardware address.
+	 */
+	public void setClientHardwareAddress( byte[] clientHardwareAddress )
+	{
+		this.clientHardwareAddress = clientHardwareAddress;
+	}
+
+	/**
+	 * Optional server host name, null terminated string.
+	 */
+	public void setServerHostname( byte[] serverHostname )
+	{
+		this.serverHostname = serverHostname;
+	}
+
+	/**
+	 * Boot file name, null terminated string; "generic" name or null
+	 * in DHCPDISCOVER, fully qualified directory-path name in DHCPOFFER.
+	 */
+	public void setBootFileName( byte[] bootFileName )
+	{
+		this.bootFileName = bootFileName;
+	}
+	
+	/**
+	 * Optional parameters field.  See the options
+	 * documents for a list of defined options.
+	 */
+	public void setOptions( OptionsField options )
+	{
+		this.options = options;
+	}
+}
+

Added: incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/MessageType.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/MessageType.java?view=auto&rev=124628
==============================================================================
--- (empty file)
+++ incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/messages/MessageType.java	Fri Jan  7 21:53:35 2005
@@ -0,0 +1,85 @@
+/*
+ *   Copyright 2005 The Apache Software Foundation
+ *
+ *   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 org.apache.dhcp.messages;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+
+public final class MessageType implements Comparable
+{
+	/**
+	 * Enumeration elements are constructed once upon class loading.
+	 * Order of appearance here determines the order of compareTo.
+	 */
+	public static final MessageType NULL         = new MessageType( 0, "Null" );
+	public static final MessageType DHCPDISCOVER = new MessageType( 1, "DHCP Discover" );
+	public static final MessageType DHCPOFFER    = new MessageType( 2, "DHCP Offer" );
+	public static final MessageType DHCPREQUEST  = new MessageType( 3, "DHCP Request" );
+	public static final MessageType DHCPDECLINE  = new MessageType( 4, "DHCP Decline" );
+	public static final MessageType DHCPACK      = new MessageType( 5, "DHCP Acknowledge" );
+	public static final MessageType DHCPNAK      = new MessageType( 6, "DHCP Not Acknowledge" );
+	public static final MessageType DHCPRELEASE  = new MessageType( 7, "DHCP Release" );
+	public static final MessageType DHCPINFORM   = new MessageType( 8, "DHCP Inform" );
+
+	public String toString()
+    {
+		return name;
+	}
+
+	public int compareTo( Object that )
+    {
+		return ordinal - ( (MessageType) that ).ordinal;
+	}
+
+	public static MessageType getTypeByOrdinal( int type )
+    {
+		for ( int ii = 0; ii < values.length; ii++ )
+			if ( values[ ii ].ordinal == type )
+				return values[ ii ];
+		return NULL;
+	}
+	
+	public int getOrdinal()
+    {
+		return ordinal;
+	}
+
+	/// PRIVATE /////
+	private final String name;
+	private final int    ordinal;
+
+	/**
+	 * Private constructor prevents construction outside of this class.
+	 */
+	private MessageType( int ordinal, String name )
+    {
+        this.ordinal = ordinal;
+		this.name    = name;
+	}
+
+	/**
+	 * These two lines are all that's necessary to export a List of VALUES.
+	 */
+	private static final MessageType[] values = { NULL, DHCPDISCOVER, DHCPOFFER,
+			DHCPREQUEST, DHCPDECLINE, DHCPACK, DHCPNAK, DHCPRELEASE, DHCPINFORM };
+	// VALUES needs to be located here, otherwise illegal forward reference
+	public static final List VALUES = Collections.unmodifiableList( Arrays.asList( values ) );
+}
+