From e5a830d607de01d43adb3efc8330fef27bd3f8fd Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 15 Oct 2011 21:48:43 +0200 Subject: [PATCH] tcap_tco_server: Fix ASN.1 encode of TR-UNI.req Handle the return value of the asn1 encoder, considering its use of iolists as well as the {ok, ...} return tuple --- TCAP/src/ITU/tcap_tco_server.erl | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/TCAP/src/ITU/tcap_tco_server.erl b/TCAP/src/ITU/tcap_tco_server.erl index 192a0a6..f57491c 100644 --- a/TCAP/src/ITU/tcap_tco_server.erl +++ b/TCAP/src/ITU/tcap_tco_server.erl @@ -487,15 +487,23 @@ handle_cast({'TR', 'UNI', request, UniParams}, State) {SequenceControl, ReturnOption, Importance} = UniParams#'TR-UNI'.qos, DialoguePortion = (UniParams#'TR-UNI'.userData)#'TR-user-data'.dialoguePortion, ComponentPortion = (UniParams#'TR-UNI'.userData)#'TR-user-data'.componentPortion, - TPDU = 'TR':encode('TCMessage', {unidirectional, #'Unidirectional'{ - dialoguePortion = DialoguePortion, components = ComponentPortion}}), - SccpParams = #'N-UNITDATA'{calledAddress = UniParams#'TR-UNI'.destAddress, - callingAddress = UniParams#'TR-UNI'.origAddress, - sequenceControl = SequenceControl, returnOption = ReturnOption, - importance = Importance, userData = TPDU}, - Module = State#state.module, - Module:send_primitive({'N', 'UNITDATA', request, SccpParams}, State#state.ext_state), - {noreply, State}; + case 'TR':encode('TCMessage', {unidirectional, #'Unidirectional'{ + dialoguePortion = DialoguePortion, components = ComponentPortion}}) of + {ok, TPDU} -> + TpduBin = iolist_to_binary(TPDU), + SccpParams = #'N-UNITDATA'{calledAddress = UniParams#'TR-UNI'.destAddress, + callingAddress = UniParams#'TR-UNI'.origAddress, + sequenceControl = SequenceControl, returnOption = ReturnOption, + importance = Importance, userData = TpduBin}, + Module = State#state.module, + Module:send_primitive({'N', 'UNITDATA', request, SccpParams}, State#state.ext_state), + {noreply, State}; + {error, Err} -> + error_logger:error_report(["Error generating ASN1", {error, Err}, + {dialogue_portion, DialoguePortion}, + {components, ComponentPortion}]), + {noreply, State} + end; handle_cast({'TR', 'BEGIN', request, BeginParams}, State) when is_record(BeginParams, 'TR-BEGIN') -> % Create a Transaction State Machine (TSM)