From 9f81a2df87317954e71e91cdb83dd9de06cbc7a2 Mon Sep 17 00:00:00 2001 From: lazedo Date: Thu, 24 Mar 2016 15:55:09 +0000 Subject: [PATCH] allow noreply in handle_other allows using HAPROXY with PROXY PROTOCOL which doesn't expect a reply --- src/gen_smtp_server_session.erl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gen_smtp_server_session.erl b/src/gen_smtp_server_session.erl index 102219ec..9dd4a860 100644 --- a/src/gen_smtp_server_session.erl +++ b/src/gen_smtp_server_session.erl @@ -91,7 +91,7 @@ -callback handle_VRFY(Address :: binary(), State :: state()) -> {'ok', string(), state()} | {'error', string(), state()}. -callback handle_other(Verb :: binary(), Args :: binary(), state()) -> - {string(), state()}. + {string() | 'noreply', state()}. @@ -614,9 +614,14 @@ handle_request({<<"STARTTLS">>, _Args}, #state{socket = Socket} = State) -> {ok, State}; handle_request({Verb, Args}, #state{socket = Socket, module = Module, callbackstate = OldCallbackState} = State) -> {Message, CallbackState} = Module:handle_other(Verb, Args, OldCallbackState), - socket:send(Socket, [Message, "\r\n"]), + maybe_reply(Message, Socket), {ok, State#state{callbackstate = CallbackState}}. +-spec(maybe_reply/2 :: (Message :: string() | 'noreply', Socket :: socket:socket()) -> 'ok' | {'error', any()}). +maybe_reply('noreply', _) -> 'ok'; +maybe_reply(Message, Socket) -> + socket:send(Socket, [Message, "\r\n"]). + -spec(parse_encoded_address/1 :: (Address :: binary()) -> {binary(), binary()} | 'error'). parse_encoded_address(<<>>) -> error; % empty