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/22 11:13:31 UTC

svn commit: r126028 - in incubator/directory/dhcp/trunk: core/src/java/org/apache/dhcp/io core/src/java/org/apache/dhcp/options/vendor core/src/java/org/apache/dhcp/service protocol/src/java/org/apache/dhcp/protocol

Author: erodriguez
Date: Sat Jan 22 02:13:29 2005
New Revision: 126028

URL: http://svn.apache.org/viewcvs?view=rev&rev=126028
Log:
Stub DHCP service implementation and encoding troubleshooting.
Modified:
   incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/io/DhcpMessageEncoder.java
   incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/options/vendor/EndOption.java
   incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/service/DhcpServiceImpl.java
   incubator/directory/dhcp/trunk/protocol/src/java/org/apache/dhcp/protocol/DhcpProtocolHandler.java

Modified: incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/io/DhcpMessageEncoder.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/io/DhcpMessageEncoder.java?view=diff&rev=126028&p1=incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/io/DhcpMessageEncoder.java&r1=126027&p2=incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/io/DhcpMessageEncoder.java&r2=126028
==============================================================================
--- incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/io/DhcpMessageEncoder.java	(original)
+++ incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/io/DhcpMessageEncoder.java	Sat Jan 22 02:13:29 2005
@@ -33,7 +33,7 @@
 	 */
 	public void encode( ByteBuffer byteBuffer, DhcpMessage message )
 	{
-		byteBuffer.put( (byte)message.getMessageType().getOrdinal() );
+		byteBuffer.put( message.getOpCode() );
 		byteBuffer.put( message.getHardwareAddressType() );
 		byteBuffer.put( message.getHardwareAddressLength() );
 		byteBuffer.put( message.getHardwareOptions() );

Modified: incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/options/vendor/EndOption.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/options/vendor/EndOption.java?view=diff&rev=126028&p1=incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/options/vendor/EndOption.java&r1=126027&p2=incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/options/vendor/EndOption.java&r2=126028
==============================================================================
--- incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/options/vendor/EndOption.java	(original)
+++ incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/options/vendor/EndOption.java	Sat Jan 22 02:13:29 2005
@@ -34,6 +34,11 @@
 		super( 255, 1 );
 	}
 	
+	public void writeTo( ByteBuffer out )
+	{
+		out.put( (byte)0xFF );
+	}
+	
 	protected void valueToByteBuffer( ByteBuffer out )
 	{
 		/**

Modified: incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/service/DhcpServiceImpl.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/service/DhcpServiceImpl.java?view=diff&rev=126028&p1=incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/service/DhcpServiceImpl.java&r1=126027&p2=incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/service/DhcpServiceImpl.java&r2=126028
==============================================================================
--- incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/service/DhcpServiceImpl.java	(original)
+++ incubator/directory/dhcp/trunk/core/src/java/org/apache/dhcp/service/DhcpServiceImpl.java	Sat Jan 22 02:13:29 2005
@@ -19,7 +19,8 @@
 
 import org.apache.dhcp.DhcpService;
 import org.apache.dhcp.messages.DhcpMessage;
-
+import org.apache.dhcp.messages.DhcpMessageModifier;
+import org.apache.dhcp.messages.MessageType;
 
 /**
  * DHCP Protocol (RFC 2131, RFC 2132)
@@ -28,7 +29,34 @@
 {
 	public DhcpMessage getReplyFor( DhcpMessage request )
     {
-		return request;
+		DhcpMessageModifier modifier = new DhcpMessageModifier();
+		
+		modifier.setMessageType( MessageType.DHCPOFFER );
+		modifier.setOpCode( (byte)0x02 );
+		modifier.setHardwareAddressType( (byte)0x00 );
+		modifier.setHardwareAddressLength( (byte)0xFF );
+		modifier.setHardwareOptions( (byte)0x00 );
+		modifier.setTransactionId( request.getTransactionId() );
+		modifier.setSeconds( (short)0 );
+		modifier.setFlags( (short)0 );
+		
+		byte[] actual = { (byte)0, (byte)0, (byte)0, (byte)0 };
+		modifier.setActualClientAddress( actual );
+		
+		byte[] assigned = { (byte)192, (byte)168, (byte)0, (byte)20 };
+		modifier.setAssignedClientAddress( assigned );
+		
+		byte[] unused = { (byte)0, (byte)0, (byte)0, (byte)0 };
+		modifier.setNextServerAddress( unused );
+		modifier.setRelayAgentAddress( unused );
+		
+		modifier.setClientHardwareAddress( request.getClientHardwareAddress() );
+		modifier.setServerHostname( request.getServerHostname() );
+		modifier.setBootFileName( request.getBootFileName() );
+		
+		DhcpMessage reply = modifier.getDhcpMessage();
+		
+		return reply;
 	}
 }
 

Modified: incubator/directory/dhcp/trunk/protocol/src/java/org/apache/dhcp/protocol/DhcpProtocolHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/dhcp/trunk/protocol/src/java/org/apache/dhcp/protocol/DhcpProtocolHandler.java?view=diff&rev=126028&p1=incubator/directory/dhcp/trunk/protocol/src/java/org/apache/dhcp/protocol/DhcpProtocolHandler.java&r1=126027&p2=incubator/directory/dhcp/trunk/protocol/src/java/org/apache/dhcp/protocol/DhcpProtocolHandler.java&r2=126028
==============================================================================
--- incubator/directory/dhcp/trunk/protocol/src/java/org/apache/dhcp/protocol/DhcpProtocolHandler.java	(original)
+++ incubator/directory/dhcp/trunk/protocol/src/java/org/apache/dhcp/protocol/DhcpProtocolHandler.java	Sat Jan 22 02:13:29 2005
@@ -17,17 +17,22 @@
 
 package org.apache.dhcp.protocol;
 
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+
 import org.apache.dhcp.DhcpService;
 import org.apache.dhcp.messages.DhcpMessage;
 import org.apache.dhcp.service.DhcpServiceImpl;
 import org.apache.mina.common.IdleStatus;
+import org.apache.mina.io.datagram.DatagramConnector;
 import org.apache.mina.protocol.ProtocolHandler;
 import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.io.IoProtocolConnector;
 
 
 public class DhcpProtocolHandler implements ProtocolHandler
 {
-
     public void sessionOpened( ProtocolSession session )
     {
         System.out.println( session.getRemoteAddress() + " OPENED" );
@@ -55,10 +60,26 @@
     {
         System.out.println( session.getRemoteAddress() + " RCVD: " + message );
         
-        DhcpService dhcpService = new DhcpServiceImpl();
-        DhcpMessage reply = dhcpService.getReplyFor( (DhcpMessage)message );
+        DhcpMessage request = (DhcpMessage)message;
         
-        session.write( reply );
+        if ( request.getOpCode() == 1 )
+        {
+            DhcpService dhcpService = new DhcpServiceImpl();
+            DhcpMessage reply = dhcpService.getReplyFor( request );
+            
+            try
+			{
+            	int PORT = 68;
+                IoProtocolConnector connector = new IoProtocolConnector( new DatagramConnector() );
+                InetAddress broadcast = InetAddress.getByName( null );
+                ProtocolSession replySession = connector.connect( new InetSocketAddress( broadcast, PORT ), new DhcpProtocolProvider() );
+                replySession.write( reply );
+			}
+            catch (IOException ioe)
+			{
+            	ioe.printStackTrace();
+			}
+        }
     }
 
     public void messageSent( ProtocolSession session, Object message )