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