📄 mmencoder.java
字号:
m_Out.close();
throw new MMEncoderException("The field from is assigned to null");
}
// Value-length
writeValueLength(strValue.length()+2);
// Address-present-token
m_Out.write(0x80);
// Encoded-string-value
m_Out.write(strValue.getBytes());
m_Out.write(0x00);
} else {
// Value-length
m_Out.write(1);
m_Out.write(0x81);
}
// ------------------- TO ------------------
if(m_Message.isToAvailable()) {
Vector sAddress = m_Message.getTo();
int nAddressCount = sAddress.size();
if(sAddress == null) {
m_Out.close();
throw new MMEncoderException("The field TO of the Multimedia Message is set to null.");
}
for(int i = 0; i < nAddressCount; i++) {
strValue = ((MMAddress)sAddress.elementAt(i)).getFullAddress();
if(strValue != null) {
m_Out.write(FN_TO + 0x80);
m_Out.write(strValue.getBytes());
m_Out.write(0x00);
}
}
}
// ------------------- CC ------------------
if(m_Message.isCcAvailable()) {
Vector sAddress = m_Message.getCc();
int nAddressCount = sAddress.size();
if(sAddress == null) {
m_Out.close();
throw new MMEncoderException("The field CC of the Multimedia Message is set to null.");
}
for(int i = 0; i < nAddressCount; i++) {
strValue = ((MMAddress)sAddress.elementAt(i)).getFullAddress();
if(strValue != null) {
m_Out.write(FN_CC + 0x80);
m_Out.write(strValue.getBytes());
m_Out.write(0x00);
}
}
}
// ------------------- BCC ------------------
if(m_Message.isBccAvailable()) {
Vector sAddress = m_Message.getBcc();
int nAddressCount = sAddress.size();
if(sAddress == null) {
m_Out.close();
throw new MMEncoderException("The field BCC of the Multimedia Message is set to null.");
}
for(int i = 0; i < nAddressCount; i++) {
strValue = ((MMAddress)sAddress.elementAt(i)).getFullAddress();
if(strValue != null) {
m_Out.write(FN_BCC + 0x80);
m_Out.write(strValue.getBytes());
m_Out.write(0x00);
}
}
}
if (!(m_Message.isToAvailable() || m_Message.isCcAvailable() || m_Message.isBccAvailable())) {
m_Out.close();
throw new MMEncoderException("No recipient specified in the Multimedia Message.");
}
// ---------------- SUBJECT --------------
if(m_Message.isSubjectAvailable()) {
m_Out.write(FN_SUBJECT + 0x80);
m_Out.write(m_Message.getSubject().getBytes());
m_Out.write(0x00);
}
// ------------------- DELIVERY-REPORT ----------------
if(m_Message.isDeliveryReportAvailable()) {
m_Out.write(FN_DELIVERY_REPORT + 0x80);
if (m_Message.getDeliveryReport()==true)
m_Out.write(0x80);
else
m_Out.write(0x81);
}
// ------------------- SENDER-VISIBILITY ----------------
if(m_Message.isSenderVisibilityAvailable()) {
m_Out.write(FN_SENDER_VISIBILITY + 0x80);
m_Out.write(m_Message.getSenderVisibility());
}
// ------------------- READ-REPLY ----------------
if(m_Message.isReadReplyAvailable()) {
m_Out.write(FN_READ_REPLY + 0x80);
if (m_Message.getReadReply()==true)
m_Out.write(0x80);
else
m_Out.write(0x81);
}
// ---------------- MESSAGE CLASS ---------
if(m_Message.isMessageClassAvailable()) {
m_Out.write(FN_MESSAGE_CLASS + 0x80);
m_Out.write(m_Message.getMessageClass());
}
// ---------------- EXPIRY ----------------
if(m_Message.isExpiryAvailable()) {
long secs=(m_Message.getExpiry()).getTime() / 1000;
int data[] = EncodeMultiByteNumber(secs);
if(data == null) {
m_Out.close();
throw new MMEncoderException("An error occurred encoding the EXPIRY field of the Multimedia Message. The field is set to null");
}
int nCount = data[0];
m_Out.write(FN_EXPIRY + 0x80);
// Value-length
writeValueLength(nCount+2);
if (m_Message.isExpiryAbsolute()) {
// Absolute-token
m_Out.write(0x80);
} else {
// Relative-token
m_Out.write(0x81);
}
// Date-value or Delta-seconds-value
for(int i = 0; i <= nCount; i++) {
m_Out.write(data[i]);
}
}
// ---------------- DELIVERY TIME ----------------
if(m_Message.isDeliveryTimeAvailable()) {
long secs=(m_Message.getDeliveryTime()).getTime() / 1000;
int data[] = EncodeMultiByteNumber(secs);
if(data == null) {
m_Out.close();
throw new MMEncoderException("The field DELIVERY TIME of the Multimedia Message is set to null.");
}
int nCount = data[0];
m_Out.write(FN_DELIVERY_TIME + 0x80);
// Value-length
writeValueLength(nCount+2);
if (m_Message.isDeliveryTimeAbsolute()) {
// Absolute-token
m_Out.write(0x80);
} else {
// Relative-token
m_Out.write(0x81);
}
// Date-value or Delta-seconds-value
for(int i = 0; i <= nCount; i++) {
m_Out.write(data[i]);
}
}
// ---------------- PRIORITY ----------------
if(m_Message.isPriorityAvailable()) {
m_Out.write(FN_PRIORITY + 0x80);
m_Out.write(m_Message.getPriority());
}
// ---------------- CONTENT TYPE ----------------
if(m_Message.isContentTypeAvailable()) {
m_bMultipartRelated = false;
m_Out.write(FN_CONTENT_TYPE + 0x80);
byte ctype=encodeContentType(m_Message.getContentType());
if (ctype==0x33) {
// application/vnd.wap.multipart.related
m_bMultipartRelated = true;
int valueLength=1;
String mprt = m_Message.getMultipartRelatedType();
valueLength += mprt.length()+2;
String start = m_Message.getPresentationId();
valueLength += start.length()+2;
// Value-length
writeValueLength(valueLength);
// Well-known-media
m_Out.write(0x33+0x80);
// Parameters
// Type
m_Out.write(0x09+0x80);
m_Out.write(mprt.getBytes());
m_Out.write(0x00);
// Start
m_Out.write(0x0A+0x80);
m_Out.write(start.getBytes());
m_Out.write(0x00);
} else {
if (ctype > 0x00)
m_Out.write(ctype + 0x80);
else {
m_Out.write(m_Message.getContentType().getBytes());
m_Out.write(0x00);
}
}
} else {
m_Out.close();
throw new MMEncoderException("The field CONTENT TYPE of the Multimedia Message is not specified.");
}
// -------------------------- BODY -------------
int nPartsCount = m_Message.getNumContents();
m_Out.write(nPartsCount);
MMContent part = null;
for(int i = 0; i < nPartsCount; i++) {
part = m_Message.getContent(i);
boolean bRetVal = EncodePart(part);
if (!bRetVal) {
m_Out.close();
throw new MMEncoderException("The entry having Content-id = " + part.getContentId() + " cannot be encoded.");
}
}
break;
}
m_Out.close();
m_bMessageEcoded = true;
} catch (IOException e) {
throw new MMEncoderException("An IO error occurred encoding the Multimedia Message.");
}
}
private int[] EncodeMultiByteNumber(long lData) {
int data[] = new int[32];
long lDivider = 1L;
int nSize = 0;
long lNumber = lData;
for(int i = 0; i < 32; i++)
data[i] = 0;
for(int i = 4; i >= 0; i--) {
lDivider = 1L;
for(int j = 0; j < i; j++)
lDivider *= 256L;
int q = (int)(lNumber / lDivider);
if(q != 0 || nSize != 0) {
int r = (int)(lNumber % lDivider);
data[nSize + 1] = q;
lNumber = r;
nSize++;
}
}
data[0] = nSize;
return data;
}
private int[] EncodeUintvarNumber(long lData) {
int data[] = new int[32];
long lDivider = 1L;
int nSize = 0;
long lNumber = lData;
for(int i = 0; i < 32; i++)
data[i] = 0;
for(int i = 4; i >= 0; i--) {
lDivider = 1L;
for(int j = 0; j < i; j++)
lDivider *= 128L;
int q = (int)(lNumber / lDivider);
if(q != 0 || nSize != 0) {
int r = (int)(lNumber % lDivider);
data[nSize + 1] = q;
if(i != 0)
data[nSize + 1] += 128;
lNumber = r;
nSize++;
}
}
data[0] = nSize;
return data;
}
private boolean EncodePart(MMContent part) throws IOException {
if(part == null)
return false;
int nHeadersLen = 0; // nHeadersLen = nLengthOfContentType + nLengthOfHeaders
int nContentType = 0;
int nLengthOfHeaders=0;
int nLengthOfContentType=0;
// -------- HeadersLen = ContentType + Headers fields ---------
if ((part.getContentId().length()>0) && (m_bMultipartRelated)) {
if (part.getContentId().getBytes()[0]=='<') {
nLengthOfHeaders = 2 + (part.getContentId()).length() + 1;
// 2 = 0xC0 (Content-ID) + 0x22 (quotes)
// 1 = 0x00 (at the end of the contentID)
} else {
nLengthOfHeaders = 1 + (part.getContentId()).length()+1;
// 1 = 0x8E (Content-Location)
// 1 = 0x00 (end string)
}
}
// -------- DataLen -------------
long lDataLen = part.getLength();
// -------- ContentType ---------
nContentType = encodeContentType(part.getType()) + 128;
if (nContentType>0x80) {
// ---------- Well Known Content Types ------------------------------
if (nContentType == 0x83) { // text/plain
nLengthOfContentType = 4;
// 4 = 0x03 (Value Length)+ 0x83(text/plain) + 0x81 (Charset) + 0x83 (us-ascii code)
nHeadersLen = nLengthOfContentType + nLengthOfHeaders;
// write HeadersLen
writeUintvar(nHeadersLen);
// write DataLen
writeUintvar(lDataLen);
// write ContentType
m_Out.write(0x03); // length of content type
m_Out.write(nContentType);
m_Out.write(0x81); // charset parameter
m_Out.write(0x83); // us-ascii code
} else {
nLengthOfContentType = 1;
nHeadersLen = nLengthOfContentType + nLengthOfHeaders;
// write HeadersLen
writeUintvar(nHeadersLen);
// write DataLen
writeUintvar(lDataLen);
// write ContentType
m_Out.write(nContentType);
}
} else {
// ----------- Don't known Content Type
if (part.getType().equalsIgnoreCase(CT_APPLICATION_SMIL)) {
nLengthOfContentType = 1 + part.getType().length() + 3;
// 1 = 0x13 (Value Length)
// 3 = 0x00 + 0x81 (Charset) + 0x83 (us-ascii code)
nHeadersLen = nLengthOfContentType + nLengthOfHeaders;
// write HeadersLen
writeUintvar(nHeadersLen);
// write DataLen
writeUintvar(lDataLen);
// write ContentType
m_Out.write(0x13); //13 characters, actually part.getType().length()+1+1+1
m_Out.write(part.getType().getBytes());
m_Out.write(0x00);
m_Out.write(0x81); // charset parameter
m_Out.write(0x83); // ascii-code
} else {
nLengthOfContentType = part.getType().length() + 1;
// 1 = 0x00
nHeadersLen = nLengthOfContentType + nLengthOfHeaders;
// write HeadersLen
writeUintvar(nHeadersLen);
// write DataLen
writeUintvar(lDataLen);
// write ContentType
m_Out.write(part.getType().getBytes());
m_Out.write(0x00);
}
}
// writes the Content ID or the Content Location
if ((part.getContentId().length()>0) && (m_bMultipartRelated)) {
if (part.getContentId().getBytes()[0]=='<') {
System.out.println("--->QUOTED!!");
m_Out.write(0xC0);
m_Out.write(0x22);
m_Out.write(part.getContentId().getBytes());
m_Out.write(0x00);
} else {
// content id
m_Out.write(0x8E);
m_Out.write(part.getContentId().getBytes());
m_Out.write(0x00);
}
}
// ----------- Data --------------
byte data[] = part.getContent();
m_Out.write(data);
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -