1
digraph msn_tlp_receive_message {
2
node [style=dashed, fontsize=9];
3
edge [style=dashed, fontsize=9];
4
switchboard; "Other bridges";
6
node [style=bold, fontsize=12];
9
"msn_tlp.receive_message";
13
edge [arrowhead=empty];
14
"Other bridges" -> "msn_tlp.receive_message";
15
switchboard -> "msn_tlp.receive_message";
16
edge [arrowhead=normal];
18
"msn_tlp.receive_message" -> "is ACK?";
19
"is ACK?" -> "ignore it, return" [label="yes"];
20
"is ACK?" -> "is partial message?" [label="no"];
21
"is partial message?" -> "emit progress if EACH_FLAG" [label="yes"];
22
"is partial message?" -> "ack the chunk" [label="no"];
23
"emit progress if EACH_FLAG" -> "is follow-up?";
25
"is follow-up?" -> "write chunk to file object" [label="follow up"];
26
"write chunk to file object" -> "is the file ready?";
27
"is the file ready?" -> "stop processing, return" [label="no"];
28
"is the file ready?" -> "build long string if !STORAGE_FLAG" [label="yes"];
29
"build long string if !STORAGE_FLAG" -> "ack the chunk";
31
"is follow-up?" -> "create a file object" [label="first message"];
32
"create a file object" -> "save in incoming_pending_messages";
33
"save in incoming_pending_messages" -> "stop processing, return";
35
"ack the chunk" -> "ensure there is a file object if STORAGE_FLAG"
36
"ensure there is a file object if STORAGE_FLAG" ->
37
"session_id == 0 and flag == 0?";
39
"session_id == 0 and flag == 0?" ->
40
"create a SLPMessage" [label="yes"]
41
"session_id == 0 and flag == 0?" ->
42
"create an empty SLPMessage" [label="no"];
44
"create a SLPMessage" -> "signal for message type?";
45
"create an empty SLPMessage" -> "signal for message type?";
47
"signal for message type?" -> "msnp2p-file-received" [label="file"];
48
"signal for message type?" -> "invite-message-received" [label="invite"];
49
"signal for message type?" -> "msnp2p-message-received" [label="else"];