📄 osip_port.c
字号:
return -1; /* empty value (or several space!) */ *dest = osip_malloc (sep - (buf) + 1); osip_strncpy (*dest, buf, sep - buf); *next = sep + 1; /* return the position right after the separator */ return 1;}#endif/* in quoted-string, many characters can be escaped... *//* __osip_quote_find returns the next quote that is not escaped */char *__osip_quote_find (const char *qstring){ char *quote; quote = strchr (qstring, '"'); if (quote == qstring) /* the first char matches and is not escaped... */ return quote; if (quote == NULL) return NULL; /* no quote at all... */ /* this is now the nasty cases where '"' is escaped '" jonathan ros \\\""' | | '" jonathan ros \\"' | | '" jonathan ros \""' | | we must count the number of preceeding '\' */ { int i = 1; for (;;) { if (0 == strncmp (quote - i, "\\", 1)) i++; else { if (i % 2 == 1) /* the '"' was not escaped */ return quote; /* else continue with the next '"' */ quote = strchr (quote + 1, '"'); if (quote == NULL) return NULL; i = 1; } if (quote - i == qstring - 1) /* example: "\"john" */ /* example: "\\"jack" */ { /* special case where the string start with '\' */ if (*qstring == '\\') i++; /* an escape char was not counted */ if (i % 2 == 0) /* the '"' was not escaped */ return quote; else { /* else continue with the next '"' */ qstring = quote + 1; /* reset qstring because (*quote+1) may be also == to '\\' */ quote = strchr (quote + 1, '"'); if (quote == NULL) return NULL; i = 1; } } } return NULL; }}char *osip_enquote (const char *s){ char *rtn; char *t; t = rtn = osip_malloc (strlen (s) * 2 + 3); *t++ = '"'; for (; *s != '\0'; s++) { switch (*s) { case '"': case '\\': case 0x7f: *t++ = '\\'; *t++ = *s; break; case '\n': case '\r': *t++ = ' '; break; default: *t++ = *s; break; } } *t++ = '"'; *t++ = '\0'; return rtn;}voidosip_dequote (char *s){ size_t len; if (*s == '\0') return; if (*s != '"') return; len = strlen (s); memmove (s, s + 1, len--); if (len > 0 && s[len - 1] == '"') s[--len] = '\0'; for (; *s != '\0'; s++, len--) { if (*s == '\\') memmove (s, s + 1, len--); }}/**********************************************************//* only MACROS from osip/trace.h should be used by others *//* TRACE_INITIALIZE(level,file)) *//* TRACE_ENABLE_LEVEL(level) *//* TRACE_DISABLE_LEVEL(level) *//* IS_TRACE_LEVEL_ACTIVATE(level) *//**********************************************************/#ifndef ENABLE_TRACEvoidosip_trace_initialize_syslog (osip_trace_level_t level, char *ident){}voidosip_trace_initialize (osip_trace_level_t level, FILE * file){}voidosip_trace_enable_level (osip_trace_level_t level){}voidosip_trace_disable_level (osip_trace_level_t level){}intosip_is_trace_level_activate (osip_trace_level_t level){ return LOG_FALSE;}#else/* initialize log *//* all lower levels of level are logged in file. */voidosip_trace_initialize (osip_trace_level_t level, FILE * file){ int i = 0; /* enable trace in log file by default */ logfile = NULL; if (file != NULL) logfile = file;#ifndef SYSTEM_LOGGER_ENABLED else logfile = stdout;#endif /* enable all lower levels */ while (i < END_TRACE_LEVEL) { if (i < level) tracing_table[i] = LOG_TRUE; else tracing_table[i] = LOG_FALSE; i++; }}voidosip_trace_initialize_syslog (osip_trace_level_t level, char *ident){ int i = 0;#if defined (HAVE_SYSLOG_H) openlog (ident, LOG_CONS | LOG_PID, LOG_DAEMON); use_syslog = 1;#endif /* enable all lower levels */ while (i < END_TRACE_LEVEL) { if (i < level) tracing_table[i] = LOG_TRUE; else tracing_table[i] = LOG_FALSE; i++; }}/* enable a special debugging level! */voidosip_trace_enable_level (osip_trace_level_t level){ tracing_table[level] = LOG_TRUE;}/* disable a special debugging level! */voidosip_trace_disable_level (osip_trace_level_t level){ tracing_table[level] = LOG_FALSE;}/* not so usefull? */intosip_is_trace_level_activate (osip_trace_level_t level){ return tracing_table[level];}#endifintosip_trace (char *fi, int li, osip_trace_level_t level, FILE * f, char *chfr, ...){ va_list ap;#ifdef ENABLE_TRACE#if !defined(WIN32) && !defined(SYSTEM_LOGGER_ENABLED) if (logfile == NULL && use_syslog == 0) { /* user did not initialize logger.. */ return 1; }#endif if (f == NULL) f = logfile; if (tracing_table[level] == LOG_FALSE) return 0; VA_START (ap, chfr);#ifdef __VXWORKS_OS__ /* vxworks can't have a local file */ f = stdout;#endif if (f && use_syslog == 0) { if (level == OSIP_FATAL) fprintf (f, "| FATAL | <%s: %i> ", fi, li); else if (level == OSIP_BUG) fprintf (f, "| BUG | <%s: %i> ", fi, li); else if (level == OSIP_ERROR) fprintf (f, "| ERROR | <%s: %i> ", fi, li); else if (level == OSIP_WARNING) fprintf (f, "|WARNING| <%s: %i> ", fi, li); else if (level == OSIP_INFO1) fprintf (f, "| INFO1 | <%s: %i> ", fi, li); else if (level == OSIP_INFO2) fprintf (f, "| INFO2 | <%s: %i> ", fi, li); else if (level == OSIP_INFO3) fprintf (f, "| INFO3 | <%s: %i> ", fi, li); else if (level == OSIP_INFO4) fprintf (f, "| INFO4 | <%s: %i> ", fi, li); vfprintf (f, chfr, ap); fflush (f); }#if defined (HAVE_SYSLOG_H) else if (use_syslog == 1) { char buffer[512]; int in = 0; memset (buffer, 0, sizeof (buffer)); if (level == OSIP_FATAL) in = snprintf (buffer, 511, "| FATAL | <%s: %i> ", fi, li); else if (level == OSIP_BUG) in = snprintf (buffer, 511, "| BUG | <%s: %i> ", fi, li); else if (level == OSIP_ERROR) in = snprintf (buffer, 511, "| ERROR | <%s: %i> ", fi, li); else if (level == OSIP_WARNING) in = snprintf (buffer, 511, "|WARNING| <%s: %i> ", fi, li); else if (level == OSIP_INFO1) in = snprintf (buffer, 511, "| INFO1 | <%s: %i> ", fi, li); else if (level == OSIP_INFO2) in = snprintf (buffer, 511, "| INFO2 | <%s: %i> ", fi, li); else if (level == OSIP_INFO3) in = snprintf (buffer, 511, "| INFO3 | <%s: %i> ", fi, li); else if (level == OSIP_INFO4) in = snprintf (buffer, 511, "| INFO4 | <%s: %i> ", fi, li); vsnprintf (buffer + in, 511 - in, chfr, ap); if (level == OSIP_FATAL) syslog (LOG_ERR, "%s", buffer); else if (level == OSIP_BUG) syslog (LOG_ERR, "%s", buffer); else if (level == OSIP_ERROR) syslog (LOG_ERR, "%s", buffer); else if (level == OSIP_WARNING) syslog (LOG_WARNING, "%s", buffer); else if (level == OSIP_INFO1) syslog (LOG_INFO, "%s", buffer); else if (level == OSIP_INFO2) syslog (LOG_INFO, "%s", buffer); else if (level == OSIP_INFO3) syslog (LOG_DEBUG, "%s", buffer); else if (level == OSIP_INFO4) syslog (LOG_DEBUG, "%s", buffer); }#endif#ifdef SYSTEM_LOGGER_ENABLED else { char buffer[512]; int in = 0; memset (buffer, 0, sizeof (buffer)); if (level == OSIP_FATAL) in = _snprintf (buffer, 511, "| FATAL | <%s: %i> ", fi, li); else if (level == OSIP_BUG) in = _snprintf (buffer, 511, "| BUG | <%s: %i> ", fi, li); else if (level == OSIP_ERROR) in = _snprintf (buffer, 511, "| ERROR | <%s: %i> ", fi, li); else if (level == OSIP_WARNING) in = _snprintf (buffer, 511, "|WARNING| <%s: %i> ", fi, li); else if (level == OSIP_INFO1) in = _snprintf (buffer, 511, "| INFO1 | <%s: %i> ", fi, li); else if (level == OSIP_INFO2) in = _snprintf (buffer, 511, "| INFO2 | <%s: %i> ", fi, li); else if (level == OSIP_INFO3) in = _snprintf (buffer, 511, "| INFO3 | <%s: %i> ", fi, li); else if (level == OSIP_INFO4) in = _snprintf (buffer, 511, "| INFO4 | <%s: %i> ", fi, li); _vsnprintf (buffer + in, 511 - in, chfr, ap); OutputDebugString (buffer); }#endif va_end (ap);#endif return 0;}#ifdef WIN32void *osip_malloc(size_t size){ void *ptr = malloc(size); if(ptr!=NULL) memset(ptr,0,size); return ptr;}void osip_free(void *ptr){ if (ptr==NULL) return; free(ptr);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -