1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
#include <syslog.h>
#include <string.h>
#include <time.h>
#include <sys/file.h>
#include <netdb.h>
#include <sys/socket.h>
#include "node.h"
static char buf[4096];
int nputs(const char *str)
{
return axio_puts(str, NodeIo);
}
int nprintf(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
return nputs(buf);
}
void node_msg(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
nputs(NodeId);
nputs(" ");
nputs(buf);
nputs("\n");
}
void node_perror(char *str, int err)
{
int oldmode;
oldmode = axio_eolmode(NodeIo, EOLMODE_TEXT);
buf[0] = 0;
if (str)
strcpy(buf, str);
if (str && err != -1)
strcat(buf, ": ");
if (err != -1)
strcat(buf, strerror(err));
nputs(NodeId);
nputs(" ");
nputs(buf);
nputs("\n");
axio_flush(NodeIo);
axio_eolmode(NodeIo, oldmode);
log(L_ERROR, buf);
}
char *print_node(const char *alias, const char *call)
{
static char node[17];
sprintf(node, "%s%s%s",
!strcmp(alias, "*") ? "" : alias,
!strcmp(alias, "*") ? "" : ":",
call);
return node;
}
char *print_dl(struct user *u)
{
static char buf[64];
switch (u->dl_type) {
case AF_AX25:
sprintf(buf, "%s on port %s", u->dl_name, u->dl_port);
break;
case AF_NETROM:
case AF_ROSE:
sprintf(buf, "%s", u->dl_name);
break;
case AF_INET:
sprintf(buf, "%s:%s", u->dl_name, u->dl_port);
break;
}
return buf;
}
void put_prompt(void)
{
char *p;
if (strchr(NodePrompt, '%') == NULL) {
nputs(NodePrompt);
return;
}
p = expand_string(NodePrompt, 0, NULL);
nputs(p);
free(p);
}
void log(int loglevel, const char *fmt, ...)
{
va_list args;
int pri;
static int opened = 0;
if (LogLevel < loglevel)
return;
if (!opened) {
openlog("node", LOG_PID, LOG_LOCAL7);
opened = 1;
}
switch (loglevel) {
case L_ERROR:
pri = LOG_ERR;
break;
case L_LOGIN:
pri = LOG_NOTICE;
break;
case L_GW:
pri = LOG_INFO;
break;
default:
pri = LOG_INFO;
break;
}
va_start(args, fmt);
vsprintf(buf, fmt, args);
syslog(pri, buf);
va_end(args);
}
char *strherror(int err)
{
static char buf[64];
switch (err) {
case HOST_NOT_FOUND:
strcpy(buf, "Unknown host");
break;
case TRY_AGAIN:
strcpy(buf, "Temporary name server error");
break;
case NO_RECOVERY:
strcpy(buf, "Non-recoverable name server error");
break;
case NO_ADDRESS:
strcpy(buf, "No address");
break;
default:
strcpy(buf, "Unknown error");
break;
}
return buf;
}
|