v2: Handle error case in SockCreateChild and fix typo issue when we destroy the socket Sock and its associated protocol control block, we need to first close the parent protocol, then remove the protocol from childHandle and last to free any data structures that allocated in CreateChild. But currently, we free the socket data (Socket ConfigureState) before removing the protocol form the childhandle. So if the up layer perform the driverbing stop to abort tcp session and send the tcp reset packet, it will failed. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zhang@intel.com> Cc: Wu Jiaxin <jiaxin.wu@intel.com> Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Ye Ting <ting.ye@intel.com> Reviewed-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   The function declaration that provided for Socket Interface.
 | |
| 
 | |
|   Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
 | |
| 
 | |
|   This program and the accompanying materials
 | |
|   are licensed and made available under the terms and conditions of the BSD License
 | |
|   which accompanies this distribution.  The full text of the license may be found at
 | |
|   http://opensource.org/licenses/bsd-license.php.
 | |
| 
 | |
|   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
|   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _SOCK_IMPL_H_
 | |
| #define _SOCK_IMPL_H_
 | |
| 
 | |
| #include "Socket.h"
 | |
| #include "TcpMain.h"
 | |
| 
 | |
| /**
 | |
|   Signal a event with the given status.
 | |
| 
 | |
|   @param[in] Token        The token's event is to be signaled.
 | |
|   @param[in] TokenStatus  The status to be sent with the event.
 | |
| 
 | |
| **/
 | |
| #define SIGNAL_TOKEN(Token, TokenStatus) \
 | |
|   do { \
 | |
|     (Token)->Status = (TokenStatus); \
 | |
|     gBS->SignalEvent ((Token)->Event); \
 | |
|   } while (0)
 | |
| 
 | |
| #define SOCK_HEADER_SPACE (60 + 60 + 72)
 | |
| 
 | |
| /**
 | |
|   Process the TCP send data, buffer the tcp txdata and append
 | |
|   the buffer to socket send buffer, then try to send it.
 | |
| 
 | |
|   @param[in]  Sock              Pointer to the socket.
 | |
|   @param[in]  TcpTxData         Pointer to the application provided send buffer.
 | |
| 
 | |
|   @retval EFI_SUCCESS           The operation completed successfully.
 | |
|   @retval EFI_OUT_OF_RESOURCES  Failed due to resource limits.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| SockProcessTcpSndData (
 | |
|   IN SOCKET   *Sock,
 | |
|   IN VOID     *TcpTxData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get received data from the socket layer to the receive token.
 | |
| 
 | |
|   @param[in, out]  Sock       Pointer to the socket.
 | |
|   @param[in, out]  RcvToken   Pointer to the application provided receive token.
 | |
| 
 | |
|   @return The length of data received in this token.
 | |
| 
 | |
| **/
 | |
| UINT32
 | |
| SockProcessRcvToken (
 | |
|   IN OUT SOCKET        *Sock,
 | |
|   IN OUT SOCK_IO_TOKEN *RcvToken
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Flush the sndBuffer and rcvBuffer of socket.
 | |
| 
 | |
|   @param[in, out]  Sock                  Pointer to the socket.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| SockConnFlush (
 | |
|   IN OUT SOCKET *Sock
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Cancel the tokens in the specific token list.
 | |
| 
 | |
|   @param[in]       Token                 Pointer to the Token. If NULL, all tokens 
 | |
|                                          in SpecifiedTokenList will be canceled.  
 | |
|   @param[in, out]  SpecifiedTokenList    Pointer to the token list to be checked.
 | |
|   
 | |
|   @retval EFI_SUCCESS          Cancel the tokens in the specific token listsuccessfully.
 | |
|   @retval EFI_NOT_FOUND        The Token is not found in SpecifiedTokenList.
 | |
|   
 | |
| **/
 | |
| EFI_STATUS
 | |
| SockCancelToken (
 | |
|   IN     SOCK_COMPLETION_TOKEN  *Token,
 | |
|   IN OUT LIST_ENTRY             *SpecifiedTokenList
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Create a socket with initial data SockInitData.
 | |
| 
 | |
|   @param[in]  SockInitData          Pointer to the initial data of the socket.
 | |
| 
 | |
|   @return Pointer to the newly created socket, return NULL when exception occured.
 | |
| 
 | |
| **/
 | |
| SOCKET *
 | |
| SockCreate (
 | |
|   IN SOCK_INIT_DATA *SockInitData
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Destroy a socket.
 | |
| 
 | |
|   @param[in, out]  Sock                  Pointer to the socket.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| SockDestroy (
 | |
|   IN OUT SOCKET *Sock
 | |
|   );
 | |
| 
 | |
| #endif
 |