本文整理汇总了C++中pj_gettimeofday函数的典型用法代码示例。如果您正苦于以下问题:C++ pj_gettimeofday函数的具体用法?C++ pj_gettimeofday怎么用?C++ pj_gettimeofday使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pj_gettimeofday函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PJ_DEF
PJ_DEF(void) pjmedia_rtcp_init(pjmedia_rtcp_session *sess,
char *name,
unsigned clock_rate,
unsigned samples_per_frame,
pj_uint32_t ssrc)
{
pjmedia_rtcp_sr_pkt *sr_pkt = &sess->rtcp_sr_pkt;
pj_time_val now;
/* Memset everything */
pj_bzero(sess, sizeof(pjmedia_rtcp_session));
/* Last RX timestamp in RTP packet */
sess->rtp_last_ts = (unsigned)-1;
/* Name */
sess->name = name ? name : (char*)THIS_FILE,
/* Set clock rate */
sess->clock_rate = clock_rate;
sess->pkt_size = samples_per_frame;
/* Init common RTCP SR header */
sr_pkt->common.version = 2;
sr_pkt->common.count = 1;
sr_pkt->common.pt = RTCP_SR;
sr_pkt->common.length = pj_htons(12);
sr_pkt->common.ssrc = pj_htonl(ssrc);
/* Copy to RTCP RR header */
pj_memcpy(&sess->rtcp_rr_pkt.common, &sr_pkt->common,
sizeof(pjmedia_rtcp_common));
sess->rtcp_rr_pkt.common.pt = RTCP_RR;
sess->rtcp_rr_pkt.common.length = pj_htons(7);
/* Get time and timestamp base and frequency */
pj_gettimeofday(&now);
sess->tv_base = now;
sess->stat.start = now;
pj_get_timestamp(&sess->ts_base);
pj_get_timestamp_freq(&sess->ts_freq);
/* Initialize statistics states */
pj_math_stat_init(&sess->stat.rtt);
pj_math_stat_init(&sess->stat.rx.loss_period);
pj_math_stat_init(&sess->stat.rx.jitter);
pj_math_stat_init(&sess->stat.tx.loss_period);
pj_math_stat_init(&sess->stat.tx.jitter);
/* RR will be initialized on receipt of the first RTP packet. */
}
示例2: PJ_DEF
/**
* Create a "blank" SDP session description. The SDP will contain basic SDP
* fields such as origin, time, and name, but without any media lines.
*/
PJ_DEF(pj_status_t) pjmedia_endpt_create_base_sdp( pjmedia_endpt *endpt,
pj_pool_t *pool,
const pj_str_t *sess_name,
const pj_sockaddr *origin,
pjmedia_sdp_session **p_sdp)
{
pj_time_val tv;
pjmedia_sdp_session *sdp;
/* Sanity check arguments */
PJ_ASSERT_RETURN(endpt && pool && p_sdp, PJ_EINVAL);
sdp = PJ_POOL_ZALLOC_T(pool, pjmedia_sdp_session);
pj_gettimeofday(&tv);
sdp->origin.user = pj_str("-");
sdp->origin.version = sdp->origin.id = tv.sec + 2208988800UL;
sdp->origin.net_type = STR_IN;
if (origin->addr.sa_family == pj_AF_INET()) {
sdp->origin.addr_type = STR_IP4;
pj_strdup2(pool, &sdp->origin.addr,
pj_inet_ntoa(origin->ipv4.sin_addr));
} else if (origin->addr.sa_family == pj_AF_INET6()) {
char tmp_addr[PJ_INET6_ADDRSTRLEN];
sdp->origin.addr_type = STR_IP6;
pj_strdup2(pool, &sdp->origin.addr,
pj_sockaddr_print(origin, tmp_addr, sizeof(tmp_addr), 0));
} else {
pj_assert(!"Invalid address family");
return PJ_EAFNOTSUP;
}
if (sess_name)
pj_strdup(pool, &sdp->name, sess_name);
else
sdp->name = STR_SDP_NAME;
/* SDP time and attributes. */
sdp->time.start = sdp->time.stop = 0;
sdp->attr_count = 0;
/* Done */
*p_sdp = sdp;
return PJ_SUCCESS;
}
示例3: sdp_perform_test
static int sdp_perform_test(pj_pool_factory *pf)
{
pj_pool_t *pool;
int inputlen, len;
pjsdp_session_desc *ses;
char buf[1500];
enum { LOOP=1000000 };
int i;
pj_time_val start, end;
printf("Parsing and printing %d SDP messages..\n", LOOP);
pool = pj_pool_create(pf, "", 4096, 0, NULL);
inputlen = strlen(sdp[0]);
pj_gettimeofday(&start);
for (i=0; i<LOOP; ++i) {
ses = pjsdp_parse(sdp[0], inputlen, pool);
len = pjsdp_print(ses, buf, sizeof(buf));
buf[len] = '\0';
pj_pool_reset(pool);
}
pj_gettimeofday(&end);
printf("Original:\n%s\n", sdp[0]);
printf("Parsed:\n%s\n", buf);
PJ_TIME_VAL_SUB(end, start);
printf("Time: %ld:%03lds\n", end.sec, end.msec);
if (end.msec==0 && end.sec==0) end.msec=1;
printf("Performance: %ld msg/sec\n", LOOP*1000/PJ_TIME_VAL_MSEC(end));
puts("");
pj_pool_release(pool);
return 0;
}
示例4: setLocalMediaCapabilities
int Sdp::createLocalSession(const CodecOrder &selectedCodecs)
{
setLocalMediaCapabilities(selectedCodecs);
localSession_ = PJ_POOL_ZALLOC_T(memPool_, pjmedia_sdp_session);
if (!localSession_) {
ERROR("Could not create local SDP session");
return !PJ_SUCCESS;
}
localSession_->conn = PJ_POOL_ZALLOC_T(memPool_, pjmedia_sdp_conn);
/* Initialize the fields of the struct */
localSession_->origin.version = 0;
pj_time_val tv;
pj_gettimeofday(&tv);
localSession_->origin.user = pj_str(pj_gethostname()->ptr);
// Use Network Time Protocol format timestamp to ensure uniqueness.
localSession_->origin.id = tv.sec + 2208988800UL;
localSession_->origin.net_type = pj_str((char*)"IN");
localSession_->origin.addr_type = pj_str((char*)"IP4");
localSession_->origin.addr = pj_str((char*)localIpAddr_.c_str());
localSession_->name = pj_str((char*)"sflphone");
localSession_->conn->net_type = localSession_->origin.net_type;
localSession_->conn->addr_type = localSession_->origin.addr_type;
localSession_->conn->addr = localSession_->origin.addr;
// RFC 3264: An offer/answer model session description protocol
// As the session is created and destroyed through an external signaling mean (SIP), the line
// should have a value of "0 0".
localSession_->time.start = 0;
localSession_->time.stop = 0;
// For DTMF RTP events
localSession_->media_count = 1;
localSession_->media[0] = setMediaDescriptorLine();
if (!srtpCrypto_.empty())
addSdesAttribute(srtpCrypto_);
DEBUG("Local SDP Session:");
printSession(localSession_);
return pjmedia_sdp_validate(localSession_);
}
示例5: vid4lin_stream_start
/* API: Start stream. */
static pj_status_t vid4lin_stream_start(pjmedia_vid_dev_stream *strm)
{
vid4lin_stream *stream = (vid4lin_stream*)strm;
struct v4l2_buffer buf;
enum v4l2_buf_type type;
unsigned i;
pj_status_t status;
PJ_ASSERT_RETURN(stream->fd != -1, PJ_EINVALIDOP);
PJ_LOG(4, (THIS_FILE, "Starting v4l2 video stream %s", stream->name));
pj_gettimeofday(&stream->start_time);
for (i = 0; i < stream->buf_cnt; ++i) {
pj_bzero(&buf, sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = i;
status = xioctl(stream->fd, VIDIOC_QBUF, &buf);
if (status != PJ_SUCCESS)
goto on_error;
}
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
status = xioctl(stream->fd, VIDIOC_STREAMON, &type);
if (status != PJ_SUCCESS)
goto on_error;
return PJ_SUCCESS;
on_error:
if (i > 0) {
/* Dequeue already enqueued buffers. Can we do this while streaming
* is not started?
*/
unsigned n = i;
for (i=0; i<n; ++i) {
pj_bzero(&buf, sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
xioctl(stream->fd, VIDIOC_DQBUF, &buf);
}
}
return status;
}
示例6: start_timer
/* Start Session Timers */
static void start_timer(pjsip_inv_session *inv)
{
const pj_str_t UPDATE = { "UPDATE", 6 };
pjsip_timer *timer = inv->timer;
pj_time_val delay = {0};
pj_assert(inv->timer->active == PJ_TRUE);
stop_timer(inv);
inv->timer->use_update =
(pjsip_dlg_remote_has_cap(inv->dlg, PJSIP_H_ALLOW, NULL,
&UPDATE) == PJSIP_DIALOG_CAP_SUPPORTED);
if (!inv->timer->use_update) {
/* INVITE always needs SDP */
inv->timer->with_sdp = PJ_TRUE;
}
pj_timer_entry_init(&timer->timer,
1, /* id */
inv, /* user data */
timer_cb); /* callback */
/* Set delay based on role, refresher or refreshee */
if ((timer->refresher == TR_UAC && inv->timer->role == PJSIP_ROLE_UAC) ||
(timer->refresher == TR_UAS && inv->timer->role == PJSIP_ROLE_UAS))
{
/* Next refresh, the delay is half of session expire */
delay.sec = timer->setting.sess_expires / 2;
} else {
/* Send BYE if no refresh received until this timer fired, delay
* is the minimum of 32 seconds and one third of the session interval
* before session expiration.
*/
delay.sec = timer->setting.sess_expires -
timer->setting.sess_expires/3;
delay.sec = PJ_MAX((long)timer->setting.sess_expires-32, delay.sec);
}
/* Schedule the timer */
pjsip_endpt_schedule_timer(inv->dlg->endpt, &timer->timer, &delay);
/* Update last refresh time */
pj_gettimeofday(&timer->last_refresh);
}
示例7: on_data_sent
/*
* Callback from ioqueue when packet is sent.
*/
static pj_bool_t on_data_sent(pj_ssl_sock_t *ssock,
pj_ioqueue_op_key_t *op_key,
pj_ssize_t bytes_sent)
{
struct tls_transport *tls = (struct tls_transport*)
pj_ssl_sock_get_user_data(ssock);
pjsip_tx_data_op_key *tdata_op_key = (pjsip_tx_data_op_key*)op_key;
/* Note that op_key may be the op_key from keep-alive, thus
* it will not have tdata etc.
*/
tdata_op_key->tdata = NULL;
if (tdata_op_key->callback) {
/*
* Notify sip_transport.c that packet has been sent.
*/
if (bytes_sent == 0)
bytes_sent = -PJ_RETURN_OS_ERROR(OSERR_ENOTCONN);
tdata_op_key->callback(&tls->base, tdata_op_key->token, bytes_sent);
/* Mark last activity time */
pj_gettimeofday(&tls->last_activity);
}
/* Check for error/closure */
if (bytes_sent <= 0) {
pj_status_t status;
PJ_LOG(5,(tls->base.obj_name, "TLS send() error, sent=%d",
bytes_sent));
status = (bytes_sent == 0) ? PJ_RETURN_OS_ERROR(OSERR_ENOTCONN) :
-bytes_sent;
tls_init_shutdown(tls, status);
return PJ_FALSE;
}
return PJ_TRUE;
}
示例8: send_reply_ok
/* Create and send successful response */
static void send_reply_ok(pj_turn_allocation *alloc,
const pj_stun_rx_data *rdata)
{
pj_status_t status;
unsigned interval;
pj_stun_tx_data *tdata;
status = pj_stun_session_create_res(alloc->sess, rdata, 0, NULL, &tdata);
if (status != PJ_SUCCESS) {
alloc_err(alloc, "Error creating STUN success response", status);
return;
}
/* Calculate time to expiration */
if (alloc->relay.lifetime != 0) {
pj_time_val now;
pj_gettimeofday(&now);
interval = alloc->relay.expiry.sec - now.sec;
} else {
interval = 0;
}
/* Add LIFETIME if this is not ChannelBind. */
if (PJ_STUN_GET_METHOD(tdata->msg->hdr.type)!=PJ_STUN_CHANNEL_BIND_METHOD){
pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg,
PJ_STUN_ATTR_LIFETIME, interval);
/* Add BANDWIDTH if lifetime is not zero */
if (interval != 0) {
pj_stun_msg_add_uint_attr(tdata->pool, tdata->msg,
PJ_STUN_ATTR_BANDWIDTH,
alloc->bandwidth);
}
}
status = pj_stun_session_send_msg(alloc->sess, NULL, PJ_TRUE,
PJ_FALSE, &alloc->hkey.clt_addr,
pj_sockaddr_get_len(&alloc->hkey.clt_addr),
tdata);
if (status != PJ_SUCCESS) {
alloc_err(alloc, "Error sending STUN success response", status);
return;
}
}
示例9: on_read_complete
/*
* Callback on received packet.
*/
static void on_read_complete(pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
pj_ssize_t bytes_read)
{
struct udp_listener *udp;
struct read_op *read_op = (struct read_op*) op_key;
pj_status_t status;
udp = (struct udp_listener*) pj_ioqueue_get_user_data(key);
do {
pj_pool_t *rpool;
/* Report to server */
if (bytes_read > 0) {
read_op->pkt.len = bytes_read;
pj_gettimeofday(&read_op->pkt.rx_time);
pj_turn_srv_on_rx_pkt(udp->base.server, &read_op->pkt);
}
/* Reset pool */
rpool = read_op->pkt.pool;
pj_pool_reset(rpool);
read_op->pkt.pool = rpool;
read_op->pkt.transport = &udp->tp;
read_op->pkt.src.tp_type = udp->base.tp_type;
/* Read next packet */
bytes_read = sizeof(read_op->pkt.pkt);
read_op->pkt.src_addr_len = sizeof(read_op->pkt.src.clt_addr);
pj_bzero(&read_op->pkt.src.clt_addr, sizeof(read_op->pkt.src.clt_addr));
status = pj_ioqueue_recvfrom(udp->key, op_key,
read_op->pkt.pkt, &bytes_read, 0,
&read_op->pkt.src.clt_addr,
&read_op->pkt.src_addr_len);
if (status != PJ_EPENDING && status != PJ_SUCCESS)
bytes_read = -status;
} while (status != PJ_EPENDING && status != PJ_ECANCELLED &&
status != PJ_STATUS_FROM_OS(PJ_BLOCKING_ERROR_VAL));
}
示例10: scan_closing_keys
/* Scan closing keys to be put to free list again */
static void scan_closing_keys(pj_ioqueue_t *ioqueue)
{
pj_time_val now;
pj_ioqueue_key_t *h;
pj_gettimeofday(&now);
h = ioqueue->closing_list.next;
while (h != &ioqueue->closing_list) {
pj_ioqueue_key_t *next = h->next;
pj_assert(h->closing != 0);
if (PJ_TIME_VAL_GTE(now, h->free_time)) {
pj_list_erase(h);
pj_list_push_back(&ioqueue->free_list, h);
}
h = next;
}
}
示例11: decrement_counter
/* Decrement the key's reference counter, and when the counter reach zero,
* destroy the key.
*
* Note: MUST NOT CALL THIS FUNCTION WHILE HOLDING ioqueue's LOCK.
*/
static void decrement_counter(pj_ioqueue_key_t *key)
{
pj_lock_acquire(key->ioqueue->lock);
pj_mutex_lock(key->ioqueue->ref_cnt_mutex);
--key->ref_count;
if (key->ref_count == 0) {
pj_assert(key->closing == 1);
pj_gettimeofday(&key->free_time);
key->free_time.msec += PJ_IOQUEUE_KEY_FREE_DELAY;
pj_time_val_normalize(&key->free_time);
pj_list_erase(key);
pj_list_push_back(&key->ioqueue->closing_list, key);
}
pj_mutex_unlock(key->ioqueue->ref_cnt_mutex);
pj_lock_release(key->ioqueue->lock);
}
示例12: PJ_DEF
/*
* Configure name servers for the DNS resolver.
*/
PJ_DEF(pj_status_t) pj_dns_resolver_set_ns( pj_dns_resolver *resolver,
unsigned count,
const pj_str_t servers[],
const pj_uint16_t ports[])
{
unsigned i;
pj_time_val now;
pj_status_t status;
PJ_ASSERT_RETURN(resolver && count && servers, PJ_EINVAL);
PJ_ASSERT_RETURN(count < PJ_DNS_RESOLVER_MAX_NS, PJ_EINVAL);
pj_mutex_lock(resolver->mutex);
if (count > PJ_DNS_RESOLVER_MAX_NS)
count = PJ_DNS_RESOLVER_MAX_NS;
resolver->ns_count = 0;
pj_bzero(resolver->ns, sizeof(resolver->ns));
pj_gettimeofday(&now);
for (i=0; i<count; ++i) {
struct nameserver *ns = &resolver->ns[i];
status = pj_sockaddr_in_init(&ns->addr, &servers[i],
(pj_uint16_t)(ports ? ports[i] : PORT));
if (status != PJ_SUCCESS) {
pj_mutex_unlock(resolver->mutex);
return PJLIB_UTIL_EDNSINNSADDR;
}
ns->state = STATE_ACTIVE;
ns->state_expiry = now;
ns->rt_delay.sec = 10;
}
resolver->ns_count = count;
pj_mutex_unlock(resolver->mutex);
return PJ_SUCCESS;
}
示例13: PJ_DEF
/*
* Get TCP session info.
*/
PJ_DEF(pj_status_t) pj_tcp_session_get_info( pj_tcp_session *sess,
pj_tcp_session_info *info)
{
pj_time_val now;
PJ_ASSERT_RETURN(sess && info, PJ_EINVAL);
pj_gettimeofday(&now);
info->state = sess->state;
info->lifetime = sess->expiry.sec - now.sec;
info->last_status = sess->last_status;
if (sess->srv_addr)
pj_memcpy(&info->server, sess->srv_addr, sizeof(info->server));
else
pj_bzero(&info->server, sizeof(info->server));
return PJ_SUCCESS;
}
示例14: PJ_DEF
PJ_DEF(unsigned) pj_timer_heap_poll( pj_timer_heap_t *ht,
pj_time_val *next_delay )
{
pj_time_val now;
unsigned count;
PJ_ASSERT_RETURN(ht, 0);
if (!ht->cur_size && next_delay) {
next_delay->sec = next_delay->msec = PJ_MAXINT32;
return 0;
}
count = 0;
pj_gettimeofday(&now);
lock_timer_heap(ht);
while ( ht->cur_size &&
PJ_TIME_VAL_LTE(ht->heap[0]->_timer_value, now) &&
count < ht->max_entries_per_poll )
{
pj_timer_entry *node = remove_node(ht, 0);
++count;
unlock_timer_heap(ht);
if (node->cb)
(*node->cb)(ht, node);
lock_timer_heap(ht);
}
if (ht->cur_size && next_delay) {
*next_delay = ht->heap[0]->_timer_value;
PJ_TIME_VAL_SUB(*next_delay, now);
if (next_delay->sec < 0 || next_delay->msec < 0)
next_delay->sec = next_delay->msec = 0;
} else if (next_delay) {
next_delay->sec = next_delay->msec = PJ_MAXINT32;
}
unlock_timer_heap(ht);
return count;
}
示例15: on_timer_event
/*
* Timer event.
*/
static void on_timer_event(pj_timer_heap_t *th, pj_timer_entry *e)
{
pj_tcp_session *sess = (pj_tcp_session*)e->user_data;
enum timer_id_t eid;
PJ_UNUSED_ARG(th);
pj_lock_acquire(sess->lock);
eid = (enum timer_id_t) e->id;
e->id = TIMER_NONE;
if (eid == TIMER_KEEP_ALIVE) {
pj_time_val now;
pj_bool_t resched = PJ_TRUE;
pj_gettimeofday(&now);
/* Reshcedule timer */
if (resched) {
pj_time_val delay;
delay.sec = sess->ka_interval;
delay.msec = 0;
sess->timer.id = TIMER_KEEP_ALIVE;
pj_timer_heap_schedule(sess->timer_heap, &sess->timer, &delay);
}
pj_lock_release(sess->lock);
} else if (eid == TIMER_DESTROY) {
/* Time to destroy */
pj_lock_release(sess->lock);
do_destroy(sess);
} else {
pj_assert(!"Unknown timer event");
pj_lock_release(sess->lock);
}
}