/*
* TeleStax, Open Source Cloud Communications Copyright 2012.
* and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.mobicents.smsc.mproc.impl;
import java.util.Date;
import org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString;
import org.mobicents.protocols.ss7.map.api.service.sms.LocationInfoWithLMSI;
import org.mobicents.smsc.cassandra.PersistenceException;
import org.mobicents.smsc.library.ErrorCode;
import org.mobicents.smsc.library.MessageUtil;
import org.mobicents.smsc.library.OriginationType;
import org.mobicents.smsc.library.Sms;
import org.mobicents.smsc.mproc.DeliveryReceiptData;
import org.mobicents.smsc.mproc.MProcMessage;
import org.mobicents.smsc.mproc.OrigType;
import org.mobicents.smsc.mproc.ProcessingType;
import org.restcomm.smpp.parameter.TlvSet;
/**
*
* @author sergey vetyutnev
*
*/
public class MProcMessageImpl implements MProcMessage {
private Sms sms;
private ProcessingType processingType;
private PersistenseCommonInterface persistence;
public MProcMessageImpl(Sms sms, ProcessingType processingType, PersistenseCommonInterface persistence) {
this.sms = sms;
this.processingType = processingType;
this.persistence = persistence;
}
protected Sms getSmsContent() {
return sms;
}
@Override
public long getMessageId() {
return sms.getMessageId();
}
@Override
public int getDestAddrTon() {
return sms.getSmsSet().getDestAddrTon();
}
@Override
public int getDestAddrNpi() {
return sms.getSmsSet().getDestAddrNpi();
}
@Override
public String getDestAddr() {
return sms.getSmsSet().getDestAddr();
}
@Override
public int getNetworkId() {
return sms.getSmsSet().getNetworkId();
}
@Override
public int getOrigNetworkId() {
return sms.getOrigNetworkId();
}
@Override
public String getOrigEsmeName() {
return sms.getOrigEsmeName();
}
@Override
public int getSourceAddrTon() {
return sms.getSourceAddrTon();
}
@Override
public int getSourceAddrNpi() {
return sms.getSourceAddrNpi();
}
@Override
public String getSourceAddr() {
return sms.getSourceAddr();
}
@Override
public String getShortMessageText() {
return sms.getShortMessageText();
}
@Override
public byte[] getShortMessageBin() {
return sms.getShortMessageBin();
}
@Override
public OrigType getOriginationType() {
return OriginationType.toOrigType(sms.getOriginationType());
}
@Override
public Date getScheduleDeliveryTime() {
return sms.getScheduleDeliveryTime();
}
@Override
public Date getValidityPeriod() {
return sms.getValidityPeriod();
}
@Override
public int getDataCoding() {
return sms.getDataCoding();
}
@Override
public int getNationalLanguageSingleShift() {
return sms.getNationalLanguageSingleShift();
}
@Override
public int getNationalLanguageLockingShift() {
return sms.getNationalLanguageLockingShift();
}
@Override
public int getEsmClass() {
return sms.getEsmClass();
}
@Override
public int getPriority() {
return sms.getPriority();
}
@Override
public String getOriginatorSccpAddress() {
return sms.getOriginatorSccpAddress();
}
@Override
public int getRegisteredDelivery() {
return sms.getRegisteredDelivery();
}
@Override
public String getImsiDigits() {
return sms.getSmsSet().getImsi();
}
@Override
public String getNnnDigits() {
LocationInfoWithLMSI locationInfoWithLMSI = sms.getSmsSet().getLocationInfoWithLMSI();
if (locationInfoWithLMSI != null) {
ISDNAddressString networkNodeNumber = locationInfoWithLMSI.getNetworkNodeNumber();
if (networkNodeNumber != null) {
return networkNodeNumber.getAddress();
}
}
return null;
}
@Override
public TlvSet getTlvSet() {
return sms.getTlvSet();
}
@Override
public int getErrorCode() {
ErrorCode errorCode = sms.getSmsSet().getStatus();
if (errorCode != null)
return errorCode.getCode();
else
return 0;
}
@Override
public long getSmppCommandStatus() {
return sms.getSmsSet().getSmppCommandStatus();
}
@Override
public ProcessingType getProcessingType() {
return processingType;
}
@Override
public boolean isDeliveryReceipt() {
return MessageUtil.isDeliveryReceipt(sms);
}
@Override
public DeliveryReceiptData getDeliveryReceiptData() {
if (isDeliveryReceipt()) {
String msg = sms.getShortMessageText();
DeliveryReceiptData deliveryReceiptData = MessageUtil.parseDeliveryReceipt(msg, sms.getTlvSet());
return deliveryReceiptData;
} else {
return null;
}
}
@Override
public Long getReceiptLocalMessageId() {
return sms.getReceiptLocalMessageId();
}
@Override
public MProcMessage getOriginMessageForDeliveryReceipt(long messageId) {
if (persistence == null)
return null;
try {
Sms sms = persistence.c2_getRecordArchiveForMessageId(messageId);
if (sms != null) {
MProcMessage msg = new MProcMessageImpl(sms, processingType, null);
return msg;
} else {
return null;
}
} catch (PersistenceException e) {
e.printStackTrace();
return null;
}
}
@Override
public String getMprocNotes() {
return sms.getMprocNotes();
}
@Override
public void addMprocNote(String note) {
String curMsg = sms.getMprocNotes();
sms.setMprocNotes(MessageUtil.mergeMprocNotes(curMsg, note));
}
@Override
public String toString() {
return "MProcMessage: " + sms;
}
}