/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2006-2010 Sun Microsystems, Inc. * Portions Copyright 2013-2016 ForgeRock AS. */ package org.opends.server.replication.protocol; import java.util.zip.DataFormatException; import org.forgerock.opendj.ldap.DN; /** * This message is part of the replication protocol. * This message is sent by a server to another server in order to * request this other server to do an export to the server sender * of this message. */ public class InitializeRequestMsg extends RoutableMsg { private final DN baseDN; private int initWindow; /** * Creates a InitializeRequestMsg message. * * @param baseDN the base DN of the replication domain. * @param destination destination of this message * @param serverID serverID of the server that will send this message * @param initWindow initialization window for flow control */ public InitializeRequestMsg(DN baseDN, int serverID, int destination, int initWindow) { super(serverID, destination); this.baseDN = baseDN; this.initWindow = initWindow; // V4 } /** * Creates a new InitializeRequestMsg by decoding the provided byte array. * @param in A byte array containing the encoded information for the message * @param version The protocol version to use to decode the msg * @throws DataFormatException If the in does not contain a properly * encoded InitializeMessage. */ InitializeRequestMsg(byte[] in, short version) throws DataFormatException { final ByteArrayScanner scanner = new ByteArrayScanner(in); final byte msgType = scanner.nextByte(); if (msgType != MSG_TYPE_INITIALIZE_REQUEST) { throw new DataFormatException( "input is not a valid InitializeRequestMessage"); } baseDN = scanner.nextDN(); senderID = scanner.nextIntUTF8(); destination = scanner.nextIntUTF8(); if (version >= ProtocolVersion.REPLICATION_PROTOCOL_V4) { initWindow = scanner.nextIntUTF8(); } } /** * Get the base DN from this InitializeRequestMsg. * * @return the base DN from this InitializeRequestMsg. */ public DN getBaseDN() { return baseDN; } // ============ // Msg encoding // ============ /** {@inheritDoc} */ @Override public byte[] getBytes(short version) { final ByteArrayBuilder builder = new ByteArrayBuilder(); builder.appendByte(MSG_TYPE_INITIALIZE_REQUEST); builder.appendDN(baseDN); builder.appendIntUTF8(senderID); builder.appendIntUTF8(destination); if (version >= ProtocolVersion.REPLICATION_PROTOCOL_V4) { builder.appendIntUTF8(initWindow); } return builder.toByteArray(); } /** * Get a string representation of this object. * @return A string representation of this object. */ @Override public String toString() { return "InitializeRequestMessage: baseDN=" + baseDN + " senderId=" + senderID + " destination=" + destination + " initWindow=" + initWindow; } /** * Return the initWindow value. * @return the initWindow. */ public int getInitWindow() { return this.initWindow; } /** * Set the initWindow value. * @param initWindow The initialization window. */ public void setInitWindow(int initWindow) { this.initWindow = initWindow; } }