本文整理汇总了C++中pj_list_push_back函数的典型用法代码示例。如果您正苦于以下问题:C++ pj_list_push_back函数的具体用法?C++ pj_list_push_back怎么用?C++ pj_list_push_back使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pj_list_push_back函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PJ_DEF
PJ_DEF(pj_xml_node*) pj_xml_clone( pj_pool_t *pool, const pj_xml_node *rhs)
{
pj_xml_node *node;
const pj_xml_attr *r_attr;
const pj_xml_node *child;
node = alloc_node(pool);
pj_strdup(pool, &node->name, &rhs->name);
pj_strdup(pool, &node->content, &rhs->content);
/* Clone all attributes */
r_attr = rhs->attr_head.next;
while (r_attr != &rhs->attr_head) {
pj_xml_attr *attr;
attr = alloc_attr(pool);
pj_strdup(pool, &attr->name, &r_attr->name);
pj_strdup(pool, &attr->value, &r_attr->value);
pj_list_push_back(&node->attr_head, attr);
r_attr = r_attr->next;
}
/* Clone all child nodes. */
child = rhs->node_head.next;
while (child != (pj_xml_node*) &rhs->node_head) {
pj_xml_node *new_child;
new_child = pj_xml_clone(pool, child);
pj_list_push_back(&node->node_head, new_child);
child = child->next;
}
return node;
}
示例2: PJ_DEF
/*
* Reset the echo canceller.
*/
PJ_DEF(pj_status_t) pjmedia_echo_reset(pjmedia_echo_state *echo )
{
while (!pj_list_empty(&echo->lat_buf)) {
struct frame *frm;
frm = echo->lat_buf.next;
pj_list_erase(frm);
pj_list_push_back(&echo->lat_free, frm);
}
echo->lat_ready = PJ_FALSE;
pjmedia_delay_buf_reset(echo->delay_buf);
echo->op->ec_reset(echo->state);
return PJ_SUCCESS;
}
示例3: multipart_clone_data
static void* multipart_clone_data(pj_pool_t *pool, const void *data,
unsigned len)
{
const struct multipart_data *src;
struct multipart_data *dst;
const pjsip_multipart_part *src_part;
PJ_UNUSED_ARG(len);
src = (const struct multipart_data*) data;
dst = PJ_POOL_ALLOC_T(pool, struct multipart_data);
pj_list_init(&dst->part_head);
pj_strdup(pool, &dst->boundary, &src->boundary);
src_part = src->part_head.next;
while (src_part != &src->part_head) {
pjsip_multipart_part *dst_part;
const pjsip_hdr *src_hdr;
dst_part = pjsip_multipart_create_part(pool);
src_hdr = src_part->hdr.next;
while (src_hdr != &src_part->hdr) {
pjsip_hdr *dst_hdr = (pjsip_hdr*)pjsip_hdr_clone(pool, src_hdr);
pj_list_push_back(&dst_part->hdr, dst_hdr);
src_hdr = src_hdr->next;
}
dst_part->body = pjsip_msg_body_clone(pool, src_part->body);
pj_list_push_back(&dst->part_head, dst_part);
src_part = src_part->next;
}
return (void*)dst;
}
示例4: ui_call_transfer
static void ui_call_transfer(pj_bool_t no_refersub)
{
if (current_call == -1) {
PJ_LOG(3,(THIS_FILE, "No current call"));
} else {
int call = current_call;
char buf[128];
pjsip_generic_string_hdr refer_sub;
pj_str_t STR_REFER_SUB = { "Refer-Sub", 9 };
pj_str_t STR_FALSE = { "false", 5 };
pjsua_call_info ci;
input_result result;
pjsua_msg_data msg_data;
pjsua_call_get_info(current_call, &ci);
printf("Transferring current call [%d] %.*s\n", current_call,
(int)ci.remote_info.slen, ci.remote_info.ptr);
ui_input_url("Transfer to URL", buf, sizeof(buf), &result);
/* Check if call is still there. */
if (call != current_call) {
puts("Call has been disconnected");
return;
}
pjsua_msg_data_init(&msg_data);
if (no_refersub) {
/* Add Refer-Sub: false in outgoing REFER request */
pjsip_generic_string_hdr_init2(&refer_sub, &STR_REFER_SUB,
&STR_FALSE);
pj_list_push_back(&msg_data.hdr_list, &refer_sub);
}
if (result.nb_result != PJSUA_APP_NO_NB) {
if (result.nb_result == -1 || result.nb_result == 0)
puts("You can't do that with transfer call!");
else {
pjsua_buddy_info binfo;
pjsua_buddy_get_info(result.nb_result-1, &binfo);
pjsua_call_xfer( current_call, &binfo.uri, &msg_data);
}
} else if (result.uri_result) {
pj_str_t tmp;
tmp = pj_str(result.uri_result);
pjsua_call_xfer( current_call, &tmp, &msg_data);
}
}
}
示例5: PJ_DEF
/*
* Create an empty multipart body.
*/
PJ_DEF(pjsip_msg_body*) pjsip_multipart_create( pj_pool_t *pool,
const pjsip_media_type *ctype,
const pj_str_t *boundary)
{
pjsip_msg_body *body;
pjsip_param *ctype_param;
struct multipart_data *mp_data;
pj_str_t STR_BOUNDARY = { "boundary", 8 };
PJ_ASSERT_RETURN(pool, NULL);
body = PJ_POOL_ZALLOC_T(pool, pjsip_msg_body);
/* content-type */
if (ctype && ctype->type.slen) {
pjsip_media_type_cp(pool, &body->content_type, ctype);
} else {
pj_str_t STR_MULTIPART = {"multipart", 9};
pj_str_t STR_MIXED = { "mixed", 5 };
pjsip_media_type_init(&body->content_type,
&STR_MULTIPART, &STR_MIXED);
}
/* multipart data */
mp_data = PJ_POOL_ZALLOC_T(pool, struct multipart_data);
pj_list_init(&mp_data->part_head);
if (boundary) {
pj_strdup(pool, &mp_data->boundary, boundary);
} else {
pj_create_unique_string(pool, &mp_data->boundary);
}
body->data = mp_data;
/* Add ";boundary" parameter to content_type parameter. */
ctype_param = pjsip_param_find(&body->content_type.param, &STR_BOUNDARY);
if (!ctype_param) {
ctype_param = PJ_POOL_ALLOC_T(pool, pjsip_param);
ctype_param->name = STR_BOUNDARY;
pj_list_push_back(&body->content_type.param, ctype_param);
}
ctype_param->value = mp_data->boundary;
/* function pointers */
body->print_body = &multipart_print_body;
body->clone_data = &multipart_clone_data;
return body;
}
示例6: init_media_type
static void init_media_type(pjsip_media_type *mt,
char *type, char *subtype, char *boundary)
{
static pjsip_param prm;
pjsip_media_type_init(mt, NULL, NULL);
if (type) mt->type = pj_str(type);
if (subtype) mt->subtype = pj_str(subtype);
if (boundary) {
pj_list_init(&prm);
prm.name = pj_str("boundary");
prm.value = pj_str(boundary);
pj_list_push_back(&mt->param, &prm);
}
}
示例7: PJ_DEF
/*
* Let the Echo Canceller know that a frame has been played to the speaker.
*/
PJ_DEF(pj_status_t) pjmedia_echo_playback( pjmedia_echo_state *echo,
pj_int16_t *play_frm )
{
/* If EC algo has playback handler, just pass the frame. */
if (echo->op->ec_playback) {
return (*echo->op->ec_playback)(echo->state, play_frm);
}
/* Playing frame should be stored, as it will be used by echo_capture()
* as reference frame, delay buffer is used for storing the playing frames
* as in case there was clock drift between mic & speaker.
*
* Ticket #830:
* Note that pjmedia_delay_buf_put() may modify the input frame and those
* modified frames may not be smooth, i.e: if there were two or more
* consecutive pjmedia_delay_buf_get() before next pjmedia_delay_buf_put(),
* so we'll just feed the delay buffer with the copy of playing frame,
* instead of the original playing frame. However this will cause the EC
* uses slight 'different' frames (for reference) than actually played
* by the speaker.
*/
pjmedia_copy_samples(echo->frm_buf, play_frm,
echo->samples_per_frame);
pjmedia_delay_buf_put(echo->delay_buf, echo->frm_buf);
if (!echo->lat_ready) {
/* We've not built enough latency in the buffer, so put this frame
* in the latency buffer list.
*/
struct frame *frm;
if (pj_list_empty(&echo->lat_free)) {
echo->lat_ready = PJ_TRUE;
PJ_LOG(5,(echo->obj_name, "Latency bufferring complete"));
return PJ_SUCCESS;
}
frm = echo->lat_free.prev;
pj_list_erase(frm);
/* Move one frame from delay buffer to the latency buffer. */
pjmedia_delay_buf_get(echo->delay_buf, echo->frm_buf);
pjmedia_copy_samples(frm->buf, echo->frm_buf, echo->samples_per_frame);
pj_list_push_back(&echo->lat_buf, frm);
}
return PJ_SUCCESS;
}
示例8: PJ_LOG
/*
* Let the Echo Canceller know that a frame has been played to the speaker.
*/
pj_status_t pjs_echo_canceller::playback(pj_int16_t *play_frm, unsigned size) {
/* Playing frame should be stored, as it will be used by echo_capture()
* as reference frame, delay buffer is used for storing the playing frames
* as in case there was clock drift between mic & speaker.
*
* Ticket #830:
* Note that pjmedia_delay_buf_put() may modify the input frame and those
* modified frames may not be smooth, i.e: if there were two or more
* consecutive pjmedia_delay_buf_get() before next pjmedia_delay_buf_put(),
* so we'll just feed the delay buffer with the copy of playing frame,
* instead of the original playing frame. However this will cause the EC
* uses slight 'different' frames (for reference) than actually played
* by the speaker.
*/
if(samples_per_frame!=size)
{
PJ_LOG(1, (THIS_FILE, "WRONG SIZE ON PLAYBACK %d != %d",size,samples_per_frame));
return -1;
}
PPJ_WaitAndLock wl(*lock);
pjmedia_copy_samples(frm_buf, play_frm, samples_per_frame);
pjmedia_delay_buf_put(delay_buf, frm_buf);
if (!lat_ready) {
/* We've not built enough latency in the buffer, so put this frame
* in the latency buffer list.
*/
struct frame *frm;
if (pj_list_empty(&lat_free)) {
lat_ready = PJ_TRUE;
PJ_LOG(4, (THIS_FILE, "Latency bufferring complete"));
return PJ_SUCCESS;
}
frm = lat_free.prev;
pj_list_erase(frm);
/* Move one frame from delay buffer to the latency buffer. */
pjmedia_delay_buf_get(delay_buf, frm_buf);
pjmedia_copy_samples(frm->buf, frm_buf, samples_per_frame);
pj_list_push_back(&lat_buf, frm);
}
return PJ_SUCCESS;
}
示例9: PJ_DEF
PJ_DEF(pj_status_t) pjsip_publishc_set_headers( pjsip_publishc *pubc,
const pjsip_hdr *hdr_list)
{
const pjsip_hdr *h;
PJ_ASSERT_RETURN(pubc && hdr_list, PJ_EINVAL);
pj_list_init(&pubc->usr_hdr);
h = hdr_list->next;
while (h != hdr_list) {
pj_list_push_back(&pubc->usr_hdr, pjsip_hdr_clone(pubc->pool, h));
h = h->next;
}
return PJ_SUCCESS;
}
示例10: PJ_DEF
PJ_DEF(pj_status_t) pjsip_ua_unregister_dlg( pjsip_user_agent *ua,
pjsip_dialog *dlg )
{
struct dlg_set *dlg_set;
pjsip_dialog *d;
/* Sanity-check arguments. */
PJ_ASSERT_RETURN(ua && dlg, PJ_EINVAL);
/* Check that dialog has been registered. */
PJ_ASSERT_RETURN(dlg->dlg_set, PJ_EINVALIDOP);
/* Lock user agent. */
pj_mutex_lock(mod_ua.mutex);
/* Find this dialog from the dialog set. */
dlg_set = (struct dlg_set*) dlg->dlg_set;
d = dlg_set->dlg_list.next;
while (d != (pjsip_dialog*)&dlg_set->dlg_list && d != dlg) {
d = d->next;
}
if (d != dlg) {
pj_assert(!"Dialog is not registered!");
pj_mutex_unlock(mod_ua.mutex);
return PJ_EINVALIDOP;
}
/* Remove this dialog from the list. */
pj_list_erase(dlg);
/* If dialog list is empty, remove the dialog set from the hash table. */
if (pj_list_empty(&dlg_set->dlg_list)) {
pj_hash_set_lower(NULL, mod_ua.dlg_table, dlg->local.info->tag.ptr,
(unsigned)dlg->local.info->tag.slen,
dlg->local.tag_hval, NULL);
/* Return dlg_set to free nodes. */
pj_list_push_back(&mod_ua.free_dlgset_nodes, dlg_set);
}
/* Unlock user agent. */
pj_mutex_unlock(mod_ua.mutex);
/* Done. */
return PJ_SUCCESS;
}
示例11: decrement_counter
/* Decrement the key's reference counter, and when the counter reach zero,
* destroy the key.
*/
static void decrement_counter(pj_ioqueue_key_t *key)
{
if (pj_atomic_dec_and_get(key->ref_count) == 0) {
pj_lock_acquire(key->ioqueue->lock);
pj_assert(key->closing == 1);
pj_gettickcount(&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_lock_release(key->ioqueue->lock);
}
}
示例12: PJ_DEF
PJ_DEF(pj_status_t) pjsip_regc_set_route_set( pjsip_regc *regc,
const pjsip_route_hdr *route_set)
{
const pjsip_route_hdr *chdr;
PJ_ASSERT_RETURN(regc && route_set, PJ_EINVAL);
pj_list_init(®c->route_set);
chdr = route_set->next;
while (chdr != route_set) {
pj_list_push_back(®c->route_set, pjsip_hdr_clone(regc->pool, chdr));
chdr = chdr->next;
}
return PJ_SUCCESS;
}
示例13: PJ_DECL
PJ_DECL(pj_status_t) csipsimple_msg_data_add_string_hdr(pj_pool_t* pool, pjsua_msg_data* msg_data, pj_str_t* hdr_name, pj_str_t* hdr_value){
// Sanity check
PJ_ASSERT_RETURN(msg_data != NULL && hdr_name != NULL && hdr_value != NULL, PJ_EINVAL);
if(hdr_name->slen <= 2 || hdr_value->slen <= 0){
return PJ_EINVAL;
}
// Ensure it's a X- prefixed header. This is to avoid crappy usage/override of specified headers
// That should be implemented properly elsewhere.
if(hdr_name->ptr[0] != 'X' || hdr_name->ptr[1] != '-'){
return PJ_EINVAL;
}
pjsip_generic_string_hdr* hdr = pjsip_generic_string_hdr_create(pool,
hdr_name, hdr_value);
// Push it to msg data
pj_list_push_back(&msg_data->hdr_list, hdr);
}
示例14: pjsip_multipart_clone_part
pjsip_multipart_clone_part(pj_pool_t *pool,
const pjsip_multipart_part *src)
{
pjsip_multipart_part *dst;
const pjsip_hdr *hdr;
dst = pjsip_multipart_create_part(pool);
hdr = src->hdr.next;
while (hdr != &src->hdr) {
pj_list_push_back(&dst->hdr, pjsip_hdr_clone(pool, hdr));
hdr = hdr->next;
}
dst->body = pjsip_msg_body_clone(pool, src->body);
return dst;
}
示例15: PJ_DEF
/*
* Register a codec factory.
*/
PJ_DEF(pj_status_t) pjmedia_codec_mgr_register_factory( pjmedia_codec_mgr *mgr,
pjmedia_codec_factory *factory)
{
pjmedia_codec_info info[PJMEDIA_CODEC_MGR_MAX_CODECS];
unsigned i, count;
pj_status_t status;
PJ_ASSERT_RETURN(mgr && factory, PJ_EINVAL);
/* Enum codecs */
count = PJ_ARRAY_SIZE(info);
status = factory->op->enum_info(factory, &count, info);
if (status != PJ_SUCCESS)
return status;
/* Check codec count */
if (count + mgr->codec_cnt > PJ_ARRAY_SIZE(mgr->codec_desc))
return PJ_ETOOMANY;
/* Save the codecs */
for (i=0; i<count; ++i) {
pj_memcpy( &mgr->codec_desc[mgr->codec_cnt+i],
&info[i], sizeof(pjmedia_codec_info));
mgr->codec_desc[mgr->codec_cnt+i].prio = PJMEDIA_CODEC_PRIO_NORMAL;
mgr->codec_desc[mgr->codec_cnt+i].factory = factory;
pjmedia_codec_info_to_id( &info[i],
mgr->codec_desc[mgr->codec_cnt+i].id,
sizeof(pjmedia_codec_id));
}
/* Update count */
mgr->codec_cnt += count;
/* Re-sort codec based on priorities */
sort_codecs(mgr);
/* Add factory to the list */
pj_list_push_back(&mgr->factory_list, factory);
return PJ_SUCCESS;
}