core: Changed WS from being a flag on a TCP/TLS connection to a protocol in its own...
[sip-router] / pt.h
diff --git a/pt.h b/pt.h
index 1557354..b52be56 100644 (file)
--- a/pt.h
+++ b/pt.h
@@ -5,33 +5,30 @@
  *
  *
  *
- * Copyright (C) 2001-2003 Fhg Fokus
+ * Copyright (C) 2001-2003 FhG Fokus
  *
- * This file is part of ser, a free SIP server.
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
  *
- * ser is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License 
- * along with this program; if not, write to the Free Software 
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 /*
  * History:
  * --------
  *  2003-04-15  added tcp_disable support (andrei)
+ *  2006-06-14 added process table in shared mem (dragos)
+ *  2007-07-04 added register_fds() and get_max_open_fds(() (andrei)
+ */
+/** internal fork functions and process table.
+ * @file: pt.h
+ * @ingroup core
  */
 
 
 
 #include <sys/types.h>
 #include <unistd.h>
+#include <stdlib.h>
 
 #include "globals.h"
 #include "timer.h"
+#include "socket_info.h"
+#include "locking.h"
 
-#define MAX_PT_DESC    128
+#define MAX_PT_DESC                    128
 
 struct process_table {
        int pid;
 #ifdef USE_TCP
-       int unix_sock; /* unix socket on which tcp main listens */
-       int idx; /* tcp child index, -1 for other processes */
+       int unix_sock;  /* unix socket on which tcp main listens        */
+       int idx;                /* tcp child index, -1 for other processes      */
 #endif
        char desc[MAX_PT_DESC];
 };
 
 extern struct process_table *pt;
+extern gen_lock_t* process_lock;
+extern int *process_count;
 extern int process_no;
 
-/* get number of process started by main with
-   given configuration
-*/
-inline static int process_count()
-{
-    return 
-               /* receivers and attendant */
-               (dont_fork ? 1 : children_no*sock_no + 1)
-               /* timer process */
-               + (timer_list ? 1 : 0 )
-               /* fifo server */
-               +((fifo==NULL || strlen(fifo)==0) ? 0 : 1 )
+extern struct tcp_child* tcp_children;
+
+int init_pt(int proc_no);
+int get_max_procs(void);
+int register_procs(int no);
+int get_max_open_fds(void);
+int register_fds(int no);
+
+
+int close_extra_socks(int proc_id, int proc_no);
+
+#define get_proc_no() ((process_count)?*process_count:0)
+
+/* return processes pid */
+int my_pid(void);
+
+/**
+ * Forks a new process.
+ * @param desc - text description for the process table
+ * @param make_sock - if to create a unix socket pair for it
+ * @returns the pid of the new process
+ */
+int fork_process(int child_id,char *desc,int make_sock);
+
+/**
+ * Forks a new TCP process.
+ * @param desc - text description for the process table
+ * @param r - index in the tcp_children array
+ * @param *reader_fd_1 - pointer to return the reader_fd[1]
+ * @returns the pid of the new process
+ */
 #ifdef USE_TCP
-               + (!tcp_disable)?( 1/* tcp main */ + tcp_children_no + 
-                                                       (timer_list ? 0: 1)):0 /* add the timer proc.
-                                                                                                         if not already taken
-                                                                                                         into account */
+int fork_tcp_process(int child_id,char *desc,int r,int *reader_fd_1);
 #endif
-               
-               ;
-}
 
+#ifdef PKG_MALLOC
+void mem_dump_pkg_cb(str *gname, str *name);
+#endif
 
-/* retun processes's pid */
-inline static int my_pid()
-{
-       return pt ? pt[process_no].pid : getpid();
-}
+#ifdef SHM_MEM
+int mem_dump_shm_fixup(void *handle, str *gname, str *name, void **val);
+#endif
 
+unsigned int set_fork_delay(unsigned int v);
 
 #endif