All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mobicents.smsc.library.Sms Maven / Gradle / Ivy

There is a newer version: 7.4.179
Show newest version
/*
 * 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.library;

import java.io.Serializable;
import java.util.Date;
import java.util.UUID;

import org.mobicents.smsc.smpp.TlvSet;


/**
 * 
 * @author amit bhayani
 * @author sergey vetyutnev
 *
 */
public class Sms implements Serializable {

	private static final long serialVersionUID = 6893251312588274520L;

	public static final byte ESME_DELIVERY_ACK = 0x04;

	private SmsSet smsSet;

    private UUID dbId;
    private long dueSlot;
    private boolean stored;
    private boolean storingAfterFailure;
    private boolean invokedByAlert;

	private int sourceAddrTon;
	private int sourceAddrNpi;
	private String sourceAddr;
    private int origNetworkId;

    private String originatorSccpAddress;

	private long messageId;
	private int moMessageRef;

	private String origSystemId;
	private String origEsmeName;

	private Date submitDate;
	private Date deliveryDate;

	private String serviceType;
	private int esmClass;

	private int protocolId; // not present in data_sm
	private int priority; // not present in data_sm

	private int registeredDelivery;
	private int replaceIfPresent; // not present in data_sm

	private int dataCoding;
    private int nationalLanguageSingleShift;
    private int nationalLanguageLockingShift;

	private int defaultMsgId; // not present in data_sm, not used in deliver_sm

    private byte[] shortMessage;
    private String shortMessageText;
    private byte[] shortMessageBin;

	private Date scheduleDeliveryTime; // not present in data_sm
	private Date validityPeriod; // not present in data_sm

    private String origMoServiceCentreAddressDA;

    private int deliveryCount;

    private OriginationType originationType;

	private TlvSet tlvSet = new TlvSet();

    private MessageDeliveryResultResponseInterface messageDeliveryResultResponse;

	public Sms() {
	}


	/**
	 * ID field for storing into a database
	 */
	public UUID getDbId() {
		return dbId;
	}

	public void setDbId(UUID dbId) {
		this.dbId = dbId;
	}

    /**
     * In which dueSlot belongs to this record
     */
    public long getDueSlot() {
        return dueSlot;
    }

    public void setDueSlot(long dueSlot) {
        this.dueSlot = dueSlot;
    }

    /**
     * If this message is in the database stored
     */
    public boolean getStored() {
        return stored;
    }

    public void setStored(boolean stored) {
        this.stored = stored;
    }

    /**
     * If this message will be stored in the database if the delivery has failed
     */
    public boolean getStoringAfterFailure() {
        return storingAfterFailure;
    }

    public void setStoringAfterFailure(boolean storingAfterFailure) {
        this.storingAfterFailure = storingAfterFailure;
    }

    /**
     * If this message was invoked for delivering after Alert message
     */
    public boolean getInvokedByAlert() {
        return invokedByAlert;
    }

    public void setInvokedByAlert(boolean invokedByAlert) {
        this.invokedByAlert = invokedByAlert;
    }

	/**
	 * DeliveringActivity link
	 */
	public SmsSet getSmsSet() {
		return smsSet;
	}

	public void setSmsSet(SmsSet smsSet) {
		this.smsSet = smsSet;
	}

	/**
	 * smpp style type of number
	 */
	public int getSourceAddrTon() {
		return sourceAddrTon;
	}

	public void setSourceAddrTon(int sourceAddrTon) {
		this.sourceAddrTon = sourceAddrTon;
	}

	/**
	 * smpp style type of numbering plan indicator
	 */
	public int getSourceAddrNpi() {
		return sourceAddrNpi;
	}

	public void setSourceAddrNpi(int sourceAddrNpi) {
		this.sourceAddrNpi = sourceAddrNpi;
	}

	/**
	 * origination address
	 */
	public String getSourceAddr() {
		return sourceAddr;
	}

	public void setSourceAddr(String sourceAddr) {
		this.sourceAddr = sourceAddr;
	}

    /**
     * original networkId
     */
    public int getOrigNetworkId() {
        return origNetworkId;
    }

    public void setOrigNetworkId(int origNetworkId) {
        this.origNetworkId = origNetworkId;
    }

    /**
     * Originator Sccp Address
     */
    public String getOriginatorSccpAddress() {
        return originatorSccpAddress;
    }

    public void setOriginatorSccpAddress(String originatorSccpAddress) {
        this.originatorSccpAddress = originatorSccpAddress;
    }

	/**
	 * Unique message ID assigned by SMSC (since SMSC started)
	 */
    public long getMessageId() {
        return messageId;
    }

    public String getMessageIdText() {
        // return String.format("%010d", messageId);
        return String.format("%d", messageId);
    }

	public void setMessageId(long messageId) {
		this.messageId = messageId;
	}

	/**
	 * MO SMS-SUBMIT TP-Message-Reference field value 
	 */
	public int getMoMessageRef() {
		return moMessageRef;
	}

	public void setMoMessageRef(int moMessageRef) {
		this.moMessageRef = moMessageRef;
	}

