⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmdecoder.java

📁 nokia彩信发送api和实例
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)MMDecoder.java	1.1 build * * Copyright (c) Nokia Corporation 2002 * */package com.nokia.mms;import java.util.Date;import java.util.Hashtable;import java.util.Enumeration;/** * The MMDecoder class decodes an array of bytes representing a Multimedia Message (MM) * according with the specification. * The class can be used to obtain a MMMessage object from which you can access * to each field and content of the MM. * */public class MMDecoder implements IMMConstants {  static final boolean FLAG_DEBUG=false;  private MMMessage m_Message = null;  private int m_i=0;  private boolean m_bMultipartRelated = false;  private boolean m_bMessageAvailable = false;  private boolean m_bHeaderDecoded = false;  private byte[] m_In;  // ------------------------------------------------------------- BASIC RULES  private long readMultipleByteInt(int length) {    long value=0L;    int start=m_i;    int end=m_i+length-1;    for (int ii=end, weight=1; ii>=start; ii--, weight*=256) {      int bv=unsignedByte(m_In[ii]);      value =value + bv*weight;    }    m_i=end+1;    return value;  }  private String readTextString() {    String value="";    if (m_In[m_i]==0x22) {      // in this case it's a "Quoted-string"       m_i++;    }    while (m_In[m_i]>0) {      value=value+(char)m_In[m_i++];    }    m_i++;    return value;  }  private int readUintvar() {    int value=0;    int bv=unsignedByte(m_In[m_i]);    if (bv<0x80) {      value=bv;      m_i++;    } else { // In this case the format is "Variable Length Unsigned Integer"      boolean flag=true;      short count=0, inc=0;      // Count the number of byte needed for the number      while (flag) {	flag=(m_In[m_i+count]&0x80)==0x80;	count++;      }      inc=count;      count--;      int weight=1;      while (count>=0) {	bv=decodeByte(m_In[m_i+count])*weight;        weight*=128;        value=value+bv;	count--;      }       m_i+=inc;    }    return value;  }  private int readValueLength() {    int length=0;    int temp = m_In[m_i++];    if (temp < 31) {      length=temp;    } else    if (temp == 31) {      length = readUintvar();    }    return length;  }  private String readWellKnownMedia() {    String value="";    switch (decodeByte(m_In[m_i])) {      case 0x00: value= "*/*"; break;      case 0x01: value= "text/*"; break;      case 0x02: value= "text/html"; break;      case 0x03: value= "text/plain"; break;      case 0x04: value= "text/x-hdml"; break;      case 0x05: value= "text/x-ttml"; break;      case 0x06: value= "text/x-vCalendar"; break;      case 0x07: value= "text/x-vCard"; break;      case 0x08: value= "text/vnd.wap.wml"; break;      case 0x09: value= "text/vnd.wap.wmlscript"; break;      case 0x0A: value= "text/vnd.wap.channel"; break;      case 0x0B: value= "multipart/*"; break;      case 0x0C: value= "multipart/mixed"; break;      case 0x0D: value= "multipart/form-data"; break;      case 0x0E: value= "multipart/byteranges"; break;      case 0x0F: value= "multipart/alternative"; break;      case 0x10: value= "application/*"; break;      case 0x11: value= "application/java-vm"; break;      case 0x12: value= "application/x-www-form-urlencoded"; break;      case 0x13: value= "application/x-hdmlc"; break;      case 0x14: value= "application/vnd.wap.wmlc"; break;      case 0x15: value= "application/vnd.wap.wmlscriptc"; break;      case 0x16: value= "application/vnd.wap.channelc"; break;      case 0x17: value= "application/vnd.wap.uaprof"; break;      case 0x18: value= "application/vnd.wap.wtls-ca-certificate"; break;      case 0x19: value= "application/vnd.wap.wtls-user-certificate"; break;      case 0x1A: value= "application/x-x509-ca-cert"; break;      case 0x1B: value= "application/x-x509-user-cert"; break;      case 0x1C: value= "image/*"; break;      case 0x1D: value= "image/gif"; break;      case 0x1E: value= "image/jpeg"; break;      case 0x1F: value= "image/tiff"; break;      case 0x20: value= "image/png"; break;      case 0x21: value= "image/vnd.wap.wbmp"; break;      case 0x22: value= "application/vnd.wap.multipart.*"; break;      case 0x23: value= "application/vnd.wap.multipart.mixed"; break;      case 0x24: value= "application/vnd.wap.multipart.form-data"; break;      case 0x25: value= "application/vnd.wap.multipart.byteranges"; break;      case 0x26: value= "application/vnd.wap.multipart.alternative"; break;      case 0x27: value= "application/xml"; break;      case 0x28: value= "text/xml"; break;      case 0x29: value= "application/vnd.wap.wbxml"; break;      case 0x2A: value= "application/x-x968-cross-cert"; break;      case 0x2B: value= "application/x-x968-ca-cert"; break;      case 0x2C: value= "application/x-x968-user-cert"; break;      case 0x2D: value= "text/vnd.wap.si"; break;      case 0x2E: value= "application/vnd.wap.sic"; break;      case 0x2F: value= "text/vnd.wap.sl"; break;      case 0x30: value= "application/vnd.wap.slc"; break;      case 0x31: value= "text/vnd.wap.co"; break;      case 0x32: value= "application/vnd.wap.coc"; break;      case 0x33: value= "application/vnd.wap.multipart.related";               m_bMultipartRelated = true;               break;      case 0x34: value= "application/vnd.wap.sia"; break;      case 0x35: value= "text/vnd.wap.connectivity-xml"; break;      case 0x36: value= "application/vnd.wap.connectivity-wbxml"; break;    }    m_i++;    return value;  }  // ------------------------------------------------------- MMS Header Encoding  private String readContentTypeValue() {    int bv=unsignedByte(m_In[m_i]);    String value="";    if (bv>=0x80) { /* Constrained-media - Short Integer*/      // Short-integer: the assigned number of the well-known encoding is      // small enough to fit into Short-integer      value=readWellKnownMedia();    }    else /* Constrained-media - Extension-media*/    if (bv >= 0x20 && bv < 0x80) {      value = readTextString();    }    else /* Content-general-form */    if (bv < 0x20) {      int valueLength = readValueLength();      bv=unsignedByte(m_In[m_i]);      if (bv>=0x80) { //Well-known-media	int i2=m_i;        value=readWellKnownMedia();        if (value.equals("application/vnd.wap.multipart.related")) {          bv=decodeByte(m_In[m_i]);          if (bv==WKPA_TYPE) { // Type of the multipart/related            m_i++;            m_Message.setMultipartRelatedType( readTextString() );            bv=decodeByte(m_In[m_i]);            if (bv==WKPA_START) { // Start (it is the pointer to the presentetion part)              m_i++;	      m_Message.setPresentationId( readTextString() );            }          }        }	m_i=i2+valueLength;      } else {	int i2=m_i;        value=readTextString();	m_i=i2+valueLength;      }    }    return(value);  }  // ------------------------------------------------------------------ MMS Body  private void readMMBodyMultiPartRelated() {    int n=0;    int c_headerLen=0,c_dataLen=0;    String c_type="",c_id="";    byte [] c_buf;    int nEntries = m_In[m_i++];    while (n<nEntries) {      c_headerLen=readUintvar();      c_dataLen=readUintvar();      int freeze_i=m_i;      c_type=readContentTypeValue();      int c_typeLen=m_i-freeze_i;      c_id="A"+n;      if (c_headerLen-c_typeLen>0) {        if ((decodeByte(m_In[m_i])==HFN_CONTENT_LOCATION) ||           (decodeByte(m_In[m_i])==HFN_CONTENT_ID) ) {            m_i++;	    c_id=readTextString();        }      }      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++;    }  }  private void readMMBodyMultiPartMixed() {    int n=0;    int c_headerLen=0,c_dataLen=0;    String c_type="",c_id="";    byte [] c_buf;    int nEntries = m_In[m_i++];    while (n<nEntries) {      c_headerLen=readUintvar();      c_dataLen=readUintvar();      c_type=readContentTypeValue();      c_id="A"+n;      if (unsignedByte(m_In[m_i])==0x8E) {	m_i++;        c_id=readTextString();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -