📄 wsptokenizer.java
字号:
/*
* JVending - J2ME MMS Client
*
* Distributed under Apache style software license included with the source code.
*/
package org.jvending.messaging.wsp.tokens;
import java.io.DataInputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.EOFException;
import java.util.Enumeration;
import java.util.NoSuchElementException;
import java.util.Vector;
import org.jvending.messaging.IDataOctetTokenizer;
import org.jvending.messaging.ITokenizer;
import org.jvending.messaging.io.PeekInputStream;
import org.jvending.messaging.util.SimpleQueue;
import org.jvending.messaging.util.MmsDecodingUtility;
/**
* @author Shane Isbell
* @version 1.0.0a
* @created 04/03/27
*/
public class WspTokenizer implements ITokenizer {
protected PeekInputStream dis;
protected TokenType tokenType;
protected Object tokenObject;
protected IDataOctetTokenizer dataTokenizer;
protected ITokenizer mimeTokenizer;
private boolean dataOctetFlag = false;
private int length;
private int tokenState;
private boolean debugFlag = false;
private SimpleQueue tokenStateQueue;
public WspTokenizer(InputStream dis) {
setInputStream(dis);
}
public WspTokenizer(PeekInputStream dis) {
this.dis = dis;
}
public void setDataOctetTokenizer(IDataOctetTokenizer dataTokenizer) {
this.dataTokenizer = dataTokenizer;
}
public void setInputStream(InputStream is) {
dis = new PeekInputStream(is);
}
public void setInputStream(PeekInputStream is) {
dis = is;
}
public void setMimeTokenizer(ITokenizer mimeTokenizer) {
this.mimeTokenizer = mimeTokenizer;
}
private Token getTokenFromDataOctet() throws IOException {
tokenType = (TokenType) tokenStateQueue.dequeue();
if(tokenType == Token.MULTI_OCTET_INTEGER) {
tokenObject = MmsDecodingUtility.readMultiOctetInteger(dis, length);
} else if(tokenType == Token.SHORT_LENGTH) {
length = dis.readUnsignedByte();
tokenObject = new Integer(length);
} else if(tokenType == Token.SHORT_INTEGER) {
tokenObject = new Integer((dis.readUnsignedByte() & 0x7f));
} else if(tokenType == Token.TEXT_STRING) {
tokenObject = MmsDecodingUtility.readString(dis);
} else if(tokenType == Token.DATA_OCTETS) {
tokenObject = MmsDecodingUtility.readDataOctets(dis, length);
}
return (new Token(tokenType, (Object) tokenObject));
}
public Object nextElement() throws NoSuchElementException {
Token t = null;
int i = -10;
try {
if(dataOctetFlag && tokenStateQueue != null && !tokenStateQueue.isEmpty() ) {
t = getTokenFromDataOctet();
return (Object) t;
} else {
dataOctetFlag = false;
}
i = dis.readByte();
//System.out.println("BYTE:" + i);
if(i >= 0 && i <= 31) {
tokenObject = new Integer(i);
tokenType = Token.SHORT_LENGTH;
length = i;
dataOctetFlag = true;
tokenStateQueue = dataTokenizer.getTokenStateQueue(tokenState, dis.peekByte(1));
} else if(i == 31) {
tokenObject = MmsDecodingUtility.readUintvarInteger(dis);
tokenType = Token.UINTVAR_INTEGER;
} else if(i == 34) {
tokenObject = MmsDecodingUtility.readString(dis);
tokenType = Token.QUOTED_STRING;
} else if(i == 127) {
tokenObject = MmsDecodingUtility.readString(dis);
tokenType = Token.TEXT_STRING;
} else if(i >= 32 && i <= 127) {
tokenObject = MmsDecodingUtility.readExtensionMedia(dis, i);
tokenType = Token.EXTENSION_MEDIA;
} else if(i >= 128 && i <= 255) {// anything above 127 consists of only one byte
tokenObject = new Integer((i & 0x7f));
tokenType = Token.SHORT_INTEGER;
tokenState = i;
} else if(i == -1) {
tokenObject = null;
tokenType = Token.EOF;
} else {
throw new NoSuchElementException("Illegal Octet: " + i);
}
} catch(IOException e) {
throw new SecurityException("IOException occurred:" + i);
}
t = new Token(tokenType, (Object) tokenObject);
return ((Object) t);
}
public boolean hasMoreElements() {
return tokenType != Token.EOF;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -