#include <libintl.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <limits.h>
#include "librsc.h"
#include "adm.h"
void
ADM_Process_fru_log(int all)
{
rscp_msg_t Message;
struct timespec Timeout;
dp_get_config_log_r_t *rscReply;
rsci64 bytes_remaining, seqno;
rsci16 request_size, response_size;
dp_get_config_log_t rscCmd;
ADM_Start();
rscCmd.start_seq = 0;
rscCmd.length = 0;
Message.type = DP_GET_CONFIG_LOG;
Message.len = sizeof (rscCmd);
Message.data = (char *)&rscCmd;
ADM_Send(&Message);
Timeout.tv_nsec = 0;
Timeout.tv_sec = ADM_TIMEOUT;
ADM_Recv(&Message, &Timeout,
DP_GET_CONFIG_LOG_R, sizeof (*rscReply));
rscReply = (dp_get_config_log_r_t *)Message.data;
if ((all == 0) && (rscReply->remaining_log_bytes >
ADM_DEFAULT_LOG_LENGTH)) {
bytes_remaining = ADM_DEFAULT_LOG_LENGTH;
seqno = (rscReply->remaining_log_bytes +
rscReply->next_seq) - bytes_remaining;
} else {
bytes_remaining = rscReply->remaining_log_bytes;
seqno = rscReply->next_seq;
}
request_size = sizeof (rscReply->buffer);
ADM_Free(&Message);
Timeout.tv_nsec = 0;
Timeout.tv_sec = ADM_TIMEOUT;
while (bytes_remaining) {
rscCmd.start_seq = seqno;
rscCmd.length = (bytes_remaining < request_size) ?
bytes_remaining : request_size;
Message.type = DP_GET_CONFIG_LOG;
Message.len = sizeof (rscCmd);
Message.data = (char *)&rscCmd;
ADM_Send(&Message);
ADM_Recv(&Message, &Timeout,
DP_GET_CONFIG_LOG_R, sizeof (*rscReply));
rscReply = (dp_get_config_log_r_t *)Message.data;
response_size = rscReply->length;
if (response_size == 0) {
ADM_Free(&Message);
break;
}
bytes_remaining -= response_size;
if (rscReply->remaining_log_bytes < bytes_remaining) {
bytes_remaining = rscReply->remaining_log_bytes;
}
if (rscReply->next_seq > seqno + response_size) {
printf(gettext("\nscadm: lost %d bytes of log data\n"),
rscReply->next_seq - (seqno + response_size));
}
seqno = rscReply->next_seq;
if (fwrite(rscReply->buffer, sizeof (char), response_size,
stdout) != response_size) {
perror(gettext("\ncouldn't write config log buffer"
" to stdout"));
ADM_Free(&Message);
break;
}
ADM_Free(&Message);
}
putchar('\n');
}