69d91074 |
/*
* xprint.c |
83cbbef8 |
* Copyright (C) 2008-2012 KLab Inc. |
69d91074 |
*/
#include "makuosan.h"
char *opcodestrlist[]={"PING ",
"EXIT ",
"SEND ",
"MD5 ",
"DSYNC",
"DEL ",
"UNKNOWN"};
uint8_t opcodenumlist[]={MAKUO_OP_PING,
MAKUO_OP_EXIT,
MAKUO_OP_SEND,
MAKUO_OP_MD5,
MAKUO_OP_DSYNC,
MAKUO_OP_DEL,
MAKUO_OPCODE_MAX};
char *sstatestrlist[]={"SEND_STAT ",
"SEND_OPEN ",
"SEND_DATA ",
"SEND_MARK ",
"SEND_CLOSE ",
"SEND_LAST ",
"SEND_ERROR ",
"SEND_BREAK ", |
eeef442d |
"SEND_WAIT ", |
69d91074 |
"SEND_UNKNOWN"};
uint8_t sstatenumlist[]={MAKUO_SENDSTATE_STAT,
MAKUO_SENDSTATE_OPEN,
MAKUO_SENDSTATE_DATA,
MAKUO_SENDSTATE_MARK,
MAKUO_SENDSTATE_CLOSE,
MAKUO_SENDSTATE_LAST,
MAKUO_SENDSTATE_ERROR,
MAKUO_SENDSTATE_BREAK, |
eeef442d |
MAKUO_SENDSTATE_WAIT, |
69d91074 |
MAKUO_STATE_MAX};
char *rstatestrlist[] = {"RECV_NONE ",
"RECV_UPDATE ",
"RECV_SKIP ",
"RECV_OPEN ",
"RECV_MARK ",
"RECV_CLOSE ",
"RECV_IGNORE ",
"RECV_READONLY",
"RECV_BREAK ",
"RECV_LAST ",
"RECV_MD5OK ",
"RECV_MD5NG ",
"RECV_DELETEOK",
"RECV_DELETENG",
"RECV_OPENERR ",
"RECV_READERR ",
"RECV_WRITEERR",
"RECV_CLOSEERR",
"RECV_UNKNOWN"};
uint8_t rstatenumlist[]={MAKUO_RECVSTATE_NONE,
MAKUO_RECVSTATE_UPDATE,
MAKUO_RECVSTATE_SKIP,
MAKUO_RECVSTATE_OPEN,
MAKUO_RECVSTATE_MARK,
MAKUO_RECVSTATE_CLOSE,
MAKUO_RECVSTATE_IGNORE,
MAKUO_RECVSTATE_READONLY,
MAKUO_RECVSTATE_BREAK,
MAKUO_RECVSTATE_LAST,
MAKUO_RECVSTATE_MD5OK,
MAKUO_RECVSTATE_MD5NG,
MAKUO_RECVSTATE_DELETEOK,
MAKUO_RECVSTATE_DELETENG,
MAKUO_RECVSTATE_OPENERROR,
MAKUO_RECVSTATE_READERROR,
MAKUO_RECVSTATE_WRITEERROR,
MAKUO_RECVSTATE_CLOSEERROR,
MAKUO_STATE_MAX};
char *strsstate(uint8_t n)
{
int i;
for(i=0;sstatenumlist[i] != MAKUO_STATE_MAX;i++){
if(sstatenumlist[i] == n){
break;
}
}
return(sstatestrlist[i]);
}
char *strrstate(uint8_t n)
{
int i;
for(i=0;rstatenumlist[i] != MAKUO_STATE_MAX;i++){
if(rstatenumlist[i] == n){
break;
}
}
return(rstatestrlist[i]);
}
char *strmstate(mdata *data)
{
if(data->head.flags & MAKUO_FLAG_ACK){
return(strrstate(data->head.nstate));
}
return(strsstate(data->head.nstate));
}
char *stropcode(mdata *data)
{
int i;
for(i=0;opcodenumlist[i] != MAKUO_STATE_MAX;i++){
if(opcodenumlist[i] == data->head.opcode){
break;
}
}
return(opcodestrlist[i]);
}
char *strackreq(mdata *data)
{
char *ack = "ack";
char *req = "req";
if(data->head.flags & MAKUO_FLAG_ACK){
return(ack);
}
return(req);
}
void fdprintf(int s, char *fmt, ...)
{
char m[2048];
va_list arg;
if(s != -1){
va_start(arg, fmt);
vsnprintf(m, sizeof(m), fmt, arg);
va_end(arg);
m[sizeof(m) - 1] = 0;
write(s, m, strlen(m));
}
}
void lprintf(int l, char *fmt, ...)
{
va_list arg; |
38605fc1 |
char b[1024];
char d[2048];
static char m[2048]; |
1162859f |
#ifdef MAKUO_DEBUG
struct timeval tv;
#endif |
38605fc1 |
if(moption.loglevel < l){
return;
}
strcpy(d, m);
va_start(arg, fmt);
vsnprintf(b, sizeof(b), fmt, arg);
va_end(arg);
b[sizeof(b) - 1] = 0;
snprintf(m, sizeof(m), "%s%s", d, b);
m[sizeof(m) - 1] = 0;
m[sizeof(m) - 2] = '\n';
if(!strchr(m, '\n')){
return;
} |
69d91074 |
#ifdef MAKUO_DEBUG |
38605fc1 |
gettimeofday(&tv, NULL);
fprintf(stderr, "%02d.%06d %s", tv.tv_sec % 60, tv.tv_usec, m); |
69d91074 |
#else |
38605fc1 |
fprintf(stderr, "%s", m); |
69d91074 |
#endif |
38605fc1 |
syslog(LOG_ERR, "%s: %s", moption.user_name, m);
m[0] = 0; |
69d91074 |
}
|
f73d92fa |
int cprintf(int l, mcomm *c, char *fmt, ...) |
69d91074 |
{ |
25108556 |
int i; |
076535d8 |
int n; |
69d91074 |
char m[2048];
va_list arg; |
076535d8 |
if(!c){ |
f73d92fa |
return(0); |
076535d8 |
}
if(c->fd[0] == -1){ |
f73d92fa |
return(0); |
076535d8 |
}
if(c->loglevel < l){ |
f73d92fa |
return(0); |
076535d8 |
}
va_start(arg, fmt);
vsnprintf(m, sizeof(m), fmt, arg);
va_end(arg); |
83082c34 |
m[sizeof(m) - 2] = '\n'; |
076535d8 |
m[sizeof(m) - 1] = 0; |
f73d92fa |
n = strlen(m);
if(write(c->fd[0], m, n) == n){
fsync(c->fd[0]); |
83082c34 |
c->logfail = 0; |
6ef73c3e |
return(0); /* success */
}
/*----- error -----*/
for(i=0;i<sizeof(m);i++){
if(m[i] == 0){
break;
}
if(m[i] == '\n'){
m[i] = ' '; |
25108556 |
} |
69d91074 |
} |
6ef73c3e |
c->logover++;
c->logfail = 1;
lprintf(0, "[error] %s: can't write console: %s\n", __func__, m);
return(-1); |
69d91074 |
}
|
eeef442d |
void mprintf(int l, const char *func, mfile *m) |
69d91074 |
{
if(!m)
return; |
d38d0833 |
lprintf(l, "%s: rc=%d id=%d init=%d wait=%d flag=%d %s %s %s %s\n", |
69d91074 |
func,
m->retrycnt,
m->mdata.head.reqid,
m->initstate,
m->sendwait, |
d38d0833 |
m->mdata.head.flags, |
69d91074 |
inet_ntoa(m->addr.sin_addr),
stropcode(&(m->mdata)),
strmstate(&(m->mdata)),
m->fn);
}
|