Ejemplo n.º 1
0
int main()
{

	 int fd=capture_open();
	if(fd==-1)
	 {
	 	printf("###open fail \n");
		exit (EXIT_FAILURE);
	 }
		 capture_start();

	camera_t *cam=malloc(sizeof(camera_t));
	cam->fd=fd;
	cam->stopflag=0;
    pthread_t cam_pid;
	pthread_t pop_pid;
    sc_queue_t *q=queue_new(50);
	if(q)
		cam->q=q;
  // mainloop(fd);
  sc_timer_t *t;
  timerNew(&t,timer_callback,cam);
  #if 1
  pthread_create(&cam_pid,NULL,thread_mainloop,cam);
  pthread_create(&pop_pid,NULL,thread_pop,cam);

 //capture_stop();

	//printf("#IN##Mainloop BEGIN ######\n");
	//ADD BY ME BEGIN
  pthread_join (cam_pid, NULL);
  pthread_join (pop_pid, NULL);
  #endif
  if(zbfp)
  	fclose(zbfp);
  queue_destroy(cam->q);
  capture_stop();
  t->mStopTimerFlag=1;
  timerDelete(t);

return 0;

}
int
initRegistrar() {
    struct sockaddr *addrs;
    struct sockaddr *addr;
    struct sockaddr_in6 *pin6;
    struct sockaddr_in *pin4;
    char *offset;
    char addrBuf[INET6_ADDRSTRLEN + 1];
    struct timeval now;
    unsigned int seed;
    int addrCnt = 0;
    int i;

    logDebug("initializing own registrar");

    /* init own id */
	if (ownId == 0) {
		getTime(&now);
		seed = now.tv_sec | now.tv_usec;
		srand(seed);
		ownId = (uint32) rand();
		logDebug("server id is: 0x%08x", ownId);
	}

    this = registrarServerNew(ownId);
    registrarServerListAddServer(this);
    this->rsEnrpPort = enrpLocalPort;
    this->rsAsapPort = asapLocalPort;

    /* don't need a timeout timer for us */
    timerStop(this->rsLastHeardTimeout);
    timerDelete(this->rsLastHeardTimeout);
    this->rsLastHeardTimeout = NULL;
    this->rsLastHeardTimeoutCnt = 0;

    /* parse enrp sctp addrs */
    if ((addrCnt = sctp_getladdrs(enrpSctpFd, 0, &addrs)) > 0) {
        offset = (char *) addrs;
        logDebug("enrp sctp: we are locally bound to %d adresses", addrCnt);
        for (i = 0; i < addrCnt && i < MAX_ADDR_CNT; i++) {
            addr = (struct sockaddr *) offset;
            pin4 = (struct sockaddr_in  *) offset;
            pin6 = (struct sockaddr_in6 *) offset;

            if (addr->sa_family == AF_INET) {
                if (!useLoopback && pin4->sin_addr.s_addr == INADDR_LOOPBACK)
                    continue;

                this->rsEnrpAddr[i].type = AF_INET;
                memcpy(&this->rsEnrpAddr[i].addr.in4, &pin4->sin_addr, sizeof(struct in_addr));
                logDebug("addrs[%d]: AF_INET  %s", i, inet_ntop(AF_INET, (void *) &pin4->sin_addr, addrBuf, INET6_ADDRSTRLEN));
                offset += sizeof(struct sockaddr_in);
            } else if (addr->sa_family == AF_INET6) {
                if (!useLoopback && memcmp((const void *) &pin6->sin6_addr, (const void *) &in6addr_loopback, sizeof(struct in6_addr)) == 0)
                    continue;

                this->rsEnrpAddr[i].type = AF_INET6;
                memcpy(&this->rsEnrpAddr[i].addr.in6, &pin6->sin6_addr, sizeof(struct in6_addr));
                logDebug("addrs[%d]: AF_INET6 %s", i, inet_ntop(AF_INET6, (void *) &pin6->sin6_addr, addrBuf, INET6_ADDRSTRLEN));
                offset += sizeof(struct sockaddr_in6);
            }
        }

        sctp_freeladdrs(addrs);
    }

    /* parse asap sctp addrs */
    if ((addrCnt = sctp_getladdrs(asapSctpFd, 0, &addrs)) > 0) {
        offset = (char *) addrs;
        logDebug("asap sctp: we are locally bound to %d adresses", addrCnt);
        for (i = 0; i < addrCnt && i < MAX_ADDR_CNT; i++) {
            addr = (struct sockaddr *) offset;
            pin4 = (struct sockaddr_in  *) offset;
            pin6 = (struct sockaddr_in6 *) offset;

            if (addr->sa_family == AF_INET) {
                if (!useLoopback && pin4->sin_addr.s_addr == INADDR_LOOPBACK)
                    continue;

                this->rsAsapAddr[i].type = AF_INET;
                memcpy(&this->rsAsapAddr[i].addr.in4, &pin4->sin_addr, sizeof(struct in_addr));
                logDebug("addrs[%d]: AF_INET  %s", i, inet_ntop(AF_INET, (void *) &pin4->sin_addr, addrBuf, INET6_ADDRSTRLEN));
                offset += sizeof(struct sockaddr_in);
            } else if (addr->sa_family == AF_INET6) {
                if (!useLoopback && memcmp((const void *) &pin6->sin6_addr, (const void *) &in6addr_loopback, sizeof(struct in6_addr)) == 0)
                    continue;

                this->rsAsapAddr[i].type = AF_INET6;
                memcpy(&this->rsAsapAddr[i].addr.in6, &pin6->sin6_addr, sizeof(struct in6_addr));
                logDebug("addrs[%d]: AF_INET6 %s", i, inet_ntop(AF_INET6, (void *) &pin6->sin6_addr, addrBuf, INET6_ADDRSTRLEN));
                offset += sizeof(struct sockaddr_in6);
            }
        }

        sctp_freeladdrs(addrs);
    }

    return 1;
}