726 { |
726 { |
727 BYTE* ptr = m_pBuffer; |
727 BYTE* ptr = m_pBuffer; |
728 long bytesRemaining = m_numberBytes; |
728 long bytesRemaining = m_numberBytes; |
729 long usedLen = 0; |
729 long usedLen = 0; |
730 bool done = false; |
730 bool done = false; |
|
731 long numberSkipped=0; |
731 |
732 |
732 while (!done) |
733 while (!done) |
733 { |
734 { |
734 DWORD fullMessageLength = bytesRemaining; |
735 DWORD fullMessageLength = bytesRemaining; |
735 DWORD rawLength = 0; |
736 DWORD rawLength = 0; |
736 BYTE* fullMessage = ptr; |
737 BYTE* fullMessage = ptr; |
737 BYTE* rawMessage = ptr; |
738 BYTE* rawMessage = ptr; |
738 BYTE msgId = 0; |
739 BYTE msgId = 0; |
739 if (m_Protocol->DecodeMessage(fullMessage, fullMessageLength, msgId, rawMessage, rawLength)) |
740 int result = m_Protocol->DecodeMessage(fullMessage, fullMessageLength, msgId, rawMessage, rawLength); |
|
741 if (result == DECODE_NOT_ENOUGH_BYTES_TO_SEARCH) |
|
742 { |
|
743 done = true; |
|
744 } |
|
745 else if (result == DECODE_MESSAGE_NOT_FOUND) |
|
746 { |
|
747 numberSkipped++; |
|
748 usedLen += fullMessageLength; |
|
749 bytesRemaining -= fullMessageLength; |
|
750 ptr += fullMessageLength; |
|
751 if (bytesRemaining < protocolHeaderLength) |
|
752 done = true; |
|
753 } |
|
754 else if (result == DECODE_MESSAGE_FOUND) |
740 { |
755 { |
741 err = PreProcessMessage(msgId, fullMessageLength, fullMessage); |
756 err = PreProcessMessage(msgId, fullMessageLength, fullMessage); |
742 if (err != TCAPI_ERR_NONE) |
757 if (err != TCAPI_ERR_NONE) |
743 { |
758 { |
|
759 PROCLOGOPEN(); |
|
760 PROCLOGA1("CTcpComm::ProcessBuffer Notify err = %x\n", err); |
|
761 PROCLOGCLOSE(); |
744 // notify all clients right now |
762 // notify all clients right now |
745 pConn->NotifyClientsCommError(err, false, 0); |
763 pConn->NotifyClientsCommError(err, false, 0); |
746 err = TCAPI_ERR_NONE; |
764 err = TCAPI_ERR_NONE; |
747 } |
765 } |
748 #ifdef _DEBUG |
766 #ifdef _DEBUG |
749 int reallen = fullMessageLength; |
767 int reallen = fullMessageLength; |
750 if (reallen > 50) reallen = 50; |
768 if (reallen > 80) reallen = 80; |
751 char msg[6]; |
769 char msg[6]; |
752 msg[0] = '\0'; |
770 msg[0] = '\0'; |
753 |
771 |
754 sLogMsg[0] = '\0'; |
772 sTcpLogMsg[0] = '\0'; |
755 if (reallen > 0) |
773 if (reallen > 0) |
756 { |
774 { |
757 sLogMsg[0] = '\0'; |
775 sTcpLogMsg[0] = '\0'; |
758 for (int i = 0; i < reallen; i++) |
776 for (int i = 0; i < reallen; i++) |
759 { |
777 { |
760 sprintf(msg, "%02.2x ", ptr[i]); |
778 if (isalnum(ptr[i])) |
761 strcat(sLogMsg, msg); |
779 { |
|
780 sprintf(msg, "%c", ptr[i]); |
|
781 } |
|
782 else |
|
783 { |
|
784 sprintf(msg, "%02.2x ", ptr[i]); |
|
785 } |
|
786 strcat(sTcpLogMsg, msg); |
762 } |
787 } |
763 } |
788 } |
764 #endif |
789 #endif |
765 PROCLOGOPEN(); |
790 PROCLOGOPEN(); |
766 PROCLOGA5("CRealSerialComm::ProcessBuffer - RouteMesssage pRegistry = %x id=%x len=%d len=%d\n msg=%s\n", pRegistry, msgId, fullMessageLength, rawLength, sLogMsg); |
791 PROCLOGA5("CTcpComm::ProcessBuffer - RouteMesssage pRegistry = %x id=%x len=%d len=%d msg=%s\n", pRegistry, msgId, fullMessageLength, rawLength, sTcpLogMsg); |
767 PROCLOGCLOSE(); |
792 PROCLOGCLOSE(); |
768 |
793 |
769 err = pRegistry->RouteMessage(msgId, fullMessage, fullMessageLength, rawMessage, rawLength); |
794 err = pRegistry->RouteMessage(msgId, fullMessage, fullMessageLength, rawMessage, rawLength); |
770 if (err != TCAPI_ERR_NONE) routingErr = err; // saved for future |
795 if (err != TCAPI_ERR_NONE) routingErr = err; // saved for future |
771 |
796 |
772 numberProcessed++; |
|
773 usedLen += fullMessageLength; |
|
774 bytesRemaining -= fullMessageLength; |
|
775 ptr += fullMessageLength; |
|
776 if (bytesRemaining < protocolHeaderLength) |
|
777 done = true; |
|
778 } |
|
779 else |
|
780 { |
|
781 numberProcessed++; |
797 numberProcessed++; |
782 usedLen += fullMessageLength; |
798 usedLen += fullMessageLength; |
783 bytesRemaining -= fullMessageLength; |
799 bytesRemaining -= fullMessageLength; |
784 ptr += fullMessageLength; |
800 ptr += fullMessageLength; |
785 if (bytesRemaining < protocolHeaderLength) |
801 if (bytesRemaining < protocolHeaderLength) |