MscGen
From Wikipedia, the free encyclopedia
MscGen will generate message sequence charts from a simple to manage text-based source file. There is an extension for MediaWiki and a customization for Doxygen that allows these flows to be embedded into source code comments and the diagrams to be inserted into the generated documentation page. The following example is from the author:
msc { a,b,c; a->b [label="ab()"] ; b->c [label="bc(TRUE)"]; c=>c [label="process(1)"]; c=>c [label="process(2)"]; ...; c=>c [label="process(n)"]; c=>c [label="process(END)"]; a<<=c [label="callback()"]; --- [label="If more to run", ID="*"]; a->a [label="next()"]; a->c [label="ac()"]; b<-c [label="cb(TRUE)"]; b->b [label="stalled(...)"]; a<-b [label="ab() = FALSE"]; }
Here are two examples of input and output for some standard SIP message flows:
[edit] Simple Call Flow
msc { UAS, UAC; UAS->UAC [label="INVITE"]; UAS<-UAC [label="100 Trying"]; UAS<-UAC [label="180 Ringing"]; --- [label="the client plays ringing"]; UAS<-UAC [label="200 Ok"]; UAS->UAC [label="ACK"]; ...; --- [label="the client hangs up"]; UAS<-UAC [label="BYE"]; UAS<-UAC [label="200 Ok"]; }
[edit] Alice calls Bob with Intermediary Proxies
msc { Alice, P1, P2, Bob; Alice->P1 [label="INVITE"]; Alice<-P1 [label="100 Trying"]; P1->P2 [label="INVITE"]; P1<-P2 [label="100 Trying"]; P2->Bob [label="INVITE"]; P2<-Bob [label="100 Trying"]; P2<-Bob [label="180 Ringing"]; P1<-P2 [label="180 Ringing"]; Alice<-P1 [label="180 Ringing"]; --- [label="Alice's client plays ringing"]; ...; --- [label="Bob answers"]; P2<-Bob [label="200 Ok"]; P1<-P2 [label="200 Ok"]; Alice<-P1 [label="200 Ok"]; Alice->P1 [label="ACK"]; P1->P2 [label="ACK"]; P2->Bob [label="ACK"]; --- [label="two way media"]; ...; --- [label="Bob hangs up"]; P2<-Bob [label="BYE"]; P2->Bob [label="200 Ok"]; P1<-P2 [label="BYE"]; P1->P2 [label="200 Ok"]; Alice<-P1 [label="BYE"]; Alice->P1 [label="200 Ok"]; }