📄 multimediaencoder.java
字号:
/*
* JVending - J2ME MMS Client
* Copyright (C) 2004 Shane Isbell
*
* This library 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 library 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 library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.jvending.messaging.impl.mms;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Vector;
import java.util.Enumeration;
import org.jvending.messaging.impl.util.MmsEncodingUtility;
import org.jvending.messaging.*;
/**
*
* @author Shane Isbell
* @version 1.0.0a
* @created 04/03/27
*/
public class MultimediaEncoder {
private Vector tokens = new Vector(3);
public void encode(DataOutputStream dos, MultimediaMessage mediaMessage) {
//write out MIME TYPES
String tag = null;
String value = null;
value = mediaMessage.getHeader("X_MMS_MESSAGE_TYPE");
if (value != null) write("X_MMS_MESSAGE_TYPE", value);
value = mediaMessage.getHeader("X_MMS_TRANSACTION_ID");
if (value != null) write("X_MMS_TRANSACTION_ID", value);
value = mediaMessage.getHeader("X_MMS_MMS_VERSION");
if (value != null) write("X_MMS_MMS_VERSION", value);
value = mediaMessage.getHeader("DATE");
if (value != null) write("DATE", value);
value = mediaMessage.getHeader("FROM");
if (value != null) write("FROM", value);
value = mediaMessage.getHeader("TO");
if (value != null) write("TO", value);
value = mediaMessage.getHeader("SUBJECT");
if (value != null) write("SUBJECT", value);
String content = mediaMessage.getHeader("CONTENT_TYPE");
mediaMessage.removeHeader("X_MMS_MESSAGE_TYPE");
mediaMessage.removeHeader("X_MMS_MMS_VERSION");
mediaMessage.removeHeader("X_MMS_TRANSACTION_ID");
mediaMessage.removeHeader("DATE");
mediaMessage.removeHeader("FROM");
mediaMessage.removeHeader("TO");
mediaMessage.removeHeader("SUBJECT");
mediaMessage.removeHeader("CONTENT_TYPE");
Enumeration en = mediaMessage.headerKeys();
while(en.hasMoreElements()) {
tag = (String) en.nextElement();
value = mediaMessage.getHeader(tag);
write(tag, value);
}
if (content != null) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.CONTENT_TYPE)));
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(ContentType.stringToInt(content))));
}
WspToken t = null;
for(int i = 0; i < tokens.size(); i++) {
t = (WspToken) tokens.elementAt(i);
}
//write out encoded
try {
long longInt = 0;
int intValue = 0;
String s = null;
byte[] b = null;
for(int i = 0; i < tokens.size(); i++) {
t = (WspToken) tokens.elementAt(i);
if (t.isQuotedString()) {
} else if(t.isShortInteger()) {
intValue = t.getIntValue() + 128;
dos.write(intValue);
} else if(t.isTextString()) {
dos.write(127);
s = t.getStringValue();
dos.write(s.trim().getBytes());
dos.write(0);
} else if(t.isShortLength()) {
dos.write(t.getIntValue());
} else if(t.isMultiOctetInteger()) {
longInt = (t.getLongValue());
b = MmsEncodingUtility.encodeMultiOctetInteger(longInt);
for (int k = 0; k < b.length; k++) {
dos.write(b[k]);
}
} else if(t.isExtensionMedia()) {
s = t.getStringValue();
dos.write(s.trim().getBytes());
dos.write(0);
}
}
if(content != null) {
MimeMessage mimeImpl = mediaMessage.getMimeMessage();
MultipartEntry[] me = mimeImpl.getEntries();
//System.out.println("*-*-*NUMBER OF ENTRIES:" + mimeImpl.getNumberOfEntries());
//System.out.println("*-*-*MIME:" + mimeImpl);
dos.write(MmsEncodingUtility.encodeUintvarInteger(mimeImpl.getNumberOfEntries()));
byte[] z = null;
int contentType = 0;
for(int k = 0; k < mimeImpl.getNumberOfEntries(); k++) {
dos.write(MmsEncodingUtility.encodeUintvarInteger(me[k].getHeaderLength()));
dos.write(MmsEncodingUtility.encodeUintvarInteger(me[k].getDataLength()));
contentType = ((int) me[k].getContentType()) + 128;
dos.write(contentType);
z = me[k].getHeaders();
for(int m = 0; m < z.length; m++) {
System.out.println(z[m]);
}
dos.write(me[k].getHeaders());
dos.write(me[k].getData());
}
}
}catch(IOException e) {
e.printStackTrace();
}
}
public void write(String tag, String value) {
//System.out.println("TAG = " + tag);
if(tag.equals("BCC")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.BCC)));
tokens.addElement(new WspToken(WspToken.EXTENSION_MEDIA, value));
} else if(tag.equals("CC")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.CC)));
tokens.addElement(new WspToken(WspToken.EXTENSION_MEDIA, value));
} else if(tag.equals("X_MMS_CONTENT_LOCATION")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_CONTENT_LOCATION)));
tokens.addElement(new WspToken(WspToken.TEXT_STRING, value));
} else if(tag.equals("CONTENT_TYPE")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.CONTENT_TYPE)));
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageType.stringToInt(value))));
} else if(tag.equals("DATE")) {
byte[] octet = MmsEncodingUtility.encodeMultiOctetInteger(Long.parseLong(value));
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.DATE)));
tokens.addElement(new WspToken(WspToken.SHORT_LENGTH, new Integer(octet.length)));
tokens.addElement(new WspToken(WspToken.MULTI_OCTET_INTEGER, new Long(Long.parseLong(value))));
} else if(tag.equals("X_MMS_DELIVERY_REPORT")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_DELIVERY_REPORT)));
if(value.equals("Yes")) tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(0)));
else tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(1)));
} else if(tag.equals("X_MMS_DELIVERY_TIME")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_DELIVERY_TIME)));
//YTBD
} else if(tag.equals("X_MMS_EXPIRY")) {
//tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_EXPIRY)));
//YTBD
} else if(tag.equals("FROM")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.FROM)));
if(value.equals("INSERT_ADDRESS_TOKEN")) {
tokens.addElement(new WspToken(WspToken.SHORT_LENGTH, new Integer(1)));//length
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(1)));
} else {
tokens.addElement(new WspToken(WspToken.SHORT_LENGTH, new Integer(value.length() + 1)));//length
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(0)));
tokens.addElement(new WspToken(WspToken.EXTENSION_MEDIA, value));//length
}
} else if(tag.equals("X_MMS_MESSAGE_CLASS")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_MESSAGE_CLASS)));
int mc = MessageClass.lookupMessageClass(value);
if( mc != -1) tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(mc)));
else tokens.addElement(new WspToken(WspToken.EXTENSION_MEDIA, value));
} else if(tag.equals("MESSAGE_ID")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.MESSAGE_ID)));
tokens.addElement(new WspToken(WspToken.TEXT_STRING, value));
} else if(tag.equals("X_MMS_MESSAGE_TYPE")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_MESSAGE_TYPE)));
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageType.stringToInt(value))));
} else if(tag.equals("X_MMS_MMS_VERSION")) {//fix me: assumes version 1.0
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_MMS_VERSION)));
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(16)));
} else if(tag.equals("X_MMS_MESSAGE_SIZE")) {
byte[] octetSize = MmsEncodingUtility.encodeMultiOctetInteger(Long.parseLong(value));
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_MESSAGE_SIZE)));
tokens.addElement(new WspToken(WspToken.SHORT_LENGTH, new Integer(octetSize.length)));
tokens.addElement(new WspToken(WspToken.MULTI_OCTET_INTEGER, new Long(Long.parseLong(value))));
} else if(tag.equals("X_MMS_PRIORITY")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_PRIORITY)));
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(Priority.lookup(value))));
} else if(tag.equals("X_MMS_READ_REPORT")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_READ_REPORT)));
if(value.equals("Yes")) tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(0)));
else tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(1)));
} else if(tag.equals("X_MMS_REPORT_ALLOWED")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_REPORT_ALLOWED)));
if(value.equals("Yes")) tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(0)));
else tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(1)));
} else if(tag.equals("X_MMS_RESPONSE_STATUS")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_RESPONSE_STATUS)));
} else if(tag.equals("X_MMS_RESPONSE_TEXT")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_RESPONSE_TEXT)));
} else if(tag.equals("X_MMS_SENDER_VISIBILITY")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_SENDER_VISIBILITY)));
if(value.equals("Hide")) tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(0)));
else tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(1)));
} else if(tag.equals("X_MMS_STATUS")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_STATUS)));
} else if(tag.equals("SUBJECT")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.SUBJECT)));
tokens.addElement(new WspToken(WspToken.EXTENSION_MEDIA, value));
} else if(tag.equals("TO")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.TO)));
tokens.addElement(new WspToken(WspToken.EXTENSION_MEDIA, value));
} else if(tag.equals("X_MMS_TRANSACTION_ID")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_TRANSACTION_ID)));
tokens.addElement(new WspToken(WspToken.EXTENSION_MEDIA, value));
} else if(tag.equals("X_MMS_RETRIEVE_STATUS")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_RETRIEVE_STATUS)));
} else if(tag.equals("X_MMS_RETRIEVE_TEXT")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_RETRIEVE_TEXT)));
} else if(tag.equals("X_MMS_READ_STATUS")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_READ_STATUS)));
if(value.equals("Read")) tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(0)));
else tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(1)));
} else if(tag.equals("X_MMS_REPLY_CHARGING")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_REPLY_CHARGING)));
} else if(tag.equals("X_MMS_REPLY_CHARGING_DEADLINE")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_REPLY_CHARGING_DEADLINE)));
} else if(tag.equals("X_MMS_REPLY_CHARGING_ID")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_REPLY_CHARGING_ID)));
} else if(tag.equals("X_MMS_REPLY_CHARGING_SIZE")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_REPLY_CHARGING_SIZE)));
} else if(tag.equals("X_MMS_PREVIOUSLY_SENT_BY")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_PREVIOUSLY_SENT_BY)));
} else if(tag.equals("X_MMS_PREVIOUSLY_SENT_DATE")) {
tokens.addElement(new WspToken(WspToken.SHORT_INTEGER, new Integer(MessageField.X_MMS_PREVIOUSLY_SENT_DATE)));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -