Types
ConnHandle = conn_handle()
ProtocolVersion = protocol_version()
UserReply = success() | failure()
success() = {ok, result()}
result() = transaction_result() | segment_result()
transaction_result() = action_reps()
segment_result() = {segment_no(), last_segment(), action_reps()}
action_reps() = [action_reply()]
failure() = {error, reason()} | {error, ReplyNo, reason()}
reason() = transaction_reason() | segment_reason() | user_cancel_reason() | send_reason() | other_reason()
transaction_reason() = error_desc()
segment_reason() = {segment_no(), last_segment(), error_desc()}
other_reason() = timeout | {segment_timeout, missing_segments()} | exceeded_recv_pending_limit | term()
last_segment() = bool()
missing_segments() = [segment_no()]
user_cancel_reason() = {user_cancel, reason_for_user_cancel()}
reason_for_user_cancel() = term()
send_reason() = send_cancelled_reason() | send_failed_reason()
send_cancelled_reason() = {send_message_cancelled, reason_for_send_cancel()}
reason_for_send_cancel() = term()
send_failed_reason() = {send_message_failed, reason_for_send_failure()}
reason_for_send_failure() = term()
ReplyData = reply_data()
ReplyNo = integer() > 0
reply_data() = term()
Extra = term()
Optionally invoked for a transaction reply
The sender of a transaction request has the option of
deciding, whether the originating Erlang process should
synchronously wait (megaco:call/3) for a reply or if the
message should be sent asynchronously (megaco:cast/3) and
the processing of the reply should be delegated this
callback function.
Note that if the reply is segmented (split into several smaller
messages; segments), then some extra info, segment number and
an indication if all segments of a reply has been received or
not, is also included in the UserReply.
The ReplyData defaults to
megaco:lookup(ConnHandle, reply_data),
but may be explicitly overridden by a
megaco:cast/3 option in order to forward info about the
calling context of the originating process.
At success(), the UserReply either contains:
-
A list of 'ActionReply' records possibly containing
error indications.
-
A tuple of size three containing:
the segment number,
the last segment indicator and finally
a list of 'ActionReply' records possibly containing error
indications. This is of course only possible if the
reply was segmented.
failure() indicates an local or external error and
can be one of the following:
-
A transaction_reason(), indicates that the remote
user has replied with an explicit transactionError.
-
A segment_reason(), indicates that the remote user
has replied with an explicit transactionError for this
segment. This is of course only possible if the reply was
segmented.
-
A user_cancel_reason(), indicates that the request
has been canceled by the user. reason_for_user_cancel()
is the reason given in the call to the
cancel
function.
-
A send_reason(), indicates that the transport module
send_message
function did not send the message. The reason for this can be:
-
send_cancelled_reason() - the message sending was
deliberately cancelled. reason_for_send_cancel()
is the reason given in the cancel return
from the
send_message
function.
-
send_failed_reason() - an error occurred while attempting to
send the message.
-
An other_reason(), indicates some other error such
as:
-
timeout - the reply failed to arrive before the
request timer expired.
-
{segment_timeout, missing_segments()} -
one or more segments
was not delivered before the expire of the segment
timer.
-
exceeded_recv_pending_limit - the pending
limit was exceeded for this request.
See note
above about the Extra argument in
handle_trans_reply/5.