## 3 Proposed C-HARQ Protocol Design
### Scheme Description
For this purpose, the _C\({}_{Avl}\)_ signal can be designed to contain multiple fields for holding information related to the available-_CN Nodes_, such as, distance from destination, remaining level of energy, channel conditions _etc._  
An empty _Look-Up_ list indicates that none of the _CN Nodes_ have successfully overheard _Pac_-0 and the process goes into Phase 4, skipping the cooperation process (Phase 3), by transmitting a _NACK_. The source then starts again from Phase 1 by retransmitting _Pac_-0 to the destination. Otherwise, if even a single _CN Node_ is available, the cooperation process is deployed as follows:  
_Cooperation Process_:  
The first step of the process is to select a _CN Node_ from the _Look-Up_ list, for the destination to contact first. The simplest criteria would be to select them on the basis of their closeness to the destination, which can be realized by allowing the _C\({}_{Avl}\)_ signal to contain certain timestamp information which the destination can use to calculate the round-trip delay between itself and that _CN Node_. The _CN Node_ with the least round-trip delay can be chosen to be the best one. However, if this option is not available, a simple First-Come-First-Serve (FCFS) selection procedure can be used, where the _CNodes_ are selected in the order of their _C\({}_{Avl}\)_ arrival. The former is assumed to be the selection criteria for our analysis. Next, the process of contacting a _CNode_ basically involves transmission of a _NACK\({}_{\rm j}\)_ to the \(i\) th available-_CNode_ (_CNode_-i), asking for the FEC packet _Pac_-j. Following this mechanism the destination sends a _NACK_-1 to the closest _CNode_, which can be referred to as _CNode_-1. Upon receiving _NACK_-1, _CNode_-1 transmits _Pac_-1 to the destination. Destination saves the received _Pac_-1 as _saved_Pac_-1 then checks for errors in it by computing its own CRC. Here, the destination needs to maintain a special \"_status_\" vector so as to keep track of the status of the saved FEC packets; where, _status_=1 means the received FEC packet is error-free and doesn't require any retransmission, while _status_=0 means the _saved_Pac_-1 has some errors, and thus may require retransmission. Then, the destination tries to recover the original data by combining the _saved_Pac_-0 and _saved_Pac_-1 and then feeding it to the Viterbi decoder [17]. If the recovery is successful, an _ACK_ is sent to the source and the cooperation process terminates, otherwise, _NACK_-2 is sent to _CNode_-1 for the next FEC packet, _Pac_-2. On receiving _Pac_-2, destination saves it as _saved_Pac_-2 with its status set accordingly, and then utilizes it in the next Viterbi decoding attempt along with the previously saved packets. This process of FEC packet reception and Viterbi decoding continues in association with _CNode_-1 till the original data gets recovered or the transmission of the last FEC packet (_Pac_-_N\({}_{mx}\)_) from _CNode_-1 gets completed. In case the later happens and the error still persists, it is because of the either of the two possible cases: (1) none or only few of the total required correct FEC packets (error-free versions) are available, thus unable to fully utilize the error correction capability or (2) all the saved-FEC packets are correct but the count of errors in _saved_Pac_-0 is beyond the error correction capability of the convolution code. In the first case, the destination approaches the next closest available-_CNode_, _CNode_-2, for further cooperation, where, before sending a _NACK_, destination first checks the _status_ vector to identify all the incorrect FEC packets and sets the value of the _NACK_ accordingly. For example, if retransmission of _Pac_-j is required, the value of _NACK_ is set to \"j\". On reception of _NACK_j, _CNode_-2 finds the _Pac_-j from its buffer and transmits it to the destination. Destination overwrites the _saved_Pac_-j with the freshly received _Pac_-j; performs error detection and accordingly updates its _status_.