/*********************************************************** * 处理发送给tunnel的数据包 * - 功能:将新数据包加入发送队列,重传的数据包,更新状态 ***********************************************************/ func (utNack *UT_NACK) processSendPacket(p *udppacket.Packet) { /***** SEND *****/ if wrapper, ok := utNack.SendMap[p.TunnelId]; ok { wrapper.p = p wrapper.status = WRAPPER_STATUS_RTR } else { // 新包,发送队列中不存在该packet的wrapper wrapper = new(PACKET_WRAPPER) wrapper.p = p wrapper.status = WRAPPER_STATUS_SENDED utNack.SendMap[p.TunnelId] = wrapper } if p.TunnelId > utNack.maxSendId { utNack.maxSendId = p.TunnelId } /***** RECV *****/ otherTunnelId, flag := utNack.getNackPacketTunnelId() p.ChangeOtherTunnelId(otherTunnelId) p.ChangePacketType(flag) }