mms2r 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +54 -0
  3. data/README.txt +81 -0
  4. data/Rakefile +30 -0
  5. data/conf/mms2r_cingularmedia_transform.yml +6 -0
  6. data/conf/mms2r_sprintmedia_ignore.yml +10 -0
  7. data/conf/mms2r_tmobilemedia_ignore.yml +17 -0
  8. data/conf/mms2r_verizonmedia_ignore.yml +3 -0
  9. data/lib/mms2r.rb +3 -0
  10. data/lib/mms2r/cingular_media.rb +11 -0
  11. data/lib/mms2r/media.rb +345 -0
  12. data/lib/mms2r/mmode_media.rb +13 -0
  13. data/lib/mms2r/sprint_media.rb +50 -0
  14. data/lib/mms2r/tmobile_media.rb +11 -0
  15. data/lib/mms2r/verizon_media.rb +11 -0
  16. data/lib/mms2r/version.rb +12 -0
  17. data/lib/vendor/text/format.rb +1466 -0
  18. data/lib/vendor/tmail.rb +3 -0
  19. data/lib/vendor/tmail/address.rb +242 -0
  20. data/lib/vendor/tmail/attachments.rb +39 -0
  21. data/lib/vendor/tmail/base64.rb +71 -0
  22. data/lib/vendor/tmail/config.rb +69 -0
  23. data/lib/vendor/tmail/encode.rb +467 -0
  24. data/lib/vendor/tmail/facade.rb +552 -0
  25. data/lib/vendor/tmail/header.rb +914 -0
  26. data/lib/vendor/tmail/info.rb +35 -0
  27. data/lib/vendor/tmail/loader.rb +1 -0
  28. data/lib/vendor/tmail/mail.rb +447 -0
  29. data/lib/vendor/tmail/mailbox.rb +433 -0
  30. data/lib/vendor/tmail/mbox.rb +1 -0
  31. data/lib/vendor/tmail/net.rb +280 -0
  32. data/lib/vendor/tmail/obsolete.rb +135 -0
  33. data/lib/vendor/tmail/parser.rb +1522 -0
  34. data/lib/vendor/tmail/port.rb +377 -0
  35. data/lib/vendor/tmail/quoting.rb +131 -0
  36. data/lib/vendor/tmail/scanner.rb +41 -0
  37. data/lib/vendor/tmail/scanner_r.rb +263 -0
  38. data/lib/vendor/tmail/stringio.rb +277 -0
  39. data/lib/vendor/tmail/tmail.rb +1 -0
  40. data/lib/vendor/tmail/utils.rb +238 -0
  41. data/test/files/dot.jpg +0 -0
  42. data/test/files/sprint-image-01.mail +195 -0
  43. data/test/files/sprint-text-01.mail +8 -0
  44. data/test/files/sprint-video-01.mail +195 -0
  45. data/test/files/sprint.mov +0 -0
  46. data/test/files/verizon-image-01.mail +815 -0
  47. data/test/files/verizon-text-01.mail +11 -0
  48. data/test/files/verizon-video-01.mail +336 -0
  49. data/test/test_mms2r_cingular.rb +52 -0
  50. data/test/test_mms2r_media.rb +311 -0
  51. data/test/test_mms2r_mmode.rb +52 -0
  52. data/test/test_mms2r_sprint.rb +154 -0
  53. data/test/test_mms2r_tmobile.rb +169 -0
  54. data/test/test_mms2r_verizon.rb +74 -0
  55. metadata +130 -0
