// File: /workspace/github_c_makefile_star2_O1/hkshenSmart[P]ONVIF-discovery_cs/stdsoap2.c
// Function: soap_end_recv
SOAP_FMAC2
soap_end_recv(struct soap *soap)
{ soap->part = SOAP_END;
#ifndef WITH_LEAN
  soap->wsuid = NULL;		/* reset before next send */
  soap->c14nexclude = NULL;	/* reset before next send */
#endif
#ifndef WITH_LEANER
  soap->ffilterrecv = NULL;
  if ((soap->mode & SOAP_ENC_DIME) && soap_getdime(soap))
  { soap->dime.first = NULL;
    soap->dime.last = NULL;
    return soap->error;
  }
  soap->dime.list = soap->dime.first;
  soap->dime.first = NULL;
  soap->dime.last = NULL;
  /* Check if MIME attachments and mime-post-check flag is set, if so call soap_resolve() and return */
  if (soap->mode & SOAP_ENC_MIME)
  { if (soap->mode & SOAP_MIME_POSTCHECK)
    { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Post checking MIME attachments\n"));
      if (!soap->keep_alive)
        soap->keep_alive = -1;
#ifndef WITH_NOIDREF
      soap_resolve(soap);
#endif
      return SOAP_OK;
    }
    if (soap_getmime(soap))
      return soap->error;
  }
  soap->mime.list = soap->mime.first;
  soap->mime.first = NULL;
  soap->mime.last = NULL;
  soap->mime.boundary = NULL;
  if (soap->xlist)
  { struct soap_multipart *content;
    for (content = soap->mime.list; content; content = content->next)
      soap_resolve_attachment(soap, content);
  }
#endif
  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "End of receive message ok\n"));
#ifdef WITH_ZLIB
  if (soap->mode & SOAP_ENC_ZLIB)
  { /* Make sure end of compressed content is reached */
    while (soap->d_stream->next_out != Z_NULL)
      if ((int)soap_get1(soap) == EOF)
        break;
    soap->mode &= ~SOAP_ENC_ZLIB;
    memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
    soap->bufidx = (char*)soap->d_stream->next_in - soap->z_buf;
    soap->buflen = soap->z_buflen;
    soap->zlib_state = SOAP_ZLIB_NONE;
    if (inflateEnd(soap->d_stream) != Z_OK)
      return soap->error = SOAP_ZLIB_ERROR;
    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Inflate end ok\n"));
#ifdef WITH_GZIP
    if (soap->zlib_in == SOAP_ZLIB_GZIP)
    { soap_wchar c;
      short i;
      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Inflate gzip crc check\n"));
      for (i = 0; i < 8; i++)
      { if ((int)(c = soap_get1(soap)) == EOF)
        { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: unable to read crc value\n"));
          return soap->error = SOAP_EOF;
        }
        soap->z_buf[i] = (char)c;
      }
      if (soap->z_crc != ((uLong)(unsigned char)soap->z_buf[0] | ((uLong)(unsigned char)soap->z_buf[1] << 8) | ((uLong)(unsigned char)soap->z_buf[2] << 16) | ((uLong)(unsigned char)soap->z_buf[3] << 24)))
      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip inflate error: crc check failed, message corrupted? (crc32=%lu)\n", (unsigned long)soap->z_crc));
        return soap->error = SOAP_ZLIB_ERROR;
      }
      if (soap->d_stream->total_out != ((uLong)(unsigned char)soap->z_buf[4] | ((uLong)(unsigned char)soap->z_buf[5] << 8) | ((uLong)(unsigned char)soap->z_buf[6] << 16) | ((uLong)(unsigned char)soap->z_buf[7] << 24)))
      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip inflate error: incorrect message length\n"));
        return soap->error = SOAP_ZLIB_ERROR;
      }
    }
    soap->zlib_in = SOAP_ZLIB_NONE;
#endif
  }
#endif
  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
    while (soap->ahead != EOF && !soap_recv_raw(soap))
      ;
#ifndef WITH_NOIDREF
  if (soap_resolve(soap))
    return soap->error;
#endif
#ifndef WITH_LEANER
  if (soap->xlist)
  { if (soap->mode & SOAP_ENC_MTOM)
      return soap->error = SOAP_MIME_HREF;
    return soap->error = SOAP_DIME_HREF;
  }
#endif
  soap_free_ns(soap);
#ifndef WITH_LEANER
  if (soap->fpreparefinalrecv)
    return soap->error = soap->fpreparefinalrecv(soap);
#endif
  return SOAP_OK;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movw $0x9, 0x1e5f0(%rdi)
movq $0x0, 0xc0c8(%rdi)
xorps %xmm0, %xmm0
movups %xmm0, 0x27348(%rdi)
testb $-0x80, 0x4(%rdi)
je 0x19b19
movq %rbx, %rdi
callq 0x19c6d
xorps %xmm0, %xmm0
testl %eax, %eax
je 0x19b19
movups %xmm0, 0x1f2d8(%rbx)
jmp 0x19baa
movq 0x1f2d8(%rbx), %rax
movq %rax, 0x1f2d0(%rbx)
movups %xmm0, 0x1f2d8(%rbx)
movl 0x4(%rbx), %eax
btl $0x8, %eax
jb 0x19bb2
movq 0x1f300(%rbx), %rax
movq %rax, 0x1f2f8(%rbx)
movq $0x0, 0x1f2e8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x1f300(%rbx)
cmpq $0x0, 0x1f310(%rbx)
je 0x19b80
movq 0x1f2f8(%rbx), %r14
testq %r14, %r14
je 0x19b80
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1a1f8
movq (%r14), %r14
jmp 0x19b6b
movl 0x4(%rbx), %eax
notl %eax
testb $0x3, %al
jne 0x19b9e
cmpl $-0x1, 0xc160(%rbx)
je 0x19b9e
movq %rbx, %rdi
callq 0x10688
testl %eax, %eax
je 0x19b89
movq %rbx, %rdi
callq 0x13413
testl %eax, %eax
je 0x19bfb
movl 0x1f274(%rbx), %eax
jmp 0x19bf3
btl $0x1c, %eax
jb 0x19bd6
movq %rbx, %rdi
xorl %esi, %esi
callq 0x21bd4
testq %rax, %rax
jne 0x19bb8
movl 0x1f274(%rbx), %eax
testl %eax, %eax
jne 0x19bf3
jmp 0x19b37
cmpw $0x0, 0x1f22c(%rbx)
jne 0x19be9
movw $0xffff, 0x1f22c(%rbx)  # imm = 0xFFFF
movq %rbx, %rdi
callq 0x13413
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
cmpq $0x0, 0x1f310(%rbx)
je 0x19c1c
testb $0x2, 0x5(%rbx)
jne 0x19c5c
movl $0x21, 0x1f274(%rbx)
movl $0x21, %eax
jmp 0x19bf3
movq 0x88(%rbx), %rdi
testq %rdi, %rdi
je 0x19c38
movq (%rdi), %r14
callq 0x3030
movq %r14, %rdi
testq %r14, %r14
jne 0x19c28
movq $0x0, 0x88(%rbx)
movq 0xc0b0(%rbx), %rax
testq %rax, %rax
je 0x19bf1
movq %rbx, %rdi
callq *%rax
movl %eax, 0x1f274(%rbx)
jmp 0x19bf3
movl $0x25, 0x1f274(%rbx)
movl $0x25, %eax
jmp 0x19bf3