Mercurial > cgi-bin > hgwebdir.cgi > VMS > C_Libraries > BestEffortMessaging
comparison LossyCom.c @ 3:5c0fb7c519d7
Check for trigger counter overflow
| author | Merten Sach <msach@mailbox.tu-berlin.de> |
|---|---|
| date | Tue, 13 Mar 2012 15:21:36 +0100 |
| parents | b6dd31dbab8c |
| children | 7ba5a3a6102d |
comparison
equal
deleted
inserted
replaced
| 2:9863abc75bad | 3:9c4abe9486e0 |
|---|---|
| 106 { | 106 { |
| 107 if(senderEndpointID != localEndpoint->endpointID) | 107 if(senderEndpointID != localEndpoint->endpointID) |
| 108 { | 108 { |
| 109 msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID]; | 109 msgCopy = localEndpoint->centralExchange->outboxArray[senderEndpointID]; |
| 110 msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT); | 110 msgTrigger = 0xFFFF & (msgCopy >> TRIGGER_SHIFT); |
| 111 // check if the message is new (msg trigger > archived trigger) | 111 |
| 112 // and already valid (msgTrigger <= currentTriggerCopy) | 112 |
| 113 if(msgTrigger > localEndpoint->localTriggerCopy && | 113 if(msgTrigger > localEndpoint->localTriggerCopy || |
| 114 msgTrigger <= currentTriggerCopy) | 114 msgTrigger <= currentTriggerCopy) |
| 115 { | 115 { |
| 116 //printf("receive search until %d \n", currentTriggerCopy); | 116 // check if the message is new (msg trigger > archived trigger) |
| 117 //let the message handler parse the message | 117 // and already valid (msgTrigger <= currentTriggerCopy) |
| 118 msgBody = 0xFFFFFFFF & msgCopy; | 118 if((msgTrigger > localEndpoint->localTriggerCopy && |
| 119 receiverID = 0xFFFF & (msgCopy >> ENDPOINT_ID_SHIFT); | 119 msgTrigger <= currentTriggerCopy) || |
| 120 //only receive broadcast and p2p for own receiverID | 120 ((int64_t)currentTriggerCopy- // check for triggerCounterOverflow |
| 121 if(receiverID == BROADCAST_ID || | 121 (int64_t)localEndpoint->localTriggerCopy < -MAX_TRIGGER/2)) |
| 122 receiverID == localEndpoint->endpointID) | |
| 123 { | 122 { |
| 124 (*(localEndpoint->msgHandler))(senderEndpointID, | 123 //let the message handler parse the message |
| 125 msgBody, | 124 msgBody = 0xFFFFFFFF & msgCopy; |
| 126 localEndpoint->msgHandlerData); | 125 receiverID = 0xFFFF & (msgCopy >> ENDPOINT_ID_SHIFT); |
| 127 } | 126 //only receive broadcast and p2p for own receiverID |
| 127 if(receiverID == BROADCAST_ID || | |
| 128 receiverID == localEndpoint->endpointID) | |
| 129 { | |
| 130 (*(localEndpoint->msgHandler))(senderEndpointID, | |
| 131 msgBody, | |
| 132 localEndpoint->msgHandlerData); | |
| 133 } | |
| 134 } | |
| 128 } | 135 } |
| 129 } | 136 } |
| 130 senderEndpointID++; | 137 senderEndpointID++; |
| 131 } | 138 } |
| 132 } | 139 } |
