Beispiel #1
0
t_time NAMESPACE::Time::milliseconds()
{
#ifdef WIN32

  static bool   init = false;
  static t_time freq;
  if (!init) { // TODO / FIXME move into a global timer init ?
    init = true;
    LARGE_INTEGER lfreq;
    sl_assert(QueryPerformanceFrequency(&lfreq) != 0);
    freq = t_time(lfreq.QuadPart);
  }
  LARGE_INTEGER tps;
  QueryPerformanceCounter(&tps);
  return t_time(t_time(tps.QuadPart)*1000/freq);

#else

  struct timeval        now;
  uint                  ticks;
  static struct timeval start;

  static bool           init=false;
  if (!init) { // TODO / FIXME move into a global timer init ?
    gettimeofday(&start, NULL);
    init=true;
  }

  gettimeofday(&now, NULL);
  uint ms=uint((now.tv_sec-start.tv_sec)*1000+(now.tv_usec-start.tv_usec)/1000);
  return (ms);

#endif
}
Beispiel #2
0
int tty_expect(char *what,int timeout)
{
	time_t t1;
	int to=timeout,got=0,p=0,ch;
	calling=0;
	while(!got&&to>0) {
		t1=t_start();
		ch=tty_getc(to);
		if(ch<0)return ch;
		to-=t_time(t1);
		if(ch==what[p])p++;
		    else p=0;
		if(!what[p])got=1;
	}
	return got?OK:TIMEOUT;
}
/* main poll for event execution */
void* event_poll( void* _event_handler_p )
{
    event_handler_t* _event_handler = _event_handler_p;
    uint32_t* _frequms = &_event_handler->_frequms;


    while ( _event_handler->_running )
    {

        if ( _event_handler->_events_count ){
            pthread_mutex_lock(&_event_handler->_mutex);

            int i;
            for ( i = 0; i < _event_handler->_events_count; i ++ ){
                _event_handler->_events[i]._event(_event_handler->_events[i]._event_args);

            }
            clear_events(&_event_handler->_events, &_event_handler->_events_count);

            pthread_mutex_unlock(&_event_handler->_mutex);
        }

        if ( _event_handler->_timed_events_count ){
            pthread_mutex_lock(&_event_handler->_mutex);

            uint32_t _time = t_time();

            if ( _event_handler->_timed_events[0]._timeout < _time ) {
                _event_handler->_timed_events[0]._event(_event_handler->_timed_events[0]._event_args);

                pop_id(&_event_handler->_timed_events,
                       &_event_handler->_timed_events_count,
                       _event_handler->_timed_events[0]._id);
            }
            pthread_mutex_unlock(&_event_handler->_mutex);
        }


        usleep(*_frequms);
    }

    _event_handler->_running = -1;
    pthread_exit(NULL);
}
Beispiel #4
0
int tty_gets(char *what,size_t n,int timeout)
{
	time_t t1;
	int to=timeout,p=0,ch=0;
	*what=0;
	while(to>0&&p<n-1&&ch!='\r'&&ch!='\n') {
		t1=t_start();
		ch=tty_getc(to);
		if(NOTTO(ch))return ch;
		to-=t_time(t1);
		if(ch>=0)what[p++]=ch;
	}
	what[p>0?--p:0]=0;
	if(p>0)DEBUG(('M',1,"<< %s",what));
	if(ch=='\r'||ch=='\n') {
		DEBUG(('M',5,"tty_gets: completed"));
		return OK;
	} else if(to<=0) {
		DEBUG(('M',3,"tty_gets: timed out"));
	} else DEBUG(('M',3,"tty_gets: line too long"));
	return TIMEOUT;
}
int throw_timer_event ( void* _event_handler_p, event_t _func, event_arg_t _arg, uint32_t _timeout)
{
    if ( !_func )
        return FAILURE;

    event_handler_t* _event_handler = _event_handler_p;

    pthread_mutex_lock(&_event_handler->_mutex);

    push_event(&_event_handler->_timed_events, &_event_handler->_timed_events_count, _func, _arg);
    size_t _counter = _event_handler->_timed_events_count;
    _event_handler->_timed_events[_counter - 1]._timeout = _timeout + t_time();
    _event_handler->_timed_events[_counter - 1]._id = _unique_id; ++_unique_id;


    /* reorder */
    if ( _counter > 1 ) {

        int i = _counter - 1;
        /* start from behind excluding last added member */
        event_container_t* _it = &_event_handler->_timed_events[i - 1];

        event_container_t _last_added = _event_handler->_timed_events[i];

        for ( ; i > 0; --i ) {
            if ( _it->_timeout > _timeout ){
                *(_it + 1) = *_it;
                *_it = _last_added; -- _it;
            }
        }

    }

    pthread_mutex_unlock(&_event_handler->_mutex);

    return _event_handler->_timed_events[_counter - 1]._id;
}
Beispiel #6
0
rtp_session_t* rtp_init_session ( int max_users, int _multi_session )
{
#ifdef _USE_ERRORS
    REGISTER_RTP_ERRORS
#endif /* _USE_ERRORS */

    rtp_session_t* _retu = calloc(sizeof(rtp_session_t), 1);
    assert(_retu);

    _retu->_dest_list = _retu->_last_user = NULL;

    _retu->_max_users = max_users;
    _retu->_packets_recv = 0;
    _retu->_packets_sent = 0;
    _retu->_bytes_sent = 0;
    _retu->_bytes_recv = 0;
    _retu->_last_error = NULL;
    _retu->_packet_loss = 0;

    /*
     * SET HEADER FIELDS
     */

    _retu->_version = RTP_VERSION;   /* It's always 2 */
    _retu->_padding = 0;             /* If some additional data is needed about
                                      * the packet */
    _retu->_extension = 0;           /* If extension to header is needed */
    _retu->_cc        = 1;           /* It basically represents amount of contributors */
    _retu->_csrc      = NULL;        /* Container */
    _retu->_ssrc      = t_random ( -1 );
    _retu->_marker    = 0;
    _retu->_payload_type = 0;        /* You should specify payload type */

    /* Sequence starts at random number and goes to _MAX_SEQU_NUM */
    _retu->_sequence_number = t_random ( _MAX_SEQU_NUM );
    _retu->_last_sequence_number = _retu->_sequence_number; /* Do not touch this variable */

    _retu->_initial_time = t_time();    /* In seconds */
    assert(_retu->_initial_time);
    _retu->_time_elapsed = 0;        /* In seconds */

    _retu->_ext_header = NULL;       /* When needed allocate */
    _retu->_exthdr_framerate = -1;
    _retu->_exthdr_resolution = -1;

    _retu->_csrc = calloc(sizeof(uint32_t), 1);
    assert(_retu->_csrc);

    _retu->_csrc[0] = _retu->_ssrc;  /* Set my ssrc to the list receive */

    _retu->_prefix_length = 0;
    _retu->_prefix = NULL;

    _retu->_multi_session = _multi_session;

    /* Initial */
    _retu->_current_framerate = 0;


    _retu->_oldest_msg = _retu->_last_msg = NULL;

    pthread_mutex_init(&_retu->_mutex, NULL);
    /*
     *
     */
    return _retu;
}