Receive the Packet by processing the associated HTTPS token. @param[in, out] HttpInstance Pointer to HTTP_PROTOCOL structure. @param[in] Packet The packet to transmit. @param[in] Timeout The time to wait for connection done. @retval EFI_SUCCESS The Packet is received. @retval EFI_INVALID_PARAMETER HttpInstance is NULL or Packet is
| 828 | |
| 829 | **/ |
| 830 | EFI_STATUS |
| 831 | EFIAPI |
| 832 | TlsCommonReceive ( |
| 833 | IN OUT HTTP_PROTOCOL *HttpInstance, |
| 834 | IN NET_BUF *Packet, |
| 835 | IN EFI_EVENT Timeout |
| 836 | ) |
| 837 | { |
| 838 | EFI_TCP4_RECEIVE_DATA *Tcp4RxData; |
| 839 | EFI_TCP6_RECEIVE_DATA *Tcp6RxData; |
| 840 | EFI_STATUS Status; |
| 841 | NET_FRAGMENT *Fragment; |
| 842 | UINT32 FragmentCount; |
| 843 | UINT32 CurrentFragment; |
| 844 | |
| 845 | Tcp4RxData = NULL; |
| 846 | Tcp6RxData = NULL; |
| 847 | |
| 848 | if ((HttpInstance == NULL) || (Packet == NULL)) { |
| 849 | return EFI_INVALID_PARAMETER; |
| 850 | } |
| 851 | |
| 852 | FragmentCount = Packet->BlockOpNum; |
| 853 | Fragment = AllocatePool (FragmentCount * sizeof (NET_FRAGMENT)); |
| 854 | if (Fragment == NULL) { |
| 855 | Status = EFI_OUT_OF_RESOURCES; |
| 856 | goto ON_EXIT; |
| 857 | } |
| 858 | |
| 859 | // |
| 860 | // Build the fragment table. |
| 861 | // |
| 862 | NetbufBuildExt (Packet, Fragment, &FragmentCount); |
| 863 | |
| 864 | if (!HttpInstance->LocalAddressIsIPv6) { |
| 865 | Tcp4RxData = HttpInstance->Tcp4TlsRxToken.Packet.RxData; |
| 866 | if (Tcp4RxData == NULL) { |
| 867 | return EFI_INVALID_PARAMETER; |
| 868 | } |
| 869 | Tcp4RxData->FragmentCount = 1; |
| 870 | } else { |
| 871 | Tcp6RxData = HttpInstance->Tcp6TlsRxToken.Packet.RxData; |
| 872 | if (Tcp6RxData == NULL) { |
| 873 | return EFI_INVALID_PARAMETER; |
| 874 | } |
| 875 | Tcp6RxData->FragmentCount = 1; |
| 876 | } |
| 877 | |
| 878 | CurrentFragment = 0; |
| 879 | Status = EFI_SUCCESS; |
| 880 | |
| 881 | while (CurrentFragment < FragmentCount) { |
| 882 | if (!HttpInstance->LocalAddressIsIPv6) { |
| 883 | Tcp4RxData->DataLength = Fragment[CurrentFragment].Len; |
| 884 | Tcp4RxData->FragmentTable[0].FragmentLength = Fragment[CurrentFragment].Len; |
| 885 | Tcp4RxData->FragmentTable[0].FragmentBuffer = Fragment[CurrentFragment].Bulk; |
| 886 | Status = HttpInstance->Tcp4->Receive (HttpInstance->Tcp4, &HttpInstance->Tcp4TlsRxToken); |
| 887 | } else { |
no test coverage detected