File 6791-dia-Add-callback-attributes-to-diameter_app.patch of Package erlang
From 5840899f21b8e524156499eb3cf5b12773e8458b Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Wed, 27 Sep 2023 16:07:06 +0200
Subject: [PATCH 1/2] dia: Add callback attributes to diameter_app
---
lib/diameter/src/base/diameter_app.erl | 83 +++++++++++++++++++++++-
lib/diameter/src/base/diameter_codec.erl | 8 +++
2 files changed, 89 insertions(+), 2 deletions(-)
diff --git a/lib/diameter/src/base/diameter_app.erl b/lib/diameter/src/base/diameter_app.erl
index 122f60dd88..39e33d9bc4 100644
--- a/lib/diameter/src/base/diameter_app.erl
+++ b/lib/diameter/src/base/diameter_app.erl
@@ -23,8 +23,87 @@
-behaviour(application).
%% application callbacks
--export([start/2,
- stop/1]).
+-export([start/2, stop/1]).
+
+-include_lib("diameter/include/diameter.hrl").
+
+-type peer_ref() :: term().
+-type capabilities() :: #diameter_caps{}.
+-type peer() :: {peer_ref(), capabilities()}.
+-type packet() :: diameter_codec:packet().
+-type state() :: term().
+-type message() :: diameter_codec:message().
+
+-callback handle_request(Packet, SvcName, Peer) -> Action when
+ Packet :: packet(),
+ SvcName :: term(),
+ Peer :: peer(),
+ Action :: Reply |
+ {relay, [Opt]} |
+ discard |
+ {eval | eval_packet, Action, PostF},
+ Reply :: {reply, packet() | message()} |
+ {answer_message,
+ 3000..3999 | 5000..5999} |
+ {protocol_error, 3000..3999},
+ Opt :: diameter:call_opt(),
+ PostF :: diameter:eval().
+
+-callback handle_error(Reason, Request, SvcName, Peer) -> Result when
+ Reason :: timeout | failover | term(),
+ Request :: message(),
+ SvcName :: diameter:service_name(),
+ Peer :: peer(),
+ Result :: term().
+
+-callback handle_answer(Packet, Request, SvcName, Peer) -> Result when
+ Packet :: packet(),
+ Request :: message(),
+ SvcName :: diameter:service_name(),
+ Peer :: peer(),
+ Result :: term().
+
+-callback prepare_retransmit(Packet, SvcName, Peer) -> Action when
+ Packet :: packet(),
+ SvcName :: diameter:service_name(),
+ Peer :: peer(),
+ Action :: Send | Discard |
+ {eval_packet, Action, PostF},
+ Send :: {send, packet() | message()},
+ Discard :: {discard, Reason :: term()} | discard,
+ PostF :: diameter:eval().
+
+-callback prepare_request(Packet, SvcName, Peer) -> Action when
+ Packet :: packet(),
+ SvcName :: diameter:service_name(),
+ Peer :: peer(),
+ Action :: Send | Discard |
+ {eval_packet, Action, PostF},
+ Send :: {send, packet() | message()},
+ Discard :: {discard, Reason :: term()} | discard,
+ PostF :: diameter:eval().
+
+-callback pick_peer(LocalCandidates, RemoteCandidates, SvcName, State) ->
+ Selection | false when
+ LocalCandidates :: [peer()],
+ RemoteCandidates :: [peer()],
+ SvcName :: diameter:service_name(),
+ State :: state(),
+ NewState :: state(),
+ Selection :: {ok, Peer} | {Peer, NewState},
+ Peer :: peer() | false.
+
+-callback peer_down(SvcName, Peer, State) -> NewState when
+ SvcName :: diameter:service_name(),
+ Peer :: peer(),
+ State :: state(),
+ NewState :: state().
+
+-callback peer_up(SvcName, Peer, State) -> NewState when
+ SvcName :: diameter:service_name(),
+ Peer :: peer(),
+ State :: state(),
+ NewState :: state().
%% start/2
diff --git a/lib/diameter/src/base/diameter_codec.erl b/lib/diameter/src/base/diameter_codec.erl
index f3f677295b..33caa5afca 100644
--- a/lib/diameter/src/base/diameter_codec.erl
+++ b/lib/diameter/src/base/diameter_codec.erl
@@ -42,6 +42,14 @@
-define(FLAGS(R,P,E,T), ?BIT(R):1, ?BIT(P):1, ?BIT(E):1, ?BIT(T):1, 0:4).
-define(FLAG(B,D), (if is_boolean(B) -> B; true -> 0 /= (D) end)).
+%% A diameter record created by the diameter compiler
+-type record() :: term().
+
+-type message() :: record() | maybe_improper_list().
+-type packet() :: #diameter_packet{}.
+
+-export_type([message/0, packet/0]).
+
-type u32() :: 0..16#FFFFFFFF.
-type u24() :: 0..16#FFFFFF.
-type u1() :: 0..1.
--
2.35.3