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

📄 mmencoder.java

📁 nokia彩信发送api和实例
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                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 + -