int app_p2p_connect() { int ret; if (pin_flag) ret = p2p_connect(CMD_P2P_PIN, ipin, scan_ptr); else ret = p2p_connect(CMD_P2P_PBC, 0, scan_ptr); return ret; }
static int on_peer_post_msg_resp(struct rpc *r, void *arg, int len) { pthread_t tid; struct p2p *p2p = _p2p; uint32_t peer_id; char localip[MAX_ADDR_STRING]; char reflectip[MAX_ADDR_STRING]; struct sockaddr_in si; logi("on_peer_post_msg_resp len = %d\n", len); struct nat_info *nat = (struct nat_info *)arg; logi("get nat info from peer\n"); logi("nat.uuid = 0x%08x\n", nat->uuid); skt_addr_ntop(localip, nat->local.ip); skt_addr_ntop(reflectip, nat->reflect.ip); logi("nat.type = %d\n", nat->type); logi("nat.local_addr %s:%d\n", localip, nat->local.port); logi("nat.reflect_addr %s:%d\n", reflectip, nat->reflect.port); p2p->ps = ptcp_socket_by_fd(p2p->nat.fd); if (p2p->ps == NULL) { loge("error!\n"); return -1; } if (p2p->rpc_state == P2P_RPC_SYN_SENT) {//client logi("as p2p client\n"); sleep(1); if (_p2p_connect(p2p, localip, nat->local.port)) { loge("_p2p_connect nat.local failed, try nat.reflect\n"); if (_p2p_connect(p2p, reflectip, nat->reflect.port)) { logi("_p2p_connect nat.reflect failed too\n"); return -1; } } return 0; } //server logi("as p2p server\n"); peer_id = nat->uuid; p2p_connect(p2p, peer_id); si.sin_family = AF_INET; si.sin_addr.s_addr = inet_addr(_local_ip); si.sin_port = htons(_local_port); logi("ptcp_bind %s:%d\n", _local_ip, _local_port); ptcp_bind(p2p->ps, (struct sockaddr*)&si, sizeof(si)); ptcp_listen(p2p->ps, 0); pthread_create(&tid, NULL, tmp_thread, p2p); return 0; }
void on_rpc_read(int fd, void *arg) { pthread_t tid; struct p2p *p2p = (struct p2p *)arg; struct rpc *r = p2p->rpc; char *peer_id; char localip[MAX_ADDR_STRING]; char reflectip[MAX_ADDR_STRING]; struct sockaddr_in si; struct iobuf *buf = rpc_recv_buf(r); if (!buf) { printf("rpc_recv_buf failed!\n"); return; } struct nat_info *nat = (struct nat_info *)buf->addr; printf("peer info\n"); printf("nat.uuid = %s\n", nat->uuid); skt_addr_ntop(localip, nat->local.ip); skt_addr_ntop(reflectip, nat->reflect.ip); printf("nat.type = %d, local.ip = %s, port = %d\n", nat->type, localip, nat->local.port); printf("reflect.ip = %s, port = %d\n", reflectip, nat->reflect.port); p2p->ps = ptcp_socket_by_fd(p2p->nat.fd); if (p2p->ps == NULL) { printf("error!\n"); return; } if (p2p->rpc_state == P2P_RPC_SYN_SENT) {//client sleep(1); _p2p_connect(p2p, reflectip, nat->reflect.port); return; } //server peer_id = nat->uuid; p2p_connect(p2p, peer_id); si.sin_family = AF_INET; si.sin_addr.s_addr = inet_addr(_local_ip); si.sin_port = htons(_local_port); printf("ptcp_bind %s:%d\n", _local_ip, _local_port); ptcp_bind(p2p->ps, (struct sockaddr*)&si, sizeof(si)); ptcp_listen(p2p->ps, 0); pthread_create(&tid, NULL, tmp_thread, p2p); }
int start_video(char *peer, char *port, vid_options_t *vopt) { width = GET_WIDTH(vopt->width); height = GET_HEIGHT(vopt->height); render_type = vopt->render_type; disp_bandwidth = vopt->disp_bandwidth; display_options_t dopt; memset(&dopt, 0, sizeof(display_options_t)); dopt.intensity_threshold = vopt->intensity_threshold; dopt.saturation = vopt->saturation; dopt.monochrome = vopt->monochrome; dopt.r = vopt->r; dopt.g = vopt->g; dopt.b = vopt->b; dopt.ascii_values = vopt->ascii_values; init_screen(&dopt); curs_set(0); pthread_mutex_init(&conslock, NULL); cons = calloc(1, sizeof(connection_t)); if (p2p_connect(peer, port, &(cons[0]))) { fprintf(stderr, "Unable to connect to server.\n"); } else { conslen++; } pthread_t thr; pthread_create(&thr, NULL, &dolisten, (void *)port); IplImage* color_img; IplImage* resize_img = cvCreateImage(cvSize(width, height), 8, 3); IplImage* edge = cvCreateImage(cvGetSize(resize_img), IPL_DEPTH_8U, 1); cv_cap = cvCaptureFromCAM(0); char line_buffer[sizeof(unsigned long) + width * depth]; struct timespec tim, actual_tim; tim.tv_sec = 0; tim.tv_nsec = (1000000000 - 1) / vopt->refresh_rate; int kernel = 7; while (1) { /* Get each frame */ color_img = cvQueryFrame(cv_cap); if(color_img && resize_img) { cvResize(color_img, resize_img, CV_INTER_AREA); if (vopt->edge_filter) { cvCvtColor(resize_img, edge, CV_BGR2GRAY); cvCanny(edge, edge, vopt->edge_lower * kernel * kernel, vopt->edge_upper * kernel * kernel, kernel); cvCvtColor(edge, resize_img, CV_GRAY2BGR); } unsigned long line_index; for (line_index = 0; line_index < (resize_img->imageSize / (width * depth)); line_index++) { memset(line_buffer, 0, sizeof(line_buffer)); unsigned long send_index = htonl(line_index); memcpy(line_buffer, &send_index, sizeof(unsigned long)); memcpy(&(line_buffer[sizeof(unsigned long)]), resize_img->imageData + (line_index * width * depth), width * depth); p2p_broadcast(&cons, &conslen, &conslock, line_buffer, + sizeof(line_buffer)); } nanosleep(&tim, &actual_tim); } } /* Housekeeping */ cvReleaseCapture(&cv_cap); end_screen(); return 0; }
UDTSOCKET CUDTUnited::p2pConnect(const UDTSOCKET u, const char* peername) { struct p2pconnection* p2pcon = NULL; p2p_connect(m_p2ph, &p2pcon, peername, p2p_connect_handler, p2p_receive_handler, p2pcon); return 0; }