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

📄 multimediaencoder.java

📁 Messaging- MIDP的是一个彩信客户端
💻 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 + -