00001 /* ==================================================================== 00002 * The Kannel Software License, Version 1.0 00003 * 00004 * Copyright (c) 2001-2008 Kannel Group 00005 * Copyright (c) 1998-2001 WapIT Ltd. 00006 * All rights reserved. 00007 * 00008 * Redistribution and use in source and binary forms, with or without 00009 * modification, are permitted provided that the following conditions 00010 * are met: 00011 * 00012 * 1. Redistributions of source code must retain the above copyright 00013 * notice, this list of conditions and the following disclaimer. 00014 * 00015 * 2. Redistributions in binary form must reproduce the above copyright 00016 * notice, this list of conditions and the following disclaimer in 00017 * the documentation and/or other materials provided with the 00018 * distribution. 00019 * 00020 * 3. The end-user documentation included with the redistribution, 00021 * if any, must include the following acknowledgment: 00022 * "This product includes software developed by the 00023 * Kannel Group (http://www.kannel.org/)." 00024 * Alternately, this acknowledgment may appear in the software itself, 00025 * if and wherever such third-party acknowledgments normally appear. 00026 * 00027 * 4. The names "Kannel" and "Kannel Group" must not be used to 00028 * endorse or promote products derived from this software without 00029 * prior written permission. For written permission, please 00030 * contact org@kannel.org. 00031 * 00032 * 5. Products derived from this software may not be called "Kannel", 00033 * nor may "Kannel" appear in their name, without prior written 00034 * permission of the Kannel Group. 00035 * 00036 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 00037 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00038 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00039 * DISCLAIMED. IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS 00040 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 00041 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 00042 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 00043 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 00044 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 00045 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 00046 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00047 * ==================================================================== 00048 * 00049 * This software consists of voluntary contributions made by many 00050 * individuals on behalf of the Kannel Group. For more information on 00051 * the Kannel Group, please see <http://www.kannel.org/>. 00052 * 00053 * Portions of this software are based upon software originally written at 00054 * WapIT Ltd., Helsinki, Finland for the Kannel project. 00055 */ 00056 00057 /* 00058 * timers.h - interface to timers and timer sets. 00059 * 00060 * Timers can be set to elapse after a specified number of seconds 00061 * (the "interval"). They can be stopped before elapsing, and the 00062 * interval can be changed. 00063 * 00064 * An "output list" is defined for each timer. When it elapses, an 00065 * event is generated on this list. The event may be removed from 00066 * the output list if the timer is destroyed or extended before the 00067 * event is consumed. 00068 * 00069 * The event to use when a timer elapses is provided by the caller. 00070 * The timer module will "own" it, and be responsible for deallocation. 00071 * This will be true until the event has been consumed from the output 00072 * list (at which point it is owned by the consuming thread). 00073 * While the event is on the output list, it is in a gray area, because 00074 * the timer module might still take it back. This won't be a problem 00075 * as long as you access the event only by consuming it. 00076 * 00077 * Timers work best if the thread that manipulates the timer (the 00078 * "calling thread") is the same thread that consumes the output list. 00079 * This way, it can be guaranteed that the calling thread will not 00080 * see a timer elapse after being destroyed, or while being extended, 00081 * because the elapse event will be deleted during such an operation. 00082 * 00083 * The timer_* functions have been renamed to gwtimer_* to avoid 00084 * a name conflict on Solaris systems. 00085 */ 00086 00087 #ifndef TIMERS_H 00088 #define TIMERS_H 00089 00090 #include "gwlib/gwlib.h" 00091 #include "wap_events.h" 00092 00093 typedef struct Timer Timer; 00094 00095 /* 00096 * Start up the timer system. 00097 * Can be called more than once, in which case multiple shutdowns are 00098 * also required. 00099 */ 00100 void timers_init(void); 00101 00102 /* 00103 * Stop all timers and shut down the timer system. 00104 */ 00105 void timers_shutdown(void); 00106 00107 /* 00108 * Create a timer and tell it to use the specified output list when 00109 * it elapses. Do not start it yet. Return the new timer. 00110 */ 00111 Timer *gwtimer_create(List *outputlist); 00112 00113 /* 00114 * Destroy this timer and free its resources. Stop it first, if needed. 00115 */ 00116 void gwtimer_destroy(Timer *timer); 00117 00118 /* 00119 * Make the timer elapse after 'interval' seconds, at which time it 00120 * will push event 'event' on the output list defined for its timer set. 00121 * - If the timer was already running, these parameters will override 00122 * its old settings. 00123 * - If the timer has already elapsed, try to remove its event from 00124 * the output list. 00125 * If this is not the first time the timer was started, the event 00126 * pointer is allowed to be NULL. In that case the event pointer 00127 * from the previous call to timer_start for this timer is re-used. 00128 * NOTE: Each timer must have a unique event pointer. The caller must 00129 * create the event, and passes control of it to the timer module with 00130 * this call. 00131 */ 00132 void gwtimer_start(Timer *timer, int interval, WAPEvent *event); 00133 00134 /* 00135 * Stop this timer. If it has already elapsed, try to remove its 00136 * event from the output list. 00137 */ 00138 void gwtimer_stop(Timer *timer); 00139 00140 #endif