X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fimpl%2FNetconfServerSessionListener.java;h=f8d9a45c201ed993ca081e27ecb995e743974d4a;hp=686adcad8550a3401809235cc0bda6e660782738;hb=f21eb777e0e23586aaa3880028b556a48dfd4823;hpb=b0e337733be06807c12d5bbd3b5a29a94f44fdba diff --git a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionListener.java b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionListener.java index 686adcad85..f8d9a45c20 100644 --- a/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionListener.java +++ b/opendaylight/netconf/netconf-impl/src/main/java/org/opendaylight/controller/netconf/impl/NetconfServerSessionListener.java @@ -12,14 +12,14 @@ import static com.google.common.base.Preconditions.checkState; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; import org.opendaylight.controller.netconf.api.NetconfMessage; -import org.opendaylight.controller.netconf.api.NetconfSession; +import org.opendaylight.controller.netconf.api.NetconfOperationRouter; +import org.opendaylight.controller.netconf.api.NetconfSessionListener; import org.opendaylight.controller.netconf.api.NetconfTerminationReason; -import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationRouterImpl; +import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService; import org.opendaylight.controller.netconf.util.messages.SendErrorExceptionUtil; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlUtil; -import org.opendaylight.protocol.framework.SessionListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -28,26 +28,27 @@ import org.w3c.dom.Node; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; -public class NetconfServerSessionListener implements - SessionListener { - - static final Logger logger = LoggerFactory.getLogger(NetconfServerSessionListener.class); +public class NetconfServerSessionListener implements NetconfSessionListener { public static final String MESSAGE_ID = "message-id"; - private NetconfOperationRouterImpl operationRouter; + static final Logger logger = LoggerFactory.getLogger(NetconfServerSessionListener.class); + private final SessionMonitoringService monitoringService; + private final NetconfOperationRouter operationRouter; - public NetconfServerSessionListener(NetconfOperationRouterImpl operationRouter) { + public NetconfServerSessionListener(NetconfOperationRouter operationRouter, SessionMonitoringService monitoringService) { this.operationRouter = operationRouter; + this.monitoringService = monitoringService; } @Override public void onSessionUp(NetconfServerSession netconfNetconfServerSession) { - + monitoringService.onSessionUp(netconfNetconfServerSession); } @Override public void onSessionDown(NetconfServerSession netconfNetconfServerSession, Exception e) { logger.debug("Session {} down, reason: {}", netconfNetconfServerSession, e.getMessage()); + monitoringService.onSessionDown(netconfNetconfServerSession); operationRouter.close(); } @@ -57,6 +58,7 @@ public class NetconfServerSessionListener implements NetconfTerminationReason netconfTerminationReason) { logger.debug("Session {} terminated, reason: {}", netconfNetconfServerSession, netconfTerminationReason.getErrorMessage()); + monitoringService.onSessionDown(netconfNetconfServerSession); operationRouter.close(); } @@ -70,7 +72,7 @@ public class NetconfServerSessionListener implements // schemas final NetconfMessage message = processDocument(netconfMessage, session); - logger.debug("Respondign with message {}", XmlUtil.toString(message.getDocument())); + logger.debug("Responding with message {}", XmlUtil.toString(message.getDocument())); session.sendMessage(message); if (isCloseSession(netconfMessage)) { @@ -78,10 +80,13 @@ public class NetconfServerSessionListener implements } } catch (final RuntimeException e) { - logger.error("Unexpected exception", e); // TODO: should send generic error or close session? + logger.error("Unexpected exception", e); + session.onIncommingRpcFail(); throw new RuntimeException("Unable to process incoming message " + netconfMessage, e); } catch (NetconfDocumentedException e) { + session.onOutgoingRpcError(); + session.onIncommingRpcFail(); SendErrorExceptionUtil.sendErrorMessage(session, e, netconfMessage); } } @@ -93,7 +98,7 @@ public class NetconfServerSessionListener implements } private NetconfMessage processDocument(final NetconfMessage netconfMessage, - NetconfSession session) throws NetconfDocumentedException { + NetconfServerSession session) throws NetconfDocumentedException { final Document incommingDocument = netconfMessage.getDocument(); final Node rootNode = incommingDocument.getDocumentElement(); @@ -104,6 +109,9 @@ public class NetconfServerSessionListener implements final Document responseDocument = XmlUtil.newDocument(); Document rpcReply = operationRouter.onNetconfMessage( incommingDocument, session); + + session.onIncommingRpcSuccess(); + responseDocument.appendChild(responseDocument.importNode(rpcReply.getDocumentElement(), true)); return new NetconfMessage(responseDocument); } else {