package vnet.sms.gateway.transports.serialization.outgoing; import vnet.sms.common.messages.Acknowledgement; import vnet.sms.common.messages.GsmPdu; import vnet.sms.common.messages.LoginResponse; import vnet.sms.common.messages.PingRequest; import vnet.sms.common.messages.PingResponse; import vnet.sms.common.wme.acknowledge.SendLoginRequestAckEvent; import vnet.sms.common.wme.acknowledge.SendLoginRequestNackEvent; import vnet.sms.common.wme.acknowledge.SendSmsAckEvent; import vnet.sms.common.wme.acknowledge.SendSmsNackEvent; import vnet.sms.common.wme.send.SendPingRequestEvent; import vnet.sms.common.wme.send.SendSmsEvent; import vnet.sms.gateway.nettysupport.login.incoming.NonLoginMessageReceivedOnUnauthenticatedChannelEvent; import vnet.sms.gateway.nettysupport.transport.outgoing.TransportProtocolAdaptingDownstreamChannelHandler; import vnet.sms.gateway.transports.serialization.ReferenceableMessageContainer; public class SerializationTransportProtocolAdaptingDownstreamChannelHandler extends TransportProtocolAdaptingDownstreamChannelHandler<Integer, ReferenceableMessageContainer> { @Override protected ReferenceableMessageContainer convertSendPingRequestEventToPdu( final SendPingRequestEvent<Integer> e) { return ReferenceableMessageContainer.wrap(e.getMessageReference(), e.getMessage()); } @Override protected ReferenceableMessageContainer convertLoginRequestAcceptedEventToPdu( final SendLoginRequestAckEvent<Integer> e) { return ReferenceableMessageContainer.wrap( e.getAcknowledgedMessageReference(), LoginResponse.accept(e.getMessage())); } @Override protected ReferenceableMessageContainer convertLoginRequestRejectedEventToPdu( final SendLoginRequestNackEvent<Integer> e) { return ReferenceableMessageContainer.wrap( e.getAcknowledgedMessageReference(), LoginResponse.reject(e.getMessage())); } @Override protected ReferenceableMessageContainer convertNonLoginMessageReceivedOnUnauthenticatedChannelEventToPdu( final NonLoginMessageReceivedOnUnauthenticatedChannelEvent<Integer, ?> e) { final GsmPdu rejectedMessage = e.getMessage(); final GsmPdu nack; if (rejectedMessage instanceof PingRequest) { final PingRequest rejectedPing = PingRequest.class .cast(rejectedMessage); nack = PingResponse.reject(rejectedPing); } else { throw new IllegalStateException( "Currently, we only support rejecting PingRequests as non-login messages"); } return ReferenceableMessageContainer.wrap( e.getAcknowledgedMessageReference(), nack); } @Override protected ReferenceableMessageContainer convertSendSmsEventToPdu( final SendSmsEvent e) { // FIXME: Replace message reference with proper value as soon as we // support outgoing windowing return ReferenceableMessageContainer.wrap(Integer.MIN_VALUE, e.getMessage()); } @Override protected ReferenceableMessageContainer convertReceivedSmsAckedEventToPdu( final SendSmsAckEvent<Integer> e) { return ReferenceableMessageContainer.wrap( e.getAcknowledgedMessageReference(), Acknowledgement.ack()); } @Override protected ReferenceableMessageContainer convertReceivedSmsNackedEventToPdu( final SendSmsNackEvent<Integer> e) { return ReferenceableMessageContainer.wrap( e.getAcknowledgedMessageReference(), Acknowledgement.nack()); } }