📄 mmdecoder.java
字号:
} if (FLAG_DEBUG) System.out.println("c_type=("+c_type+") c_headerLen=("+c_headerLen+") c_dataLen=("+c_dataLen+") c_id=("+c_id+")"); MMContent mmc=new MMContent(); mmc.setType(c_type); mmc.setContentId(c_id); mmc.setContent(m_In,m_i,c_dataLen); m_Message.addContent(mmc); m_i+=c_dataLen; n++; } } // ---------------------------------------------------------------- MMS Header private void readMMHeader() { boolean flag_continue=true; while (flag_continue && m_i<m_In.length) { byte currentByte=decodeByte(m_In[m_i++]); switch (currentByte) { case FN_MESSAGE_TYPE: if (FLAG_DEBUG) System.out.println("FN_MESSAGE_TYPE (0C)"); m_Message.setMessageType(m_In[m_i]); m_i++; break; case FN_TRANSACTION_ID: if (FLAG_DEBUG) System.out.println("FN_TRANSACTION_ID (18)"); m_Message.setTransactionId(readTextString()); break; case FN_MESSAGE_ID: if (FLAG_DEBUG) System.out.println("FN_MESSAGE_ID (0B)"); m_Message.setMessageId(readTextString()); break; case FN_STATUS: if (FLAG_DEBUG) System.out.println("FN_STATUS (15)"); m_Message.setMessageStatus(m_In[m_i]); m_i++; break; case FN_MMS_VERSION: if (FLAG_DEBUG) System.out.println("FN_MMS_VERSION (0D)"); m_Message.setVersion(m_In[m_i]); m_i++; break; case FN_TO: if (FLAG_DEBUG) System.out.println("FN_TO (17)"); m_Message.addToAddress(new String (readTextString()) ); break; case FN_CC: if (FLAG_DEBUG) System.out.println("FN_CC (02)"); m_Message.addCcAddress(new String (readTextString()) ); break; case FN_BCC: if (FLAG_DEBUG) System.out.println("FN_BCC (01)"); m_Message.addBccAddress(new String (readTextString()) ); break; case FN_DATE: { if (FLAG_DEBUG) System.out.println("FN_DATE (05)"); int length=m_In[m_i++]; long msecs=readMultipleByteInt(length)*1000; m_Message.setDate( new Date(msecs) ); } break; case FN_DELIVERY_REPORT: { if (FLAG_DEBUG) System.out.println("FN_DELIVERY_REPORT (06)"); int value = unsignedByte(m_In[m_i++]); if (value==0x80) m_Message.setDeliveryReport(true); else m_Message.setDeliveryReport(false); break; } case FN_SENDER_VISIBILITY: if (FLAG_DEBUG) System.out.println("FN_STATUS (14)"); m_Message.setSenderVisibility(m_In[m_i]); m_i++; break; case FN_READ_REPLY: { if (FLAG_DEBUG) System.out.println("FN_READ_REPLY (10)"); int value = unsignedByte(m_In[m_i++]); if (value==0x80) m_Message.setReadReply(true); else m_Message.setReadReply(false); break; } case FN_FROM: { if (FLAG_DEBUG) System.out.println("FN_FROM (09)"); int valueLength = m_In[m_i++]; int addressPresentToken = unsignedByte(m_In[m_i++]); if (addressPresentToken == 0x80) { // Address-present-token m_Message.setFrom(new String (readTextString()) ); } } break; case FN_SUBJECT: if (FLAG_DEBUG) System.out.println("FN_SUBJECT (16)"); m_Message.setSubject( readTextString() ); break; case FN_MESSAGE_CLASS: if (FLAG_DEBUG) System.out.println("FN_MESSAGE_CLASS (0A)"); m_Message.setMessageClass(m_In[m_i++]); break; case FN_EXPIRY: { if (FLAG_DEBUG) System.out.println("FN_EXPIRY (08)"); int valueLength=readValueLength(); int tokenType=unsignedByte(m_In[m_i++]); long expiry=0; if (tokenType==128) { // Absolute-token int length=m_In[m_i++]; expiry=readMultipleByteInt(length)*1000; m_Message.setExpiryAbsolute(true); } if (tokenType==129) { // Relative-token m_Message.setExpiryAbsolute(false); // Read the Delta-seconds-value if (valueLength>3) { // Long Integer int length=m_In[m_i++]; expiry=readMultipleByteInt(length)*1000; } else { // Short Integhet (1 OCTECT) int b=m_In[m_i]&0x7F; expiry=b*1000; m_i++; } } m_Message.setExpiry( new Date(expiry) ); } break; case FN_DELIVERY_TIME: { if (FLAG_DEBUG) System.out.println("FN_DELIVERY_TIME (07)"); int valueLength=readValueLength(); int tokenType=unsignedByte(m_In[m_i++]); long deliveryTime=0; if (tokenType==128) { // Absolute-token m_Message.setDeliveryTimeAbsolute(true); int length=m_In[m_i++]; deliveryTime=readMultipleByteInt(length)*1000; } if (tokenType==129) { // Relative-token m_Message.setDeliveryTimeAbsolute(false); // Read the Delta-seconds-value if (valueLength>3) { // Long Integer int length=m_In[m_i++]; deliveryTime=readMultipleByteInt(length)*1000; } else { // Short Integhet (1 OCTECT) int b=m_In[m_i]&0x7F; deliveryTime=b*1000; m_i++; } } m_Message.setDeliveryTime( new Date(deliveryTime) ); } break; case FN_PRIORITY: if (FLAG_DEBUG) System.out.println("FN_PRIORITY (0F)"); m_Message.setPriority( m_In[m_i++] ); break; case FN_CONTENT_TYPE: if (FLAG_DEBUG) System.out.println("FN_CONTENT_TYPE (04)"); m_Message.setContentType( readContentTypeValue() ); flag_continue=false; break; } } } private byte decodeByte(byte value) { return ( (byte)(value & 0x7F) ); } private int unsignedByte(byte value) { if (value<0) { return (value+256); } else return value; } /** * Resets the Decoder object. * */ public void reset() { m_Message = null; m_bMultipartRelated = false; m_bMessageAvailable = false; m_bHeaderDecoded = false; m_In = null; } /** * Sets the buffer representing the Multimedia Message to be decoded. */ public void setMessage(byte buf[]) { m_Message = new MMMessage(); m_In = buf; m_bMessageAvailable = true; } /** * Decodes the header of the Multimedia Message. After calling this method * a MMMessage object, containing just the information related to the header and * without the contents, can be obtained by calling getMessage(). * This method has to be called after setMessage(byte buf[). */ public void decodeHeader() throws MMDecoderException { if (m_bMessageAvailable) { readMMHeader(); m_bHeaderDecoded = true; } else { throw new MMDecoderException("Message unavailable. You must call setMessage(byte[] buf) before calling this method."); } } /** * Decodes the body of the Multimedia Message. This method has to be called * after the method decodeHeader() */ public void decodeBody() throws MMDecoderException { if (!m_bHeaderDecoded) throw new MMDecoderException("You must call decodeHeader() before calling decodeBody()"); if ((m_Message.getContentType()).compareTo("application/vnd.wap.multipart.related")==0) readMMBodyMultiPartRelated(); else readMMBodyMultiPartMixed(); } /** * Decodes the whole Multimedia Message. After calling this method * a MMMessage object, containing the information related to the header and * the all contents, can be obtained by calling the method getMessage(). * This method has to be called after setMessage(byte buf[). */ public void decodeMessage() throws MMDecoderException { decodeHeader(); if (m_Message.getMessageType()==IMMConstants.MESSAGE_TYPE_M_SEND_REQ) decodeBody(); } public MMDecoder(byte buf[]) { setMessage(buf); } public MMDecoder() { } /** * Retrieves the MMMessage object. This method has to be called after the calling * of methods decodeMessage() or decodeHeader(). * * @return An object representing the decoded Multimedia Message */ public MMMessage getMessage() { if (m_bHeaderDecoded) return m_Message; else return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -