pkg: fix wrong package name, closes FS#148, reported from Andrew Pogrebennyk
[sip-router] / timer_proc.h
1 /* 
2  * Copyright (C) 2009 iptelorg GmbH
3  *
4  * Permission to use, copy, modify, and distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 /*
18  * History:
19  * --------
20  *  2009-03-10  initial version (andrei)
21 */
22
23 /**
24  * @file
25  * @brief SIP-router core :: timer_proc.h - separate process timers
26  *
27  * (unrelated to the main fast and slow timers)
28  * @ingroup core
29  * Module: @ref core
30  */
31
32 #ifndef __timer_proc_h
33 #define __timer_proc_h
34
35 #include "local_timer.h"
36
37 /**
38  * \brief update internal counters for running new dummy timers
39  * @param timers number of dummy timer processes
40  * @return 0 on success; -1 on error
41  */
42 int register_dummy_timers(int timers);
43
44
45 /**
46  * \brief Forks a separate simple sleep() periodic timer
47  * 
48  * Forks a very basic periodic timer process, that just sleep()s for 
49  * the specified interval and then calls the timer function.
50  * The new "dummy timer" process execution start immediately, the sleep()
51  * is called first (so the first call to the timer function will happen
52  * \<interval\> seconds after the call to fork_dummy_timer)
53  * @param child_id  @see fork_process()
54  * @param desc      @see fork_process()
55  * @param make_sock @see fork_process()
56  * @param f         timer function/callback
57  * @param param     parameter passed to the timer function
58  * @param interval  interval in seconds.
59  * @return pid of the new process on success, -1 on error
60  * (doesn't return anything in the child process)
61  */
62 int fork_dummy_timer(int child_id, char* desc, int make_sock,
63                                                 timer_function* f, void* param, int interval);
64
65
66 /**
67  * \brief Forks a timer process based on the local timer
68  * 
69  * Forks a separate timer process running a local_timer.h type of timer
70  * A pointer to the local_timer handle (allocated in shared memory) is
71  * returned in lt_h. It can be used to add/delete more timers at runtime
72  * (via local_timer_add()/local_timer_del() a.s.o).
73  * If timers are added from separate processes, some form of locking must be
74  * used (all the calls to local_timer* must be enclosed by locks if it
75  * cannot be guaranteed that they cannot execute in the same time)
76  * The timer "engine" must be run manually from the child process. For
77  * example a very simple local timer process that just runs a single 
78  * periodic timer can be started in the following way:
79  * struct local_timer* lt_h;
80  * 
81  * pid=fork_local_timer_process(...., &lt_h);
82  * if (pid==0){
83  *          timer_init(&my_timer, my_timer_f, 0, 0);
84  *          local_timer_add(&lt_h, &my_timer, S_TO_TICKS(10), get_ticks_raw());
85  *          while(1) { sleep(1); local_timer_run(lt, get_ticks_raw()); }
86  * }
87  *
88  * @param child_id  @see fork_process()
89  * @param desc      @see fork_process()
90  * @param make_sock @see fork_process()
91  * @param lt_h      local_timer handler
92  * @return pid to the parent, 0 to the child, -1 if error.
93  */
94 int fork_local_timer_process(int child_id, char* desc, int make_sock,
95                                                 struct local_timer** lt_h);
96
97 #endif /*__timer_proc_h*/
98
99 /* vi: set ts=4 sw=4 tw=79:ai:cindent: */