\r
Pipe_Unfreeze();\r
\r
- PacketWaiting = Pipe_IsINReceived();\r
+ PacketWaiting = (Pipe_IsINReceived() && Pipe_BytesInPipe());\r
\r
Pipe_Freeze();\r
\r
\r
if (!(Pipe_IsReadWriteAllowed()))\r
{\r
+ if (Pipe_IsINReceived())\r
+ Pipe_ClearIN();\r
+ \r
*PacketLength = 0;\r
Pipe_Freeze();\r
return PIPE_RWSTREAM_NoError;\r
\r
RNDIS_Packet_Message_t DeviceMessage;\r
\r
+ if (Pipe_BytesInPipe() < sizeof(RNDIS_Packet_Message_t))\r
+ {\r
+ printf("*SIZE YARG: %d*\r\n", Pipe_BytesInPipe());\r
+ *PacketLength = 0;\r
+ Pipe_ClearIN();\r
+ return RNDIS_COMMAND_FAILED; \r
+ }\r
+ \r
if ((ErrorCode = Pipe_Read_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t),\r
NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)\r
{\r
return ErrorCode;\r
}\r
+ \r
+ if (DeviceMessage.MessageType != REMOTE_NDIS_PACKET_MSG)\r
+ {\r
+ printf("****YARG****\r\n");\r
+ *PacketLength = 0;\r
+ Pipe_ClearIN();\r
+ return RNDIS_COMMAND_FAILED;\r
+ }\r
\r
*PacketLength = (uint16_t)DeviceMessage.DataLength;\r
\r
NO_STREAM_CALLBACK);\r
\r
Pipe_Read_Stream_LE(Buffer, *PacketLength, NO_STREAM_CALLBACK);\r
- Pipe_ClearIN();\r
+ \r
+ if (!(Pipe_BytesInPipe()))\r
+ Pipe_ClearIN();\r
\r
Pipe_Freeze();\r
\r
Pipe_SelectPipe(RNDISInterfaceInfo->Config.DataOUTPipeNumber); \r
}\r
\r
- Pipe_Unfreeze();\r
-\r
RNDIS_Packet_Message_t DeviceMessage;\r
- \r
- DeviceMessage.MessageType = REMOTE_NDIS_PACKET_MSG;\r
+\r
+ memset(&DeviceMessage, 0, sizeof(RNDIS_Packet_Message_t));\r
+ DeviceMessage.MessageType = REMOTE_NDIS_PACKET_MSG;\r
DeviceMessage.MessageLength = (sizeof(RNDIS_Packet_Message_t) + PacketLength);\r
- DeviceMessage.DataOffset = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t));\r
- DeviceMessage.DataLength = PacketLength;\r
+ DeviceMessage.DataOffset = (sizeof(RNDIS_Packet_Message_t) - sizeof(RNDIS_Message_Header_t));\r
+ DeviceMessage.DataLength = PacketLength;\r
\r
+ Pipe_Unfreeze();\r
+\r
if ((ErrorCode = Pipe_Write_Stream_LE(&DeviceMessage, sizeof(RNDIS_Packet_Message_t),\r
NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)\r
{\r
+ if (RNDISInterfaceInfo->State.BidirectionalDataEndpoints)\r
+ Pipe_SetPipeToken(PIPE_TOKEN_IN);\r
+\r
return ErrorCode;\r
}\r
- \r
+\r
Pipe_Write_Stream_LE(Buffer, PacketLength, NO_STREAM_CALLBACK);\r
Pipe_ClearOUT();\r
\r