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; }