📄 httpparser.c
字号:
pHttpHashHead->iNumber++;
return true;
}
else
{
pPrePacket = &(((PDOUBLE_LIST_PACKET)(pHttpHashHead->pTail))->packet);
if( ntohl( pTCPHeader->seq ) >= pPrePacket->nextSeqNumber )
{
//add tail
InitializeDoubleListItem( &pItem->doubleListItem );
pItem->doubleListItem.pPre = pHttpHashHead->pTail;
pHttpHashHead->pTail->pNext = &pItem->doubleListItem;
pHttpHashHead->pTail = &pItem->doubleListItem;
pHttpHashHead->iNumber++;
return true;
}
else
{
pListPacket = (PDOUBLE_LIST_PACKET)(PDOUBLE_LIST_PACKET)(pHttpHashHead->pTail)->pPre;
while( pListPacket )
{
if( ntohl(pTCPHeader->seq) >= pListPacket->packet.nextSeqNumber )
{
break;
}
pListPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pPre;
}
if( pListPacket )
{
//Handle the same packet
if( pListPacket->doubleListItem.pNext == NULL )
{
printk("pListPacket->doubleListItem.pNext\r\n");
}
pIPHeader2 = (struct iphdr*)((UCHAR *)(((PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext)->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( pTCPHeader->seq == pTCPHeader2->seq )
{
//same packet,
//change the old packe
//bgPrint("same packet\r\n");;
if( ((PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext)->packet.nextSeqNumber != pItem->packet.nextSeqNumber )
{
//new packet, change the old packet
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pListPacket->doubleListItem.pNext = &(pItem->doubleListItem);
pItem->doubleListItem.pPre = pOldPacket->doubleListItem.pPre;
pItem->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
((PDOUBLE_LIST_PACKET)pOldPacket->doubleListItem.pNext)->doubleListItem.pPre = &(pItem->doubleListItem);
else
pHttpHashHead->pTail = &(pItem->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pListPacket = pItem;
while( pListPacket && pListPacket->doubleListItem.pNext )
{
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pIPHeader2 = (struct iphdr*)(((UCHAR *)pOldPacket->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( ntohl( pTCPHeader2->seq ) < pListPacket->packet.nextSeqNumber )
{
pListPacket->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
{
pOldPacket->doubleListItem.pNext->pPre = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
}
else
{
pHttpHashHead->pTail = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
break;
}
}
else
break;
}
return true;
}
return false;
}
//add middle
//printk("Add Middle\r\n");
pItem->doubleListItem.pNext = pListPacket->doubleListItem.pNext;
pItem->doubleListItem.pPre = &pListPacket->doubleListItem;
pListPacket->doubleListItem.pNext->pPre = &(pItem->doubleListItem);
pListPacket->doubleListItem.pNext = &(pItem->doubleListItem);
pHttpHashHead->iNumber++;
pListPacket = pItem;
while( pListPacket && pListPacket->doubleListItem.pNext )
{
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pIPHeader2 = (struct iphdr*)(((UCHAR *)pOldPacket->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( ntohl( pTCPHeader2->seq ) < pListPacket->packet.nextSeqNumber )
{
pListPacket->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
{
pOldPacket->doubleListItem.pNext->pPre = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
}
else
{
pHttpHashHead->pTail = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
break;
}
}
else
break;
}
}
else
{
//add head
//printk("Add Head\r\n");
pIPHeader2 = (struct iphdr*)((UCHAR *)((PDOUBLE_LIST_PACKET)pHttpHashHead->pHead)->packet.buf + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( pTCPHeader->seq == pTCPHeader2->seq )
{
//same packet,
//reclaim the packet to the pLeisurePool
// printk("Add Head same packet\r\n");
if( ((PDOUBLE_LIST_PACKET)pHttpHashHead->pHead)->packet.nextSeqNumber != pItem->packet.nextSeqNumber )
{
//new packet, change the old packet
pOldPacket = (PDOUBLE_LIST_PACKET)pHttpHashHead->pHead;
pHttpHashHead->pHead = &(pItem->doubleListItem);
pItem->doubleListItem.pPre = NULL;
pItem->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
((PDOUBLE_LIST_PACKET)pOldPacket->doubleListItem.pNext)->doubleListItem.pPre = &(pItem->doubleListItem);
else
pHttpHashHead->pTail = &(pItem->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pListPacket = pItem;
while( pListPacket && pListPacket->doubleListItem.pNext )
{
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pIPHeader2 = (struct iphdr*)(((UCHAR *)pOldPacket->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( ntohl( pTCPHeader2->seq ) < pListPacket->packet.nextSeqNumber )
{
pListPacket->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
{
pOldPacket->doubleListItem.pNext->pPre = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
}
else
{
pHttpHashHead->pTail = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
break;
}
}
else
break;
}
return true;
}
return false;
}
pItem->doubleListItem.pNext = pHttpHashHead->pHead;
pItem->doubleListItem.pPre = NULL;
pHttpHashHead->pHead->pPre = &(pItem->doubleListItem);
pHttpHashHead->pHead = &(pItem->doubleListItem);
pHttpHashHead->iNumber++;
pListPacket = pItem;
while( pListPacket && pListPacket->doubleListItem.pNext )
{
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pIPHeader2 = (struct iphdr*)(((UCHAR *)pOldPacket->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( ntohl( pTCPHeader2->seq ) < pListPacket->packet.nextSeqNumber )
{
pListPacket->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
{
pOldPacket->doubleListItem.pNext->pPre = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
}
else
{
pHttpHashHead->pTail = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
break;
}
}
else
break;
}
}
}
}
}
else
{
if( pHttpHashHead->nextSSeqNumber == 0 )
{
if( ntohl( pTCPHeader->ack_seq) >= pHttpHashHead->cAck )
{
//SERVER the first node
pHttpHashHead->sAck = pHttpHashHead->nextSSeqNumber = pItem->packet.nextSeqNumber;
//pHttpHashHead->sAck = pHttpHashHead->nextSSeqNumber = ntohl( pTCPHeader->ack_seq );
pHttpHashHead->pSHead = pHttpHashHead->pSTail = pHttpHashHead->pSSeq = &pItem->doubleListItem;
pHttpHashHead->iNumber++;
return true;
}
else
return false;
}
if( ntohl( pTCPHeader->seq ) < pHttpHashHead->nextSSeqNumber )
return false;
if( pHttpHashHead->pSTail == NULL )
{
//the first node
pHttpHashHead->pSTail = pHttpHashHead->pSHead = &pItem->doubleListItem;
pHttpHashHead->iNumber++;
return true;
}
else
{
pPrePacket = &(((PDOUBLE_LIST_PACKET)(pHttpHashHead->pSTail))->packet);
if( ntohl( pTCPHeader->seq ) >= pPrePacket->nextSeqNumber )
{
//add tail
pItem->doubleListItem.pPre = pHttpHashHead->pSTail;
pHttpHashHead->pSTail->pNext = &(pItem->doubleListItem);
pHttpHashHead->pSTail = &(pItem->doubleListItem);
pHttpHashHead->iNumber++;
return true;
}
else
{
pListPacket = (PDOUBLE_LIST_PACKET)(pHttpHashHead->pSTail)->pPre;
while( pListPacket )
{
if( ntohl(pTCPHeader->seq) >= pListPacket->packet.nextSeqNumber )
{
break;
}
pListPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pPre;
}
if( pListPacket )
{
if( pListPacket->doubleListItem.pNext == NULL )
{
printk("server:pListPacket->doubleListItem.pNext\r\n");
}
pIPHeader2 = (struct iphdr*)((UCHAR *)(((PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext)->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( pTCPHeader->seq == pTCPHeader2->seq )
{
//same packet,
//reclaim the packet to the pLeisurePool
// printk("same packet\r\n");;
if( ((PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext)->packet.nextSeqNumber != pItem->packet.nextSeqNumber )
{
//new packet, change the old packet
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pListPacket->doubleListItem.pNext = &(pItem->doubleListItem);
pItem->doubleListItem.pPre = pOldPacket->doubleListItem.pPre;
pItem->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
((PDOUBLE_LIST_PACKET)pOldPacket->doubleListItem.pNext)->doubleListItem.pPre = &(pItem->doubleListItem);
else
pHttpHashHead->pSTail = &(pItem->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pListPacket = pItem;
while( pListPacket && pListPacket->doubleListItem.pNext )
{
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pIPHeader2 = (struct iphdr*)(((UCHAR *)pOldPacket->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( ntohl( pTCPHeader2->seq ) < pListPacket->packet.nextSeqNumber )
{
pListPacket->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
{
pOldPacket->doubleListItem.pNext->pPre = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
}
else
{
pHttpHashHead->pSTail = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
break;
}
}
else
break;
}
return true;
}
return false;
}
//add middle
//printk("Add Middle\r\n");
pItem->doubleListItem.pNext = pListPacket->doubleListItem.pNext;
pItem->doubleListItem.pPre = &(pListPacket->doubleListItem);
pListPacket->doubleListItem.pNext->pPre = &(pItem->doubleListItem);
pListPacket->doubleListItem.pNext = &(pItem->doubleListItem);
pHttpHashHead->iNumber++;
pListPacket = pItem;
while( pListPacket && pListPacket->doubleListItem.pNext )
{
pOldPacket = (PDOUBLE_LIST_PACKET)pListPacket->doubleListItem.pNext;
pIPHeader2 = (struct iphdr*)(((UCHAR *)pOldPacket->packet.buf) + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( ntohl( pTCPHeader2->seq ) < pListPacket->packet.nextSeqNumber )
{
pListPacket->doubleListItem.pNext = pOldPacket->doubleListItem.pNext;
if( pOldPacket->doubleListItem.pNext )
{
pOldPacket->doubleListItem.pNext->pPre = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
}
else
{
pHttpHashHead->pSTail = &(pListPacket->doubleListItem);
InitializeDoubleListItem( &(pOldPacket->doubleListItem) );
_InsertTailListNonLock( pFree, &(pOldPacket->doubleListItem) );
pHttpHashHead->iNumber--;
break;
}
}
else
break;
}
}
else
{
//add head
//printk("Add Head\r\n");
pIPHeader2 = (struct iphdr*)((UCHAR *)((PDOUBLE_LIST_PACKET)pHttpHashHead->pSHead)->packet.buf + ETHER_HDR_LEN );
pTCPHeader2 = (struct tcphdr *)( (UCHAR *)pIPHeader2 + (pIPHeader2->ihl)*4 );
if( pTCPHeader->seq == pTCPHeader2->seq )
{
//same packet,
//reclaim the packet to the pLeisurePool
// printk("Add Head same packet\r\n");
if( ((PDOUBLE_LIST_PACKET)pHttpHashHead->pSHead)->packet.nextSeqNumber != pItem->packet.nextSeqNumber )
{
//new packet, change the old packet
pOldPacket = (PDOUBLE_LIST_PACKET)pHttpHashHead->pSHead;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -