/** Wake up the connection token while the connection is successfully established, then try to process any pending send token. @param[in, out] Sock Pointer to the socket. **/ VOID SockWakeConnToken ( IN OUT SOCKET *Sock ) { ASSERT (Sock->ConnectionToken != NULL); SIGNAL_TOKEN (Sock->ConnectionToken, EFI_SUCCESS); Sock->ConnectionToken = NULL; // // check to see if some pending send token existed? // SockProcessSndToken (Sock); }
/** Called by low layer protocol to indicate that some data is sent or processed. This function trims the sent data in the socket send buffer, signals the data token if proper. @param Sock Pointer to the socket. @param Count The length of the data processed or sent, in bytes. **/ VOID SockDataSent ( IN SOCKET *Sock, IN UINT32 Count ) { SOCK_TOKEN *SockToken; SOCK_COMPLETION_TOKEN *SndToken; ASSERT (!IsListEmpty (&Sock->ProcessingSndTokenList)); ASSERT (Count <= (Sock->SndBuffer.DataQueue)->BufSize); NetbufQueTrim (Sock->SndBuffer.DataQueue, Count); // // To check if we can signal some snd token in this socket // while (Count > 0) { SockToken = NET_LIST_HEAD ( &(Sock->ProcessingSndTokenList), SOCK_TOKEN, TokenList ); SndToken = SockToken->Token; if (SockToken->RemainDataLen <= Count) { RemoveEntryList (&(SockToken->TokenList)); SIGNAL_TOKEN (SndToken, EFI_SUCCESS); Count -= SockToken->RemainDataLen; FreePool (SockToken); } else { SockToken->RemainDataLen -= Count; Count = 0; } } // // to judge if we can process some send token in // Sock->SndTokenList, if so process those send token // SockProcessSndToken (Sock); return ; }