1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

s3:client: simplify readline_callback() to only use cli_echo()

cli_echo() already swallows NBT keepalive messages,
so there's no need to filter them in the 'smbclient' layer.

metze
This commit is contained in:
Stefan Metzmacher 2011-07-11 13:19:47 +02:00
parent a2e248f270
commit 6ec26f0c1a

View File

@ -4911,7 +4911,8 @@ static void readline_callback(void)
static time_t last_t;
struct timespec now;
time_t t;
int ret, revents;
NTSTATUS status;
unsigned char garbage[16];
clock_gettime_mono(&now);
t = now.tv_sec;
@ -4921,60 +4922,14 @@ static void readline_callback(void)
last_t = t;
again:
if (cli->fd == -1)
return;
/* We deliberately use receive_smb_raw instead of
client_receive_smb as we want to receive
session keepalives and then drop them here.
*/
ret = poll_intr_one_fd(cli->fd, POLLIN|POLLHUP, 0, &revents);
if ((ret > 0) && (revents & (POLLIN|POLLHUP|POLLERR))) {
char inbuf[CLI_SAMBA_MAX_LARGE_READX_SIZE + LARGE_WRITEX_HDR_SIZE];
NTSTATUS status;
size_t len;
status = receive_smb_raw(cli->fd, inbuf, sizeof(inbuf), 0, 0, &len);
if (!NT_STATUS_IS_OK(status)) {
if (cli->fd != -1) {
close(cli->fd);
cli->fd = -1;
}
DEBUG(0, ("Read from server failed, maybe it closed "
"the connection: %s\n", nt_errstr(status)));
finished = true;
smb_readline_done();
return;
}
if(CVAL(inbuf,0) != SMBkeepalive) {
DEBUG(0, ("Read from server "
"returned unexpected packet!\n"));
return;
}
goto again;
}
/* Ping the server to keep the connection alive using SMBecho. */
{
NTSTATUS status;
unsigned char garbage[16];
memset(garbage, 0xf0, sizeof(garbage));
status = cli_echo(cli, 1, data_blob_const(garbage, sizeof(garbage)));
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("SMBecho failed. Maybe server has closed "
"the connection\n"));
finished = true;
smb_readline_done();
}
memset(garbage, 0xf0, sizeof(garbage));
status = cli_echo(cli, 1, data_blob_const(garbage, sizeof(garbage)));
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("SMBecho failed. Maybe server has closed "
"the connection\n"));
finished = true;
smb_readline_done();
}
}