MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / TlsCommonReceive

Function TlsCommonReceive

NetworkPkg/HttpDxe/HttpsSupport.c:830–958  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

828
829**/
830EFI_STATUS
831EFIAPI
832TlsCommonReceive (
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 {

Callers 1

TlsReceiveOnePduFunction · 0.85

Calls 3

AllocatePoolFunction · 0.50
NetbufBuildExtFunction · 0.50
FreePoolFunction · 0.50

Tested by

no test coverage detected