boolean complete(final OfHeader response) { Preconditions.checkState(!completed, "Attempted to complete a completed message with response %s", response); // Multipart requests are special, we have to look at them to see // if there is something outstanding and adjust ourselves accordingly final boolean reallyComplete; if (response instanceof MultipartReplyMessage) { reallyComplete = !((MultipartReplyMessage) response).getFlags().isOFPMPFREQMORE(); LOG.debug("Multipart reply {}", response); } else { reallyComplete = true; } completed = reallyComplete; if (callback != null) { callback.onSuccess(response); if (reallyComplete) { // We will not need the callback anymore, make sure it can be GC'd callback = null; } } LOG.debug("Entry {} completed {} with response {}", this, completed, response); return reallyComplete; }
@Override public List<DataObject> translate(SwitchConnectionDistinguisher cookie, SessionContext sc, OfHeader msg) { if (msg instanceof MultipartReply && ((MultipartReply) msg).getType() == MultipartType.OFPMPTABLEFEATURES) { LOG.debug("MultipartReply Being translated to TableUpdated "); MultipartReplyMessage mpReply = (MultipartReplyMessage) msg; List<DataObject> listDataObject = new CopyOnWriteArrayList<>(); TableUpdatedBuilder message = new TableUpdatedBuilder(); message.setNode((new NodeRef(InventoryDataServiceUtil.identifierFromDatapathId(sc.getFeatures() .getDatapathId())))); message.setMoreReplies(mpReply.getFlags().isOFPMPFREQMORE()); message.setTransactionId(new TransactionId(BigInteger.valueOf(mpReply.getXid()))); MultipartReplyTableFeaturesCase caseBody = (MultipartReplyTableFeaturesCase) mpReply.getMultipartReplyBody(); MultipartReplyTableFeatures body = caseBody.getMultipartReplyTableFeatures(); final VersionConvertorData data = new VersionConvertorData(sc.getPrimaryConductor().getVersion()); final Optional<List<TableFeatures>> tableFeaturesList = convertorExecutor.convert(body, data); message.setTableFeatures(tableFeaturesList.orElse(Collections.emptyList())); listDataObject.add( message.build()) ; return listDataObject ; } return Collections.emptyList(); }
FlowsStatisticsUpdateBuilder message = new FlowsStatisticsUpdateBuilder(); message.setId(node); message.setMoreReplies(mpReply.getFlags().isOFPMPFREQMORE()); message.setTransactionId(generateTransactionId(mpReply.getXid())); MultipartReplyFlowCase caseBody = (MultipartReplyFlowCase)mpReply.getMultipartReplyBody(); AggregateFlowStatisticsUpdateBuilder message = new AggregateFlowStatisticsUpdateBuilder(); message.setId(node); message.setMoreReplies(mpReply.getFlags().isOFPMPFREQMORE()); message.setTransactionId(generateTransactionId(mpReply.getXid())); message.setMoreReplies(mpReply.getFlags().isOFPMPFREQMORE()); message.setTransactionId(generateTransactionId(mpReply.getXid())); GroupStatisticsUpdatedBuilder message = new GroupStatisticsUpdatedBuilder(); message.setId(node); message.setMoreReplies(mpReply.getFlags().isOFPMPFREQMORE()); message.setTransactionId(generateTransactionId(mpReply.getXid())); MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase)mpReply.getMultipartReplyBody(); message.setMoreReplies(mpReply.getFlags().isOFPMPFREQMORE()); message.setTransactionId(generateTransactionId(mpReply.getXid())); MultipartReplyGroupDescCase caseBody = (MultipartReplyGroupDescCase)mpReply.getMultipartReplyBody(); GroupFeaturesUpdatedBuilder message = new GroupFeaturesUpdatedBuilder(); message.setId(node); message.setMoreReplies(mpReply.getFlags().isOFPMPFREQMORE()); message.setTransactionId(generateTransactionId(mpReply.getXid())); MultipartReplyGroupFeaturesCase caseBody = (MultipartReplyGroupFeaturesCase)mpReply.getMultipartReplyBody();
ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeShort(message.getType().getIntValue()); writeFlags(message.getFlags(), outBuffer); switch (message.getType()) { case OFPMPDESC:
ByteBufUtils.writeOFHeader(MESSAGE_TYPE, message, outBuffer, EncodeConstants.EMPTY_LENGTH); outBuffer.writeShort(message.getType().getIntValue()); writeFlags(message.getFlags(), outBuffer); outBuffer.writeZero(PADDING); switch (message.getType()) {