// File: /workspace/github_c_makefile_star2_O0/qq-smart[P]qq_sh_server/app/qq_ios_app.c
// Function: qq_ios_app_wait_request_handler
static void
qq_ios_app_wait_request_handler(qq_event_t *rev)
{
    qq_connection_t   *c;
    ssize_t            n;
    size_t             size;
    qq_buf_t          *b;
    qq_listening_t    *ls;

    c = rev->data;
    ls = c->listening;

    qq_log_debug("qq_ios_app_wait_request_handler()");

    if (rev->timedout) {
        qq_app_close_connection(c);
        return;
    }

    if (c->close) {
        qq_app_close_connection(c);
        return;
    }

    b = c->buffer;
    if (b == NULL) {
        b = qq_pcalloc(c->pool, sizeof(qq_buf_t));
        if (b == NULL) {
            qq_app_close_connection(c);
            return;
        }
        c->buffer = b;

        size = ls->pool_size -
            ((size_t)((uintptr_t)b - (uintptr_t)c->pool) + sizeof(qq_buf_t));
        b->start = qq_pnalloc(c->pool, size);
        if (b->start == NULL) {
            qq_app_close_connection(c);
            return;
        }
        b->pos = b->start;
        b->last = b->start;
        b->end = b->last + size;
        b->temporary = 1;
    }

    n = c->recv(c, b->pos, (size_t)((uintptr_t)b->end - (uintptr_t)b->start));
    if (n == QQ_AGAIN) {
        if (!rev->timer_set) {
            qq_event_add_timer(rev, QQ_IOS_APP_ACCEPT_TIMEOUT);
        }
        return;
    }

    if (n == QQ_ERROR) {
        qq_app_close_connection(c);
        return;
    }

    if (n == 0) {
        qq_log_error(0, "client closed connection");
        qq_app_close_connection(c);
        return;
    }
    b->last += n;

    rev->handler = qq_ios_app_process_request_handler;
    qq_ios_app_process_request_handler(rev);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0x30(%rbp)
leaq 0xab22(%rip), %rdi      # 0xf7ec
movb $0x0, %al
callq 0x9e70
movq -0x8(%rbp), %rax
movl 0x8(%rax), %eax
shrl $0xa, %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x4cf1
movq -0x10(%rbp), %rdi
callq 0x2800
jmp 0x4eb3
movq -0x10(%rbp), %rax
movb 0x98(%rax), %al
shrb $0x5, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x4d16
movq -0x10(%rbp), %rdi
callq 0x2800
jmp 0x4eb3
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x4e02
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rdi
movl $0x38, %esi
callq 0xbb60
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x4d58
movq -0x10(%rbp), %rdi
callq 0x2800
jmp 0x4eb3
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x30(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %rdx
movq 0x40(%rdx), %rdx
subq %rdx, %rcx
addq $0x38, %rcx
subq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x20(%rbp), %rsi
callq 0xbb00
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x4dbb
movq -0x10(%rbp), %rdi
callq 0x2800
jmp 0x4eb3
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq -0x20(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movw 0x30(%rax), %cx
andw $-0x2, %cx
orw $0x1, %cx
movw %cx, 0x30(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rcx
movq (%rcx), %rsi
movq -0x28(%rbp), %rcx
movq 0x28(%rcx), %rdx
movq -0x28(%rbp), %rcx
movq 0x20(%rcx), %rcx
subq %rcx, %rdx
callq *%rax
movq %rax, -0x18(%rbp)
cmpq $-0x2, -0x18(%rbp)
jne 0x4e57
movq -0x8(%rbp), %rax
movl 0x8(%rax), %eax
shrl $0xb, %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x4e55
movq -0x8(%rbp), %rdi
movl $0xbb8, %esi            # imm = 0xBB8
callq 0x4ee0
jmp 0x4eb3
cmpq $-0x1, -0x18(%rbp)
jne 0x4e69
movq -0x10(%rbp), %rdi
callq 0x2800
jmp 0x4eb3
cmpq $0x0, -0x18(%rbp)
jne 0x4e8b
xorl %edi, %edi
leaq 0xa995(%rip), %rsi      # 0xf80e
movb $0x0, %al
callq 0x9cc0
movq -0x10(%rbp), %rdi
callq 0x2800
jmp 0x4eb3
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %rax
addq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rax
leaq 0xfa(%rip), %rcx        # 0x4fa0
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rdi
callq 0x4fa0
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)