void p2p_connect_handler(int err, const char* reason, struct p2pconnection* p2pcon) { re_printf("connect ok"); int fdlisten = tcp_conn_fd(p2pcon->p2p->ltcp); UDPSOCKET udpsock = (UDPSOCKET)fdlisten; UDT::connect(p2pcon->udtsock, &udpsock, &(p2pcon->p2p->sactl->u.sa), p2pcon->p2p->sactl->len); }
static void tcp_conn_handler(const struct sa *peer, void *arg) { struct esp_client *ec; struct esp_server *es = (struct esp_server *)arg; esp_client_alloc(&ec); tcp_accept(&ec->tc, es->ts, tcp_estab_handler, tcp_recv_handler, tcp_close_handler, ec); DEBUG_INFO("%s %d | %J | fd=%d\n", __func__, __LINE__, peer, tcp_conn_fd(ec->tc)); }
// connect callback void p2p_request_handler(struct p2phandle *p2p, const char* peername, struct p2pconnection **p2pcon) { re_fprintf(stderr, "p2p accept from:%s\n", peername); int err = p2p_accept(p2p, p2pcon, peername, p2p_receive_handler, *p2pcon); int fdaccept = udp_sock_fd((*p2pcon)->ulsock, AF_INET); struct sa* lsa = NULL; lsa = (struct sa*)mem_zalloc(sizeof(struct sa),NULL); udp_local_get((*p2pcon)->ulsock, lsa); sa_cpy(lsa, p2p->sactl); int fdlisten = tcp_conn_fd(p2p->ltcp); UDPSOCKET udpsock = (UDPSOCKET)fdlisten; (*p2pcon)->udtsock = CUDT::socket(AF_INET, SOCK_STREAM, 0); CUDT::bind((*p2pcon)->udtsock, &udpsock, &(p2p->sactl->u.sa), p2p->sactl->len); CUDT::listen((*p2pcon)->udtsock, &(lsa->u.sa), 10); if (err) { re_fprintf(stderr, "p2p accept error:%s\n", strerror(err)); return ; } }