   @callback handle_send_pdu_result(Pdu.t, SMPPEX.SMPPHandler.send_pdu_result, state) :: state
 
   @callback handle_close(state) :: any
+
+  @callback handle_call(request, GenServer.from, state) :: {:reply, reply :: term, state} | {:noreply, state}
+
+  @callback handle_cast(request, state) :: state
+
+  @callback handle_info(request, state) :: state
 
   # Public interface
 


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

  # GenServer callbacks


  @default_timer_resolution 100

  @default_call_timeout 5000

  @type state :: term
  @type request :: term

  @callback init(args :: term) :: {:ok, state} | {:close, reason :: term}

  @callback handle_pdu(Pdu.t, state) :: state

