📄 headerfieldparser.java
字号:
/*
* JVending - J2ME MMS Client
*
* Distributed under Apache style software license included with the source code.
*/
package org.jvending.messaging.mms;
import java.util.Enumeration;
import java.util.NoSuchElementException;
import java.io.IOException;
import org.jvending.messaging.wsp.tokens.*;
import org.jvending.messaging.mms.Field;
import org.jvending.messaging.mms.tokens.MmsDataOctetTokenizer;
import org.jvending.messaging.IParser;
import org.jvending.messaging.ITokenizer;
import org.jvending.messaging.MultimediaMessage;
import org.jvending.messaging.io.PeekInputStream;
/**
* @author Shane Isbell
* @version 1.0.0a
* @created 04/03/27
*/
public class HeaderFieldParser implements IParser {
private WspTokenizer tokenizer;
private boolean moreFields = true;
private HeaderFieldAssembler hfa;
private PeekInputStream pis;
public void parse(PeekInputStream pis, Object targetObject) {
this.pis = pis;
MultimediaMessage mmm = (MultimediaMessage) targetObject;
tokenizer = new WspTokenizer(pis);
tokenizer.setDataOctetTokenizer(new MmsDataOctetTokenizer());
hfa = new HeaderFieldAssembler();
hfa.setTokenizer(tokenizer);
try {
Field field = null;
while(this.hasMoreFields()) {
field = this.getNextField();
if(field != null) mmm.setHeader(field.getName(), field.getValue());
}
} catch(Exception e) {
e.printStackTrace();
System.out.println("FieldType:" + fieldType +":" + "TokenType:" + tokenType);
}
}
private int fieldType;
private Token tokenType;
//FIX ME!!!!!: Need to include Non-Encoded Headers
private Field getNextField() throws NoSuchElementException, IOException {
if(this.tokenizer == null) throw new NoSuchElementException("Tokenizer is null");
tokenType = (Token) tokenizer.nextElement();
fieldType = tokenType.getIntValue();
if(fieldType == -1) {//HACK: Skip unencoded headers
if(pis.peekByte(1) == -1) {
moreFields = false; //end this guy
} //false alarm: Just String type
return null;
}
Field field = hfa.getField(fieldType);
if(field == null) moreFields = false;//FIX-ME: A Hack - don't like the way this is handled
else if(field.getName().equals("CONTENT_TYPE")) moreFields = false;
return field;
}
private boolean hasMoreFields() {
return moreFields;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -