// File: /workspace/github_c_makefile_star2_O3/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)
movl 0x4(%rdi), %eax
testb %al, %al
jns 0x19731
movq %rbx, %rdi
callq 0x19884
testl %eax, %eax
je 0x1972b
xorps %xmm0, %xmm0
movups %xmm0, 0x1f2d8(%rbx)
jmp 0x197c1
movl 0x4(%rbx), %eax
xorps %xmm0, %xmm0
movq 0x1f2d8(%rbx), %rcx
movq %rcx, 0x1f2d0(%rbx)
btl $0x8, %eax
movups %xmm0, 0x1f2d8(%rbx)
jb 0x197c9
movq 0x1f300(%rbx), %r14
movq %r14, 0x1f2f8(%rbx)
movq $0x0, 0x1f2e8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x1f300(%rbx)
cmpq $0x0, 0x1f310(%rbx)
sete %al
testq %r14, %r14
sete %cl
orb %al, %cl
jne 0x19797
movq %rbx, %rdi
movq %r14, %rsi
callq 0x19d05
movq (%r14), %r14
testq %r14, %r14
jne 0x19784
movl 0x4(%rbx), %eax
notl %eax
testb $0x3, %al
jne 0x197b5
cmpl $-0x1, 0xc160(%rbx)
je 0x197b5
movq %rbx, %rdi
callq 0x10673
testl %eax, %eax
je 0x197a0
movq %rbx, %rdi
callq 0x13286
testl %eax, %eax
je 0x19812
movl 0x1f274(%rbx), %eax
jmp 0x1980a
btl $0x1c, %eax
jb 0x197ed
movq %rbx, %rdi
xorl %esi, %esi
callq 0x21236
testq %rax, %rax
jne 0x197cf
movl 0x1f274(%rbx), %eax
testl %eax, %eax
jne 0x1980a
jmp 0x1974c
cmpw $0x0, 0x1f22c(%rbx)
jne 0x19800
movw $0xffff, 0x1f22c(%rbx)  # imm = 0xFFFF
movq %rbx, %rdi
callq 0x13286
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
cmpq $0x0, 0x1f310(%rbx)
je 0x19833
testb $0x2, 0x5(%rbx)
jne 0x19873
movl $0x21, 0x1f274(%rbx)
movl $0x21, %eax
jmp 0x1980a
movq 0x88(%rbx), %rdi
testq %rdi, %rdi
je 0x1984f
movq (%rdi), %r14
callq 0x3030
movq %r14, %rdi
testq %r14, %r14
jne 0x1983f
movq $0x0, 0x88(%rbx)
movq 0xc0b0(%rbx), %rax
testq %rax, %rax
je 0x19808
movq %rbx, %rdi
callq *%rax
movl %eax, 0x1f274(%rbx)
jmp 0x1980a
movl $0x25, 0x1f274(%rbx)
movl $0x25, %eax
jmp 0x1980a