Committed by
Gerrit Code Review
ONOS-4121 Restricting hello searching in replies and fixing closed connection bug
Change-Id: I1459ae1e0f4489e74c3bb52f80622690bbdba533
Showing
2 changed files
with
25 additions
and
20 deletions
| ... | @@ -53,7 +53,7 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -53,7 +53,7 @@ public class NetconfSessionImpl implements NetconfSession { |
| 53 | private static final int CONNECTION_TIMEOUT = 0; | 53 | private static final int CONNECTION_TIMEOUT = 0; |
| 54 | private static final String ENDPATTERN = "]]>]]>"; | 54 | private static final String ENDPATTERN = "]]>]]>"; |
| 55 | private static final String MESSAGE_ID_STRING = "message-id"; | 55 | private static final String MESSAGE_ID_STRING = "message-id"; |
| 56 | - private static final String HELLO = "hello"; | 56 | + private static final String HELLO = "<hello"; |
| 57 | private static final String NEW_LINE = "\n"; | 57 | private static final String NEW_LINE = "\n"; |
| 58 | private static final int FUTURE_REPLY_TIMEOUT = 5000; | 58 | private static final int FUTURE_REPLY_TIMEOUT = 5000; |
| 59 | private static final String ERROR = "ERROR "; | 59 | private static final String ERROR = "ERROR "; |
| ... | @@ -131,7 +131,7 @@ public class NetconfSessionImpl implements NetconfSession { | ... | @@ -131,7 +131,7 @@ public class NetconfSessionImpl implements NetconfSession { |
| 131 | this.addDeviceOutputListener(new NetconfDeviceOutputEventListenerImpl(deviceInfo)); | 131 | this.addDeviceOutputListener(new NetconfDeviceOutputEventListenerImpl(deviceInfo)); |
| 132 | sendHello(); | 132 | sendHello(); |
| 133 | } catch (IOException e) { | 133 | } catch (IOException e) { |
| 134 | - log.error("Failed to create ch.ethz.ssh2.Session session:", e); | 134 | + log.error("Failed to create ch.ethz.ssh2.Session session." + e.getMessage()); |
| 135 | throw new NetconfException("Failed to create ch.ethz.ssh2.Session session with device" + | 135 | throw new NetconfException("Failed to create ch.ethz.ssh2.Session session with device" + |
| 136 | deviceInfo, e); | 136 | deviceInfo, e); |
| 137 | } | 137 | } | ... | ... |
| ... | @@ -44,7 +44,7 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -44,7 +44,7 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
| 44 | 44 | ||
| 45 | private static final Logger log = LoggerFactory | 45 | private static final Logger log = LoggerFactory |
| 46 | .getLogger(NetconfStreamThread.class); | 46 | .getLogger(NetconfStreamThread.class); |
| 47 | - private static final String HELLO = "hello"; | 47 | + private static final String HELLO = "<hello"; |
| 48 | private static final String END_PATTERN = "]]>]]>"; | 48 | private static final String END_PATTERN = "]]>]]>"; |
| 49 | private static final String RPC_REPLY = "rpc-reply"; | 49 | private static final String RPC_REPLY = "rpc-reply"; |
| 50 | private static final String RPC_ERROR = "rpc-error"; | 50 | private static final String RPC_ERROR = "rpc-error"; |
| ... | @@ -87,23 +87,23 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -87,23 +87,23 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
| 87 | @Override | 87 | @Override |
| 88 | NetconfMessageState evaluateChar(char c) { | 88 | NetconfMessageState evaluateChar(char c) { |
| 89 | if (c == ']') { | 89 | if (c == ']') { |
| 90 | - return FIRST_BRAKET; | 90 | + return FIRST_BRACKET; |
| 91 | } else { | 91 | } else { |
| 92 | return this; | 92 | return this; |
| 93 | } | 93 | } |
| 94 | } | 94 | } |
| 95 | }, | 95 | }, |
| 96 | - FIRST_BRAKET { | 96 | + FIRST_BRACKET { |
| 97 | @Override | 97 | @Override |
| 98 | NetconfMessageState evaluateChar(char c) { | 98 | NetconfMessageState evaluateChar(char c) { |
| 99 | if (c == ']') { | 99 | if (c == ']') { |
| 100 | - return SECOND_BRAKET; | 100 | + return SECOND_BRACKET; |
| 101 | } else { | 101 | } else { |
| 102 | return NO_MATCHING_PATTERN; | 102 | return NO_MATCHING_PATTERN; |
| 103 | } | 103 | } |
| 104 | } | 104 | } |
| 105 | }, | 105 | }, |
| 106 | - SECOND_BRAKET { | 106 | + SECOND_BRACKET { |
| 107 | @Override | 107 | @Override |
| 108 | NetconfMessageState evaluateChar(char c) { | 108 | NetconfMessageState evaluateChar(char c) { |
| 109 | if (c == '>') { | 109 | if (c == '>') { |
| ... | @@ -117,13 +117,13 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -117,13 +117,13 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
| 117 | @Override | 117 | @Override |
| 118 | NetconfMessageState evaluateChar(char c) { | 118 | NetconfMessageState evaluateChar(char c) { |
| 119 | if (c == ']') { | 119 | if (c == ']') { |
| 120 | - return THIRD_BRAKET; | 120 | + return THIRD_BRACKET; |
| 121 | } else { | 121 | } else { |
| 122 | return NO_MATCHING_PATTERN; | 122 | return NO_MATCHING_PATTERN; |
| 123 | } | 123 | } |
| 124 | } | 124 | } |
| 125 | }, | 125 | }, |
| 126 | - THIRD_BRAKET { | 126 | + THIRD_BRACKET { |
| 127 | @Override | 127 | @Override |
| 128 | NetconfMessageState evaluateChar(char c) { | 128 | NetconfMessageState evaluateChar(char c) { |
| 129 | if (c == ']') { | 129 | if (c == ']') { |
| ... | @@ -163,6 +163,12 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -163,6 +163,12 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
| 163 | if (cInt == -1) { | 163 | if (cInt == -1) { |
| 164 | log.debug("Netconf device {} sent error char in session," + | 164 | log.debug("Netconf device {} sent error char in session," + |
| 165 | " will need to be reopend", netconfDeviceInfo); | 165 | " will need to be reopend", netconfDeviceInfo); |
| 166 | + NetconfDeviceOutputEvent event = new NetconfDeviceOutputEvent( | ||
| 167 | + NetconfDeviceOutputEvent.Type.DEVICE_UNREGISTERED, | ||
| 168 | + null, null, Optional.of(-1), netconfDeviceInfo); | ||
| 169 | + netconfDeviceEventListeners.forEach( | ||
| 170 | + listener -> listener.event(event)); | ||
| 171 | + socketClosed = true; | ||
| 166 | } | 172 | } |
| 167 | char c = (char) cInt; | 173 | char c = (char) cInt; |
| 168 | state = state.evaluateChar(c); | 174 | state = state.evaluateChar(c); |
| ... | @@ -210,19 +216,18 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -210,19 +216,18 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
| 210 | } | 216 | } |
| 211 | 217 | ||
| 212 | private static Optional<Integer> getMsgId(String reply) { | 218 | private static Optional<Integer> getMsgId(String reply) { |
| 213 | - if (reply.contains(HELLO)) { | 219 | + if (reply.contains(MESSAGE_ID)) { |
| 220 | + String[] outer = reply.split(MESSAGE_ID); | ||
| 221 | + Preconditions.checkArgument(outer.length != 1, | ||
| 222 | + "Error in retrieving the message id"); | ||
| 223 | + String messageID = outer[1].substring(0, 3).replace("\"", ""); | ||
| 224 | + Preconditions.checkNotNull(Integer.parseInt(messageID), | ||
| 225 | + "Error in retrieving the message id"); | ||
| 226 | + return Optional.of(Integer.parseInt(messageID)); | ||
| 227 | + } else if (reply.contains(HELLO)) { | ||
| 214 | return Optional.of(0); | 228 | return Optional.of(0); |
| 215 | } | 229 | } |
| 216 | - if (reply.contains(RPC_ERROR) && !reply.contains(MESSAGE_ID)) { | 230 | + return Optional.empty(); |
| 217 | - return Optional.empty(); | ||
| 218 | - } | ||
| 219 | - String[] outer = reply.split(MESSAGE_ID); | ||
| 220 | - Preconditions.checkArgument(outer.length != 1, | ||
| 221 | - "Error in retrieving the message id"); | ||
| 222 | - String messageID = outer[1].substring(0, 3).replace("\"", ""); | ||
| 223 | - Preconditions.checkNotNull(Integer.parseInt(messageID), | ||
| 224 | - "Error in retrieving the message id"); | ||
| 225 | - return Optional.of(Integer.parseInt(messageID)); | ||
| 226 | } | 231 | } |
| 227 | 232 | ||
| 228 | public void addDeviceEventListener(NetconfDeviceOutputEventListener listener) { | 233 | public void addDeviceEventListener(NetconfDeviceOutputEventListener listener) { | ... | ... |
-
Please register or login to post a comment