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:
parent
6a2e01de68
commit
80e155db51
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
138
logger.c
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Reference in New Issue