mms2r 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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