// File: mh0fm4[P]SCDC/src/components/compcoup/compcoup_transport.cc
// Function: scdc_compcoup_transport::serve(scdc_transport_connection_t*)
void scdc_compcoup_transport::serve(scdc_transport_connection_t *conn)
{
  handshake();

  const scdcint_t loop_max = -1;

  scdcint_t l = 0;
  string prev;

  while (conn->open && (loop_max < 0 || l < loop_max))
  {
    string head;
    bool stop_at_delim = false;

    bool ret = scdc_dataset_transport::read_delim(conn, &head, default_delim, &stop_at_delim);

    if (!ret)
    {
      SCDC_TRACE("serve_connection: read failed!");
      break;
    }

    head = prev + head;

    SCDC_TRACE("serve_connection: head: '" << head << "', stop_at_delim: '" << stop_at_delim << "'");

    prev.erase();

    if (head == "DATASET_OPEN" && stop_at_delim) on_dataset_open(conn);
    else if (head == "DATASET_CLOSE" && stop_at_delim) on_dataset_close(conn);
    else if (head == "DATASET_CMD" && stop_at_delim) on_dataset_cmd(conn);
    else if (on_cmd_handler(head.c_str(), conn->get_incoming()))
    {
      SCDC_TRACE("serve_connection: cmd_handler sccessfull");

    } else if (stop_at_delim)
    {
      SCDC_ERROR("serve_connection: unknown command '" << head << "'");

    } else prev = head;

    ++l;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x110, %rsp            # imm = 0x110
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0xa0(%rbp)
movq (%rdi), %rax
callq *0x40(%rax)
movq $-0x1, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
leaq -0x40(%rbp), %rdi
callq 0xc960
movq -0x10(%rbp), %rcx
xorl %eax, %eax
testb $0x1, 0x8(%rcx)
movb %al, -0xa1(%rbp)
je 0xa0929
movb $0x1, %al
movb %al, -0xa1(%rbp)
jmp 0xa0929
movb -0xa1(%rbp), %al
testb $0x1, %al
jne 0xa0938
jmp 0xa0c77
leaq -0x60(%rbp), %rdi
movq %rdi, -0xb0(%rbp)
callq 0xc960
movq -0xb0(%rbp), %rsi
movb $0x0, -0x61(%rbp)
movq -0x10(%rbp), %rdi
movl $0x20, %edx
leaq -0x61(%rbp), %rcx
callq 0xa2e00
movb %al, -0xa2(%rbp)
jmp 0xa096d
movb -0xa2(%rbp), %al
andb $0x1, %al
movb %al, -0x62(%rbp)
testb $0x1, -0x62(%rbp)
jne 0xa09b3
jmp 0xa0980
jmp 0xa0982
jmp 0xa0984
movl $0x3, -0x78(%rbp)
jmp 0xa0c5e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x60(%rbp), %rdi
callq 0xc3e0
leaq -0x40(%rbp), %rdi
callq 0xc3e0
jmp 0xa0c89
leaq -0x98(%rbp), %rdi
leaq -0x40(%rbp), %rsi
leaq -0x60(%rbp), %rdx
callq 0x729e0
jmp 0xa09c9
leaq -0x60(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0xc850
leaq -0x98(%rbp), %rdi
callq 0xc3e0
jmp 0xa09e7
jmp 0xa09e9
xorl %eax, %eax
movl %eax, %esi
leaq -0x40(%rbp), %rdi
movq $-0x1, %rdx
callq 0xc110
jmp 0xa09ff
leaq 0x9456(%rip), %rsi      # 0xa9e5c
leaq -0x60(%rbp), %rdi
callq 0x25b80
movb %al, -0xb1(%rbp)
jmp 0xa0a17
movb -0xb1(%rbp), %al
testb $0x1, %al
jne 0xa0a23
jmp 0xa0a40
testb $0x1, -0x61(%rbp)
je 0xa0a40
movq -0xa0(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xa0ca0
jmp 0xa0a3b
jmp 0xa0c4b
leaq 0x94f7(%rip), %rsi      # 0xa9f3e
leaq -0x60(%rbp), %rdi
callq 0x25b80
movb %al, -0xb2(%rbp)
jmp 0xa0a58
movb -0xb2(%rbp), %al
testb $0x1, %al
jne 0xa0a64
jmp 0xa0a81
testb $0x1, -0x61(%rbp)
je 0xa0a81
movq -0xa0(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xa1090
jmp 0xa0a7c
jmp 0xa0c49
leaq 0x9515(%rip), %rsi      # 0xa9f9d
leaq -0x60(%rbp), %rdi
callq 0x25b80
movb %al, -0xb3(%rbp)
jmp 0xa0a99
movb -0xb3(%rbp), %al
testb $0x1, %al
jne 0xa0aa5
jmp 0xa0ac2
testb $0x1, -0x61(%rbp)
je 0xa0ac2
movq -0xa0(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xa1300
jmp 0xa0abd
jmp 0xa0c47
leaq -0x60(%rbp), %rdi
callq 0xc260
movq %rax, -0xc8(%rbp)
movq -0x10(%rbp), %rdi
callq 0xa3650
movq %rax, -0xc0(%rbp)
jmp 0xa0ae4
movq -0xc0(%rbp), %rdx
movq -0xc8(%rbp), %rsi
movq -0xa0(%rbp), %rdi
callq 0xa1d90
movb %al, -0xc9(%rbp)
jmp 0xa0b06
movb -0xc9(%rbp), %al
testb $0x1, %al
jne 0xa0b12
jmp 0xa0b1d
jmp 0xa0b14
jmp 0xa0b16
jmp 0xa0b18
jmp 0xa0c45
testb $0x1, -0x61(%rbp)
je 0xa0c32
jmp 0xa0b29
leaq 0x33b78(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, -0xd8(%rbp)
jmp 0xa0b41
movq -0xd8(%rbp), %rax
cmpq $0x0, %rax
je 0xa0c2c
leaq 0x33b4f(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e900
jmp 0xa0b63
leaq 0x33b3e(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e8e0
movq %rax, -0xe0(%rbp)
jmp 0xa0b7b
movq -0xe0(%rbp), %rdi
leaq 0x591f(%rip), %rsi      # 0xa64a8
callq 0xc670
movq %rax, -0xe8(%rbp)
jmp 0xa0b97
movq -0xe8(%rbp), %rdi
leaq 0x92a2(%rip), %rsi      # 0xa9e47
callq 0xc670
movq %rax, -0xf0(%rbp)
jmp 0xa0bb3
movq -0xf0(%rbp), %rdi
leaq 0x94c6(%rip), %rsi      # 0xaa087
callq 0xc670
movq %rax, -0xf8(%rbp)
jmp 0xa0bcf
movq -0xf8(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xc5b0
movq %rax, -0x100(%rbp)
jmp 0xa0be8
movq -0x100(%rbp), %rdi
leaq 0x77dd(%rip), %rsi      # 0xa83d3
callq 0xc670
movq %rax, -0x108(%rbp)
jmp 0xa0c04
movq -0x108(%rbp), %rdi
movq 0x333ae(%rip), %rsi     # 0xd3fc0
callq 0xc6d0
jmp 0xa0c19
leaq 0x33a88(%rip), %rax     # 0xd46a8
movq (%rax), %rdi
callq 0x2e920
jmp 0xa0c2a
jmp 0xa0c2c
jmp 0xa0c2e
jmp 0xa0c30
jmp 0xa0c43
leaq -0x40(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xc070
jmp 0xa0c41
jmp 0xa0c43
jmp 0xa0c45
jmp 0xa0c47
jmp 0xa0c49
jmp 0xa0c4b
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
movl $0x0, -0x78(%rbp)
leaq -0x60(%rbp), %rdi
callq 0xc3e0
movl -0x78(%rbp), %eax
testl %eax, %eax
je 0xa0c72
jmp 0xa0c70
jmp 0xa0c77
jmp 0xa090d
leaq -0x40(%rbp), %rdi
callq 0xc3e0
addq $0x110, %rsp            # imm = 0x110
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0xcba0
nopw %cs:(%rax,%rax)