Subject: [Megaco] Reply to audit all contexts, list of commands with specific terminations

From: "Raphael Tryster" <[email-masked]>
Date: Thu, 22 Oct 2009 21:11:08 +0200

Consider an MG that has terminations C1, C2 and C3.  C1 is in context 1,
C2 is in context 2, and C3 is in the null context.  What is the correct
reply to this transaction?

!/1 [192.168.59.1]:2944 T=2629{

C=*{O-AV=C1{AT{M}}, O-AV=C2{AT{M}}, O-AV=C3{AT{M}}}}

Answer 1:

MEGACO/1 [192.168.59.2]:2944

Reply=2629{

            Context=1{

AuditValue=C1{Media{LocalControl{Mode=SendReceive},TerminationState{Serv
iceStates=InService, Buffer=OFF}}}, 

                        AuditValue=C2{Error=435{"Termination not in
specified context"}},

                        AuditValue=C3{Error=435{"Termination not in
specified context"}}

            }, 

            Context=2{

                        AuditValue=C1{Error=435{"Termination not in
specified context"}},

AuditValue=C2{Media{LocalControl{Mode=SendReceive},TerminationState{Serv
iceStates=InService, Buffer=OFF}}},

                        AuditValue=C3{Error=435{"Termination not in
specified context"}}

            }

}

Answer 2:

MEGACO/1 [192.168.59.2]:2944

Reply=2629{

            Context=1{

AuditValue=C1{Media{LocalControl{Mode=SendReceive},TerminationState{Serv
iceStates=InService, Buffer=OFF}}},

            }, 

            Context=2{

AuditValue=C2{Media{LocalControl{Mode=SendReceive},TerminationState{Serv
iceStates=InService, Buffer=OFF}}}

            }

}

Answer 3:

MEGACO/1 [192.168.59.2]:2944

Reply=2629{

            Context=1{

AuditValue=C1{Media{LocalControl{Mode=SendReceive},TerminationState{Serv
iceStates=InService, Buffer=OFF}}}, 

                        AuditValue=C3{Error=431{"No TerminationID
matched a wildcard"}}

            }, 

            Context=2{

AuditValue=C2{Media{LocalControl{Mode=SendReceive},TerminationState{Serv
iceStates=InService, Buffer=OFF}}},

                        AuditValue=C3{Error=431{"No TerminationID
matched a wildcard"}}

            }

}

Why should it be Answer 1?  Although section 7.2.5 says that "the
command Context=*{AuditValue=t2/*{Audit{Packages}}} returns
Context=1{AuditValue=t2/1{Packages{ccc,ddd}}},
Context=2{AuditValue=t2/2{Packages{ccc,ddd}}}", this case is different,
because the terminations are enumerated explicitly, and so a reply is
expected for each termination listed, for each context that exists.  

Why should it be Answer 2?  Because of 6.3.2, "ContextID wildcarded
(ALL) with TerminationID specific: In the case where the ContextID is
wildcarded (i.e. ContextID = ALL) and the TerminationID is fully
specified, the effect is identical to a command specifying the non-NULL
context that contains the specified termination.  Thus a search must be
made to find the context and only one instance of the command is
executed. No errors are reported for contexts that do not contain the
specified termination".

Why should it be Answer 3?  Because 6.3.2 continues, "If the termination
is not contained in any (non-NULL) context then Error Code 431 ("No
TerminationID matched a wildcard") is returned".

Answer 2 seems to be the most manageable and useful, but that doesn't
count for much if an MGC is expecting a different format and will draw
wrong conclusions if it doesn't get it.  So, if anyone can see the right
answer clearly, I would appreciate it.

Raphael Tryster