(1) Upon receiving a packet{OriginID, Flag, SenderID,MainrouterID, Seqnum, PayLoad} |
(2) If u is the sink then |
(3) If has enough packets |
(4) call the decoding procedure; |
(5) Else |
(6) waiting for next package; |
(7) End if |
(8) Else if senderID is in myChildren set then |
(9) If flag equals 1 then |
(10) If senderID is the first one in the parentlist of senderID then |
(11) If has enough packets |
(12) update flag and mainrouterID with 1 and u, respectively; |
(13) Else |
(14) reencode the packets and generate new packets, update flag and mainrouterID with 1 and u, respectively; |
(15) End if |
(16) Else |
(17) If has enough packets |
(18) update flag and mainrouterID with 0 and the first ID in the parentlist of senderID, respectively; |
(19) Else |
(20) reencode the packets and generate new packets, update flag and mainrouterID with 0 and the first ID in the parentlist of senderID, respectively; |
(21) End if |
(22) End if |
(23) Else if mainrouterID is in myChildren set then |
(24) If senderID is the first one in the parentlist of mainrouterID then |
(25) If has enough packets |
(26) update flag and mainrouterID with 1 and u, respectively; |
(27) Else |
(28) reencode the packets and generate new packets, update flag and mainrouterID with 1 and u, respectively; |
(29) End if |
(30) Else |
(31) If has enough packets |
(32) update flag and mainrouterID with 0 and the first ID in the parentlist of senderID, respectively; |
(33) Else |
(34) reencode the packets and generate new packets, update flag and mainrouterID with 0 and the first ID in the parentlist of senderID, respectively; |
(35) End if |
(36) End if |
(37) End if |
(38) generate new packets {originID, flag, mainrouterID,senderID, seqnum, payload(i)} and broadcast them; |
(39) Else |
(40) discard this packet; |
(41) End if |
(42) End upon |