	/**
	 * SMPP name of origination esme (�� for MO messages)
	 */
	public String getOrigSystemId() {
		return origSystemId;
	}

	public void setOrigSystemId(String systemId) {
		this.origSystemId = systemId;
	}

	/**
	 * SMSC internal name of origination esme (�� for MO messages)
	 */
	public String getOrigEsmeName() {
		return origEsmeName;
	}

	public void setOrigEsmeName(String origEsmeName) {
		this.origEsmeName = origEsmeName;
	}

	/**
	 * time when a message was received by SMSC
	 */
	public Date getSubmitDate() {
		return submitDate;
	}

	public void setSubmitDate(Date submitDate) {
		this.submitDate = submitDate;
	}

	/**
	 * time when a message was sent from SMSC (null (?) if message failed to deliver)
	 */
	public Date getDeliverDate() {
		return deliveryDate;
	}

	public void setDeliveryDate(Date deliveryDate) {
		this.deliveryDate = deliveryDate;
	}

	/**
	 * service_type smpp param for esme originated messages
	 */
	public String getServiceType() {
		return serviceType;
	}

	public void setServiceType(String serviceType) {
		this.serviceType = serviceType;
	}

	/**
	 * Indicates Message Mode and Message Type
	 */
	public int getEsmClass() {
		return esmClass;
	}

	public void setEsmClass(int esmClass) {
		this.esmClass = esmClass;
	}

	/**
	 * Protocol Identifier SMPP parameter (TP-Protocol-Identifier files for GSM)
	 */
	public int getProtocolId() {
		return protocolId;
	}

	public void setProtocolId(int protocolId) {
		this.protocolId = protocolId;
	}

	/**
	 * priority_flag smpp parameter
	 */
	public int getPriority() {
		return priority;
	}

	public void setPriority(int priority) {
		this.priority = priority;
	}

	/**
	 * registered_delivery smpp parameter
	 */
	public int getRegisteredDelivery() {
		return registeredDelivery;
	}

	public void setRegisteredDelivery(int registeredDelivery) {
		this.registeredDelivery = registeredDelivery;
	}

	/**
	 * replace_if_present_flag smpp parameter
	 */
	public int getReplaceIfPresent() {
		return replaceIfPresent;
	}

	public void setReplaceIfPresent(int replaceIfPresent) {
		this.replaceIfPresent = replaceIfPresent;
	}

	/**
	 * data_coding scheme
	 */
	public int getDataCoding() {
		return dataCoding;
	}

	public void setDataCoding(int dataCoding) {
		this.dataCoding = dataCoding;
	}

    public int getDataCodingForDatabase() {
        return dataCoding | (nationalLanguageLockingShift << 8) | (nationalLanguageSingleShift << 16);
    }

    public void setDataCodingForDatabase(int dataCoding) {
        this.dataCoding = (dataCoding & 0xFF);
        this.nationalLanguageLockingShift = (dataCoding & 0xFF00) >> 8;
        this.nationalLanguageSingleShift = (dataCoding & 0xFF0000) >> 16;
    }
	
    public int getNationalLanguageSingleShift() {
        return nationalLanguageSingleShift;
    }

    public void setNationalLanguageSingleShift(int nationalLanguageSingleShift) {
        this.nationalLanguageSingleShift = nationalLanguageSingleShift;
    }

    public int getNationalLanguageLockingShift() {
        return nationalLanguageLockingShift;
    }

    public void setNationalLanguageLockingShift(int nationalLanguageLockingShift) {
        this.nationalLanguageLockingShift = nationalLanguageLockingShift;
    }

	/**
	 * sm_default_msg_id smpp parameter
	 */
	public int getDefaultMsgId() {
		return defaultMsgId;
	}

	public void setDefaultMsgId(int defaultMsgId) {
		this.defaultMsgId = defaultMsgId;
	}

    @Deprecated
	public byte[] getShortMessage() {
		return shortMessage;
	}

    @Deprecated
	public void setShortMessage(byte[] shortMessage) {
		this.shortMessage = shortMessage;
	}

    /**
     * Message: text part
     */
    public String getShortMessageText() {
        return shortMessageText;
    }

    public void setShortMessageText(String shortMessageText) {
        this.shortMessageText = shortMessageText;
    }

    /**
     * Message: binary part (UDH for text message or all message for binary messages)
     */
    public byte[] getShortMessageBin() {
        return shortMessageBin;
    }

    public void setShortMessageBin(byte[] shortMessageBin) {
        this.shortMessageBin = shortMessageBin;
    }

	/**
	 * schedule_delivery_time smpp parameter time when SMSC should start a delivery (may be null � immediate message delivery)
	 */
	public Date getScheduleDeliveryTime() {
		return scheduleDeliveryTime;
	}

	public void setScheduleDeliveryTime(Date scheduleDeliveryTime) {
		this.scheduleDeliveryTime = scheduleDeliveryTime;
	}

	/**
	 * The validity period of this message (if ESME have not defined or for MO messages this field is filled by default SMSC settings)
	 */
	public Date getValidityPeriod() {
		return validityPeriod;
	}

	public void setValidityPeriod(Date validityPeriod) {
		this.validityPeriod = validityPeriod;
	}

