## Proposed EDOVE Scheme
### Estimation of \(T_{h_{i}}\)
Hence, the proposed holding time in EDOVE will prefer the node that has large residual energy and has multiple smaller depth nodes with large depth variance to further avoid the data packet collision. Since, computation of the holding time requires residual battery power and distance information of its one-hop neighbor, therefore, each node exchanges this information in the neighbor request (NBR_REQ) and neighbor acknowledgment (NBR_ACK) packets, as in [20]. This information is tabulated in the neighbor table (NBR_TABLE). A detailed working principle of our proposed EDOVE scheme is illustrated in Algorithm 1. It is very obvious from the Algorithm 1 that once a node \(i\) receives the _data_ packet, it first checks whether the _data_ packet is already in packet queue, \(Q\), or not. If \(i\) did not already process the _data_ packet, then it verifies the timer for that packet. Next, \(i\) compares its depth to the one in the _data_ packet. If \(i\) is within the receivers of _data_\(\kappa_{i}\) and has more number of neighbors with less depth \(\kappa_{i}^{NF}\), then it computes the \(T_{h_{i}}\). Otherwise, \(i\) just updates the neighborhood table and drops the _data_ packet. When \(i\) computes the \(T_{h_{i}}\), then it sets this holding time value to the timer (\(\mathit{Timer}_{data}=T_{h_{i}}\)) and starts. While the _data_ timer is running and \(i\) receives another copy of the packet, then it just discards the packet and updates the number of copies received count. Once the \(\mathit{Timer}_{data}\) is triggered, \(i\) checks whether it a single copy or multiple copies of the _data_ packet. The node \(i\) drops the packet if it receives multiple copies. Otherwise, it forwards the _data_ packet with the updated depth, energy, etc. parameters in the packet. ```
Output:Forward or Discard data packet. Input :Node \(i\) receives \(data\) packet containing \(\{ID_{S},z_{S},E_{max},E_{min},t_{r}^{S},\mathit{Contents}\}\). 1\(Q\)= Packet Queue. 2\(\kappa_{i}\)= List of receivers. 3\(\kappa_{i}^{NF}\)= List of next-hop forwarders of \(i\). 4\(\mathit{Timer}_{data}\)= Timer for the received data packet. 5 if{data\(\
otin Q\)}then
6 Add data in \(Q\)
7 if\(\mathit{Timer}_{data}\) is \(\mathit{OFF}\)then
8\(\{t_{r}^{S},z_{S},E_{max},E_{min}\}\)\(\stackrel{{\mathit{get}}}{{\leftarrow}}\)data // When node is the receiver. 9 if\(i\in\kappa_{S}\)then
10 if\(\kappa_{i}^{NF}\
eq 0\)then
11 Compute \(e_{i}\) as in Equation (5)
12 Compute \(\delta_{i}\) as in Equation (6)
13 Calculate \(T_{h_{i}}\)
14 Set \(\mathit{Timer}_{data}=T_{h_{i}}\)
15 Start \(\mathit{Timer}_{data}\)
16 Call
17 end if
18
19 end for
20 Remove data from \(Q\)
21 Update One-hop NBR_Table
22 Drop data
23 Exit
24 else
25 Increment the received data packet count. 26 Update One-hop NBR_Table
27 Drop (data)
28 Exit
29 end if
30
31 Procedure \(\mathit{data}\),\(Q\)
32 if\(\mathit{data}\in Q\) & Count of received data \(>1\)then
33 Remove data from \(Q\): \(Q=Q\setminus\mathit{data}\)
34 Exit
35 else
36 Compute \(E_{max}\) and \(E_{min}\) from NBR_Table
37 Estimate depth \(z_{i}\) Update \(i\), \(z_{i}\), \(E_{max}\), \(E_{min}\) and \(t_{r}^{i}\) in data
38 Forward data
39 Remove data from \(Q\): \(PQ=PQ\setminus p\)
40 end if
41 return
```  
**Algorithm 1**Proposed EDOVE Scheme.