From 99480fcbcb68be6a357f6218668feab697e1a93d Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Tue, 07 Jul 2009 14:55:26 +0000
Subject: [PATCH] Fix for 4096 MonitorMsg is not compatible with replication version

---
 opends/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java |  113 ++++++++++++++++++++++++--------------------------------
 1 files changed, 49 insertions(+), 64 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java b/opends/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java
index 0201146..7127bd5 100644
--- a/opends/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java
+++ b/opends/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java
@@ -223,59 +223,70 @@
    */
   @Override
   public byte[] getBytes()
+  throws UnsupportedEncodingException
   {
+    return getBytes(ProtocolVersion.getCurrentVersion());
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public byte[] getBytes(short protocolVersion)
+     throws UnsupportedEncodingException
+  {
+    if  (protocolVersion == ProtocolVersion.REPLICATION_PROTOCOL_V1)
+      return getBytes_V1();
+
     /* The ReplServerStartMsg is stored in the form :
      * <operation type><baseDn><serverId><serverURL><windowSize><sslEncryption>
      * <degradedStatusThreshold><serverState>
      */
-    try {
-      byte[] byteDn = baseDn.getBytes("UTF-8");
-      byte[] byteServerId = String.valueOf(serverId).getBytes("UTF-8");
-      byte[] byteServerUrl = serverURL.getBytes("UTF-8");
-      byte[] byteServerState = serverState.getBytes();
-      byte[] byteWindowSize = String.valueOf(windowSize).getBytes("UTF-8");
-      byte[] byteSSLEncryption =
-                     String.valueOf(sslEncryption).getBytes("UTF-8");
-      byte[] byteDegradedStatusThreshold =
-        String.valueOf(degradedStatusThreshold).getBytes("UTF-8");
 
-      int length = byteDn.length + 1 + byteServerId.length + 1 +
-                   byteServerUrl.length + 1 + byteWindowSize.length + 1 +
-                   byteSSLEncryption.length + 1 +
-                   byteDegradedStatusThreshold.length + 1 +
-                   byteServerState.length + 1;
+    byte[] byteDn = baseDn.getBytes("UTF-8");
+    byte[] byteServerId = String.valueOf(serverId).getBytes("UTF-8");
+    byte[] byteServerUrl = serverURL.getBytes("UTF-8");
+    byte[] byteServerState = serverState.getBytes();
+    byte[] byteWindowSize = String.valueOf(windowSize).getBytes("UTF-8");
+    byte[] byteSSLEncryption =
+      String.valueOf(sslEncryption).getBytes("UTF-8");
+    byte[] byteDegradedStatusThreshold =
+      String.valueOf(degradedStatusThreshold).getBytes("UTF-8");
 
-      /* encode the header in a byte[] large enough to also contain the mods */
-      byte resultByteArray[] = encodeHeader(MSG_TYPE_REPL_SERVER_START, length);
-      int pos = headerLength;
+    int length = byteDn.length + 1 + byteServerId.length + 1 +
+    byteServerUrl.length + 1 + byteWindowSize.length + 1 +
+    byteSSLEncryption.length + 1 +
+    byteDegradedStatusThreshold.length + 1 +
+    byteServerState.length + 1;
 
-      /* put the baseDN and a terminating 0 */
-      pos = addByteArray(byteDn, resultByteArray, pos);
+    /* encode the header in a byte[] large enough to also contain the mods */
+    byte resultByteArray[] =
+      encodeHeader(MSG_TYPE_REPL_SERVER_START, length, protocolVersion);
 
-      /* put the ServerId */
-      pos = addByteArray(byteServerId, resultByteArray, pos);
+    int pos = headerLength;
 
-      /* put the ServerURL */
-      pos = addByteArray(byteServerUrl, resultByteArray, pos);
+    /* put the baseDN and a terminating 0 */
+    pos = addByteArray(byteDn, resultByteArray, pos);
 
-      /* put the window size */
-      pos = addByteArray(byteWindowSize, resultByteArray, pos);
+    /* put the ServerId */
+    pos = addByteArray(byteServerId, resultByteArray, pos);
 
-      /* put the SSL Encryption setting */
-      pos = addByteArray(byteSSLEncryption, resultByteArray, pos);
+    /* put the ServerURL */
+    pos = addByteArray(byteServerUrl, resultByteArray, pos);
 
-      /* put the degraded status threshold */
-      pos = addByteArray(byteDegradedStatusThreshold, resultByteArray, pos);
+    /* put the window size */
+    pos = addByteArray(byteWindowSize, resultByteArray, pos);
 
-      /* put the ServerState */
-      pos = addByteArray(byteServerState, resultByteArray, pos);
+    /* put the SSL Encryption setting */
+    pos = addByteArray(byteSSLEncryption, resultByteArray, pos);
 
-      return resultByteArray;
-    }
-    catch (UnsupportedEncodingException e)
-    {
-      return null;
-    }
+    /* put the degraded status threshold */
+    pos = addByteArray(byteDegradedStatusThreshold, resultByteArray, pos);
+
+    /* put the ServerState */
+    pos = addByteArray(byteServerState, resultByteArray, pos);
+
+    return resultByteArray;
   }
 
   /**
@@ -338,32 +349,6 @@
   }
 
   /**
-   * {@inheritDoc}
-   */
-  @Override
-  public byte[] getBytes(short reqProtocolVersion)
-    throws UnsupportedEncodingException
-  {
-    // Of course, always support current protocol version
-    if (reqProtocolVersion == ProtocolVersion.getCurrentVersion())
-    {
-      return getBytes();
-    }
-
-    // Supported older protocol versions
-    switch (reqProtocolVersion)
-    {
-      case ProtocolVersion.REPLICATION_PROTOCOL_V1:
-        return getBytes_V1();
-      default:
-        // Unsupported requested version
-        throw new UnsupportedEncodingException(getClass().getSimpleName() +
-          " PDU does not support requested protocol version serialization: " +
-          reqProtocolVersion);
-    }
-  }
-
-  /**
    * Get the byte array representation of this Message. This uses the version
    * 1 of the replication protocol (used for compatibility purpose).
    *

--
Gitblit v1.10.0