import java.util.ArrayList;
import java.util.List;
import org.opendaylight.netconf.api.NamespaceURN;
-import org.opendaylight.netconf.api.messages.NetconfMessage;
-import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
+import org.opendaylight.netconf.api.messages.RpcMessage;
import org.opendaylight.netconf.api.xml.XmlUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
- * Start-exi netconf message.
+ * Start-exi netconf message provider.
*/
-public final class NetconfStartExiMessage extends NetconfMessage {
+public final class NetconfStartExiMessageProvider {
@VisibleForTesting
public static final String START_EXI = "start-exi";
-
- private NetconfStartExiMessage(final Document doc) {
- super(doc);
+ private NetconfStartExiMessageProvider() {
+ // hidden on purpose
}
- public static NetconfStartExiMessage create(final EXIParameters exiOptions, final String messageId) {
+ public static RpcMessage create(final EXIParameters exiOptions, final String messageId) {
final Document doc = XmlUtil.newDocument();
- final Element rpcElement = doc.createElementNS(NamespaceURN.BASE, XmlNetconfConstants.RPC_KEY);
- rpcElement.setAttributeNS(NamespaceURN.BASE, XmlNetconfConstants.MESSAGE_ID, messageId);
// TODO draft http://tools.ietf.org/html/draft-varga-netconf-exi-capability-02#section-3.5.1 has no namespace
// for start-exi element in xml
addFidelity(exiOptions, doc, startExiElement);
addSchema(exiOptions, doc, startExiElement);
- rpcElement.appendChild(startExiElement);
-
- doc.appendChild(rpcElement);
- return new NetconfStartExiMessage(doc);
+ doc.appendChild(startExiElement);
+ return RpcMessage.ofOperation(messageId, doc);
}
private static void addAlignment(final EXIParameters exiOptions, final Document doc,
import org.opendaylight.netconf.api.messages.HelloMessage;
import org.opendaylight.netconf.api.messages.NetconfMessage;
import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
-import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessage;
+import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessageProvider;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.SessionIdType;
import org.opendaylight.yangtools.yang.common.Uint32;
TestingNetconfSession testingNetconfSession = new TestingNetconfSession(listener, channel, SESSION_ID);
testingNetconfSession = spy(testingNetconfSession);
- testingNetconfSession.startExiCommunication(NetconfStartExiMessage.create(EXIParameters.empty(), "4"));
+ testingNetconfSession.startExiCommunication(NetconfStartExiMessageProvider.create(EXIParameters.empty(), "4"));
verify(testingNetconfSession).addExiHandlers(any(ByteToMessageDecoder.class), any(MessageToByteEncoder.class));
}
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.opendaylight.netconf.api.messages.RpcMessage;
import org.opendaylight.netconf.shaded.exificient.core.CodingMode;
import org.opendaylight.netconf.shaded.exificient.core.FidelityOptions;
@Parameterized.Parameters
public static Iterable<Object[]> data() throws Exception {
- final String noChangeXml = "<rpc xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "
- + "ns0:message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+ final String noChangeXml = "<rpc message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+ "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n"
+ "<alignment>bit-packed</alignment>\n"
+ "</start-exi>\n"
+ "</rpc>";
- final String fullOptionsXml = "<rpc xmlns:ns0=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "
- + "ns0:message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+ final String fullOptionsXml = "<rpc message-id=\"id\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n"
+ "<start-exi xmlns=\"urn:ietf:params:xml:ns:netconf:exi:1.0\">\n"
+ "<alignment>byte-aligned</alignment>\n"
+ "<fidelity>\n"
@Test
public void testCreate() throws Exception {
- final NetconfStartExiMessage startExiMessage = NetconfStartExiMessage.create(exiOptions, "id");
+ final RpcMessage startExiMessage = NetconfStartExiMessageProvider.create(exiOptions, "id");
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreAttributeOrder(true);
import org.opendaylight.netconf.api.NetconfDocumentedException;
import org.opendaylight.netconf.api.messages.HelloMessage;
import org.opendaylight.netconf.api.messages.NetconfMessage;
+import org.opendaylight.netconf.api.messages.RpcMessage;
import org.opendaylight.netconf.api.xml.XmlNetconfConstants;
import org.opendaylight.netconf.api.xml.XmlUtil;
import org.opendaylight.netconf.nettyutil.AbstractChannelInitializer;
import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
-import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessage;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.SessionIdType;
import org.opendaylight.yangtools.yang.common.Uint32;
import org.slf4j.Logger;
private static final Interner<Set<String>> INTERNER = Interners.newWeakInterner();
- private final NetconfStartExiMessage startExi;
+ private final RpcMessage startExi;
- NetconfClientSessionNegotiator(final HelloMessage hello, final NetconfStartExiMessage startExi,
+ NetconfClientSessionNegotiator(final HelloMessage hello, final RpcMessage startExi,
final Promise<NetconfClientSession> promise, final Channel channel, final Timer timer,
final NetconfClientSessionListener sessionListener, final long connectionTimeoutMillis,
final @NonNegative int maximumIncomingChunkSize) {
*
* @param startExiMessage Exi message for initilization of exi communication.
*/
- void tryToInitiateExi(final NetconfClientSession session, final NetconfStartExiMessage startExiMessage) {
+ void tryToInitiateExi(final NetconfClientSession session, final RpcMessage startExiMessage) {
channel.pipeline().addAfter(AbstractChannelInitializer.NETCONF_MESSAGE_DECODER,
ExiConfirmationInboundHandler.EXI_CONFIRMED_HANDLER,
new ExiConfirmationInboundHandler(session, startExiMessage));
private static final String EXI_CONFIRMED_HANDLER = "exiConfirmedHandler";
private final NetconfClientSession session;
- private final NetconfStartExiMessage startExiMessage;
+ private final RpcMessage startExiMessage;
ExiConfirmationInboundHandler(final NetconfClientSession session,
- final NetconfStartExiMessage startExiMessage) {
+ final RpcMessage startExiMessage) {
this.session = session;
this.startExiMessage = startExiMessage;
}
import org.opendaylight.netconf.nettyutil.AbstractNetconfSessionNegotiator;
import org.opendaylight.netconf.nettyutil.NetconfSessionNegotiatorFactory;
import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
-import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessage;
+import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessageProvider;
import org.opendaylight.netconf.shaded.exificient.core.CodingMode;
import org.opendaylight.netconf.shaded.exificient.core.FidelityOptions;
import org.opendaylight.netconf.shaded.exificient.core.exceptions.UnsupportedOption;
final Channel channel, final Promise<NetconfClientSession> promise) {
return new NetconfClientSessionNegotiator(
HelloMessage.createClientHello(clientCapabilities, additionalHeader),
- NetconfStartExiMessage.create(options, START_EXI_MESSAGE_ID), promise, channel, timer,
+ NetconfStartExiMessageProvider.create(options, START_EXI_MESSAGE_ID), promise, channel, timer,
sessionListenerFactory.getSessionListener(), connectionTimeoutMillis, maximumIncomingChunkSize);
}
}
import org.junit.Test;
import org.opendaylight.netconf.api.messages.HelloMessage;
import org.opendaylight.netconf.api.messages.NetconfMessage;
+import org.opendaylight.netconf.api.messages.RpcMessage;
import org.opendaylight.netconf.api.xml.XmlUtil;
import org.opendaylight.netconf.nettyutil.handler.ChunkedFramingMechanismEncoder;
import org.opendaylight.netconf.nettyutil.handler.NetconfEXIToMessageDecoder;
import org.opendaylight.netconf.nettyutil.handler.NetconfXMLToHelloMessageDecoder;
import org.opendaylight.netconf.nettyutil.handler.NetconfXMLToMessageDecoder;
import org.opendaylight.netconf.nettyutil.handler.exi.EXIParameters;
-import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessage;
+import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessageProvider;
import org.opendaylight.netconf.test.util.XmlFileLoader;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.SessionIdType;
import org.opendaylight.yangtools.yang.common.Uint32;
private NetconfClientSessionNegotiator createNetconfClientSessionNegotiator(
final Promise<NetconfClientSession> promise,
- final NetconfStartExiMessage startExi) {
+ final RpcMessage startExi) {
ChannelProgressivePromise progressivePromise = mock(ChannelProgressivePromise.class);
doReturn(progressivePromise).when(promise).setFailure(any(Throwable.class));
@Test
public void testNetconfClientSessionNegotiatorWithEXI() throws Exception {
Promise<NetconfClientSession> promise = mock(Promise.class);
- NetconfStartExiMessage exiMessage = NetconfStartExiMessage.create(EXIParameters.empty(), "msg-id");
+ RpcMessage exiMessage = NetconfStartExiMessageProvider.create(EXIParameters.empty(), "msg-id");
doReturn(promise).when(promise).setSuccess(any());
NetconfClientSessionNegotiator negotiator = createNetconfClientSessionNegotiator(promise, exiMessage);
import org.opendaylight.netconf.client.TestingNetconfClient;
import org.opendaylight.netconf.client.conf.NetconfClientConfiguration;
import org.opendaylight.netconf.client.conf.NetconfClientConfigurationBuilder;
-import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessage;
+import org.opendaylight.netconf.nettyutil.handler.exi.NetconfStartExiMessageProvider;
import org.opendaylight.netconf.server.api.SessionIdProvider;
import org.opendaylight.netconf.server.api.monitoring.Capability;
import org.opendaylight.netconf.server.api.monitoring.CapabilityListener;
@Override
public HandlingPriority canHandle(final Document message) {
- return XmlUtil.toString(message).contains(NetconfStartExiMessage.START_EXI)
+ return XmlUtil.toString(message).contains(NetconfStartExiMessageProvider.START_EXI)
? HandlingPriority.CANNOT_HANDLE :
HandlingPriority.HANDLE_WITH_MAX_PRIORITY;
}