- Main Page
- Data Structures
- Files

- File List
- Globals

# src/scheduler.h

    00001 /*
    00002   The oRTP library is an RTP (Realtime Transport Protocol - rfc3550) stack.
    00003   Copyright (C) 2001  Simon MORLAT simon.morlat@linphone.org
    00004
    00005   This library is free software; you can redistribute it and/or
    00006   modify it under the terms of the GNU Lesser General Public
    00007   License as published by the Free Software Foundation; either
    00008   version 2.1 of the License, or (at your option) any later version.
    00009
    00010   This library is distributed in the hope that it will be useful,
    00011   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00013   Lesser General Public License for more details.
    00014
    00015   You should have received a copy of the GNU Lesser General Public
    00016   License along with this library; if not, write to the Free Software
    00017   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    00018 */
    00019
    00020 #ifndef SCHEDULER_H
    00021 #define SCHEDULER_H
    00022
    00023 #include "ortp/rtpsession.h"
    00024 #include "ortp/sessionset.h"
    00025 #include "rtptimer.h"
    00026
    00027
    00028 struct _RtpScheduler {
    00029
    00030         RtpSession *list;       /* list of scheduled sessions*/
    00031         SessionSet      all_sessions;  /* mask of scheduled sessions */
    00032         int             all_max;                /* the highest pos in the all mask */
    00033         SessionSet  r_sessions;         /* mask of sessions that have a recv event */
    00034         int             r_max;
    00035         SessionSet      w_sessions;             /* mask of sessions that have a send event */
    00036         int             w_max;
    00037         SessionSet      e_sessions;     /* mask of session that have error event */
    00038         int             e_max;
    00039         int max_sessions;               /* the number of position in the masks */
    00040   /* GMutex  *unblock_select_mutex; */
    00041         ortp_cond_t   unblock_select_cond;
    00042         ortp_mutex_t    lock;
    00043         ortp_thread_t thread;
    00044         int thread_running;
    00045         struct _RtpTimer *timer;
    00046         uint32_t time_;       /*number of miliseconds elapsed since the start of the thread */
    00047         uint32_t timer_inc;     /* the timer increment in milisec */
    00048 };
    00049
    00050 typedef struct _RtpScheduler RtpScheduler;
    00051
    00052 RtpScheduler * rtp_scheduler_new(void);
    00053 void rtp_scheduler_set_timer(RtpScheduler *sched,RtpTimer *timer);
    00054 void rtp_scheduler_start(RtpScheduler *sched);
    00055 void rtp_scheduler_stop(RtpScheduler *sched);
    00056 void rtp_scheduler_destroy(RtpScheduler *sched);
    00057
    00058 void rtp_scheduler_add_session(RtpScheduler *sched, RtpSession *session);
    00059 void rtp_scheduler_remove_session(RtpScheduler *sched, RtpSession *session);
    00060
    00061 void * rtp_scheduler_schedule(void * sched);
    00062
    00063 #define rtp_scheduler_lock(sched)       ortp_mutex_lock(&(sched)->lock)
    00064 #define rtp_scheduler_unlock(sched)     ortp_mutex_unlock(&(sched)->lock)
    00065
    00066 /* void rtp_scheduler_add_set(RtpScheduler *sched, SessionSet *set); */
    00067
    00068 RtpScheduler * ortp_get_scheduler(void);
    00069 #endif