⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osip_port.c

📁 libosip2-3.0.3最新版本
💻 C
📖 第 1 页 / 共 2 页
字号:
          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_func (osip_trace_level_t level, osip_trace_func_t * func){}voidosip_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){  osip_trace_level_t 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){  osip_trace_level_t i = 0;#if defined (HAVE_SYSLOG_H) && !defined(__arc__)  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++;    }}voidosip_trace_enable_until_level (osip_trace_level_t level){  int i = 0;  while (i < END_TRACE_LEVEL)    {      if (i < level)        tracing_table[i] = LOG_TRUE;      else        tracing_table[i] = LOG_FALSE;      i++;    }}voidosip_trace_initialize_func (osip_trace_level_t level, osip_trace_func_t * func){  int i = 0;  trace_func = func;  /* 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, ...){#ifdef ENABLE_TRACE  va_list ap;#if !defined(WIN32) && !defined(SYSTEM_LOGGER_ENABLED)  if (logfile == NULL && use_syslog == 0 && trace_func == NULL)    {                           /* user did not initialize logger.. */      return 1;    }#endif  if (tracing_table[level] == LOG_FALSE)    return 0;  if (f == NULL && trace_func == NULL)    f = logfile;  VA_START (ap, chfr);#if  defined(__VXWORKS_OS__) || defined(__rtems__)  /* 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);  } else if (trace_func)    {      trace_func (fi, li, level, chfr, ap);    }#if defined (HAVE_SYSLOG_H) && !defined(__arc__)  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;}#if defined(WIN32) || defined(_WIN32_WCE)#undef osip_mallocvoid *osip_malloc (size_t size){  void *ptr = malloc (size);  if (ptr != NULL)    memset (ptr, 0, size);  return ptr;}#undef osip_reallocvoid *osip_realloc (void *ptr, size_t size){  return realloc (ptr, size);}#undef osip_freevoidosip_free (void *ptr){  if (ptr == NULL)    return;  free (ptr);}#else#ifndef MINISIZEvoidosip_set_allocators (osip_malloc_func_t * malloc_func,                     osip_realloc_func_t * realloc_func,                     osip_free_func_t * free_func){  osip_malloc_func = malloc_func;  osip_realloc_func = realloc_func;  osip_free_func = free_func;}#endif#endif#if defined(__VXWORKS_OS__)typedef struct{  char *str;  int max;  int len;} _context;STATUS _cb_snprintf (char *buffer, int nc, int arg);STATUS_cb_snprintf (char *buffer, int nc, int arg){  _context *ctx = (_context *) arg;  if (ctx->max - ctx->len - nc < 1)     /* retain 1 pos for terminating \0 */    {      nc = ctx->max - ctx->len - 1;    }  if (nc > 0)    {      memcpy (ctx->str + ctx->len, buffer, nc);      ctx->len += nc;    }  ctx->str[ctx->len] = '\0';  return OK;}intosip_vsnprintf (char *buf, int max, const char *fmt, va_list ap){  _context ctx;  ctx.str = buf;  ctx.max = max;  ctx.len = 0;  if (fioFormatV (fmt, ap, _cb_snprintf, (int) &ctx) != OK)    {      return -1;    }  return ctx.len;}intosip_snprintf (char *buf, int max, const char *fmt, ...){  int retval;  va_list ap;  va_start (ap, fmt);  retval = osip_vsnprintf (buf, max, fmt, ap);  va_end (ap);  return retval;}#endif#if defined(__PSOS__)intosip_snprintf (char *buf, int max, const char *fmt, ...){  static char buffer[1024];  int retval;  va_list ap;  buffer[0] = '\n';  va_start (ap, fmt);  vsprintf (&(buffer[strlen (buffer)]), fmt, ap);  va_end (ap);  retval = strlen (buffer);  memmove (buf, buffer, max);  if (retval > max)    return -1;  return retval;}#endif#ifdef DEBUG_MEM/*  This is a debug facility for detecting memory leaks.  I recommend to use external tools such as mpatrol  when possible. On some fancy platform, you may not  have any usefull tools: in this case, use this code! */void *_osip_malloc (size_t size, char *file, unsigned short line){  void *mem;  mem = osip_malloc_func (size + 20);  if (mem != NULL)    {      char *s;      memcpy (mem, &line, 2);      for (s = file + strlen (file); s != file; s--)        {          if (*s == '\\' || *s == '/')            {              s++;              break;            }        }      strncpy ((char *) mem + 2, s, 18);      return (void *) ((char *) mem + 20);    }  return NULL;}void_osip_free (void *ptr){  if (ptr != NULL)    {      osip_free_func ((char *) ptr - 20);    }}void *_osip_realloc (void *ptr, size_t size, char *file, unsigned short line){  void *mem;  mem = osip_realloc_func ((char *) ptr - 20, size + 20);  if (mem != NULL)    {      char *s;      memcpy (mem, &line, 2);      for (s = file + strlen (file); s != file; s--)        {          if (*s == '\\' || *s == '/')            {              s++;              break;            }        }      strncpy ((char *) mem + 2, s, 18);      return (char *) mem + 20;    }  return NULL;}#endif/* ---For better performance---   Calculates a hash value for the given string */unsigned longosip_hash (const char *str){  unsigned int hash = 5381;  int c;  while (c = *str++)    hash = ((hash << 5) + hash) + c;  return hash & 0xFFFFFFFFu;}/* ---For better performance---   Appends src-string to dst-string.      This was introduced to replace the    inefficient constructions like:      osip_strncpy (tmp, src, strlen(src) );   tmp = tmp + strlen (src);      This function returns a pointer to the   end of the destination string      Pre: src is null terminated */char *osip_str_append (char *dst, const char *src){  while (*src != '\0')    {      *dst = *src;      src++;      dst++;    }  *dst = '\0';  return dst;}/* ---For better performance---   Same as above, only this time we know the length */char *osip_strn_append (char *dst, const char *src, size_t len){  memmove ((void *) dst, (void *) src, len);  dst += len;  *dst = '\0';  return dst;}/* ---For better performance---   This is to replace this construction:   osip_strncpy (  dest, source, length);   osip_clrspace ( dest ); */#ifndef MINISIZEchar *osip_clrncpy (char *dst, const char *src, size_t len){  const char *pbeg;  const char *pend;  char *p;  size_t spaceless_length;  if (src == NULL)    return NULL;  /* find the start of relevant text */  pbeg = src;  while ((' ' == *pbeg) || ('\r' == *pbeg) || ('\n' == *pbeg) || ('\t' == *pbeg))    pbeg++;  /* find the end of relevant text */  pend = src + len - 1;  while ((' ' == *pend) || ('\r' == *pend) || ('\n' == *pend) || ('\t' == *pend))    {      pend--;      if (pend < pbeg)        {          *dst = '\0';          return dst;        }    }  /* if pend == pbeg there is only one char to copy */  spaceless_length = pend - pbeg + 1;   /* excluding any '\0' */  memmove (dst, pbeg, spaceless_length);  p = dst + spaceless_length;  /* terminate the string and pad dest with zeros until len */  do    {      *p = '\0';      p++;      spaceless_length++;    }  while (spaceless_length < len);  return dst;}#elsechar *osip_clrncpy (char *dst, const char *src, size_t len){   osip_strncpy ( dst, src, len);   osip_clrspace ( dst );   return dst;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -