/protocols/smpp/src/main/java/org/mobicents/protocols/smpp/util/SequenceNumberScheme.java
Java | 75 lines | 8 code | 8 blank | 59 comment | 0 complexity | be53f96c581ee8d13ad3f41027cda2fb MD5 | raw file
1/* 2 * JBoss, Home of Professional Open Source 3 * Copyright 2011, Red Hat, Inc. and individual contributors 4 * by the @authors tag. See the copyright.txt in the distribution for a 5 * full listing of individual contributors. 6 * 7 * This is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU Lesser General Public License as 9 * published by the Free Software Foundation; either version 2.1 of 10 * the License, or (at your option) any later version. 11 * 12 * This software is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this software; if not, write to the Free 19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 21 */ 22 23package org.mobicents.protocols.smpp.util; 24 25/** 26 * SMPP packet sequence numbering scheme interface. Implementations of this 27 * interface provide a {@link org.mobicents.protocols.smpp.Session} with a unique number for 28 * each call to <code>nextNumber</code>. This number is used as the packet's 29 * sequence number in the SMPP header. The default implementation ( 30 * {@link DefaultSequenceScheme}) counts monotonically from 1 upwards for each 31 * number requested. While this is the SMPP specification's recommended 32 * behaviour, there is no requirement for 2 sequentially-requested numbers to be 33 * numerically sequential. 34 * 35 * @version $Id: SequenceNumberScheme.java 452 2009-01-15 16:56:36Z orank $ 36 */ 37public interface SequenceNumberScheme { 38 39 /** 40 * Constant that can be returned from the <code>peek</code> methods to 41 * indicate that the peek operation is not supported. 42 */ 43 long PEEK_UNSUPPORTED = -1; 44 45 /** 46 * Get the next number in this sequence's scheme. An implementation of this 47 * interface <b>must </b> guard against multi-threaded access to this method 48 * to prevent more than one thread getting the same sequence number. 49 */ 50 long nextNumber(); 51 52 /** 53 * Get the next number in this sequence's scheme without causing it to move 54 * to the next-in-sequence. This method returns the number that will be 55 * returned by the next call to <code>nextNumber</code> without actually 56 * increasing the sequence. Multiple calls to <code>peek</code> will 57 * return the same number until a call to <code>nextNumber</code> is made. 58 */ 59 long peek(); 60 61 /** 62 * Get the nth next number in this sequence's scheme without causing it to 63 * move to the next-in-sequence. This method returns the <code>nth</code> 64 * next number in the sequence. This is an optional operation. If a sequence 65 * numbering scheme does not support this operation, it should always return 66 * {@link #PEEK_UNSUPPORTED} to the caller. 67 */ 68 long peek(long nth); 69 70 /** 71 * Reset the sequence scheme to the beginning of the sequence. 72 */ 73 void reset(); 74} 75