424: def process_data_line ln
425: if ln == "."
426: if @databuffer.length > 0
427: receive_data_chunk @databuffer
428: @databuffer.clear
429: end
430:
431:
432: succeeded = proc {
433: send_data "250 Message accepted\r\n"
434: }
435: failed = proc {
436: send_data "550 Message rejected\r\n"
437: }
438:
439: d = receive_message
440:
441: if d.respond_to?(:set_deferred_status)
442: d.callback(&succeeded)
443: d.errback(&failed)
444: else
445: (d ? succeeded : failed).call
446: end
447:
448: @state.delete :data
449: else
450:
451: ln.slice!(0...1) if ln[0] == 46
452: @databuffer << ln
453: if @databuffer.length > @@parms[:chunksize]
454: receive_data_chunk @databuffer
455: @databuffer.clear
456: end
457: end
458: end