void packetDecoder::decode(const unsigned char* pData, Info* opBuf , unsigned int pktLen, int linkProto){ Protocol currentProtocol; int offset; int nextProtocolId; offset = 0; currentProtocol = getLayerById(linkProto); if(currentProtocol == NULL){ printf("unknown protocol,id:%d\n", linkProto); } while(currentProtocol != NULL && (pktLen - offset > currentProtocol->getSize() // 剩余长度要大于协议的最小长度 )){ nextProtocolId = currentProtocol->ParseInfo(pData + offset, opBuf, pktLen); offset += currentProtocol->getSize(); if(nextProtocolId != UNKNOWN_PROTO){ currentProtocol = getLayerById(nextProtocolId); }else{ currentProtocol = NULL; } } }