 
   @callback handle_close(state) :: any
 
+  # Public interface
+
   def start_link(host, port, {module, args}, opts \\ []) do
     transport = Keyword.get(opts, :transport, :tcp)
     gen_server_opts = Keyword.get(opts, :gen_server_opts, [])

    GenServer.call(esme, {:handle_send_pdu_result, pdu, send_pdu_result})
  end

  def init([host, port, mod_with_args, transport, timeout, esme_opts]) do
    esme = self
    handler = fn(ref, _socket, _transport, session) ->

  def handle_info({:tick, time}, st) do
    do_handle_tick(time, st)
  end

  # Private functions

  defp start_session(handler, host, port, transport, timeout) do
    case transport.connect(host, port, timeout) do
