Пример #1
0
static smb_message *smb_tr2_recv(smb_session *s)
{
  smb_message           recv, *res;
  smb_trans2_resp       *tr2;
  size_t                growth;
  int                   remaining;

  if (!smb_session_recv_msg(s, &recv))
    return (NULL);

  tr2         = (smb_trans2_resp *)recv.packet->payload;
  growth      = tr2->total_data_count - tr2->data_count;
  res         = smb_message_grow(&recv, growth);
  res->cursor = recv.payload_size;
  remaining   = (int)tr2->total_data_count -
                (tr2->data_displacement + tr2->data_count);

  while(remaining > 0)
  {
    remaining = smb_session_recv_msg(s, &recv);
    if (remaining)
    {
      tr2   = (smb_trans2_resp *)recv.packet->payload;
      smb_message_append(res, tr2->payload + 2 /*pad*/, tr2->data_count);
      remaining = (int)tr2->total_data_count -
                  (tr2->data_displacement + tr2->data_count);
    }
  }

  return (res);
}
Пример #2
0
static smb_message *smb_tr2_recv(smb_session *s)
{
    smb_message           recv, *res;
    smb_trans2_resp       *tr2;
    size_t                growth;
    int                   remaining;

    if (!smb_session_recv_msg(s, &recv))
        return NULL;
    tr2         = (smb_trans2_resp *)recv.packet->payload;
    growth      = tr2->total_data_count - tr2->data_count;
    res         = smb_message_grow(&recv, growth);
    if (!res)
        return NULL;
    res->cursor = recv.payload_size;
    remaining   = (int)tr2->total_data_count -
                  (tr2->data_displacement + tr2->data_count);

    while (remaining > 0)
    {
        remaining = smb_session_recv_msg(s, &recv);
        if (remaining)
        {
            tr2   = (smb_trans2_resp *)recv.packet->payload;
            /*
             * XXX: Why does padding was necessary and is not anymore, i.e.
             * find a reproductible setup where it is
             */
            smb_message_append(res, tr2->payload /* + 2 pad */, tr2->data_count);
            remaining = (int)tr2->total_data_count -
                        (tr2->data_displacement + tr2->data_count);
        }
    }

    return res;
}