本文整理汇总了C++中PJ_PERROR函数的典型用法代码示例。如果您正苦于以下问题:C++ PJ_PERROR函数的具体用法?C++ PJ_PERROR怎么用?C++ PJ_PERROR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PJ_PERROR函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: PJ_DEF
PJ_DEF(pj_status_t) pjmedia_converter_mgr_create(pj_pool_t *pool,
pjmedia_converter_mgr **p_mgr)
{
pjmedia_converter_mgr *mgr;
pj_status_t status = PJ_SUCCESS;
mgr = PJ_POOL_ALLOC_T(pool, pjmedia_converter_mgr);
pj_list_init(&mgr->factory_list);
if (!converter_manager_instance)
converter_manager_instance = mgr;
#if defined(PJMEDIA_HAS_LIBYUV) && PJMEDIA_HAS_LIBYUV != 0
status = pjmedia_libyuv_converter_init(mgr);
if (status != PJ_SUCCESS) {
PJ_PERROR(4,(THIS_FILE, status,
"Error initializing libyuv converter"));
}
#endif
#if PJMEDIA_HAS_LIBSWSCALE && PJMEDIA_HAS_LIBAVUTIL
status = pjmedia_libswscale_converter_init(mgr);
if (status != PJ_SUCCESS) {
PJ_PERROR(4,(THIS_FILE, status,
"Error initializing libswscale converter"));
}
#endif
if (p_mgr)
*p_mgr = mgr;
return status;
}
开发者ID:avble,项目名称:natClientEx,代码行数:33,代码来源:converter.c
示例2: bb10_stream_set_cap
/*
* API: set capability
* Currently just supporting toggle between speaker and earpiece
*/
static pj_status_t bb10_stream_set_cap(pjmedia_aud_stream *strm,
pjmedia_aud_dev_cap cap,
const void *value)
{
struct bb10_stream *stream = (struct bb10_stream*)strm;
if (cap==PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE &&
(stream->param.dir & PJMEDIA_DIR_PLAYBACK))
{
pjmedia_aud_dev_route route;
pj_bool_t need_restart;
pj_status_t ret;
PJ_ASSERT_RETURN(value, PJ_EINVAL);
/* OS 10.2.1 requires pausing audio stream */
need_restart = (stream->pb_thread != NULL);
if (need_restart) {
PJ_LOG(4,(THIS_FILE, "pausing audio stream.."));
ret = bb10_stream_stop(strm);
if (ret != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, ret, "Error pausing stream"));
return ret;
}
}
route = *((pjmedia_aud_dev_route*)value);
PJ_LOG(4,(THIS_FILE, "setting audio route to %d..", route));
/* Use the initialization function which lazy-inits the
* handle for routing
*/
if (route == PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER) {
ret = bb10_initialize_playback_ctrl(stream,true);
} else {
ret = bb10_initialize_playback_ctrl(stream,false);
}
if (need_restart) {
PJ_LOG(4,(THIS_FILE, "resuming audio stream.."));
ret = bb10_stream_start(strm);
if (ret != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, ret, "Error resuming stream"));
}
}
return ret;
} else if (cap==PJMEDIA_AUD_DEV_CAP_EC &&
(stream->param.dir & PJMEDIA_DIR_CAPTURE))
{
/* EC is always enabled. Silently ignore the request */
return PJ_SUCCESS;
}
TRACE_((THIS_FILE,"bb10_stream_set_cap() = PJMEDIA_EAUD_INVCAP"));
return PJMEDIA_EAUD_INVCAP;
}
开发者ID:KevinHM,项目名称:pjsip,代码行数:63,代码来源:bb10_dev.c
示例3: stun_destroy_test_session
static int stun_destroy_test_session(struct stun_test_session *test_sess)
{
unsigned i;
pj_stun_sock_cb stun_cb;
pj_status_t status;
pj_stun_sock *stun_sock[MAX_SOCK_CLIENTS];
pj_bzero(&stun_cb, sizeof(stun_cb));
stun_cb.on_status = &stun_sock_on_status;
pj_event_reset(test_sess->server_event);
/* Create all clients first */
for (i=0; i<MAX_SOCK_CLIENTS; ++i) {
char name[10];
sprintf(name, "stun%02d", i);
status = pj_stun_sock_create(&test_sess->stun_cfg, name, pj_AF_INET(),
&stun_cb, NULL, test_sess,
&stun_sock[i]);
if (status != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, status, "Error creating stun socket"));
return -10;
}
}
/* Start resolution */
for (i=0; i<MAX_SOCK_CLIENTS; ++i) {
pj_str_t server_ip = pj_str("127.0.0.1");
status = pj_stun_sock_start(stun_sock[i], &server_ip,
(pj_uint16_t)test_sess->server_port, NULL);
if (status != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, status, "Error starting stun socket"));
return -20;
}
}
/* settle down */
pj_thread_sleep(test_sess->param.client_sleep_after_start);
/* Resume server threads */
pj_event_set(test_sess->server_event);
pj_thread_sleep(test_sess->param.client_sleep_before_destroy);
/* Destroy clients */
for (i=0; i<MAX_SOCK_CLIENTS; ++i) {
status = pj_stun_sock_destroy(stun_sock[i]);
if (status != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, status, "Error destroying stun socket"));
}
}
/* Give some time to ioqueue to free sockets */
pj_thread_sleep(PJ_IOQUEUE_KEY_FREE_DELAY);
return 0;
}
开发者ID:asterisk,项目名称:pjproject,代码行数:58,代码来源:concur_test.c
示例4: main
/*
* main()
*/
int main(int argc, char *argv[])
{
pj_caching_pool cp;
pj_status_t status;
if (argc < 2 || argc > 3) {
puts("Usage: httpdemo URL [output-filename]");
return 1;
}
pj_log_set_level(5);
pj_init();
pj_caching_pool_init(&cp, NULL, 0);
mem = &cp.factory;
pjlib_util_init();
if (argc > 2)
f = fopen(argv[2], "wb");
else
f = stdout;
status = getURL(argv[1]);
if (status != PJ_SUCCESS) {
PJ_PERROR(1, (THIS_FILE, status, "Error"));
}
if (f != stdout)
fclose(f);
pj_caching_pool_destroy(&cp);
pj_shutdown();
return 0;
}
开发者ID:avble,项目名称:natClientEx,代码行数:37,代码来源:httpdemo.c
示例5: udp_on_write_complete
/*
* udp_on_write_complete()
*
* This is callback notification from ioqueue that a pending sendto()
* operation has completed.
*/
static void udp_on_write_complete( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
pj_ssize_t bytes_sent)
{
struct udp_transport *tp = (struct udp_transport*)
pj_ioqueue_get_user_data(key);
pjsip_tx_data_op_key *tdata_op_key = (pjsip_tx_data_op_key*)op_key;
tdata_op_key->tdata = NULL;
#if defined(PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT) && \
PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0
if (-bytes_sent == PJ_ESOCKETSTOP) {
pj_status_t status;
/* Try to recover by restarting the transport. */
PJ_LOG(4,(tp->base.obj_name, "Restarting SIP UDP transport"));
status = pjsip_udp_transport_restart2(
&tp->base,
PJSIP_UDP_TRANSPORT_DESTROY_SOCKET,
PJ_INVALID_SOCKET,
&tp->base.local_addr,
&tp->base.local_name);
if (status != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, status,
"Error restarting SIP UDP transport"));
}
return;
}
#endif
if (tdata_op_key->callback) {
tdata_op_key->callback(&tp->base, tdata_op_key->token, bytes_sent);
}
}
开发者ID:ismangil,项目名称:pjproject,代码行数:41,代码来源:sip_transport_udp.c
示例6: create_converter
static pj_status_t create_converter(pjmedia_vid_port *vp)
{
if (vp->conv.conv) {
pjmedia_converter_destroy(vp->conv.conv);
vp->conv.conv = NULL;
}
/* Instantiate converter if necessary */
if (vp->conv.conv_param.src.id != vp->conv.conv_param.dst.id ||
(vp->conv.conv_param.src.det.vid.size.w !=
vp->conv.conv_param.dst.det.vid.size.w) ||
(vp->conv.conv_param.src.det.vid.size.h !=
vp->conv.conv_param.dst.det.vid.size.h))
{
pj_status_t status;
/* Yes, we need converter */
status = pjmedia_converter_create(NULL, vp->pool, &vp->conv.conv_param,
&vp->conv.conv);
if (status != PJ_SUCCESS) {
PJ_PERROR(4,(THIS_FILE, status, "Error creating converter"));
return status;
}
}
if (vp->conv.conv ||
(vp->role==ROLE_ACTIVE && (vp->dir & PJMEDIA_DIR_ENCODING)))
{
pj_status_t status;
const pjmedia_video_format_info *vfi;
pjmedia_video_apply_fmt_param vafp;
/* Allocate buffer for conversion */
vfi = pjmedia_get_video_format_info(NULL, vp->conv.conv_param.dst.id);
if (!vfi)
return PJMEDIA_EBADFMT;
pj_bzero(&vafp, sizeof(vafp));
vafp.size = vp->conv.conv_param.dst.det.vid.size;
status = vfi->apply_fmt(vfi, &vafp);
if (status != PJ_SUCCESS)
return PJMEDIA_EBADFMT;
if (vafp.framebytes > vp->conv.conv_buf_size) {
vp->conv.conv_buf = pj_pool_alloc(vp->pool, vafp.framebytes);
vp->conv.conv_buf_size = vafp.framebytes;
}
}
vp->conv.usec_ctr = 0;
vp->conv.usec_src = PJMEDIA_PTIME(&vp->conv.conv_param.src.det.vid.fps);
vp->conv.usec_dst = PJMEDIA_PTIME(&vp->conv.conv_param.dst.det.vid.fps);
return PJ_SUCCESS;
}
开发者ID:AmoebaLabs,项目名称:pjsip,代码行数:55,代码来源:vid_port.c
示例7: sess_fail
/* Notify application that session has failed */
static pj_bool_t sess_fail(pj_stun_sock *stun_sock,
pj_stun_sock_op op,
pj_status_t status)
{
pj_bool_t ret;
PJ_PERROR(4,(stun_sock->obj_name, status,
"Session failed because %s failed",
pj_stun_sock_op_name(op)));
ret = (*stun_sock->cb.on_status)(stun_sock, op, status);
return ret;
}
开发者ID:AmongOthers,项目名称:PJSIP-iOS,代码行数:15,代码来源:stun_sock.c
示例8: on_complete
static void on_complete(pj_http_req *hreq, pj_status_t status,
const pj_http_resp *resp)
{
PJ_UNUSED_ARG(hreq);
if (status != PJ_SUCCESS) {
PJ_PERROR(1, (THIS_FILE, status, "HTTP request completed with error"));
return;
}
PJ_LOG(3, (THIS_FILE, "Data completed: %d bytes", resp->size));
if (resp->size > 0 && resp->data) {
#ifdef VERBOSE
printf("%.*s\n", (int)resp->size, (char *)resp->data);
#endif
}
}
开发者ID:avble,项目名称:natClientEx,代码行数:16,代码来源:httpdemo.c
示例9: create_converter
static pj_status_t create_converter(pjmedia_vid_port *vp)
{
/* Instantiate converter if necessary */
if (vp->conv_param.src.id != vp->conv_param.dst.id ||
vp->conv_param.src.det.vid.size.w != vp->conv_param.dst.det.vid.size.w ||
vp->conv_param.src.det.vid.size.h != vp->conv_param.dst.det.vid.size.h)
{
pj_status_t status;
/* Yes, we need converter */
const pjmedia_video_format_info *vfi;
pjmedia_video_apply_fmt_param vafp;
if (vp->conv) {
pjmedia_converter_destroy(vp->conv);
vp->conv = NULL;
}
status = pjmedia_converter_create(NULL, vp->pool, &vp->conv_param,
&vp->conv);
if (status != PJ_SUCCESS) {
PJ_PERROR(4,(THIS_FILE, status, "Error creating converter"));
return status;
}
/* Allocate buffer for conversion */
vfi = pjmedia_get_video_format_info(NULL, vp->conv_param.dst.id);
if (!vfi)
return PJMEDIA_EBADFMT;
pj_bzero(&vafp, sizeof(vafp));
vafp.size = vp->conv_param.dst.det.vid.size;
status = vfi->apply_fmt(vfi, &vafp);
if (status != PJ_SUCCESS)
return PJMEDIA_EBADFMT;
if (vafp.framebytes > vp->conv_buf_size) {
vp->conv_buf = pj_pool_alloc(vp->pool, vafp.framebytes);
vp->conv_buf_size = vafp.framebytes;
}
}
return PJ_SUCCESS;
}
开发者ID:AmongOthers,项目名称:PJSIP-iOS,代码行数:44,代码来源:vid_port.c
示例10: PJ_DEF
/* API: Refresh the list of video devices installed in the system. */
PJ_DEF(pj_status_t) pjmedia_vid_dev_refresh(void)
{
unsigned i;
vid_subsys.dev_cnt = 0;
for (i=0; i<vid_subsys.drv_cnt; ++i) {
pjmedia_vid_driver *drv = &vid_subsys.drv[i];
if (drv->f && drv->f->op->refresh) {
pj_status_t status = drv->f->op->refresh(drv->f);
if (status != PJ_SUCCESS) {
PJ_PERROR(4, (THIS_FILE, status, "Unable to refresh device "
"list for %s", drv->name));
}
}
pjmedia_vid_driver_init(i, PJ_TRUE);
}
return PJ_SUCCESS;
}
开发者ID:RyanLee27,项目名称:pjproject,代码行数:20,代码来源:videodev.c
示例11: openh264_codec_decode
static pj_status_t openh264_codec_decode( pjmedia_vid_codec *codec,
pj_size_t pkt_count,
pjmedia_frame packets[],
unsigned out_size,
pjmedia_frame *output)
{
openh264_private *ff = (openh264_private*)codec->codec_data;
pj_status_t status;
PJ_ASSERT_RETURN(codec && pkt_count > 0 && packets && output,
PJ_EINVAL);
if (ff->whole) {
pj_assert(pkt_count==1);
return openh264_codec_decode_whole(codec, &packets[0], out_size, output);
} else {
pjmedia_frame whole_frm;
unsigned whole_len = 0;
unsigned i;
for (i=0; i<pkt_count; ++i) {
if (whole_len + packets[i].size > ff->dec_buf_size) {
PJ_LOG(5,(THIS_FILE, "Decoding buffer overflow"));
break;
}
status = openh264_unpacketize(codec, packets[i].buf, packets[i].size,
ff->dec_buf, ff->dec_buf_size,
&whole_len);
if (status != PJ_SUCCESS) {
PJ_PERROR(5,(THIS_FILE, status, "Unpacketize error"));
continue;
}
}
whole_frm.buf = ff->dec_buf;
whole_frm.size = whole_len;
whole_frm.timestamp = output->timestamp = packets[i].timestamp;
whole_frm.bit_info = 0;
return openh264_codec_decode_whole(codec, &whole_frm, out_size, output);
}
}
开发者ID:darius-kim,项目名称:pjsip,代码行数:43,代码来源:openh264_vid_codecs.c
示例12: app_main
/*
* Simple implementation of app_main() for console targets
*/
pj_status_t app_main(pj_cli_t *cli) {
print_msg(("", "APP STARTED \n \n \n"));
print_msg(("", "======================================================================\n"));
pj_status_t status;
pj_cli_sess *sess;
pj_cli_console_cfg console_cfg;
pj_cli_console_cfg_default(&console_cfg);
console_cfg.prompt_str = pj_str("CMD> ");
/*
* Create the console front end
*/
status = pj_cli_console_create(cli, &console_cfg, &sess, NULL);
if (status != PJ_SUCCESS)
return status;
pj_log_set_log_func(&log_writer);
/*
* Main loop.
*/
for (;;) {
char cmdline[PJ_CLI_MAX_CMDBUF];
pj_status_t status;
status = pj_cli_console_process(sess, &cmdline[0], sizeof(cmdline));
if (status != PJ_SUCCESS)
break;
// pj_ansi_strcpy(cmdline, "sayhello {Teluu Inc.}");
if (status == PJ_CLI_EEXIT) {
/* exit is called */
break;
} else if (status != PJ_SUCCESS) {
/* Something wrong with the cmdline */
PJ_PERROR(1, (THIS_FILE, status, "Exec error"));
}
}
return PJ_SUCCESS;
}
开发者ID:xgenvn,项目名称:tinysip,代码行数:45,代码来源:main.c
示例13: PJ_DEF
PJ_DEF(pj_ioqueue_key_t*) pj_ioqueue_register( pj_pool_t *pool,
pj_ioqueue_t *ioque,
pj_oshandle_t sock,
void *user_data,
const pj_ioqueue_callback *cb)
{
pj_ioqueue_key_t *key = NULL;
pj_uint32_t value;
pj_mutex_lock(ioque->mutex);
if (ioque->count >= ioque->max)
goto on_return;
/* Set socket to nonblocking. */
value = 1;
if (pj_sock_ioctl((pj_sock_t)sock, PJ_FIONBIO, &value)) {
PJ_PERROR(("ioqueue", "Error setting FIONBIO"));
goto on_return;
}
/* Create key. */
key = (pj_ioqueue_key_t*)pj_pool_calloc(pool, 1, sizeof(pj_ioqueue_key_t));
key->fd = (pj_sock_t)sock;
key->user_data = user_data;
/* Save callback. */
pj_memcpy(&key->cb, cb, sizeof(pj_ioqueue_callback));
/* Register */
pj_list_insert_before(&ioque->hlist, key);
++ioque->count;
on_return:
pj_mutex_unlock(ioque->mutex);
return key;
}
开发者ID:svn2github,项目名称:pjproject,代码行数:37,代码来源:ioqueue_select.c
示例14: PJ_DEF
/*
* Set socket option.
*/
PJ_DEF(pj_status_t) pj_sock_setsockopt_params( pj_sock_t sockfd,
const pj_sockopt_params *params)
{
unsigned int i = 0;
pj_status_t retval = PJ_SUCCESS;
PJ_CHECK_STACK();
PJ_ASSERT_RETURN(params, PJ_EINVAL);
for (;i<params->cnt && i<PJ_MAX_SOCKOPT_PARAMS;++i) {
pj_status_t status = pj_sock_setsockopt(sockfd,
(pj_uint16_t)params->options[i].level,
(pj_uint16_t)params->options[i].optname,
params->options[i].optval,
params->options[i].optlen);
if (status != PJ_SUCCESS) {
retval = status;
PJ_PERROR(4,(THIS_FILE, status,
"Warning: error applying sock opt %d",
params->options[i].optname));
}
}
return retval;
}
开发者ID:CloudStyleStudio,项目名称:csip,代码行数:27,代码来源:sock_bsd.c
示例15: server_thread_proc
static int server_thread_proc(void *p)
{
struct stun_test_session *test_sess = (struct stun_test_session*)p;
pj_pool_t *pool;
pj_status_t status;
PJ_LOG(4,(THIS_FILE, "Server thread running"));
pool = pj_pool_create(test_sess->stun_cfg.pf, "server", 512, 512, NULL);
while (!test_sess->thread_quit_flag) {
pj_time_val timeout = {0, 10};
pj_fd_set_t rdset;
int n;
/* Serve client */
PJ_FD_ZERO(&rdset);
PJ_FD_SET(test_sess->server_sock, &rdset);
n = pj_sock_select(test_sess->server_sock+1, &rdset,
NULL, NULL, &timeout);
if (n==1 && PJ_FD_ISSET(test_sess->server_sock, &rdset)) {
pj_uint8_t pkt[512];
pj_ssize_t pkt_len;
pj_size_t res_len;
pj_sockaddr client_addr;
int addr_len;
pj_stun_msg *stun_req, *stun_res;
pj_pool_reset(pool);
/* Got query */
pkt_len = sizeof(pkt);
addr_len = sizeof(client_addr);
status = pj_sock_recvfrom(test_sess->server_sock, pkt, &pkt_len,
0, &client_addr, &addr_len);
if (status != PJ_SUCCESS) {
continue;
}
status = pj_stun_msg_decode(pool, pkt, pkt_len,
PJ_STUN_IS_DATAGRAM,
&stun_req, NULL, NULL);
if (status != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, status, "STUN request decode error"));
continue;
}
status = pj_stun_msg_create_response(pool, stun_req,
PJ_STUN_SC_BAD_REQUEST, NULL,
&stun_res);
if (status != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, status, "STUN create response error"));
continue;
}
status = pj_stun_msg_encode(stun_res, pkt, sizeof(pkt), 0,
NULL, &res_len);
if (status != PJ_SUCCESS) {
PJ_PERROR(1,(THIS_FILE, status, "STUN encode error"));
continue;
}
/* Ignore request */
if (test_sess->param.server_drop_request)
continue;
/* Wait for signal to continue */
if (test_sess->param.server_wait_for_event)
pj_event_wait(test_sess->server_event);
pkt_len = res_len;
pj_sock_sendto(test_sess->server_sock, pkt, &pkt_len, 0,
&client_addr, pj_sockaddr_get_len(&client_addr));
}
}
pj_pool_release(pool);
PJ_LOG(4,(THIS_FILE, "Server thread quitting"));
return 0;
}
开发者ID:AmoebaLabs,项目名称:pjsip,代码行数:82,代码来源:concur_test.c
示例16: PJ_DEF
/*
* pj_ioqueue_sendto()
*
* Start asynchronous write() to the descriptor.
*/
PJ_DEF(pj_status_t) pj_ioqueue_sendto( pj_ioqueue_key_t *key,
pj_ioqueue_op_key_t *op_key,
const void *data,
pj_ssize_t *length,
pj_uint32_t flags,
const pj_sockaddr_t *addr,
int addrlen)
{
struct write_operation *write_op;
unsigned retry;
pj_bool_t restart_retry = PJ_FALSE;
pj_status_t status;
pj_ssize_t sent;
PJ_ASSERT_RETURN(key && op_key && data && length, PJ_EINVAL);
PJ_CHECK_STACK();
#if defined(PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT) && \
PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0
retry_on_restart:
#else
PJ_UNUSED_ARG(restart_retry);
#endif
/* Check if key is closing. */
if (IS_CLOSING(key))
return PJ_ECANCELLED;
/* We can not use PJ_IOQUEUE_ALWAYS_ASYNC for socket write */
flags &= ~(PJ_IOQUEUE_ALWAYS_ASYNC);
/* Fast track:
* Try to send data immediately, only if there's no pending write!
* Note:
* We are speculating that the list is empty here without properly
* acquiring ioqueue's mutex first. This is intentional, to maximize
* performance via parallelism.
*
* This should be safe, because:
* - by convention, we require caller to make sure that the
* key is not unregistered while other threads are invoking
* an operation on the same key.
* - pj_list_empty() is safe to be invoked by multiple threads,
* even when other threads are modifying the list.
*/
if (pj_list_empty(&key->write_list)) {
/*
* See if data can be sent immediately.
*/
sent = *length;
status = pj_sock_sendto(key->fd, data, &sent, flags, addr, addrlen);
if (status == PJ_SUCCESS) {
/* Success! */
*length = sent;
return PJ_SUCCESS;
} else {
/* If error is not EWOULDBLOCK (or EAGAIN on Linux), report
* the error to caller.
*/
if (status != PJ_STATUS_FROM_OS(PJ_BLOCKING_ERROR_VAL)) {
#if defined(PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT) && \
PJ_IPHONE_OS_HAS_MULTITASKING_SUPPORT!=0
/* Special treatment for dead UDP sockets here, see ticket #1107 */
if (status==PJ_STATUS_FROM_OS(EPIPE) && !IS_CLOSING(key) &&
key->fd_type==pj_SOCK_DGRAM() && !restart_retry)
{
PJ_PERROR(4,(THIS_FILE, status,
"Send error for socket %d, retrying",
key->fd));
replace_udp_sock(key);
restart_retry = PJ_TRUE;
goto retry_on_restart;
}
#endif
return status;
}
}
}
/*
* Check that address storage can hold the address parameter.
*/
PJ_ASSERT_RETURN(addrlen <= (int)sizeof(pj_sockaddr_in), PJ_EBUG);
/*
* Schedule asynchronous send.
*/
write_op = (struct write_operation*)op_key;
/* Spin if write_op has pending operation */
for (retry=0; write_op->op != 0 && retry<PENDING_RETRY; ++retry)
pj_thread_sleep(0);
/* Last chance */
if (write_op->op) {
//.........这里部分代码省略.........
开发者ID:iamroger,项目名称:voip,代码行数:101,代码来源:ioqueue_common_abs.c
示例17: show_err
/* Display error */
static void show_err(pj_turn_sock *turn_sock, const char *title,
pj_status_t status)
{
PJ_PERROR(4,(turn_sock->obj_name, status, title));
}
开发者ID:0x0B501E7E,项目名称:pjproject,代码行数:6,代码来源:turn_sock.c
示例18: PJ_DEF
/*
* This is the public API to create, initialize, register, and start the
* TCP listener.
*/
PJ_DEF(pj_status_t) pjsip_tcp_transport_start3(
pjsip_endpoint *endpt,
const pjsip_tcp_transport_cfg *cfg,
pjsip_tpfactory **p_factory
)
{
pj_pool_t *pool;
pj_sock_t sock = PJ_INVALID_SOCKET;
struct tcp_listener *listener;
pj_activesock_cfg asock_cfg;
pj_activesock_cb listener_cb;
pj_sockaddr *listener_addr;
int addr_len;
pj_status_t status;
/* Sanity check */
PJ_ASSERT_RETURN(endpt && cfg->async_cnt, PJ_EINVAL);
/* Verify that address given in a_name (if any) is valid */
if (cfg->addr_name.host.slen) {
pj_sockaddr tmp;
status = pj_sockaddr_init(cfg->af, &tmp, &cfg->addr_name.host,
(pj_uint16_t)cfg->addr_name.port);
if (status != PJ_SUCCESS || !pj_sockaddr_has_addr(&tmp) ||
(cfg->af==pj_AF_INET() &&
tmp.ipv4.sin_addr.s_addr==PJ_INADDR_NONE))
{
/* Invalid address */
return PJ_EINVAL;
}
}
pool = pjsip_endpt_create_pool(endpt, "tcplis", POOL_LIS_INIT,
POOL_LIS_INC);
PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
listener = PJ_POOL_ZALLOC_T(pool, struct tcp_listener);
listener->factory.pool = pool;
listener->factory.type = cfg->af==pj_AF_INET() ? PJSIP_TRANSPORT_TCP :
PJSIP_TRANSPORT_TCP6;
listener->factory.type_name = (char*)
pjsip_transport_get_type_name(listener->factory.type);
listener->factory.flag =
pjsip_transport_get_flag_from_type(listener->factory.type);
listener->qos_type = cfg->qos_type;
pj_memcpy(&listener->qos_params, &cfg->qos_params,
sizeof(cfg->qos_params));
pj_ansi_strcpy(listener->factory.obj_name, "tcplis");
if (listener->factory.type==PJSIP_TRANSPORT_TCP6)
pj_ansi_strcat(listener->factory.obj_name, "6");
status = pj_lock_create_recursive_mutex(pool, listener->factory.obj_name,
&listener->factory.lock);
if (status != PJ_SUCCESS)
goto on_error;
/* Create socket */
status = pj_sock_socket(cfg->af, pj_SOCK_STREAM(), 0, &sock);
if (status != PJ_SUCCESS)
goto on_error;
/* Apply QoS, if specified */
status = pj_sock_apply_qos2(sock, cfg->qos_type, &cfg->qos_params,
2, listener->factory.obj_name,
"SIP TCP listener socket");
/* Apply SO_REUSEADDR */
if (cfg->reuse_addr) {
int enabled = 1;
status = pj_sock_setsockopt(sock, pj_SOL_SOCKET(), pj_SO_REUSEADDR(),
&enabled, sizeof(enabled));
if (status != PJ_SUCCESS) {
PJ_PERROR(4,(listener->factory.obj_name, status,
"Warning: error applying SO_REUSEADDR"));
}
}
/* Bind address may be different than factory.local_addr because
* factory.local_addr will be resolved below.
*/
pj_sockaddr_cp(&listener->bound_addr, &cfg->bind_addr);
/* Bind socket */
listener_addr = &listener->factory.local_addr;
pj_sockaddr_cp(listener_addr, &cfg->bind_addr);
status = pj_sock_bind(sock, listener_addr,
pj_sockaddr_get_len(listener_addr));
if (status != PJ_SUCCESS)
goto on_error;
/* Retrieve the bound address */
//.........这里部分代码省略.........
开发者ID:darrensessions,项目名称:pjproject,代码行数:101,代码来源:sip_transport_tcp.c
示例19: parse_media
static void parse_media(pj_scanner *scanner, pjmedia_sdp_media *med,
parse_context *ctx)
{
pj_str_t str;
ctx->last_error = PJMEDIA_SDP_EINMEDIA;
/* check the equal sign */
if (*(scanner->curptr+1) != '=') {
on_scanner_error(scanner);
return;
}
/* m= */
pj_scan_advance_n(scanner, 2, SKIP_WS);
/* type */
pj_scan_get_until_ch(scanner, ' ', &med->desc.media);
pj_scan_get_char(scanner);
/* port */
pj_scan_get(scanner, &cs_token, &str);
med->desc.port = (unsigned short)pj_strtoul(&str);
if (*scanner->curptr == '/') {
/* port count */
pj_scan_get_char(scanner);
pj_scan_get(scanner, &cs_token, &str);
med->desc.port_count = pj_strtoul(&str);
} else {
med->desc.port_count = 0;
}
if (pj_scan_get_char(scanner) != ' ') {
PJ_THROW(SYNTAX_ERROR);
}
/* transport */
pj_scan_get_until_chr(scanner, " \t\r\n", &med->desc.transport);
/* format list */
med->desc.fmt_count = 0;
while (*scanner->curptr == ' ') {
pj_str_t fmt;
pj_scan_get_char(scanner);
/* Check again for the end of the line */
if ((*scanner->curptr == '\r') || (*scanner->curptr == '\n'))
break;
pj_scan_get(scanner, &cs_token, &fmt);
if (med->desc.fmt_count < PJMEDIA_MAX_SDP_FMT)
med->desc.fmt[med->desc.fmt_count++] = fmt;
else
PJ_PERROR(2,(THIS_FILE, PJ_ETOOMANY,
"Error adding SDP media format %.*s, "
"format is ignored",
(int)fmt.slen, fmt.ptr));
}
/* We've got what we're looking for, skip anything until newline */
pj_scan_skip_line(scanner);
}
开发者ID:AGProjects,项目名称:python-sipsimple,代码行数:64,代码来源:sdp.c
示例20: main
//.........这里部分代码省略.........
if (save_filename) {
f264 = fopen(save_filename, "wb");
}
/* Find which codec to use. */
if (codec_id) {
unsigned count = 1;
pj_str_t str_codec_id = pj_str(codec_id);
status = pjmedia_vid_codec_mgr_find_codecs_by_id(NULL,
&str_codec_id, &count,
&codec_info, NULL);
if (status != PJ_SUCCESS) {
printf("Error: unable to find codec %s\n", codec_id);
return 1;
}
} else {
static pjmedia_vid_codec_info info[1];
unsigned count = PJ_ARRAY_SIZE(info);
/* Default to first codec */
pjmedia_vid_codec_mgr_enum_codecs(NULL, &count, info, NULL);
codec_info = &info[0];
}
/* Get codec default param for info */
status = pjmedia_vid_codec_mgr_get_default_param(NULL, codec_info,
&codec_param);
pj_assert(status == PJ_SUCCESS);
/* Alloc encoder */
status = pjmedia_vid_codec_mgr_alloc_codec(NULL, codec_info, &codec);
if (status != PJ_SUCCESS) {
PJ_PERROR(3,(THIS_FILE, status, "Error allocating codec"));
goto on_exit;
}
codec_param.dir = PJMEDIA_DIR_ENCODING_DECODING;
codec_param.packing = PJMEDIA_VID_PACKING_PACKETS;
codec_param.enc_mtu = MTU;
codec_param.enc_fmt.det.vid.size.w = WIDTH;
codec_param.enc_fmt.det.vid.size.h = HEIGHT;
codec_param.enc_fmt.det.vid.fps.num = FPS;
codec_param.enc_fmt.det.vid.avg_bps = WIDTH * HEIGHT * FPS;
status = pjmedia_vid_codec_init(codec, pool);
if (status != PJ_SUCCESS) {
PJ_PERROR(3,(THIS_FILE, status, "Error initializing codec"));
goto on_exit;
}
status = pjmedia_vid_codec_open(codec, &codec_param);
if (status != PJ_SUCCESS) {
PJ_PERROR(3,(THIS_FILE, status, "Error opening codec"));
goto on_exit;
}
while (fread(yuv_frame, 1, YUV_SIZE, fyuv) == YUV_SIZE) {
pjmedia_frame frm_yuv, frm_enc[MAX_FRAMES];
pj_bool_t has_more = PJ_FALSE;
const pj_uint8_t start_nal[] = { 0, 0, 1 };
unsigned i;
++ read_cnt;
pj_bzero(&frm_enc, sizeof(frm_enc));
开发者ID:CloudStyleStudio,项目名称:csip,代码行数:67,代码来源:vid_codec_test.c
注:本文中的PJ_PERROR函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论