Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
0
Archivo: video.c Proyecto: ACEZLY/p2pvc
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;
}
Ejemplo n.º 5
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;
}