View Javadoc

1   /* ***** BEGIN LICENSE BLOCK *****
2    * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3    *
4    * The contents of this file are subject to the Mozilla Public License Version
5    * 1.1 (the "License"); you may not use this file except in compliance with
6    * the License. You may obtain a copy of the License at
7    * http://www.mozilla.org/MPL/
8    *
9    * Software distributed under the License is distributed on an "AS IS" basis,
10   * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11   * for the specific language governing rights and limitations under the
12   * License.
13   *
14   * The Original Code is "SMS Library for the Java platform".
15   *
16   * The Initial Developer of the Original Code is Markus Eriksson.
17   * Portions created by the Initial Developer are Copyright (C) 2002
18   * the Initial Developer. All Rights Reserved.
19   *
20   * Contributor(s):
21   *
22   * Alternatively, the contents of this file may be used under the terms of
23   * either the GNU General Public License Version 2 or later (the "GPL"), or
24   * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
25   * in which case the provisions of the GPL or the LGPL are applicable instead
26   * of those above. If you wish to allow use of your version of this file only
27   * under the terms of either the GPL or the LGPL, and not to allow others to
28   * use your version of this file under the terms of the MPL, indicate your
29   * decision by deleting the provisions above and replace them with the notice
30   * and other provisions required by the GPL or the LGPL. If you do not delete
31   * the provisions above, a recipient may use your version of this file under
32   * the terms of any one of the MPL, the GPL or the LGPL.
33   *
34   * ***** END LICENSE BLOCK ***** */
35  package org.marre.mms.transport.mm1;
36  
37  import java.io.IOException;
38  import java.io.OutputStream;
39  
40  import org.marre.mime.MimeBodyPart;
41  import org.marre.mime.MimeMultipart;
42  import org.marre.mime.encoder.MimeEncoder;
43  import org.marre.mms.MmsException;
44  import org.marre.mms.MmsHeaders;
45  import org.marre.wap.WapConstants;
46  import org.marre.wap.WapMimeEncoder;
47  import org.marre.wap.WspUtil;
48  import org.marre.wap.mms.MmsHeaderEncoder;
49  
50  /***
51   * 
52   * 
53   * @author Markus Eriksson
54   * @version $Id: Mm1Encoder.java,v 1.4 2005/01/25 18:59:48 c95men Exp $
55   */
56  public final class Mm1Encoder
57  {
58      private static MimeEncoder myWapMimeEncoder = new WapMimeEncoder();
59  
60      private static byte myWspEncodingVersion = WapConstants.WSP_ENCODING_VERSION_1_2;
61  
62      private Mm1Encoder()
63      {
64      }
65  
66      public static void writeMessageToStream(OutputStream out, MimeBodyPart theMessage, MmsHeaders theHeaders)
67              throws MmsException
68      {
69          try
70          {
71              // Add headers
72              writeHeadersToStream(out, theHeaders);
73  
74              // Add content-type
75  
76              // Prefer "vnd.wap.multipart..." instead of "multipart/..."
77              if (theMessage instanceof MimeMultipart)
78              {
79                  // Convert multipart headers...
80                  // TODO: Clone content type... We shouldn't change theMsg...
81                  String ct = theMessage.getContentType().getValue();
82                  String newCt = WspUtil.convertMultipartContentType(ct);
83                  theMessage.getContentType().setValue(newCt);
84              }
85  
86              MmsHeaderEncoder.writeHeaderContentType(myWspEncodingVersion, out, theMessage.getContentType());
87  
88              // Add content
89              myWapMimeEncoder.writeBody(out, theMessage);
90          }
91          catch (IOException ex)
92          {
93              throw new MmsException(ex.getMessage());
94          }
95      }
96  
97      private static void writeHeadersToStream(OutputStream out, MmsHeaders theHeaders) throws IOException
98      {
99          MmsHeaderEncoder.writeHeaderXMmsMessageType(out, theHeaders.getMessageType());
100         MmsHeaderEncoder.writeHeaderXMmsTransactionId(out, theHeaders.getTransactionId());
101         MmsHeaderEncoder.writeHeaderXMmsMmsVersion(out, theHeaders.getVersion());
102 
103         if (theHeaders.getTo() != null)
104         {
105             MmsHeaderEncoder.writeHeaderTo(out, theHeaders.getTo());
106         }
107         
108         if (theHeaders.getFrom() != null)
109         {
110             MmsHeaderEncoder.writeHeaderFrom(out, theHeaders.getFrom());
111         }
112         
113         if (theHeaders.getSubject() != null)
114         {
115             MmsHeaderEncoder.writeHeaderSubject(out, theHeaders.getSubject());
116         }
117         
118         // TODO: Add the rest of the headers
119     }
120 }