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); }
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; }