本文整理汇总了C++中pj_activesock_get_user_data函数的典型用法代码示例。如果您正苦于以下问题:C++ pj_activesock_get_user_data函数的具体用法?C++ pj_activesock_get_user_data怎么用?C++ pj_activesock_get_user_data使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pj_activesock_get_user_data函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: on_data_sent
/* Callback from active socket about send status */
static pj_bool_t on_data_sent(pj_activesock_t *asock,
pj_ioqueue_op_key_t *send_key,
pj_ssize_t sent)
{
pj_stun_sock *stun_sock;
stun_sock = (pj_stun_sock*) pj_activesock_get_user_data(asock);
/* Don't report to callback if this is internal message */
if (send_key == &stun_sock->int_send_key) {
return PJ_TRUE;
}
/* Report to callback */
if (stun_sock->cb.on_data_sent) {
pj_bool_t ret;
/* If app gives NULL send_key in sendto() function, then give
* NULL in the callback too
*/
if (send_key == &stun_sock->send_key)
send_key = NULL;
/* Call callback */
ret = (*stun_sock->cb.on_data_sent)(stun_sock, send_key, sent);
return ret;
}
return PJ_TRUE;
}
示例2: on_connect_complete
/*
* Notification when outgoing TCP socket has been connected.
*/
static pj_bool_t on_connect_complete(pj_activesock_t *asock,
pj_status_t status)
{
pj_turn_sock *turn_sock;
turn_sock = (pj_turn_sock*) pj_activesock_get_user_data(asock);
if (status != PJ_SUCCESS) {
sess_fail(turn_sock, "TCP connect() error", status);
return PJ_FALSE;
}
if (turn_sock->conn_type != PJ_TURN_TP_UDP) {
PJ_LOG(5,(turn_sock->obj_name, "TCP connected"));
}
/* Kick start pending read operation */
status = pj_activesock_start_read(asock, turn_sock->pool,
PJ_TURN_MAX_PKT_LEN, 0);
/* Init send_key */
pj_ioqueue_op_key_init(&turn_sock->send_key, sizeof(turn_sock->send_key));
/* Send Allocate request */
status = pj_turn_session_alloc(turn_sock->sess, &turn_sock->alloc_param);
if (status != PJ_SUCCESS) {
sess_fail(turn_sock, "Error sending ALLOCATE", status);
return PJ_FALSE;
}
return PJ_TRUE;
}
示例3: asock_on_data_read
static pj_bool_t asock_on_data_read(pj_activesock_t *asock,
void *data,
pj_size_t size,
pj_status_t status,
pj_size_t *remainder)
{
struct test_state *st = (struct test_state*)
pj_activesock_get_user_data(asock);
PJ_UNUSED_ARG(data);
PJ_UNUSED_ARG(size);
PJ_UNUSED_ARG(remainder);
if (status != PJ_SUCCESS) {
if (status == PJ_EEOF) {
status = PJ_SUCCESS;
st->done = PJ_TRUE;
} else {
app_perror("...ERROR asock_on_data_read()", status);
}
}
st->err = status;
if (st->err != PJ_SUCCESS || st->done) {
pj_activesock_close(asock);
if (!st->is_server)
clients_num--;
return PJ_FALSE;
}
return PJ_TRUE;
}
示例4: asock_on_connect_complete
static pj_bool_t asock_on_connect_complete(pj_activesock_t *asock,
pj_status_t status)
{
struct test_state *st = (struct test_state*)
pj_activesock_get_user_data(asock);
if (status == PJ_SUCCESS) {
void *read_buf[1];
/* Start reading data */
read_buf[0] = st->read_buf;
status = pj_activesock_start_read2(asock, st->pool, sizeof(st->read_buf), (void**)read_buf, 0);
if (status != PJ_SUCCESS) {
app_perror("...ERROR pj_ssl_sock_start_read2()", status);
}
}
st->err = status;
if (st->err != PJ_SUCCESS) {
pj_activesock_close(asock);
if (!st->is_server)
clients_num--;
return PJ_FALSE;
}
return PJ_TRUE;
}
示例5: on_accept_complete
/*
* This callback is called by active socket when pending accept() operation
* has completed.
*/
static pj_bool_t on_accept_complete(pj_activesock_t *asock,
pj_sock_t sock,
const pj_sockaddr_t *src_addr,
int src_addr_len)
{
struct tcp_listener *listener;
struct tcp_transport *tcp;
char addr[PJ_INET6_ADDRSTRLEN+10];
pj_status_t status;
PJ_UNUSED_ARG(src_addr_len);
listener = (struct tcp_listener*) pj_activesock_get_user_data(asock);
PJ_ASSERT_RETURN(sock != PJ_INVALID_SOCKET, PJ_TRUE);
PJ_LOG(4,(listener->factory.obj_name,
"TCP listener %.*s:%d: got incoming TCP connection "
"from %s, sock=%d",
(int)listener->factory.addr_name.host.slen,
listener->factory.addr_name.host.ptr,
listener->factory.addr_name.port,
pj_sockaddr_print(src_addr, addr, sizeof(addr), 3),
sock));
/*
* Incoming connection!
* Create TCP transport for the new socket.
*/
status = tcp_create( listener, NULL, sock, PJ_TRUE,
(const pj_sockaddr_in*)&listener->factory.local_addr,
(const pj_sockaddr_in*)src_addr, &tcp);
if (status == PJ_SUCCESS) {
status = tcp_start_read(tcp);
if (status != PJ_SUCCESS) {
PJ_LOG(3,(tcp->base.obj_name, "New transport cancelled"));
tcp_destroy(&tcp->base, status);
} else {
/* Start keep-alive timer */
if (PJSIP_TCP_KEEP_ALIVE_INTERVAL) {
pj_time_val delay = {PJSIP_TCP_KEEP_ALIVE_INTERVAL, 0};
pjsip_endpt_schedule_timer(listener->endpt,
&tcp->ka_timer,
&delay);
tcp->ka_timer.id = PJ_TRUE;
pj_gettimeofday(&tcp->last_activity);
}
}
}
return PJ_TRUE;
}
示例6: stun_on_data_recvfrom
static pj_bool_t stun_on_data_recvfrom(pj_activesock_t *asock,
void *data,
pj_size_t size,
const pj_sockaddr_t *src_addr,
int addr_len,
pj_status_t status)
{
test_server *test_srv;
pj_stun_msg *req, *resp = NULL;
pj_pool_t *pool;
pj_ssize_t len;
if (status != PJ_SUCCESS)
return PJ_TRUE;
test_srv = (test_server*) pj_activesock_get_user_data(asock);
pool = pj_pool_create(test_srv->stun_cfg->pf, NULL, 512, 512, NULL);
status = pj_stun_msg_decode(pool, (pj_uint8_t*)data, size,
PJ_STUN_IS_DATAGRAM | PJ_STUN_CHECK_PACKET,
&req, NULL, NULL);
if (status != PJ_SUCCESS)
goto on_return;
if (req->hdr.type != PJ_STUN_BINDING_REQUEST) {
pj_stun_msg_create_response(pool, req, PJ_STUN_SC_BAD_REQUEST,
NULL, &resp);
goto send_pkt;
}
status = pj_stun_msg_create_response(pool, req, 0, NULL, &resp);
if (status != PJ_SUCCESS)
goto on_return;
pj_stun_msg_add_sockaddr_attr(pool, resp, PJ_STUN_ATTR_XOR_MAPPED_ADDR,
PJ_TRUE, src_addr, addr_len);
send_pkt:
status = pj_stun_msg_encode(resp, (pj_uint8_t*)data, MAX_STUN_PKT,
0, NULL, &size);
if (status != PJ_SUCCESS)
goto on_return;
len = size;
status = pj_activesock_sendto(asock, &test_srv->send_key, data, &len,
0, src_addr, addr_len);
on_return:
pj_pool_release(pool);
return PJ_TRUE;
}
示例7: on_connect_complete
/*
* Notification when outgoing TCP socket has been connected.
*/
static pj_bool_t on_connect_complete(pj_activesock_t *asock,
pj_status_t status)
{
pj_turn_sock *turn_sock;
turn_sock = (pj_turn_sock*) pj_activesock_get_user_data(asock);
if (!turn_sock)
return PJ_FALSE;
pj_grp_lock_acquire(turn_sock->grp_lock);
/* TURN session may have already been destroyed here.
* See ticket #1557 (http://trac.pjsip.org/repos/ticket/1557).
*/
if (!turn_sock->sess) {
sess_fail(turn_sock, "TURN session already destroyed", status);
pj_grp_lock_release(turn_sock->grp_lock);
return PJ_FALSE;
}
if (status != PJ_SUCCESS) {
sess_fail(turn_sock, "TCP connect() error", status);
pj_grp_lock_release(turn_sock->grp_lock);
return PJ_FALSE;
}
if (turn_sock->conn_type != PJ_TURN_TP_UDP) {
PJ_LOG(5,(turn_sock->obj_name, "TCP connected"));
}
/* Kick start pending read operation */
status = pj_activesock_start_read(asock, turn_sock->pool,
turn_sock->setting.max_pkt_size, 0);
/* Init send_key */
pj_ioqueue_op_key_init(&turn_sock->send_key, sizeof(turn_sock->send_key));
/* Send Allocate request */
status = pj_turn_session_alloc(turn_sock->sess, &turn_sock->alloc_param);
if (status != PJ_SUCCESS) {
sess_fail(turn_sock, "Error sending ALLOCATE", status);
pj_grp_lock_release(turn_sock->grp_lock);
return PJ_FALSE;
}
pj_grp_lock_release(turn_sock->grp_lock);
return PJ_TRUE;
}
示例8: tcp_on_data_sent
static pj_bool_t tcp_on_data_sent(pj_activesock_t *asock,
pj_ioqueue_op_key_t *op_key,
pj_ssize_t sent)
{
struct tcp_state *st=(struct tcp_state*)pj_activesock_get_user_data(asock);
PJ_UNUSED_ARG(op_key);
st->sent = 1;
if (sent < 1) {
st->err = PJ_TRUE;
return PJ_FALSE;
}
return PJ_TRUE;
}
示例9: on_data_sent
/*
* Callback from ioqueue when packet is sent.
*/
static pj_bool_t on_data_sent(pj_activesock_t *asock,
pj_ioqueue_op_key_t *op_key,
pj_ssize_t bytes_sent)
{
struct tcp_transport *tcp = (struct tcp_transport*)
pj_activesock_get_user_data(asock);
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(&tcp->base, tdata_op_key->token, bytes_sent);
/* Mark last activity time */
pj_gettimeofday(&tcp->last_activity);
}
/* Check for error/closure */
if (bytes_sent <= 0) {
pj_status_t status;
PJ_LOG(5,(tcp->base.obj_name, "TCP send() error, sent=%d",
bytes_sent));
status = (bytes_sent == 0) ? PJ_RETURN_OS_ERROR(OSERR_ENOTCONN) :
-bytes_sent;
tcp_init_shutdown(tcp, status);
return PJ_FALSE;
}
return PJ_TRUE;
}
示例10: tcp_on_data_read
static pj_bool_t tcp_on_data_read(pj_activesock_t *asock,
void *data,
pj_size_t size,
pj_status_t status,
pj_size_t *remainder)
{
struct tcp_state *st = (struct tcp_state*) pj_activesock_get_user_data(asock);
char *next = (char*) data;
if (status != PJ_SUCCESS && status != PJ_EPENDING) {
PJ_LOG(1,("", " err: status=%d", status));
st->err = PJ_TRUE;
return PJ_FALSE;
}
while (size >= sizeof(struct tcp_pkt)) {
struct tcp_pkt *tcp_pkt = (struct tcp_pkt*) next;
if (tcp_pkt->signature != SIGNATURE) {
PJ_LOG(1,("", " err: invalid signature at seq=%d",
st->next_recv_seq));
st->err = PJ_TRUE;
return PJ_FALSE;
}
if (tcp_pkt->seq != st->next_recv_seq) {
PJ_LOG(1,("", " err: wrong sequence"));
st->err = PJ_TRUE;
return PJ_FALSE;
}
st->next_recv_seq++;
next += sizeof(struct tcp_pkt);
size -= sizeof(struct tcp_pkt);
}
if (size) {
pj_memmove(data, next, size);
*remainder = size;
}
return PJ_TRUE;
}
示例11: asock_on_accept_complete
static pj_bool_t asock_on_accept_complete(pj_activesock_t *asock,
pj_sock_t newsock,
const pj_sockaddr_t *src_addr,
int src_addr_len)
{
struct test_state *st;
void *read_buf[1];
pj_activesock_t *new_asock;
pj_activesock_cb asock_cb = { 0 };
pj_status_t status;
PJ_UNUSED_ARG(src_addr);
PJ_UNUSED_ARG(src_addr_len);
st = (struct test_state*) pj_activesock_get_user_data(asock);
asock_cb.on_data_read = &asock_on_data_read;
status = pj_activesock_create(st->pool, newsock, pj_SOCK_STREAM(), NULL,
st->ioqueue, &asock_cb, st, &new_asock);
if (status != PJ_SUCCESS) {
goto on_return;
}
/* Start reading data */
read_buf[0] = st->read_buf;
status = pj_activesock_start_read2(new_asock, st->pool,
sizeof(st->read_buf),
(void**)read_buf, 0);
if (status != PJ_SUCCESS) {
app_perror("...ERROR pj_ssl_sock_start_read2()", status);
}
on_return:
st->err = status;
if (st->err != PJ_SUCCESS)
pj_activesock_close(new_asock);
return PJ_TRUE;
}
示例12: udp_echo_srv_on_data_recvfrom
static pj_bool_t udp_echo_srv_on_data_recvfrom(pj_activesock_t *asock,
void *data,
pj_size_t size,
const pj_sockaddr_t *src_addr,
int addr_len,
pj_status_t status)
{
struct udp_echo_srv *srv;
pj_ssize_t sent;
srv = (struct udp_echo_srv*) pj_activesock_get_user_data(asock);
if (status != PJ_SUCCESS) {
srv->status = status;
srv->rx_err_cnt++;
udp_echo_err("recvfrom() callback", status);
return PJ_TRUE;
}
srv->rx_cnt++;
/* Send back if echo is enabled */
if (srv->echo_enabled) {
sent = size;
srv->status = pj_activesock_sendto(asock, &srv->send_key, data,
&sent, 0,
src_addr, addr_len);
if (srv->status != PJ_SUCCESS) {
srv->tx_err_cnt++;
udp_echo_err("sendto()", status);
}
}
return PJ_TRUE;
}
示例13: on_data_recvfrom
/* Callback from active socket when incoming packet is received */
static pj_bool_t on_data_recvfrom(pj_activesock_t *asock,
void *data,
pj_size_t size,
const pj_sockaddr_t *src_addr,
int addr_len,
pj_status_t status)
{
pj_stun_sock *stun_sock;
pj_stun_msg_hdr *hdr;
pj_uint16_t type;
stun_sock = (pj_stun_sock*) pj_activesock_get_user_data(asock);
/* Log socket error */
if (status != PJ_SUCCESS) {
PJ_PERROR(2,(stun_sock->obj_name, status, "recvfrom() error"));
return PJ_TRUE;
}
/* Check that this is STUN message */
status = pj_stun_msg_check((const pj_uint8_t*)data, size,
PJ_STUN_IS_DATAGRAM | PJ_STUN_CHECK_PACKET);
if (status != PJ_SUCCESS) {
/* Not STUN -- give it to application */
goto process_app_data;
}
/* Treat packet as STUN header and copy the STUN message type.
* We don't want to access the type directly from the header
* since it may not be properly aligned.
*/
hdr = (pj_stun_msg_hdr*) data;
pj_memcpy(&type, &hdr->type, 2);
type = pj_ntohs(type);
/* If the packet is a STUN Binding response and part of the
* transaction ID matches our internal ID, then this is
* our internal STUN message (Binding request or keep alive).
* Give it to our STUN session.
*/
if (!PJ_STUN_IS_RESPONSE(type) ||
PJ_STUN_GET_METHOD(type) != PJ_STUN_BINDING_METHOD ||
pj_memcmp(hdr->tsx_id, stun_sock->tsx_id, 10) != 0)
{
/* Not STUN Binding response, or STUN transaction ID mismatch.
* This is not our message too -- give it to application.
*/
goto process_app_data;
}
/* This is our STUN Binding response. Give it to the STUN session */
status = pj_stun_session_on_rx_pkt(stun_sock->stun_sess, data, size,
PJ_STUN_IS_DATAGRAM, NULL, NULL,
src_addr, addr_len);
return status!=PJNATH_ESTUNDESTROYED ? PJ_TRUE : PJ_FALSE;
process_app_data:
if (stun_sock->cb.on_rx_data) {
pj_bool_t ret;
ret = (*stun_sock->cb.on_rx_data)(stun_sock, data, size,
src_addr, addr_len);
return ret;
}
return PJ_TRUE;
}
示例14: on_connect_complete
/*
* Notification when outgoing TCP socket has been connected.
*/
static pj_bool_t on_connect_complete(pj_activesock_t *asock,
pj_status_t status)
{
pj_turn_sock *turn_sock;
turn_sock = (pj_turn_sock*) pj_activesock_get_user_data(asock);
if (!turn_sock)
return PJ_FALSE;
/* TURN session may have already been destroyed here.
* See ticket #1557 (http://trac.pjsip.org/repos/ticket/1557).
*/
if (!turn_sock->sess) {
PJ_LOG(1, ("turn_sock.c", "!!! TURN DEALLOCATE !!! in on_connect_complete() turn_sock->sess is NULL status=%d", status));
sess_fail(turn_sock, "TURN session already destroyed", status);
return PJ_FALSE;
}
if (status != PJ_SUCCESS) {
// DEAN assigned next turn server
if (turn_sock->turn_cnt <= ++turn_sock->curr_turn) {
PJ_LOG(1, ("turn_sock.c", "!!! TURN DEALLOCATE !!! in on_connect_complete() turn_sock->turn_cnt <= ++turn_sock->curr_turn (%d,%d)",
turn_sock->turn_cnt, turn_sock->curr_turn));
sess_fail(turn_sock, "TCP connect() error", status);
turn_sock->curr_turn = 0;
PJ_LOG(3, (__FILE__, "Failed(%d) connect to all turn servers.", status));
} else {
set_state(turn_sock->sess, PJ_TURN_STATE_NULL);
PJ_LOG(3, (__FILE__, "Failed(%d) connect to turn server [%.*s:%d].",
status,
turn_sock->turn.domain->slen,
turn_sock->turn.domain->ptr,
turn_sock->turn.default_port));
turn_sock->turn.domain = &turn_sock->turn_list[turn_sock->curr_turn].server;
turn_sock->turn.default_port = turn_sock->turn_list[turn_sock->curr_turn].port;
PJ_LOG(3, (__FILE__, "Try another turn server [%.*s:%d].",
turn_sock->turn.domain->slen,
turn_sock->turn.domain->ptr,
turn_sock->turn.default_port));
/* Resolve server */
status = pj_turn_session_set_server(turn_sock->sess, turn_sock->turn.domain,
turn_sock->turn.default_port, turn_sock->turn.resolver);
if (status != PJ_SUCCESS) {
PJ_LOG(1, ("turn_sock.c", "!!! TURN DEALLOCATE !!! in on_connect_complete() pj_turn_session_set_server failed status=%d",
status));
sess_fail(turn_sock, "Error setting TURN server", status);
return status;
}
}
return PJ_FALSE;
}
if (turn_sock->conn_type != PJ_TURN_TP_UDP) {
PJ_LOG(5,(turn_sock->obj_name, "TCP connected"));
}
/* Kick start pending read operation */
status = pj_activesock_start_read(asock, turn_sock->pool,
PJ_TURN_MAX_PKT_LEN, 0);
/* Init send_key */
pj_ioqueue_op_key_init(&turn_sock->send_key, sizeof(turn_sock->send_key));
/* Send Allocate request */
status = pj_turn_session_alloc(turn_sock->sess, &turn_sock->alloc_param);
if (status != PJ_SUCCESS) {
PJ_LOG(1, ("turn_sock.c", "!!! TURN DEALLOCATE !!! in on_connect_complete() pj_turn_session_alloc failed status=%d",
status));
sess_fail(turn_sock, "Error sending ALLOCATE", status);
return PJ_FALSE;
}
return PJ_TRUE;
}
示例15: on_accept_complete
/*
* This callback is called by active socket when pending accept() operation
* has completed.
*/
static pj_bool_t on_accept_complete(pj_activesock_t *asock,
pj_sock_t sock,
const pj_sockaddr_t *src_addr,
int src_addr_len)
{
struct tcp_listener *listener;
struct tcp_transport *tcp;
char addr[PJ_INET6_ADDRSTRLEN+10];
pjsip_tp_state_callback state_cb;
pj_sockaddr tmp_src_addr;
pj_status_t status;
PJ_UNUSED_ARG(src_addr_len);
listener = (struct tcp_listener*) pj_activesock_get_user_data(asock);
PJ_ASSERT_RETURN(sock != PJ_INVALID_SOCKET, PJ_TRUE);
PJ_LOG(4,(listener->factory.obj_name,
"TCP listener %.*s:%d: got incoming TCP connection "
"from %s, sock=%d",
(int)listener->factory.addr_name.host.slen,
listener->factory.addr_name.host.ptr,
listener->factory.addr_name.port,
pj_sockaddr_print(src_addr, addr, sizeof(addr), 3),
sock));
/* Apply QoS, if specified */
status = pj_sock_apply_qos2(sock, listener->qos_type,
&listener->qos_params,
2, listener->factory.obj_name,
"incoming SIP TCP socket");
/* tcp_create() expect pj_sockaddr, so copy src_addr to temporary var,
* just in case.
*/
pj_bzero(&tmp_src_addr, sizeof(tmp_src_addr));
pj_sockaddr_cp(&tmp_src_addr, src_addr);
/*
* Incoming connection!
* Create TCP transport for the new socket.
*/
status = tcp_create( listener, NULL, sock, PJ_TRUE,
&listener->factory.local_addr,
&tmp_src_addr, &tcp);
if (status == PJ_SUCCESS) {
status = tcp_start_read(tcp);
if (status != PJ_SUCCESS) {
PJ_LOG(3,(tcp->base.obj_name, "New transport cancelled"));
tcp_destroy(&tcp->base, status);
} else {
/* Start keep-alive timer */
if (PJSIP_TCP_KEEP_ALIVE_INTERVAL) {
pj_time_val delay = {PJSIP_TCP_KEEP_ALIVE_INTERVAL, 0};
pjsip_endpt_schedule_timer(listener->endpt,
&tcp->ka_timer,
&delay);
tcp->ka_timer.id = PJ_TRUE;
pj_gettimeofday(&tcp->last_activity);
}
/* Notify application of transport state accepted */
state_cb = pjsip_tpmgr_get_state_cb(tcp->base.tpmgr);
if (state_cb) {
pjsip_transport_state_info state_info;
pj_bzero(&state_info, sizeof(state_info));
(*state_cb)(&tcp->base, PJSIP_TP_STATE_CONNECTED, &state_info);
}
}
}
return PJ_TRUE;
}