    /**
     * original ServiceCentreAddressDA that has come in incoming MO SS7 mesage
     */
    public String getOrigMoServiceCentreAddressDA() {
        return origMoServiceCentreAddressDA;
    }

    public void setOrigMoServiceCentreAddressDA(String origMoServiceCentreAddressDA) {
        this.origMoServiceCentreAddressDA = origMoServiceCentreAddressDA;
    }

	/**
	 * delivery tries count
	 */
	public int getDeliveryCount() {
		return deliveryCount;
	}

	public void setDeliveryCount(int deliveryCount) {
		this.deliveryCount = deliveryCount;
	}

	// Optional parameters

	/**
	 * List of tlv parameters
	 */
	public TlvSet getTlvSet() {
		return tlvSet;
	}

	public void setTlvSet(TlvSet tlvSet) {
		this.tlvSet = tlvSet;
	}

    /**
     * Type of message originated source
     */
    public OriginationType getOriginationType() {
        return originationType;
    }

    /**
     * @param originationType the originationType to set
     */
    public void setOriginationType(OriginationType originationType) {
        this.originationType = originationType;
    }

    public MessageDeliveryResultResponseInterface getMessageDeliveryResultResponse() {
        return messageDeliveryResultResponse;
    }

    public void setMessageDeliveryResultResponse(MessageDeliveryResultResponseInterface messageDeliveryResultResponse) {
        this.messageDeliveryResultResponse = messageDeliveryResultResponse;
    }

    public boolean isMcDeliveryReceipt() {
        if ((this.esmClass & ESME_DELIVERY_ACK) != 0)
            return true;
        else
            return false;
    }

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();

		sb.append("SmsEvent [SmsSet=");
		sb.append(smsSet);
        sb.append(", dbId=");
        sb.append(dbId);
        sb.append(", dueSlot=");
        sb.append(dueSlot);
        sb.append(", stored=");
        sb.append(stored);
        sb.append(", storingAfterFailure=");
        sb.append(storingAfterFailure);
        sb.append(", invokedByAlert=");
        sb.append(invokedByAlert);
		sb.append(", sourceAddrTon=");
		sb.append(sourceAddrTon);
		sb.append(", sourceAddrNpi=");
		sb.append(sourceAddrNpi);
        sb.append(", sourceAddr=");
        sb.append(sourceAddr);
        sb.append(", origNetworkId=");
        sb.append(origNetworkId);
		sb.append(", messageId=");
		sb.append(messageId);
		sb.append(", moMessageRef=");
		sb.append(moMessageRef);
		sb.append(", origSystemId=");
		sb.append(origSystemId);
		sb.append(", origEsmeId=");
		sb.append(origEsmeName);
		sb.append(", submitDate=");
		sb.append(submitDate);
		sb.append(", deliverDate=");
		sb.append(deliveryDate);
		sb.append(", serviceType=");
		sb.append(serviceType);
		sb.append(", esmClass=");
		sb.append(esmClass);
		sb.append(", protocolId=");
		sb.append(protocolId);
		sb.append(", priority=");
		sb.append(priority);
		sb.append(", registeredDelivery=");
		sb.append(registeredDelivery);
		sb.append(", replaceIfPresent=");
		sb.append(replaceIfPresent);
        sb.append(", dataCoding=");
        sb.append(dataCoding);
        sb.append(", nationalLanguageSingleShift=");
        sb.append(nationalLanguageSingleShift);
        sb.append(", nationalLanguageLockingShift=");
        sb.append(nationalLanguageLockingShift);
		sb.append(", defaultMsgId=");
		sb.append(defaultMsgId);
		sb.append(", scheduleDeliveryTime=");
		sb.append(scheduleDeliveryTime);
        sb.append(", validityPeriod=");
        sb.append(validityPeriod);
        sb.append(", origMoServiceCentreAddressDA=");
        sb.append(origMoServiceCentreAddressDA);
        sb.append(", deliveryCount=");
        sb.append(deliveryCount);
        sb.append(", originationType=");
        sb.append(originationType);
        sb.append(", shortMessageText=");
        sb.append(shortMessageText);
        if (shortMessageBin != null) {
            sb.append(", shortMessageBin=\"");
            sb.append(printArray(shortMessageBin));
            sb.append("\"");
        }

		if (this.tlvSet != null) {
			sb.append(", tlvSet=");
			sb.append(this.tlvSet.toString());
		}

		sb.append("]");

		return sb.toString();
	}


    /* (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
		if (dbId != null)
			return dbId.hashCode();
		else
			return 0;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Sms other = (Sms) obj;

		if (this.dbId == null || other.dbId == null)
			return false;
		if (this.dbId.equals(other.dbId))
			return true;
		else
			return false;
    }

    private String printArray(byte[] bb) {
        StringBuilder sb = new StringBuilder();
        int i1 = 0;
        for (byte b : bb) {
            if (i1 == 0)
                i1 = 1;
            else
                sb.append(", ");
            sb.append((b & 0xFF));
        }
        return sb.toString();
    }

//    public enum OriginationType {
//        SMPP, SS7_MO, SS7_HR, SIP
//    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy