Make Control Endpoint stream transfers more reliable by adding in early aborts for unexpected new SETUP tokens, or unexpected status stage during control stream writes.
Fix corruption in Device RNDIS demos TCP stack when too many connections attempted simultaneously, freezing the device when a page was re-fetched before the first connection was closed. Fix incorrect model compatibility information in the Host LowLevel demo overview text files.
This commit is contained in:
		
							parent
							
								
									a9d5e129b7
								
							
						
					
					
						commit
						4421782b7f
					
				
					 18 changed files with 71 additions and 65 deletions
				
			
		| 
						 | 
				
			
			@ -381,19 +381,24 @@ int16_t TCP_ProcessTCPPacket(void* IPHeaderInStart, void* TCPHeaderInStart, void
 | 
			
		|||
				case TCP_Connection_Listen:
 | 
			
		||||
					if (TCPHeaderIN->Flags == TCP_FLAG_SYN)
 | 
			
		||||
					{
 | 
			
		||||
						/* SYN connection when closed starts a connection with a peer */
 | 
			
		||||
						/* SYN connection starts a connection with a peer */
 | 
			
		||||
						if (TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress,
 | 
			
		||||
						                           TCPHeaderIN->SourcePort, TCP_Connection_SYNReceived))
 | 
			
		||||
						{
 | 
			
		||||
							TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK);						
 | 
			
		||||
 | 
			
		||||
						TCPHeaderOUT->Flags = (TCP_FLAG_SYN | TCP_FLAG_ACK);				
 | 
			
		||||
						PacketResponse      = true;
 | 
			
		||||
									
 | 
			
		||||
						TCP_SetConnectionState(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort,
 | 
			
		||||
											   TCP_Connection_SYNReceived);
 | 
			
		||||
							ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);
 | 
			
		||||
 | 
			
		||||
							ConnectionInfo->SequenceNumberIn  = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);
 | 
			
		||||
							ConnectionInfo->SequenceNumberOut = 0;
 | 
			
		||||
							ConnectionInfo->Buffer.InUse      = false;
 | 
			
		||||
						}
 | 
			
		||||
						else
 | 
			
		||||
						{
 | 
			
		||||
							TCPHeaderOUT->Flags = TCP_FLAG_RST;
 | 
			
		||||
						}
 | 
			
		||||
											   
 | 
			
		||||
						ConnectionInfo = TCP_GetConnectionInfo(TCPHeaderIN->DestinationPort, IPHeaderIN->SourceAddress, TCPHeaderIN->SourcePort);
 | 
			
		||||
 | 
			
		||||
						ConnectionInfo->SequenceNumberIn  = (SwapEndian_32(TCPHeaderIN->SequenceNumber) + 1);
 | 
			
		||||
						ConnectionInfo->SequenceNumberOut = 0;
 | 
			
		||||
						ConnectionInfo->Buffer.InUse      = false;
 | 
			
		||||
						PacketResponse      = true;
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,7 +49,7 @@
 | 
			
		|||
		#define MAX_OPEN_TCP_PORTS              1
 | 
			
		||||
 | 
			
		||||
		/** Maximum number of TCP connections which can be sustained at the one time */
 | 
			
		||||
		#define MAX_TCP_CONNECTIONS             1
 | 
			
		||||
		#define MAX_TCP_CONNECTIONS             3
 | 
			
		||||
 | 
			
		||||
		/** TCP window size, giving the maximum number of bytes which can be buffered at the one time */
 | 
			
		||||
		#define TCP_WINDOW_SIZE                 512
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue