uax_qos::uax_qos()
{
mUser = 0;
mCallBack = 0;
m_RecvPacknum = 0;
m_usInWrongSeqCount = 0;
m_pQosT = (T_QOSU*)malloc(sizeof(T_QOSU) + QOS_MAX_MTU * QOS_QUEUE_NUM);
}
uax_qos::~uax_qos()
{
SAFE_FREE(m_pQosT);
}
int uax_qos::MDStartQos(QosCallBack CallBack, void* User)
{
unsigned char* QosBuffer = 0;
if (m_pQosT == NULL) {
printf("FATAL ERROR:m_pQosT is NULL at StartQos!\n");
return QOSU_INVALID_POINTER;
}
mUser = User;
mCallBack = CallBack;
/********************
* 是否已经接收到数据
*********************/
memset(m_pQosT,0,sizeof(T_QOSU));
m_pQosT->m_tLostDelay = QOS_MAX_LOSTDELAY;
QosBuffer = (unsigned char*)(m_pQosT + 1);
for (size_t i = 0; i < QOS_QUEUE_NUM; i++) {
m_pQosT->m_QosData[i].nLen = 0;
m_pQosT->m_QosData[i].pBuf = QosBuffer + i * QOS_MAX_MTU;
}
return QOSU_SUCCESS;
}
int uax_qos::MDPutPacketToQos(rtp_header_t* header, int size)
{
uint16 usPos = 0;
uint16 usPosRvl = 0;
uint16 leftPosNum = 0;
T_QOS_DATA* pQosData = NULL;
if (m_pQosT == NULL || size > QOS_MAX_MTU) {
printf("FATAL ERROR:m_pQosT is NULL or mtu > %d\n", QOS_MAX_MTU);
return QOSU_INVALID_POINTER;
}
uint16_t uSeqNum = ntohs(header->seq_number);
if (0 == m_pQosT->m_bRecv) {
/**************
*第一次接受数据
**************/
m_pQosT->m_bRecv = 1;
m_pQosT->endPos = 0;
m_pQosT->startPos = 0;
/*
*放入当前包
*/
{
pQosData = &m_pQosT->m_QosData[0];
pQosData->nLen = size;
pQosData->usSeq = uSeqNum;
pQosData->tIn = GetSysTimeMsecond();
memcpy(pQosData->pBuf, header, size);
m_RecvPacknum++;
m_pQosT->endSeq = uSeqNum;
m_pQosT->startSeq = uSeqNum;