summaryrefslogtreecommitdiffstats
blob: 93864da00e7b3b4f3648a0896f874eb601e123b4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
/*
 * Copyright (c) 2010 Isode Limited.
 * All rights reserved.
 * See the COPYING file for more information.
 */
/*
 * Copyright (c) 2015 Tarun Gupta.
 * Licensed under the simplified BSD license.
 * See Documentation/Licenses/BSD-simplified.txt for more information.
 */

package com.isode.stroke.elements;

import com.isode.stroke.elements.Payload;
import java.util.Vector;
import com.isode.stroke.base.NotNull;
import com.isode.stroke.base.ByteArray;

public class IBB extends Payload {

	public enum Action {
		Open,
		Close,
		Data
	};
	
	public enum StanzaType {
		IQStanza,
		MessageStanza
	};

	private Action action;
	private String streamID = "";
	private ByteArray data = new ByteArray();
	private StanzaType stanzaType;
	private int blockSize;
	private int sequenceNumber;

	/**
	* Default Constructor.
	*/
	public IBB() {
		this(Action.Open, "");
	}

	/**
	* Parameterized Constructor
	* @param action, NotNull.
	*/
	public IBB(Action action) {
		this(action, "");
	}

	/**
	* Parameterized Constructor
	* @param streamID, NotNull.
	* @param action, NotNull.
	*/
	public IBB(Action action, String streamID) {
		NotNull.exceptIfNull(action, "action");
		NotNull.exceptIfNull(streamID, "streamID");
		this.action = action;
		this.streamID = streamID;
		this.stanzaType = StanzaType.IQStanza;
		this.blockSize = -1;
		this.sequenceNumber = -1;
	}

	/**
	* @param streamID, NotNull.
	* @param blockSize.
	* @return IBB Object.
	*/
	public static IBB createIBBOpen(String streamID, int blockSize) {
		NotNull.exceptIfNull(streamID, "streamID");
		IBB result = new IBB(Action.Open, streamID);
		result.setBlockSize(blockSize);
		return result;
	}

	/**
	* @param streamID, NotNull.
	* @param sequenceNumber.
	* @param data, NotNull.
	* @return IBB Object.
	*/
	public static IBB createIBBData(String streamID, int sequenceNumber, ByteArray data) {
		NotNull.exceptIfNull(streamID, "streamID");
		NotNull.exceptIfNull(data, "data");		
		IBB result = new IBB(Action.Data, streamID);
		result.setSequenceNumber(sequenceNumber);
		result.setData(data);
		return result;
	}


	/**
	* @param streamID, NotNull.
	* @return IBB Object.
	*/
	public static IBB createIBBClose(String streamID) {
		return new IBB(Action.Close, streamID);
	}

	/**
	* @param action, Not Null.
	*/
	public void setAction(Action action) {
		NotNull.exceptIfNull(action, "action");
		this.action = action;
	}

	/**
	* @return action, Not Null.
	*/
	public Action getAction() {
		return action;
	}

	/**
	* @param stanzaType, Not Null.
	*/
	public void setStanzaType(StanzaType stanzaType) {
		NotNull.exceptIfNull(stanzaType, "stanzaType");
		this.stanzaType = stanzaType;
	}

	/**
	* @return stanzaType, Not Null.
	*/
	public StanzaType getStanzaType() {
		return stanzaType;
	}

	/**
	* @param id, Not Null.
	*/
	public void setStreamID(String id) {
		NotNull.exceptIfNull(id, "id");
		streamID = id;
	}

	/**
	* @return id, Not Null.
	*/
	public String getStreamID() {
		return streamID;
	}

	/**
	* @return data, Not Null.
	*/
	public ByteArray getData() {
		return data;
	}

	/**
	* @param data, Not Null.
	*/
	public void setData(ByteArray data) {
		NotNull.exceptIfNull(data, "data");
		this.data = data;
	}

	/**
	* @return blockSize.
	*/
	public int getBlockSize() {
		return blockSize;
	}

	/**
	* @param blockSize.
	*/
	public void setBlockSize(int blockSize) {
		this.blockSize = blockSize;
	}

	/**
	* @return sequenceNumber.
	*/
	public int getSequenceNumber() {
		return sequenceNumber;
	}

	/**
	* @param sequenceNumber.
	*/
	public void setSequenceNumber(int i) {
		sequenceNumber = i;
	}
}