| /* |
| * Copyright 2016 Open Networking Laboratory |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.onosproject.ospf.controller.impl; |
| |
| import org.jboss.netty.buffer.ChannelBuffer; |
| import org.jboss.netty.channel.Channel; |
| import org.jboss.netty.channel.ChannelHandlerContext; |
| import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; |
| import org.onosproject.ospf.controller.OspfInterface; |
| import org.onosproject.ospf.controller.area.OspfInterfaceImpl; |
| import org.onosproject.ospf.protocol.ospfpacket.OspfMessage; |
| import org.onosproject.ospf.protocol.ospfpacket.OspfMessageWriter; |
| import org.onosproject.ospf.protocol.util.OspfInterfaceState; |
| import org.onosproject.ospf.protocol.util.OspfUtil; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| /** |
| * Encodes an OSPF message for output into a ChannelBuffer, for use in a netty pipeline. |
| */ |
| public class OspfMessageEncoder extends OneToOneEncoder { |
| |
| private static final Logger log = LoggerFactory.getLogger(OspfMessageEncoder.class); |
| private OspfInterface ospfInterface; |
| |
| |
| /** |
| * Constructor. |
| */ |
| OspfMessageEncoder() { |
| } |
| |
| /** |
| * Constructor to initialize instance. |
| */ |
| OspfMessageEncoder(OspfInterface ospfInterface) { |
| this.ospfInterface = ospfInterface; |
| } |
| |
| @Override |
| protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception { |
| |
| log.debug("Encoding ospfMessage...!!!"); |
| if (!(msg instanceof OspfMessage)) { |
| log.debug("Invalid msg."); |
| return msg; |
| } |
| |
| OspfMessage ospfMessage = (OspfMessage) msg; |
| OspfMessageWriter messageWriter = new OspfMessageWriter(); |
| if (((OspfInterfaceImpl) ospfInterface).state().equals(OspfInterfaceState.POINT2POINT)) { |
| ospfMessage.setDestinationIp(OspfUtil.ALL_SPF_ROUTERS); |
| } |
| ChannelBuffer buf = messageWriter.writeToBuffer(ospfMessage, |
| ((OspfInterfaceImpl) ospfInterface).state().value(), |
| ospfInterface.interfaceType()); |
| log.info("OspfMessageEncoder sending packet of lenght {}", buf.readableBytes()); |
| log.debug("OspfMessageEncoder sending packet of lenght {}", buf.readableBytes()); |
| log.debug("Sending {} Message to {}, Length :: {}, <=> {}", ospfMessage.ospfMessageType(), |
| ospfMessage.destinationIp(), buf.readableBytes(), buf.array()); |
| |
| return buf; |
| } |
| } |