dect
/
asterisk
Archived
13
0
Fork 0

Have a contact line in responses, merge logging patches

git-svn-id: http://svn.digium.com/svn/asterisk/trunk@1799 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
markster 2003-11-26 22:00:07 +00:00
parent 6a2e01de68
commit 80e155db51
4 changed files with 142 additions and 8 deletions

View File

@ -43,7 +43,7 @@ extern int init_logger(void);
/* Provided by frame.c */
extern int init_framer(void);
/* Provided by logger.c */
extern int reload_logger(void);
extern int reload_logger(int);
/* Provided by term.c */
extern int term_init(void);
/* Provided by db.c */

View File

@ -5057,6 +5057,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
ast_queue_frame(p->owner, &af, 0);
} else if (sipdebug)
ast_verbose("Ignoring this request\n");
strncpy(p->our_contact, get_header(req, "Contact"), sizeof(p->our_contact) - 1);
if (!p->lastinvite) {
/* Handle authentication if this is our first invite */
res = check_user(p, req, cmd, e, 1, sin);
@ -5276,6 +5277,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc
} else if (sipdebug)
ast_verbose("Ignoring this request\n");
strncpy(p->our_contact, get_header(req, "Contact"), sizeof(p->our_contact) - 1);
if (!p->lastinvite) {
/* Handle authentication if this is our first subscribe */
res = check_user(p, req, cmd, e, 0, sin);

View File

@ -15,3 +15,11 @@
console => notice,warning,error
;console => notice,warning,error,debug
messages => notice,warning,error
;syslog keyword : This special keyword logs to syslog facility
;local0 edit /etc/syslog.conf and add
;local0.* /var/log/myastlog
;
;syslog => notice,warning,error

138
logger.c
View File

@ -11,6 +11,7 @@
*
*/
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <unistd.h>
@ -27,6 +28,7 @@
#include <errno.h>
#include <pthread.h>
#include <sys/stat.h>
#include <syslog.h>
#include "asterisk.h"
#include "astconf.h"
@ -44,6 +46,7 @@ struct logfile {
char fn[256];
int logflags;
FILE *f;
int facility; /* syslog */
struct logfile *next;
};
@ -69,6 +72,8 @@ static int colors[] = {
COLOR_RED
};
static int make_components(char *s, int lineno)
{
char *w;
@ -109,6 +114,9 @@ static struct logfile *make_logfile(char *fn, char *components, int lineno)
f->f = NULL;
} else if (!strcasecmp(fn, "console")) {
f->f = stdout;
} else if (!strcasecmp(fn, "syslog")) {
f->f = NULL;
f->facility = LOG_LOCAL0;
} else {
if (fn[0] == '/')
strncpy(tmp, fn, sizeof(tmp) - 1);
@ -174,14 +182,73 @@ static void init_logger_chain(void)
}
int reload_logger(void)
int reload_logger(int rotate)
{
char old[AST_CONFIG_MAX_PATH];
char tmp[AST_CONFIG_MAX_PATH];
char new[AST_CONFIG_MAX_PATH];
struct logfile *f;
int x;
ast_mutex_lock(&loglock);
if (eventlog)
fclose(eventlog);
if (eventlog)
fclose(eventlog);
else
rotate = 0;
mkdir((char *)ast_config_AST_LOG_DIR, 0755);
snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG);
snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG);
for(x=0;;x++) {
snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR, EVENTLOG,x);
eventlog = fopen((char *)new, "r");
if(eventlog)
fclose(eventlog);
else
break;
}
if(rotate) {
/* do it */
if(! link(old,new))
unlink(old);
strcpy(tmp,old);
}
f = logfiles;
while(f) {
if (f->f && (f->f != stdout) && (f->f != stderr)) {
fclose(f->f);
snprintf(old, sizeof(old), "%s/%s", (char *)ast_config_AST_LOG_DIR,f->fn);
for(x=0;;x++) {
snprintf(new, sizeof(new), "%s/%s.%d", (char *)ast_config_AST_LOG_DIR,f->fn,x);
eventlog = fopen((char *)new, "r");
if(eventlog)
fclose(eventlog);
else
break;
}
if(rotate) {
/* do it */
if(! link(old,new))
unlink(old);
f->f = fopen((char *)old, "a");
}
}
f = f->next;
}
eventlog = fopen((char *)tmp, "a");
ast_mutex_unlock(&loglock);
@ -199,7 +266,25 @@ int reload_logger(void)
static int handle_logger_reload(int fd, int argc, char *argv[])
{
if(reload_logger())
if(reload_logger(0))
{
ast_cli(fd, "Failed to reloadthe logger\n");
return RESULT_FAILURE;
}
else
return RESULT_SUCCESS;
}
static int handle_logger_rotate(int fd, int argc, char *argv[])
{
if(reload_logger(1))
{
ast_cli(fd, "Failed to reloadthe logger\n");
return RESULT_FAILURE;
@ -218,18 +303,46 @@ static char logger_reload_help[] =
"Usage: logger reload\n"
" Reopens the log files. Use after a rotating the log files\n";
static char logger_rotate_help[] =
"Usage: logger reload\n"
" Rotates and Reopens the log files.\n";
static struct ast_cli_entry reload_logger_cli =
{ { "logger", "reload", NULL },
handle_logger_reload, "Reopens the log files",
logger_reload_help };
static struct ast_cli_entry rotate_logger_cli =
{ { "logger", "rotate", NULL },
handle_logger_rotate, "Reopens the log files",
logger_rotate_help };
static int handle_SIGXFSZ(int sig) {
reload_logger(1);
ast_log(LOG_EVENT,"Rotated Logs Per SIGXFSZ\n");
if (option_verbose)
ast_verbose("Rotated Logs Per SIGXFSZ\n");
return 0;
}
int init_logger(void)
{
char tmp[AST_CONFIG_MAX_PATH];
/* auto rotate if sig SIGXFSZ comes a-knockin */
(void) signal(SIGXFSZ,(void *) handle_SIGXFSZ);
/* register the relaod logger cli command */
ast_cli_register(&reload_logger_cli);
ast_cli_register(&rotate_logger_cli);
mkdir((char *)ast_config_AST_LOG_DIR, 0755);
snprintf(tmp, sizeof(tmp), "%s/%s", (char *)ast_config_AST_LOG_DIR, EVENTLOG);
@ -283,7 +396,18 @@ extern void ast_log(int level, const char *file, int line, const char *function,
if (logfiles) {
f = logfiles;
while(f) {
if (f->logflags & (1 << level) && f->f) {
if (f->logflags & (1 << level) && f->facility) {
time(&t);
localtime_r(&t,&tm);
strftime(date, sizeof(date), "%b %e %T", &tm);
openlog("asterisk_pbx",LOG_PID,f->facility);
syslog(LOG_INFO|f->facility,"%s %s[%ld]: File %s, Line %d (%s): ",date,
levels[level], (long)pthread_self(), file, line, function);
closelog();
}
else if (f->logflags & (1 << level) && f->f) {
if ((f->f != stdout) && (f->f != stderr)) {
time(&t);
localtime_r(&t,&tm);
@ -355,7 +479,7 @@ extern void ast_verbose(const char *fmt, ...)
last = m;
} else {
msgcnt--;
ast_log(LOG_DEBUG, "Out of memory\n");
ast_log(LOG_ERROR, "Out of memory\n");
free(m);
}
}