diff options
author | Anders Svensson <[email protected]> | 2011-09-14 11:50:50 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2011-09-14 11:57:41 +0200 |
commit | c7958e546c0c886f47a3075f7117a1cc59fe9fcc (patch) | |
tree | 486f228c03f1bff22ca01361217306e19e2f53cc /lib/diameter/src/transport | |
parent | e9e118a25ee822e4568d785844d249e083cd88cf (diff) | |
download | otp-c7958e546c0c886f47a3075f7117a1cc59fe9fcc.tar.gz otp-c7958e546c0c886f47a3075f7117a1cc59fe9fcc.tar.bz2 otp-c7958e546c0c886f47a3075f7117a1cc59fe9fcc.zip |
Handle #sctp_paddr_change and #sctp_pdapi_event from gen_sctp.
The events are enabled by default but diameter_sctp neither disabled
nor dealt with them. Reception of such an event caused a transport
process to crash.
Diffstat (limited to 'lib/diameter/src/transport')
-rw-r--r-- | lib/diameter/src/transport/diameter_sctp.erl | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/diameter/src/transport/diameter_sctp.erl b/lib/diameter/src/transport/diameter_sctp.erl index 92aa8488a0..46473e7bf1 100644 --- a/lib/diameter/src/transport/diameter_sctp.erl +++ b/lib/diameter/src/transport/diameter_sctp.erl @@ -525,7 +525,22 @@ recv({[#sctp_sndrcvinfo{stream = Id}], Bin}, #transport{parent = Pid}) recv({[], #sctp_shutdown_event{assoc_id = Id}}, #transport{assoc_id = Id}) -> - stop. + stop; + +%% Note that diameter_sctp(3) documents that sctp_events cannot be +%% specified in the list of options passed to gen_sctp and that +%% gen_opts/1 guards against this. This is to ensure that we know what +%% events to expect and also to ensure that we receive +%% #sctp_sndrcvinfo{} with each incoming message (data_io_event = +%% true). Adaptation layer events (ie. #sctp_adaptation_event{}) are +%% disabled by default so don't handle it. We could simply disable +%% events we don't react to but don't. + +recv({[], #sctp_paddr_change{}}, _) -> + ok; + +recv({[], #sctp_pdapi_event{}}, _) -> + ok. %% up/1 @@ -591,7 +606,7 @@ f([], _, _) -> %% assoc_id/1 -assoc_id(#sctp_shutdown_event{assoc_id = Id}) -> %% undocumented +assoc_id(#sctp_shutdown_event{assoc_id = Id}) -> Id; assoc_id(#sctp_assoc_change{assoc_id = Id}) -> Id; |