@@ -0,0 +1,11 @@
1
+ Date: Wed, 7 Mar 2007 02:04:20 GMT
2
+ Message-ID: <10059064.1173233055110.JavaMail.root@njbd-wigdb2>
3
+ Message-ID: <01234567.8901234567890.JavaMail.fooo@njbd-lalal3>
4
+ From: 2068675309@vzwpix.com
5
+ To: tommytutone@example.com
6
+ Subject: some text
7
+ Mime-Version: 1.0
8
+ Content-Type: text/plain; charset=utf-8
9
+ Content-Transfer-Encoding: 7bit
10
+
11
+ hello world
@@ -0,0 +1,336 @@
1
+ From: 2068675309@vzwpix.com
2
+ To: tommytutone@example.com
3
+ Subject:
4
+ Message-ID: <012345678901234567@-890123456789012345>
5
+ Date: Tue, 2 Jan 2007 13:22:45 -0600
6
+ MIME-Version: 1.0
7
+ Content-Type: multipart/mixed;
8
+ type="application/smil";
9
+ boundary="__CONTENT_01234_PART_BOUNDARY__01234567__"
10
+
11
+ --__CONTENT_01234_PART_BOUNDARY__01234567__
12
+ content-type: text/plain
13
+
14
+ This message was sent using PIX-FLIX Messaging service from Verizon Wireless!
15
+ To learn how you can snap pictures with your wireless phone visit
16
+ www.verizonwireless.com/getitnow/getpix.
17
+
18
+ To learn how you can record videos with your wireless phone visit www.verizonwireless.com/getitnow/getflix.
19
+
20
+ To play video messages sent to email, QuickTime� 6.5 or higher is required. Visit www.apple.com/quicktime/download to download the free player or upgrade your existing QuickTime� Player. Note: During the download
21
+ process when asked to choose an installation type (Minimum, Recommended or Custom), select Minimum for faster download.
22
+
23
+ --__CONTENT_01234_PART_BOUNDARY__01234567__
24
+ Content-Type: video/3gpp2;
25
+ name="012345_67890.3g2"
26
+ Content-Location: 012345_67890.3g2
27
+ Content-Transfer-Encoding: base64
28
+
29
+ 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
335
+ he4L7nwAAKEcf0+Lz2P3hfPvF52F/iQaloRD8Zg=
336
+ --__CONTENT_01234_PART_BOUNDARY__01234567__--
@@ -0,0 +1,52 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'test/unit'
3
+ require 'rubygems'
4
+ require 'mms2r'
5
+ require 'mms2r/media'
6
+ require 'tmail/mail'
7
+ require 'logger'
8
+
9
+ class MMS2RCingularTest < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @log = Logger.new(STDOUT)
13
+ @log.level = Logger::DEBUG
14
+ @log.datetime_format = "%H:%M:%S"
15
+
16
+ msg = <<EOF
17
+ Message-ID: <0000000.0000000000001.JavaMail.faalala@lalalala03>
18
+ Mime-Version: 1.0
19
+ From: 2068675309@mms.mycingular.com
20
+ To: tommytutone@example.com
21
+ Subject: text with ad
22
+ Date: Thu, 11 Jan 2007 02:28:22 -0500
23
+
24
+ hello world
25
+
26
+ --
27
+ ===============================================
28
+ Brought to you by, Cingular Wireless Messaging
29
+ http://www.CingularMe.COM/
30
+
31
+ EOF
32
+ @text_sms_with_ad = TMail::Mail.parse(msg)
33
+ end
34
+
35
+ def teadown; end
36
+
37
+ def test_clean_text_ad
38
+ mms = MMS2R::Media.create(@text_sms_with_ad,@log)
39
+ assert_equal(MMS2R::CingularMedia, mms.class, "expected a #{MMS2R::CingularMedia} and received a #{mms.class}")
40
+ mms.process
41
+ assert_not_nil(mms.media['text/plain'])
42
+ file = mms.media['text/plain'][0]
43
+ assert_not_nil(file)
44
+ assert(File::exist?(file), "file #{file} does not exist")
45
+ text = IO.readlines("#{file}").join
46
+ ad = "--\n===============================================\nBrought to you by, Cingular Wireless Messaging\nhttp://www.CingularMe.COM/ \n"
47
+ assert_no_match(/#{ad}/m, text)
48
+ good_text = "hello world\n\n"
49
+ assert_match(/#{good_text}/m, text)
50
+ mms.purge
51
+ end
52
+ end
@@ -0,0 +1,311 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+ require 'test/unit'
3
+ require 'rubygems'
4
+ require 'yaml'
5
+ require 'fileutils'
6
+ require 'mms2r'
7
+ require 'mms2r/media'
8
+ require 'tmail/mail'
9
+ require 'logger'
10
+
11
+ class MMS2RMediaTest < Test::Unit::TestCase
12
+
13
+ class MMS2R::FakeCarrier < MMS2R::Media; end
14
+
15
+ JENNYSNUMER = '2068675309'
16
+ GENERIC_CARRIER = 'mms.example.com'
17
+
18
+ CARRIER_TO_CLASS = {
19
+ 'unknowncarrier.tld' => MMS2R::Media,
20
+ 'mmode.com' => MMS2R::MModeMedia,
21
+ 'mms.mycingular.com' => MMS2R::CingularMedia,
22
+ 'pm.sprint.com' => MMS2R::SprintMedia,
23
+ 'messaging.sprintpcs.com' => MMS2R::SprintMedia,
24
+ 'tmomail.net' => MMS2R::TMobileMedia,
25
+ 'vzwpix.com' => MMS2R::VerizonMedia
26
+ }
27
+
28
+ def use_temp_dirs
29
+ MMS2R::Media.tmp_dir = @tmpdir
30
+ MMS2R::Media.conf_dir = @confdir
31
+ end
32
+
33
+ def setup
34
+ @log = Logger.new(STDOUT)
35
+ @log.level = Logger::DEBUG
36
+ @log.datetime_format = "%H:%M:%S"
37
+
38
+ @tmpdir = File.join(Dir.tmpdir, "#{Time.now.to_i}-t")
39
+ FileUtils.mkdir_p(@tmpdir)
40
+ @confdir = File.join(Dir.tmpdir, "#{Time.now.to_i}-c")
41
+ FileUtils.mkdir_p(@confdir)
42
+
43
+ @oldtmpdir = MMS2R::Media.tmp_dir
44
+ @oldconfdir = MMS2R::Media.conf_dir
45
+
46
+ msg = <<EOF
47
+ From:2068675309@mms.example.com
48
+ To:tommytutone@example.com
49
+ Subject: text only
50
+ Message-Id: <00000000000001.0123456789@mx.mms.example.com>
51
+ Date: Wed, 10 Jan 2007 08:18:30 -0600 (CST)
52
+
53
+ hello world
54
+ EOF
55
+ @hello_world_mail_plain_no_content_type = TMail::Mail.parse(msg)
56
+
57
+ msg = <<EOF
58
+ From:2068675309@mms.example.com
59
+ To:tommytutone@example.com
60
+ Subject: text only
61
+ Message-Id: <00000000000001.0123456789@mx.mms.example.com>
62
+ Content-Type: text/plain; charset=utf-8
63
+ Date: Wed, 10 Jan 2007 08:18:30 -0600 (CST)
64
+
65
+ hello world
66
+ EOF
67
+ @hello_world_mail_plain_with_content_type = TMail::Mail.parse(msg)
68
+
69
+ msg = <<EOF
70
+ Message-Id: <00000000000002.0123456789@mx.mms.example.com>
71
+ Mime-Version: 1.0
72
+ From: 2068675309@mms.example.com
73
+ To: tommytutone@example.com
74
+ Subject: text only
75
+ Date: Thu, 11 Jan 2007 02:28:22 -0500
76
+ Content-Type: multipart/mixed; boundary="----=_Part_1061064_5544954.1168500502466"
77
+
78
+ ------=_Part_1061064_5544954.1168500502466
79
+ Content-Type: text/plain; charset=utf-8
80
+ Content-Transfer-Encoding: base64
81
+ Content-Location: hello_world.txt
82
+ Content-Disposition: inline
83
+
84
+ aGVsbG8gd29ybGQ=
85
+ ------=_Part_1061064_5544954.1168500502466--
86
+
87
+ EOF
88
+ @hello_world_mail_multi = TMail::Mail.parse(msg)
89
+
90
+ msg = <<EOF
91
+ Mime-Version: 1.0
92
+ Message-Id: <00000000000001.0123456789@mx.mms.example.com>
93
+ Date: Sun, 29 Oct 2006 20:40:30 -0800 (PST)
94
+ To: tommytutone@example.com
95
+ From: 2068675309@mms.example.com
96
+ Subject: image test
97
+ Content-Type: multipart/related; type="multipart/alternative";
98
+ boundary="----=_Part_1224755_98719.1162204830872"; start="<SMIL.TXT>"
99
+ X-Mms-Delivery-Report: no
100
+
101
+ ------=_Part_1224755_98719.1162204830872
102
+ Content-Type: image/gif; name=spacer.gif
103
+ Content-Transfer-Encoding: base64
104
+ Content-Disposition: attachment; filename=spacer.gif
105
+ Content-ID: <spacer.gif>
106
+
107
+ R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==
108
+ ------=_Part_1224755_98719.1162204830872--
109
+
110
+ EOF
111
+ @simple_image_mail = TMail::Mail.parse(msg)
112
+ end
113
+
114
+ def teardown
115
+ FileUtils.rm_rf(@tmpdir)
116
+ FileUtils.rm_rf(@confdir)
117
+ MMS2R::Media.tmp_dir = @oldtmpdir
118
+ MMS2R::Media.conf_dir = @oldconfdir
119
+ end
120
+
121
+ def test_collect_simple_image
122
+ mms = MMS2R::Media.create(@simple_image_mail)
123
+ mms.process
124
+ assert_not_nil(mms.media['image/gif'])
125
+ file = mms.media['image/gif'][0]
126
+ assert_not_nil(file)
127
+ assert(File::exist?(file), "file #{file} does not exist")
128
+ assert(File.basename(file) =~ /spacer\.gif/, "file #{file} does not exist")
129
+ mms.purge
130
+ end
131
+
132
+ def test_collect_text_plain
133
+ mms = MMS2R::Media.create(@hello_world_mail_plain_no_content_type)
134
+ mms.process
135
+ assert_not_nil(mms.media['text/plain'])
136
+ file = mms.media['text/plain'][0]
137
+ assert_not_nil(file)
138
+ assert(File::exist?(file), "file #{file} does not exist")
139
+ text = IO.readlines("#{file}").join
140
+ assert_match(/hello world/, text)
141
+ mms.purge
142
+ end
143
+
144
+ def test_collect_text_multi
145
+ mms = MMS2R::Media.create(@hello_world_mail_multi)
146
+ mms.process
147
+ assert_not_nil(mms.media['text/plain'])
148
+ file = mms.media['text/plain'][0]
149
+ assert_not_nil(file)
150
+ assert(File::exist?(file), "file #{file} does not exist")
151
+ text = IO.readlines("#{file}").join
152
+ assert_match(/hello world/, text)
153
+ mms.purge
154
+ end
155
+
156
+ def test_purge
157
+ mail = TMail::Mail.new
158
+ mail.message_id = TMail.new_message_id
159
+ mail.from = ["#{JENNYSNUMER}@#{GENERIC_CARRIER}"]
160
+ mail.body = "hello world"
161
+ mms = MMS2R::Media.create(mail)
162
+ mms.process
163
+ file = mms.media['text/plain'][0]
164
+ assert(File::exist?(file), "file #{file} does not exist")
165
+ mms.purge
166
+ assert(!File::exist?(file), "file #{file} should not exist!")
167
+ end
168
+
169
+ def test_custom_media_carrier
170
+ cls = MMS2R::FakeCarrier
171
+ host = 'mms.fakecarrier.com'
172
+ MMS2R::CARRIER_CLASSES[host] = cls
173
+ mail = TMail::Mail.new
174
+ mail.from = ["#{JENNYSNUMER}@#{host}"]
175
+ mms = MMS2R::Media.create(mail)
176
+ assert_equal(cls, mms.class, "expected a #{cls} and received a #{mms.class}")
177
+ end
178
+
179
+ def test_create
180
+ CARRIER_TO_CLASS.each {|car, cls|
181
+ mail = TMail::Mail.new
182
+ mail.from = ["#{JENNYSNUMER}@#{car}"]
183
+ mms = MMS2R::Media.create(mail)
184
+ assert_equal(cls, mms.class, "expected a #{cls} and received a #{mms.class}")
185
+ mms = MMS2R::Media.create(mail)
186
+ assert_equal(cls, mms.class, "expected a #{cls} and received a #{mms.class}")
187
+ }
188
+ end
189
+
190
+ def test_logging
191
+ CARRIER_TO_CLASS.each {|car, cls|
192
+ mail = TMail::Mail.new
193
+ mail.from = ["#{JENNYSNUMER}@#{car}"]
194
+ mms = MMS2R::Media.create(mail,@log)
195
+ assert_equal(cls, mms.class, "expected a #{cls} and received a #{mms.class}")
196
+ }
197
+ end
198
+
199
+ def test_tmp_dir
200
+ use_temp_dirs()
201
+ MMS2R::Media.tmp_dir = @tmpdir
202
+ assert(MMS2R::Media.tmp_dir.eql?(@tmpdir))
203
+ end
204
+
205
+ def test_conf_dir
206
+ use_temp_dirs()
207
+ MMS2R::Media.conf_dir = @confdir
208
+ assert(MMS2R::Media.conf_dir.eql?(@confdir))
209
+ end
210
+
211
+ def test_transform_text
212
+ use_temp_dirs()
213
+ t={"hello world" => "foo bar"}
214
+ h={'text/plain' => t}
215
+ f = File.join(MMS2R::Media.conf_dir, 'mms2r_media_transform.yml')
216
+ File.open(f, 'w') do |out|
217
+ YAML.dump(h, out)
218
+ end
219
+ mms = MMS2R::Media.create(@hello_world_mail_plain_no_content_type)
220
+ mms.process
221
+ assert_not_nil(mms.media['text/plain'])
222
+ file = mms.media['text/plain'][0]
223
+ assert_not_nil(file)
224
+ assert(File::exist?(file), "file #{file} does not exist")
225
+ text = IO.readlines("#{file}").join
226
+ assert_match(/foo bar/, text)
227
+ mms.purge
228
+ end
229
+
230
+ def test_ignore_text
231
+ use_temp_dirs()
232
+ a=["hello world"]
233
+ h={'text/plain' => a}
234
+ f = File.join(MMS2R::Media.conf_dir, 'mms2r_media_ignore.yml')
235
+ File.open(f, 'w') do |out|
236
+ YAML.dump(h, out)
237
+ end
238
+ mms = MMS2R::Media.create(@hello_world_mail_plain_no_content_type)
239
+ mms.process
240
+ assert(mms.media['text/plain'].nil?)
241
+ assert(mms.media.size == 0)
242
+ mms.purge
243
+ end
244
+
245
+ def test_ignore_media
246
+ use_temp_dirs()
247
+ a=["spacer.gif"]
248
+ h={'image/gif' => a}
249
+ f = File.join(MMS2R::Media.conf_dir, 'mms2r_media_ignore.yml')
250
+ File.open(f, 'w') do |out|
251
+ YAML.dump(h, out)
252
+ end
253
+ mms = MMS2R::Media.create(@simple_image_mail)
254
+ mms.process
255
+ assert(mms.media['image/gif'].nil?)
256
+ assert(mms.media.size == 0)
257
+ mms.purge
258
+ end
259
+
260
+ def test_when_ignore_media_does_nothing
261
+ use_temp_dirs()
262
+ a=["foo.gif"]
263
+ h={'image/gif' => a}
264
+ f = File.join(MMS2R::Media.conf_dir, 'mms2r_media_ignore.yml')
265
+ File.open(f, 'w') do |out|
266
+ YAML.dump(h, out)
267
+ end
268
+ mms = MMS2R::Media.create(@simple_image_mail)
269
+ mms.process
270
+ assert(mms.media['image/gif'].size == 1)
271
+ assert(mms.media.size == 1)
272
+ mms.purge
273
+ end
274
+
275
+ def test_safe_message_id
276
+ mid1_b="1234abcd"
277
+ mid1_a="1234abcd"
278
+ mid2_b="<01234567.0123456789012.JavaMail.fooba@foo-bars999>"
279
+ mid2_a="012345670123456789012JavaMailfoobafoo-bars999"
280
+ assert(MMS2R::Media.safe_message_id(mid1_b).eql?(mid1_a))
281
+ assert(MMS2R::Media.safe_message_id(mid2_b).eql?(mid2_a))
282
+ end
283
+
284
+ def default_ext
285
+ assert(MMS2R::Media.default_ext('text').nil?)
286
+ assert(MMS2R::Media.default_ext('text/plain').eql?('plain'))
287
+ assert(MMS2R::Media.default_ext('image/jpeg').eql?('jpeg'))
288
+ assert(MMS2R::Media.default_ext('video/mp4').eql?('mp4'))
289
+ end
290
+
291
+ def test_part_type
292
+ assert(MMS2R::Media.part_type?(@hello_world_mail_plain_no_content_type).eql?('text/plain'))
293
+ assert(MMS2R::Media.part_type?(@hello_world_mail_plain_with_content_type).eql?('text/plain'))
294
+ assert(MMS2R::Media.part_type?(@hello_world_mail_multi.parts[0]).eql?('text/plain'))
295
+ assert(MMS2R::Media.part_type?(@simple_image_mail.parts[0]).eql?('image/gif'))
296
+ end
297
+
298
+ def test_main_type
299
+ assert(MMS2R::Media.main_type?(@hello_world_mail_plain_no_content_type).eql?('text'))
300
+ assert(MMS2R::Media.main_type?(@hello_world_mail_plain_with_content_type).eql?('text'))
301
+ assert(MMS2R::Media.main_type?(@hello_world_mail_multi.parts[0]).eql?('text'))
302
+ assert(MMS2R::Media.main_type?(@simple_image_mail.parts[0]).eql?('image'))
303
+ end
304
+
305
+ def test_sub_type
306
+ assert(MMS2R::Media.sub_type?(@hello_world_mail_plain_no_content_type).eql?('plain'))
307
+ assert(MMS2R::Media.sub_type?(@hello_world_mail_plain_with_content_type).eql?('plain'))
308
+ assert(MMS2R::Media.sub_type?(@hello_world_mail_multi.parts[0]).eql?('plain'))
309
+ assert(MMS2R::Media.sub_type?(@simple_image_mail.parts[0]).eql?('gif'))
310
+ end
311
+ end