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