コード例 #1
0
ファイル: ut_nack_module.go プロジェクト: zgbkny/gox
/***********************************************************
 * 处理发送给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)
}