Bläddra i källkod

* support Route in REFER/BYE
* added stop_stream ()
* updated copyright
* added trailing linefeed to LM_* () messages
* add create call strings into buffer
* drop calls that to respond to REFER
* changed Referred-By to mohqueue
* added TRYING status
* only INVITE can come in w/o to tag
* use TM for first reply on INVITE
* changed the way messages are entered into the queue
* 180 Ringing not sent if not required

Robert Boisvert 10 år sedan
förälder
incheckning
9d87603ca0

+ 94 - 79
modules/mohqueue/mohq.c

@@ -1,6 +1,5 @@
 /*
- *
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -60,9 +59,9 @@ static cmd_export_t mod_cmds [] = {
 };
 
 /* PARAMETERS */
-str db_url = str_init(DEFAULT_DB_URL);
-str db_ctable = str_init("mohqcalls");
-str db_qtable = str_init("mohqueues");
+str db_url = str_init (DEFAULT_DB_URL);
+str db_ctable = str_init ("mohqcalls");
+str db_qtable = str_init ("mohqueues");
 char *mohdir = "";
 int moh_maxcalls = 50;
 
@@ -133,83 +132,87 @@ return 0;
 static int init_cfg (void)
 
 {
-  int error = 0;
-  int bfnd = 0;
-  struct stat psb [1];
-
-  /**********
-  * db_url, db_ctable, db_qtable exist?
-  **********/
-  
-  if (!db_url.s || db_url.len<=0)
+int bfnd = 0;
+int berror = 0;
+struct stat psb [1];
+
+/**********
+* db_url, db_ctable, db_qtable exist?
+**********/
+
+if (!db_url.s || db_url.len <= 0)
   {
-    LM_ERR ("db_url parameter not set!\n");
-    error = 1;
+  LM_ERR ("db_url parameter not set!\n");
+  berror = 1;
   }
-
-  if (!db_ctable.s || db_ctable.len<=0)
+if (!db_ctable.s || db_ctable.len <= 0)
   {
-    LM_ERR ("db_ctable parameter not set!\n");
-    error = 1;
+  LM_ERR ("db_ctable parameter not set!\n");
+  berror = 1;
   }
-
-  if (!db_qtable.s || db_qtable.len<=0)
+if (!db_qtable.s || db_qtable.len <= 0)
   {
-    LM_ERR ("db_qtable parameter not set!\n");
-    error = 1;
-  } 
-
-  /**********
-  * mohdir
-  * o exists?
-  * o directory?
-  **********/
-
-  if (!*mohdir) {
-    LM_ERR ("mohdir parameter not set!\n");
-    error = 1;
-  } else if (strlen(mohdir) > MOHDIRLEN) {
-    LM_ERR ("mohdir too long!");
-    error = 1;
+  LM_ERR ("db_qtable parameter not set!\n");
+  berror = 1;
   }
-  if (moh_maxcalls < 1 || moh_maxcalls > 5000)
+
+/**********
+* mohdir
+* o exists?
+* o directory?
+**********/
+
+if (!*mohdir)
   {
-    LM_ERR ("moh_maxcalls not in range of 1-5000!");
-    error = 1;
+  LM_ERR ("mohdir parameter not set!\n");
+  berror = 1;
   }
-  if (error == 1) {
-	return 0;
+else if (strlen (mohdir) > MOHDIRLEN)
+  {
+  LM_ERR ("mohdir too long!\n");
+  berror = 1;
   }
-  pmod_data->pcfg->db_qtable = db_qtable;
-  pmod_data->pcfg->db_ctable = db_ctable;
-  pmod_data->pcfg->db_url = db_url;
-  pmod_data->pcfg->mohdir = mohdir;
-
-  if (!lstat (mohdir, psb))
+else
   {
+  if (!lstat (mohdir, psb))
+    {
     if ((psb->st_mode & S_IFMT) == S_IFDIR)
       { bfnd = 1; }
-  }
+    }
   if (!bfnd)
-  {
+    {
     LM_ERR ("mohdir is not a directory!\n");
-    return 0;
+    berror = 1;
+    }
   }
 
-  /**********
-  * max calls
-  * o valid count?
-  * o alloc memory
-  **********/
+/**********
+* o max calls valid?
+* o alloc memory
+* o save data
+**********/
 
-   pmod_data->pcall_lst = (call_lst *) shm_malloc (sizeof (call_lst) * moh_maxcalls);
-   if (!pmod_data->pcall_lst) {
-       LM_ERR ("Unable to allocate shared memory");
-       return -1;
+if (moh_maxcalls < 1 || moh_maxcalls > 5000)
+  {
+  LM_ERR ("moh_maxcalls not in range of 1-5000!\n");
+  berror = 1;
   }
-  memset (pmod_data->pcall_lst, 0, sizeof (call_lst) * moh_maxcalls);
-  pmod_data->call_cnt = moh_maxcalls;
-  return -1;
+if (berror)
+  { return 0; }
+pmod_data->pcall_lst =
+  (call_lst *) shm_malloc (sizeof (call_lst) * moh_maxcalls);
+if (!pmod_data->pcall_lst)
+  {
+  LM_ERR ("Unable to allocate shared memory!\n");
+  return 0;
+  }
+pmod_data->pcfg->db_url = db_url;
+pmod_data->pcfg->db_ctable = db_ctable;
+pmod_data->pcfg->db_qtable = db_qtable;
+pmod_data->pcfg->mohdir = mohdir;
+memset (pmod_data->pcall_lst, 0, sizeof (call_lst) * moh_maxcalls);
+pmod_data->call_cnt = moh_maxcalls;
+return -1;
 }
 
 /**********
@@ -232,13 +235,13 @@ static int init_db (void)
 str *pdb_url = &pmod_data->pcfg->db_url;
 if (db_bind_mod (pdb_url, pmod_data->pdb))
   {
-  LM_ERR ("Unable to bind DB API using %s", pdb_url->s);
+  LM_ERR ("Unable to bind DB API using %s!\n", pdb_url->s);
   return 0;
   }
 db_func_t *pdb = pmod_data->pdb;
 if (!DB_CAPABILITY ((*pdb), DB_CAP_ALL))
   {
-  LM_ERR ("Selected database %s lacks required capabilities", pdb_url->s);
+  LM_ERR ("Selected database %s lacks required capabilities!\n", pdb_url->s);
   return 0;
   }
 db1_con_t *pconn = mohq_dbconnect ();
@@ -254,14 +257,14 @@ if (!pconn)
 if (db_check_table_version (pdb, pconn,
   &pmod_data->pcfg->db_ctable, MOHQ_CTABLE_VERSION) < 0)
   {
-  LM_ERR ("%s table in DB %s not at version %d",
+  LM_ERR ("%s table in DB %s not at version %d!\n",
     pmod_data->pcfg->db_ctable.s, pdb_url->s, MOHQ_CTABLE_VERSION);
   goto dberr;
   }
 if (db_check_table_version (pdb, pconn,
   &pmod_data->pcfg->db_qtable, MOHQ_QTABLE_VERSION) < 0)
   {
-  LM_ERR ("%s table in DB %s not at version %d",
+  LM_ERR ("%s table in DB %s not at version %d!\n",
     pmod_data->pcfg->db_qtable.s, pdb_url->s, MOHQ_QTABLE_VERSION);
   goto dberr;
   }
@@ -301,7 +304,7 @@ if (rank == PROC_INIT || rank == PROC_TCP_MAIN || rank == PROC_MAIN)
   { return 0; }
 if (!pmod_data->pdb->init)
   {
-  LM_CRIT ("DB API not loaded!");
+  LM_CRIT ("DB API not loaded!\n");
   return -1;
   }
 return 0;
@@ -355,7 +358,7 @@ int mod_init (void)
 pmod_data = (mod_data *) shm_malloc (sizeof (mod_data));
 if (!pmod_data)
   {
-  LM_ERR ("Unable to allocate shared memory");
+  LM_ERR ("Unable to allocate shared memory!\n");
   return -1;
   }
 memset (pmod_data, 0, sizeof (mod_data));
@@ -371,47 +374,59 @@ if (!init_db ())
 
 if (sl_load_api (pmod_data->psl))
   {
-  LM_ERR ("Unable to load SL module\n");
+  LM_ERR ("Unable to load SL module!\n");
   goto initerr;
   }
 if (load_tm_api (pmod_data->ptm))
   {
-  LM_ERR ("Unable to load TM module\n");
+  LM_ERR ("Unable to load TM module!\n");
   goto initerr;
   }
 if (load_rr_api (pmod_data->prr))
   {
-  LM_ERR ("Unable to load RR module\n");
+  LM_ERR ("Unable to load RR module!\n");
   goto initerr;
   }
 pmod_data->fn_rtp_answer = find_export ("rtpproxy_answer", 0, 0);
 if (!pmod_data->fn_rtp_answer)
   {
-  LM_ERR ("Unable to load rtpproxy_answer\n");
+  LM_ERR ("Unable to load rtpproxy_answer!\n");
   goto initerr;
   }
 pmod_data->fn_rtp_offer = find_export ("rtpproxy_offer", 0, 0);
 if (!pmod_data->fn_rtp_offer)
   {
-  LM_ERR ("Unable to load rtpproxy_offer\n");
+  LM_ERR ("Unable to load rtpproxy_offer!\n");
   goto initerr;
   }
 pmod_data->fn_rtp_stream_c = find_export ("rtpproxy_stream2uac", 2, 0);
 if (!pmod_data->fn_rtp_stream_c)
   {
-  LM_ERR ("Unable to load rtpproxy_stream2uac\n");
+  LM_ERR ("Unable to load rtpproxy_stream2uac!\n");
   goto initerr;
   }
 pmod_data->fn_rtp_stream_s = find_export ("rtpproxy_stream2uas", 2, 0);
 if (!pmod_data->fn_rtp_stream_s)
   {
-  LM_ERR ("Unable to load rtpproxy_stream2uas\n");
+  LM_ERR ("Unable to load rtpproxy_stream2uas!\n");
+  goto initerr;
+  }
+pmod_data->fn_rtp_stop_c = find_export ("rtpproxy_stop_stream2uac", 0, 0);
+if (!pmod_data->fn_rtp_stop_c)
+  {
+  LM_ERR ("Unable to load rtpproxy_stop_stream2uac!\n");
+  goto initerr;
+  }
+pmod_data->fn_rtp_stop_s = find_export ("rtpproxy_stop_stream2uas", 0, 0);
+if (!pmod_data->fn_rtp_stop_s)
+  {
+  LM_ERR ("Unable to load rtpproxy_stop_stream2uas!\n");
   goto initerr;
   }
 pmod_data->fn_rtp_destroy = find_export ("rtpproxy_destroy", 0, 0);
 if (!pmod_data->fn_rtp_destroy)
   {
-  LM_ERR ("Unable to load rtpproxy_destroy\n");
+  LM_ERR ("Unable to load rtpproxy_destroy!\n");
   goto initerr;
   }
 
@@ -438,4 +453,4 @@ if (pmod_data->pcall_lock->plock)
 shm_free (pmod_data);
 pmod_data = NULL;
 return -1;
-}
+}

+ 17 - 11
modules/mohqueue/mohq.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -61,31 +61,35 @@ typedef struct
 
 /* call_state values */
 #define CLSTA_ENTER     100
-#define CLSTA_PRACKSTRT 101
-#define CLSTA_PRACKRPLY 102
-#define CLSTA_RINGING   103
+#define CLSTA_TRYING    101
+#define CLSTA_PRACKSTRT 102
+#define CLSTA_PRACKRPLY 103
 #define CLSTA_INVITED   104
 #define CLSTA_CANCEL    105
 #define CLSTA_INQUEUE   200
 #define CLSTA_REFER     301
 #define CLSTA_RFRWAIT   302
+#define CLSTA_BYEOK     304
 #define CLSTA_BYE       305
 
 typedef struct
   {
-  int call_active;
-  char call_id [101];
-  char call_from [URI_LEN + 1];
+  char call_buffer [1024];
+  size_t call_bufpos;
+  char *call_id;
+  char *call_from;
   char call_referto [URI_LEN + 1];
-  char call_contact [URI_LEN + 1];
-  char call_tag [101];
-  char call_via [1024];
+  char *call_contact;
+  char *call_tag;
+  char *call_via;
+  char *call_route;
   char call_addr [IP_ADDR_MAX_STR_SIZE + 4];
   int call_state;
   int call_cseq;
   int call_aport;
   mohq_lst *pmohq;
   time_t call_time;
+  time_t refer_time;
   unsigned int call_hash;
   unsigned int call_label;
   sip_msg_t *call_pmsg;
@@ -118,6 +122,8 @@ typedef struct
   cmd_function fn_rtp_offer;
   cmd_function fn_rtp_stream_c;
   cmd_function fn_rtp_stream_s;
+  cmd_function fn_rtp_stop_c;
+  cmd_function fn_rtp_stop_s;
   } mod_data;
 
 /**********
@@ -127,4 +133,4 @@ typedef struct
 extern mod_data *pmod_data;
 extern rtpmap prtpmap [];
 
-#endif /* MOHQ_H */
+#endif /* MOHQ_H */

+ 5 - 5
modules/mohqueue/mohq_common.h

@@ -1,6 +1,5 @@
 /*
- *
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -52,6 +51,7 @@
 #include "../../parser/contact/parse_contact.h"
 #include "../../parser/parse_expires.h"
 #include "../../parser/parse_from.h"
+#include "../../parser/parse_rr.h"
 #include "../../parser/sdp/sdp.h"
 
 /* convenience macros */
@@ -68,7 +68,7 @@
 
 #define MOHQ_STR_APPEND_L( str1, str1_lim, s2, s2_len ) \
 	if ((str1)->len + (s2_len) >= (str1_lim)) { \
-	    LM_ERR( "Failed to append to str: too long" ); \
+	    LM_ERR( "Failed to append to str: too long!\n" ); \
 	} else { \
 	    MOHQ_STR_APPEND((str1), (s2), (s2_len)); \
 	    (str1_lim) -= (s2_len); \
@@ -83,7 +83,7 @@
 
 #define MOHQ_STR_APPEND_CSTR_L( str1, str1_lim, cstr1 ) \
 	if ((str1)->len + strlen(cstr1) >= (str1_lim)) { \
-	    LM_ERR( "Failed to append to str: too long" ); \
+	    LM_ERR( "Failed to append to str: too long!\n" ); \
 	} else { \
 	    MOHQ_STR_APPEND_CSTR((str1), (cstr1)); \
 	}
@@ -100,4 +100,4 @@
 #define MOHQ_HEADER_EMPTY( hdr1 ) \
 	((hdr1) == NULL || MOHQ_STR_EMPTY( &(hdr1)->body ))
 
-#endif /* MOHQ_COMMON_H */
+#endif /* MOHQ_COMMON_H */

+ 14 - 14
modules/mohqueue/mohq_db.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -214,7 +214,7 @@ pcall->call_time = time (0);
 fill_call_vals (prvals, pcall, CALL_COLCNT);
 if (pdb->insert (pconn, prkeys, prvals, CALL_COLCNT) < 0)
   {
-  LM_WARN ("%sUnable to add new row to %s", pfncname,
+  LM_WARN ("%sUnable to add new row to %s\n", pfncname,
     pmod_data->pcfg->db_ctable.s);
   }
 mohq_dbdisconnect (pconn);
@@ -241,7 +241,7 @@ db_func_t *pdb = pmod_data->pdb;
 pdb->use_table (pconn, &pmod_data->pcfg->db_ctable);
 if (pdb->delete (pconn, 0, 0, 0, 0) < 0)
   {
-  LM_WARN ("%sUnable to delete all rows from %s", pfncname,
+  LM_WARN ("%sUnable to delete all rows from %s\n", pfncname,
     pmod_data->pcfg->db_ctable.s);
   }
 return;
@@ -275,7 +275,7 @@ db_val_t prvals [1];
 set_call_val (prvals, 0, CALLCOL_CALL, pcall->call_id);
 if (pdb->delete (pconn, prkeys, 0, prvals, 1) < 0)
   {
-  LM_WARN ("%sUnable to delete row from %s", pfncname,
+  LM_WARN ("%sUnable to delete row from %s\n", pfncname,
     pmod_data->pcfg->db_ctable.s);
   }
 mohq_dbdisconnect (pconn);
@@ -295,7 +295,7 @@ db1_con_t *mohq_dbconnect (void)
 str *pdb_url = &pmod_data->pcfg->db_url;
 db1_con_t *pconn = pmod_data->pdb->init (pdb_url);
 if (!pconn)
-  { LM_ERR ("Unable to connect to DB %s\n", pdb_url->s); }
+  { LM_ERR ("Unable to connect to DB %s!\n", pdb_url->s); }
 return pconn;
 }
 
@@ -346,7 +346,7 @@ db_val_t puvals [1];
 fill_call_vals (puvals, pcall, CALLCOL_STATE);
 if (pdb->update (pconn, pqkeys, 0, pqvals, pukeys, puvals, 1, 1) < 0)
   {
-  LM_WARN ("%sUnable to update row in %s", pfncname,
+  LM_WARN ("%sUnable to update row in %s\n", pfncname,
     pmod_data->pcfg->db_ctable.s);
   }
 mohq_dbdisconnect (pconn);
@@ -388,7 +388,7 @@ puvals->type = DB1_INT;
 puvals->nul = 0;
 if (pdb->update (pconn, pqkeys, 0, pqvals, pukeys, puvals, 1, 1) < 0)
   {
-  LM_WARN ("%sUnable to update row in %s", pfncname,
+  LM_WARN ("%sUnable to update row in %s\n", pfncname,
     pmod_data->pcfg->db_qtable.s);
   }
 mohq_dbdisconnect (pconn);
@@ -523,21 +523,21 @@ for (nidx = 0; nidx < nrows; nidx++)
       if (strcmp (pqlst [nidx2].mohq_mohdir, pmohdir))
         {
         strcpy (pqlst [nidx2].mohq_mohdir, pmohdir);
-        LM_INFO ("Queue,Field (%s,%.*s): Changed", pqname,
+        LM_INFO ("Queue,Field (%s,%.*s): Changed\n", pqname,
           STR_FMT (&MOHQCSTR_MDIR));
         }
       ptext = (char *)VAL_STRING (prowvals + MOHQCOL_MFILE);
       if (strcmp (pqlst [nidx2].mohq_mohfile, ptext))
         {
         strcpy (pqlst [nidx2].mohq_mohfile, ptext);
-        LM_INFO ("Queue,Field (%s,%.*s): Changed", pqname,
+        LM_INFO ("Queue,Field (%s,%.*s): Changed\n", pqname,
           STR_FMT (&MOHQCSTR_MFILE));
         }
       ptext = (char *)VAL_STRING (prowvals + MOHQCOL_NAME);
       if (strcmp (pqlst [nidx2].mohq_name, ptext))
         {
         strcpy (pqlst [nidx2].mohq_name, ptext);
-        LM_INFO ("Queue,Field (%s,%.*s): Changed", pqname,
+        LM_INFO ("Queue,Field (%s,%.*s): Changed\n", pqname,
           STR_FMT (&MOHQCSTR_NAME));
         }
       int bdebug = VAL_INT (prowvals + MOHQCOL_DEBUG) ? MOHQF_DBG : 0;
@@ -547,7 +547,7 @@ for (nidx = 0; nidx < nrows; nidx++)
           { pqlst [nidx2].mohq_flags |= MOHQF_DBG; }
         else
           { pqlst [nidx2].mohq_flags &= ~MOHQF_DBG; }
-        LM_INFO ("Queue,Field (%s,%.*s): Changed", pqname,
+        LM_INFO ("Queue,Field (%s,%.*s): Changed\n", pqname,
           STR_FMT (&MOHQCSTR_DEBUG));
         }
       bfnd = -1;
@@ -590,7 +590,7 @@ for (nidx = 0; nidx < nrows; nidx++)
       (char *)VAL_STRING (prowvals + MOHQCOL_NAME));
     if (VAL_INT (prowvals + MOHQCOL_DEBUG))
       { pnewlst [nsize].mohq_flags |= MOHQF_DBG; }
-    LM_INFO ("Added new queue (%s)", pnewlst [nsize].mohq_name);
+    LM_INFO ("Added new queue (%s)\n", pnewlst [nsize].mohq_name);
     if (nsize)
       { shm_free (pmod_data->pmohq_lst); }
     pmod_data->pmohq_lst = pnewlst;
@@ -611,7 +611,7 @@ for (nidx = 0; nidx < pmod_data->mohq_cnt; nidx++)
 
   if (pqlst [nidx].mohq_flags & MOHQF_CHK)
     { continue; }
-  LM_INFO ("Removed queue (%s)", pqlst [nidx].mohq_name);
+  LM_INFO ("Removed queue (%s)\n", pqlst [nidx].mohq_name);
   if (nidx != (pmod_data->mohq_cnt - 1))
     {
     memcpy (&pqlst [nidx], &pqlst [pmod_data->mohq_cnt - 1],
@@ -621,4 +621,4 @@ for (nidx = 0; nidx < pmod_data->mohq_cnt; nidx++)
   --nidx;
   }
 return;
-}
+}

+ 2 - 2
modules/mohqueue/mohq_db.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -61,4 +61,4 @@ void update_call_rec (call_lst *);
 void update_debug (mohq_lst *, int);
 void update_mohq_lst (db1_con_t *pconn);
 
-#endif /* MOHQ_DB_H */
+#endif /* MOHQ_DB_H */

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 349 - 229
modules/mohqueue/mohq_funcs.c


+ 2 - 2
modules/mohqueue/mohq_funcs.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -35,4 +35,4 @@ int mohq_process (sip_msg_t *);
 int mohq_retrieve (sip_msg_t *, char *, char *);
 int mohq_send (sip_msg_t *, char *);
 
-#endif /* MOHQ_FUNCS_H */
+#endif /* MOHQ_FUNCS_H */

+ 5 - 5
modules/mohqueue/mohq_locks.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -101,12 +101,12 @@ char *pfncname = "mohq_lock_init: ";
 plock->plock = lock_alloc ();
 if (!plock->plock)
   {
-  LM_ERR ("%sUnable to allocate lock memory!", pfncname);
+  LM_ERR ("%sUnable to allocate lock memory!\n", pfncname);
   return 0;
   }
 if (!lock_init (plock->plock))
   {
-  LM_ERR ("%sUnable to init lock!", pfncname);
+  LM_ERR ("%sUnable to init lock!\n", pfncname);
   lock_dealloc (plock->plock);
   return 0;
   }
@@ -138,7 +138,7 @@ switch (plock->lock_cnt)
     plock->lock_cnt = 0;
     break;
   case 0:
-    LM_WARN ("mohq_lock_release: Lock was not set");
+    LM_WARN ("mohq_lock_release: Lock was not set.\n");
     break;
   default:
     plock->lock_cnt--;
@@ -194,4 +194,4 @@ do
   }
 while (!nret && --nms_cnt >= 0);
 return nret;
-}
+}

+ 2 - 2
modules/mohqueue/mohq_locks.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 Robert Boisvert
+ * Copyright (C) 2013-15 Robert Boisvert
  *
  * This file is part of the mohqueue module for Kamailio, a free SIP server.
  *
@@ -44,4 +44,4 @@ int mohq_lock_init (mohq_lock *);
 void mohq_lock_release (mohq_lock *);
 int mohq_lock_set (mohq_lock *, int, int);
 
-#endif /* MOHQ_LOCKS_H */
+#endif /* MOHQ_LOCKS_H */

Vissa filer visades inte eftersom för många filer har ändrats