finally in sync with archive
[bcm963xx.git] / userapps / opensource / siproxd / libosip2 / src / osipparser2 / osip_port.c
diff --git a/userapps/opensource/siproxd/libosip2/src/osipparser2/osip_port.c b/userapps/opensource/siproxd/libosip2/src/osipparser2/osip_port.c
deleted file mode 100755 (executable)
index 804b6a7..0000000
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
-  The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)
-  Copyright (C) 2001,2002,2003  Aymeric MOIZARD jack@atosc.org
-  
-  This library is free software; you can redistribute it and/or
-  modify it under the terms of the GNU Lesser General Public
-  License as published by the Free Software Foundation; either
-  version 2.1 of the License, or (at your option) any later version.
-  
-  This library is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-  Lesser General Public License for more details.
-  
-  You should have received a copy of the GNU Lesser General Public
-  License along with this library; if not, write to the Free Software
-  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
-
-#ifdef _WIN32_WCE
-#define _INC_TIME /* for wce.h */
-#include <windows.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <osipparser2/osip_port.h>
-
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-#include <time.h>
-
-#if defined(__VXWORKS_OS__)
-#include <selectLib.h>
-#elif (!defined(WIN32) && !defined(_WIN32_WCE))
-#include <sys/time.h>
-#elif defined(WIN32)
-#include <windows.h>
-#endif
-
-#if defined (HAVE_SYS_UNISTD_H)
-#  include <unistd.h>
-#endif
-
-#if defined (HAVE_UNISTD_H)
-#  include <unistd.h>
-#endif
-
-#if defined (HAVE_SYSLOG_H)
-#  include <syslog.h>
-#endif
-
-#if defined (HAVE_SYS_SELECT_H)
-#  include <sys/select.h>
-#endif
-
-#ifdef HAVE_PTH_PTHREAD_H
-#include <pthread.h>
-#endif
-
-FILE *logfile = NULL;
-int tracing_table[END_TRACE_LEVEL];
-static int use_syslog = 0;
-
-static unsigned int random_seed_set = 0;
-
-unsigned int
-osip_build_random_number ()
-{
-    if (!random_seed_set) {
-#ifndef WIN32
-       struct timeval tv;
-
-        gettimeofday(&tv, NULL);
-       srand(tv.tv_usec);
-#else
-       srand(time(NULL));
-#endif
-        random_seed_set = 1;
-    }
-
-    return rand();
-}
-
-#if defined(__linux)
-#include <limits.h>
-#endif
-
-int
-osip_atoi (const char *number)
-{
-#if defined(__linux) || defined(HAVE_STRTOL)
-  int i;
-  if (number==NULL) return -1;
-  i = strtol (number, (char **) NULL, 10);
-  if (i == LONG_MIN || i == LONG_MAX)
-    return -1;
-  return i;
-#endif
-
-  return atoi (number);
-}
-
-char *
-osip_strncpy (char *dest, const char *src, int length)
-{
-#ifdef WIN32
-  memcpy (dest, src, length);
-#else
-  strncpy(dest, src, length);
-#endif
-  dest[length] = '\0';
-  return dest;
-}
-
-/* append string_osip_to_append to string at position cur
-   size is the current allocated size of the element
-*/
-char *
-__osip_sdp_append_string (char *string, int size, char *cur, char *string_osip_to_append)
-{
-  int length = strlen (string_osip_to_append);
-
-  if (cur + length - string > size)
-    {
-      int length2;
-
-      length2 = cur - string;
-      string = realloc (string, size + length + 10);
-      cur = string + length2;  /* the initial allocation may have changed! */
-    }
-  osip_strncpy (cur, string_osip_to_append, length);
-  return cur + strlen (cur);
-}
-
-void
-osip_usleep (int useconds)
-{
-#ifdef WIN32
-  Sleep (useconds / 1000);
-#else
-  struct timeval delay;
-  int sec;
-
-  sec = (int) useconds / 1000000;
-  if (sec > 0)
-    {
-      delay.tv_sec = sec;
-      delay.tv_usec = 0;
-    }
-  else
-    {
-      delay.tv_sec = 0;
-      delay.tv_usec = useconds;
-    }
-  select (0, 0, 0, 0, &delay);
-#endif
-}
-
-
-char *
-osip_strdup (const char *ch)
-{
-  char *copy;
-  int length;
-  if (ch == NULL)
-    return NULL;
-  length = strlen (ch);
-  copy = (char *) osip_malloc (length + 1);
-  osip_strncpy (copy, ch, length);
-  return copy;
-}
-
-char *
-osip_strdup_without_quote (const char *ch)
-{
-  char *copy = (char *) osip_malloc (strlen (ch) + 1);
-
-  /* remove leading and trailing " */
-  if ((*ch == '\"'))
-    {
-      osip_strncpy (copy, ch + 1, strlen (ch + 1));
-      osip_strncpy (copy + strlen (copy) - 1, "\0", 1);
-    }
-  else
-    osip_strncpy (copy, ch, strlen (ch));
-  return copy;
-}
-
-int
-osip_tolower (char *word)
-{
-#ifdef HAVE_CTYPE_H
-  for (; *word; word++)
-    *word = (char) tolower (*word);
-#else
-  int i;
-  int len = strlen (word);
-
-  for (i = 0; i <= len - 1; i++)
-    {
-      if ('A' <= word[i] && word[i] <= 'Z')
-       word[i] = word[i] + 32;
-    }
-#endif
-  return 0;
-}
-
-int
-osip_strcasecmp (const char *s1, const char *s2)
-{
-#if (!defined WIN32 && !defined _WIN32_WCE)
-  return strcasecmp (s1, s2);
-#else
-  return _stricmp (s1, s2);
-#endif
-}
-
-int
-osip_strncasecmp (const char *s1, const char *s2, unsigned int len)
-{
-#if (!defined WIN32 && !defined _WIN32_WCE)
-  return strncasecmp (s1, s2, len);
-#else
-  return _strnicmp (s1, s2, len);
-#endif
-}
-
-/* remove SPACE before and after the content */
-int
-osip_clrspace (char *word)
-{
-  char *pbeg;
-  char *pend;
-  int len;
-
-  if (word == NULL)
-    return -1;
-  if (*word == '\0')
-    return 0;
-  len = strlen (word);
-
-  pbeg = word;
-  while ((' ' == *pbeg) || ('\r' == *pbeg) || ('\n' == *pbeg)
-        || ('\t' == *pbeg))
-    pbeg++;
-
-  pend = word + len - 1;
-  while ((' ' == *pend) || ('\r' == *pend) || ('\n' == *pend)
-        || ('\t' == *pend))
-    pend--;
-
-  if (pend < pbeg)
-    {
-      *word = '\0';
-      return 0;
-    }
-
-  /* Add terminating NULL only if we've cleared room for it */
-  if (pend + 1 <= word + (len - 1))
-    pend[1] = '\0';
-
-  if (pbeg != word)
-    memmove (word, pbeg, pend - pbeg + 2);
-
-  return 0;
-}
-
-/* __osip_set_next_token:
-   dest is the place where the value will be allocated
-   buf is the string where the value is searched
-   end_separator is the character that MUST be found at the end of the value
-   next is the final location of the separator + 1
-
-   the element MUST be found before any "\r" "\n" "\0" and
-   end_separator
-
-   return -1 on error
-   return 1 on success
-*/
-int
-__osip_set_next_token (char **dest, char *buf, int end_separator, char **next)
-{
-  char *sep;                   /* separator */
-
-  *next = NULL;
-
-  sep = buf;
-  while ((*sep != end_separator) && (*sep != '\0') && (*sep != '\r')
-        && (*sep != '\n'))
-    sep++;
-  if ((*sep == '\r') || (*sep == '\n'))
-    {                          /* we should continue normally only if this is the separator asked! */
-      if (*sep != end_separator)
-       return -1;
-    }
-  if (*sep == '\0')
-    return -1;                 /* value must not end with this separator! */
-  if (sep == buf)
-    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 0;
-}
-
-#if 0
-/*  not yet done!!! :-)
- */
-int
-__osip_set_next_token_better (char **dest, char *buf, int end_separator,
-                      int *forbidden_tab[], int size_tab, char **next)
-{
-  char *sep;                   /* separator */
-
-  *next = NULL;
-
-  sep = buf;
-  while ((*sep != end_separator) && (*sep != '\0') && (*sep != '\r')
-        && (*sep != '\n'))
-    sep++;
-  if ((*sep == '\r') && (*sep == '\n'))
-    {                          /* we should continue normally only if this is the separator asked! */
-      if (*sep != end_separator)
-       return -1;
-    }
-  if (*sep == '\0')
-    return -1;                 /* value must not end with this separator! */
-  if (sep == buf)
-    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;
-}
-
-void
-__osip_dequote(char *s)
-{
-  int 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_TRACE
-void
-osip_trace_initialize_syslog (osip_trace_level_t level, char* ident)
-{
-}
-void
-osip_trace_initialize (osip_trace_level_t level, FILE * file)
-{
-}
-void
-osip_trace_enable_level (osip_trace_level_t level)
-{
-}
-void
-osip_trace_disable_level (osip_trace_level_t level)
-{
-}
-
-int
-osip_is_trace_level_activate (osip_trace_level_t level)
-{
-  return LOG_FALSE;
-}
-
-#else
-
-/* initialize log */
-/* all lower levels of level are logged in file. */
-void
-osip_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++;
-    }
-}
-
-void
-osip_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! */
-void
-osip_trace_enable_level (osip_trace_level_t level)
-{
-  tracing_table[level] = LOG_TRUE;
-}
-
-/* disable a special debugging level! */
-void
-osip_trace_disable_level (osip_trace_level_t level)
-{
-  tracing_table[level] = LOG_FALSE;
-}
-
-/* not so usefull? */
-int
-osip_is_trace_level_activate (osip_trace_level_t level)
-{
-  return tracing_table[level];
-}
-#endif
-
-int
-osip_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;
-}
-
-
-void *
-osip_malloc (int size)
-{
-  void *value;
-
-  value = malloc (size);
-  if (value == 0)
-    {
-      fprintf (stdout, "<port_malloc.c> virtual memory exhausted\n");
-      /* How can I handle that case properly? */
-      exit (0);
-    }
-
-  return value;
-}
-
-void
-osip_free (void *ptr)
-{
-  if (ptr != NULL)
-    free (ptr);
-}
-
-