CondorFile * CondorFileTable::open_file_unique( char *logical_name, int flags, int mode ) { int match = find_logical_name( logical_name ); if( match==-1 || !pointers[match]->file ) { char *url = NULL; lookup_url( (char*)logical_name, &url ); if( url ) { match = find_url( url ); if( match==-1 ) { CondorFile *f = open_url_retry( url, flags, mode ); free( url ); return f; } free( url ); } } CondorFilePointer *p = pointers[match]; CondorFile *old_file; if( needs_reopen( p->flags, flags ) ) { flags &= ~(O_RDONLY); flags &= ~(O_WRONLY); flags |= O_RDWR; p->file->flush(); CondorFile *f = open_url_retry( p->file->get_url(), flags, mode ); if(!f) return 0; old_file = p->file; if( old_file->close()!=0 ) return 0; replace_file( old_file, f ); /* Even though old_file is aliasing p->file here, and then we're deleting old_file, There is no returning a freed pointer error at the end of the function because replace_file() will *always* be able to replace the entry in the pointers[] table (aliased by p) indexed with old_file (being actually p->file) with the updated value of f. */ delete old_file; } return p->file; }
/* --------------------------------------------------------------------------- ** V4L2 processing ** -------------------------------------------------------------------------*/ void v4l2processing(struct mg_server *server, V4l2Capture* dev, int width, int height) { if (dev->isReady()) { int fd = dev->getFd(); struct timeval tv; timerclear(&tv); fd_set read_set; FD_ZERO(&read_set); FD_SET(fd,&read_set); if (select(fd+1, &read_set, NULL, NULL, &tv) >0) { if (FD_ISSET(fd,&read_set)) { // update format informations dev->queryFormat(); // read image char buf[dev->getBufferSize()]; ssize_t size = dev->read(buf, dev->getBufferSize()); LOG(DEBUG) << "read size:" << size << " buffersize:" << dev->getBufferSize(); // compress if ( (size>0) && (dev->getFormat() == V4L2_PIX_FMT_YUYV) ) { size = yuyv2jpeg(buf, width, height, 95); } // post to subscribers if (size>0) { for (struct mg_connection *c = mg_next(server, NULL); c != NULL; c = mg_next(server, c)) { const url_handler* url = find_url(c->uri); if (url && url->handle_notify) { LOG(DEBUG) << "notify:" << c->uri << " size:" << size; url->handle_notify(c, buf, size); } } } } } } }
int put_hnode( char *str, /* Hostname */ int type, /* obj type */ u_long count, /* hit count */ u_long file, /* File flag */ double xfer, /* xfer size */ u_long *ctr, /* counter */ u_long visit, /* visits */ u_long tstamp,/* timestamp */ char *lasturl, /* lasturl */ HNODEPTR *htab) /* ptr>next */ { HNODEPTR cptr,nptr; /* check if hashed */ if ( (cptr = htab[hash(str)]) == NULL) { /* not hashed */ if ( (nptr=new_hnode(str)) != NULL) { nptr->flag = type; nptr->count = count; nptr->files = file; nptr->xfer = xfer; nptr->next = NULL; htab[hash(str)] = nptr; if (type!=OBJ_GRP) (*ctr)++; if (visit) { nptr->visit=(visit-1); nptr->lasturl=find_url(lasturl); nptr->tstamp=tstamp; return 0; } else { if (ispage(log_rec.url)) { if (htab==sm_htab) update_entry(log_rec.url); nptr->lasturl=find_url(log_rec.url); nptr->tstamp=tstamp; nptr->visit=1; } } } } else { /* hashed */ while (cptr != NULL) { if (strcmp(cptr->string,str)==0) { if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP))) { /* found... bump counter */ cptr->count+=count; cptr->files+=file; cptr->xfer +=xfer; if (ispage(log_rec.url)) { if ((tstamp-cptr->tstamp)>=visit_timeout) { cptr->visit++; if (htab==sm_htab) { update_exit(cptr->lasturl); update_entry(log_rec.url); } } cptr->lasturl=find_url(log_rec.url); cptr->tstamp=tstamp; } return 0; } } cptr = cptr->next; } /* not found... */ if ( (nptr = new_hnode(str)) != NULL) { nptr->flag = type; nptr->count = count; nptr->files = file; nptr->xfer = xfer; nptr->next = htab[hash(str)]; htab[hash(str)]=nptr; if (type!=OBJ_GRP) (*ctr)++; if (visit) { nptr->visit = (visit-1); nptr->lasturl=find_url(lasturl); nptr->tstamp= tstamp; return 0; } else { if (ispage(log_rec.url)) { if (htab==sm_htab) update_entry(log_rec.url); nptr->lasturl=find_url(log_rec.url); nptr->tstamp= tstamp; nptr->visit=1; } } } } if (nptr!=NULL) { /* set object type */ if (type==OBJ_GRP) nptr->flag=OBJ_GRP; /* is it a grouping? */ else { /* check if it's a hidden object */ if ((hide_sites)||(isinlist(hidden_sites,nptr->string)!=NULL)) nptr->flag=OBJ_HIDE; } } return nptr==NULL; }
int main(int argc, const char *argv[]) { struct tw_hostent* p_host, *p; int i, j, retry = 0; char *pa; pthread_t dns_recv_pthread; if (argc < 2) { fprintf(stderr, "%s website1, website2 ...", argv[0]); } if(signal(SIGINT, sig_int) == SIG_ERR){ perror("signal error"); } init_head(&head); init_dns(); epfd = epoll_create(1000); for (i = 0; i < argc - 1; i++) { p_host = (struct tw_hostent*)malloc(sizeof(struct tw_hostent)); memcpy(p_host->name, argv[i + 1], 30); memcpy(p_host->file, argv[i + 1], 30); if ((pa = strchr(argv[i + 1], '.'))!= NULL) { memcpy(p_host->key_word, pa + 1, 30); } if((p_host->dns = gethostbyname(argv[i + 1])) == NULL){ fprintf(stderr, "gethostbyname error"); return 1; } p_host->is_dns = 1; p_host->first = 1; p_host->prev = p_host->next = NULL; join_list(&p_host); DoOnce(p_host); find_url(p_host); p_host->is_url = 1; } pthread_create(&dns_recv_pthread, NULL, dns_recv, NULL); __again: for(p = head.head; p != NULL; p = p->next) { if(p->is_dns == 0) { // printf("still in __again\n"); goto __again; } } printf("1 round is well done!\n"); for(p = head.head; p != NULL; p = p->next) { if(p->is_url == 0){ DoOnce(p); find_url(p); p->is_url = 1; } } printf("2 round is well done!\n"); // disp_result(); return 0; }
int restore_state() { FILE *fp; int i; struct hnode t_hnode; /* Temporary hash nodes */ struct unode t_unode; struct rnode t_rnode; struct anode t_anode; struct snode t_snode; struct inode t_inode; char buffer[BUFSIZE]; char tmp_buf[BUFSIZE]; u_long ul_bogus=0; fp=fopen(state_fname,"r"); if (fp==NULL) { /* Previous run data not found... */ if (verbose>1) printf("%s\n",msg_no_data); return 0; /* return with ok code */ } /* Reading previous run data... */ if (verbose>1) printf("%s %s\n",msg_get_data,state_fname); /* get easy stuff */ sprintf(tmp_buf,"# Webalizer V%s ",version); if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Header record */ {if (strncmp(buffer,tmp_buf,17)) return 99;} /* bad magic? */ else return 1; /* error exit */ /* Get current timestamp */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) { sscanf(buffer,"%d %d %d %d %d %d", &cur_year, &cur_month, &cur_day, &cur_hour, &cur_min, &cur_sec); } else return 2; /* error exit */ /* calculate current timestamp (seconds since epoch) */ cur_tstamp=((jdate(cur_day,cur_month,cur_year)-epoch)*86400)+ (cur_hour*3600)+(cur_min*60)+cur_sec; /* Get monthly totals */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) { sscanf(buffer,"%lu %lu %lu %lu %lu %lu %lf %lu %lu %lu", &t_hit, &t_file, &t_site, &t_url, &t_ref, &t_agent, &t_xfer, &t_page, &t_visit, &t_user); } else return 3; /* error exit */ /* Get daily totals */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) { sscanf(buffer,"%lu %lu %lu %d %d", &dt_site, &ht_hit, &mh_hit, &f_day, &l_day); } else return 4; /* error exit */ /* get daily totals */ for (i=0;i<31;i++) { if ((fgets(buffer,BUFSIZE,fp)) != NULL) { sscanf(buffer,"%lu %lu %lf %lu %lu %lu", &tm_hit[i],&tm_file[i],&tm_xfer[i],&tm_site[i],&tm_page[i], &tm_visit[i]); } else return 5; /* error exit */ } /* get hourly totals */ for (i=0;i<24;i++) { if ((fgets(buffer,BUFSIZE,fp)) != NULL) { sscanf(buffer,"%lu %lu %lf %lu", &th_hit[i],&th_file[i],&th_xfer[i],&th_page[i]); } else return 6; /* error exit */ } /* get response code totals */ for (i=0;i<TOTAL_RC;i++) { if ((fgets(buffer,BUFSIZE,fp)) != NULL) sscanf(buffer,"%lu",&response[i].count); else return 7; /* error exit */ } /* Kludge for V2.01-06 TOTAL_RC off by one bug */ if (!strncmp(buffer,"# -urls- ",9)) response[TOTAL_RC-1].count=0; else { /* now do hash tables */ /* url table */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Table header */ { if (strncmp(buffer,"# -urls- ",9)) return 10; } /* (url) */ else return 10; /* error exit */ } while ((fgets(buffer,BUFSIZE,fp)) != NULL) { if (!strncmp(buffer,"# End Of Table ",15)) break; strncpy(tmp_buf,buffer,MAXURLH); tmp_buf[strlen(tmp_buf)-1]=0; if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 10; /* error exit */ if (!isdigit((int)buffer[0])) return 10; /* error exit */ /* load temporary node data */ sscanf(buffer,"%d %lu %lu %lf %lu %lu", &t_unode.flag,&t_unode.count, &t_unode.files, &t_unode.xfer, &t_unode.entry, &t_unode.exit); /* Good record, insert into hash table */ if (put_unode(tmp_buf,t_unode.flag,t_unode.count, t_unode.xfer,&ul_bogus,t_unode.entry,t_unode.exit,um_htab)) { if (verbose) /* Error adding URL node, skipping ... */ fprintf(stderr,"%s %s\n", msg_nomem_u, t_unode.string); } } /* monthly sites table */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Table header */ { if (strncmp(buffer,"# -sites- ",10)) return 8; } /* (monthly) */ else return 8; /* error exit */ while ((fgets(buffer,BUFSIZE,fp)) != NULL) { /* Check for end of table */ if (!strncmp(buffer,"# End Of Table ",15)) break; strncpy(tmp_buf,buffer,MAXHOST); tmp_buf[strlen(buffer)-1]=0; if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 8; /* error exit */ if (!isdigit((int)buffer[0])) return 8; /* error exit */ /* load temporary node data */ sscanf(buffer,"%d %lu %lu %lf %lu %lu", &t_hnode.flag,&t_hnode.count, &t_hnode.files, &t_hnode.xfer, &t_hnode.visit, &t_hnode.tstamp); /* get last url */ if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 8; /* error exit */ if (buffer[0]=='-') t_hnode.lasturl=blank_str; else { buffer[strlen(buffer)-1]=0; t_hnode.lasturl=find_url(buffer); } /* Good record, insert into hash table */ if (put_hnode(tmp_buf,t_hnode.flag, t_hnode.count,t_hnode.files,t_hnode.xfer,&ul_bogus, t_hnode.visit+1,t_hnode.tstamp,t_hnode.lasturl,sm_htab)) { /* Error adding host node (monthly), skipping .... */ if (verbose) fprintf(stderr,"%s %s\n",msg_nomem_mh, t_hnode.string); } } /* Daily sites table */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Table header */ { if (strncmp(buffer,"# -sites- ",10)) return 9; } /* (daily) */ else return 9; /* error exit */ while ((fgets(buffer,BUFSIZE,fp)) != NULL) { /* Check for end of table */ if (!strncmp(buffer,"# End Of Table ",15)) break; strncpy(tmp_buf,buffer,MAXHOST); tmp_buf[strlen(buffer)-1]=0; if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 9; /* error exit */ if (!isdigit((int)buffer[0])) return 9; /* error exit */ /* load temporary node data */ sscanf(buffer,"%d %lu %lu %lf %lu %lu", &t_hnode.flag,&t_hnode.count, &t_hnode.files, &t_hnode.xfer, &t_hnode.visit, &t_hnode.tstamp); /* get last url */ if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 9; /* error exit */ if (buffer[0]=='-') t_hnode.lasturl=blank_str; else { buffer[strlen(buffer)-1]=0; t_hnode.lasturl=find_url(buffer); } /* Good record, insert into hash table */ if (put_hnode(tmp_buf,t_hnode.flag, t_hnode.count,t_hnode.files,t_hnode.xfer,&ul_bogus, t_hnode.visit+1,t_hnode.tstamp,t_hnode.lasturl,sd_htab)) { /* Error adding host node (daily), skipping .... */ if (verbose) fprintf(stderr,"%s %s\n",msg_nomem_dh, t_hnode.string); } } /* Referrers table */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Table header */ { if (strncmp(buffer,"# -referrers- ",14)) return 11; } /* (referrers)*/ else return 11; /* error exit */ while ((fgets(buffer,BUFSIZE,fp)) != NULL) { if (!strncmp(buffer,"# End Of Table ",15)) break; strncpy(tmp_buf,buffer,MAXREFH); tmp_buf[strlen(buffer)-1]=0; if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 11; /* error exit */ if (!isdigit((int)buffer[0])) return 11; /* error exit */ /* load temporary node data */ sscanf(buffer,"%d %lu",&t_rnode.flag,&t_rnode.count); /* insert node */ if (put_rnode(tmp_buf,t_rnode.flag, t_rnode.count, &ul_bogus, rm_htab)) { if (verbose) fprintf(stderr,"%s %s\n", msg_nomem_r, log_rec.refer); } } /* Agents table */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Table header */ { if (strncmp(buffer,"# -agents- ",11)) return 12; } /* (agents)*/ else return 12; /* error exit */ while ((fgets(buffer,BUFSIZE,fp)) != NULL) { if (!strncmp(buffer,"# End Of Table ",15)) break; strncpy(tmp_buf,buffer,MAXAGENT); tmp_buf[strlen(buffer)-1]=0; if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 12; /* error exit */ if (!isdigit((int)buffer[0])) return 12; /* error exit */ /* load temporary node data */ sscanf(buffer,"%d %lu",&t_anode.flag,&t_anode.count); /* insert node */ if (put_anode(tmp_buf,t_anode.flag,t_anode.count, &ul_bogus,am_htab)) { if (verbose) fprintf(stderr,"%s %s\n", msg_nomem_a, log_rec.agent); } } /* Search Strings table */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Table header */ { if (strncmp(buffer,"# -search string",16)) return 13; } /* (search)*/ else return 13; /* error exit */ while ((fgets(buffer,BUFSIZE,fp)) != NULL) { if (!strncmp(buffer,"# End Of Table ",15)) break; strncpy(tmp_buf,buffer,MAXSRCH); tmp_buf[strlen(buffer)-1]=0; if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 13; /* error exit */ if (!isdigit((int)buffer[0])) return 13; /* error exit */ /* load temporary node data */ sscanf(buffer,"%lu",&t_snode.count); /* insert node */ if (put_snode(tmp_buf,t_snode.count,sr_htab)) { if (verbose) fprintf(stderr,"%s %s\n", msg_nomem_sc, t_snode.string); } } /* usernames table */ if ((fgets(buffer,BUFSIZE,fp)) != NULL) /* Table header */ { if (strncmp(buffer,"# -usernames- ",10)) return 14; } else return 14; /* error exit */ while ((fgets(buffer,BUFSIZE,fp)) != NULL) { /* Check for end of table */ if (!strncmp(buffer,"# End Of Table ",15)) break; strncpy(tmp_buf,buffer,MAXIDENT); tmp_buf[strlen(buffer)-1]=0; if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 14; /* error exit */ if (!isdigit((int)buffer[0])) return 14; /* error exit */ /* load temporary node data */ sscanf(buffer,"%d %lu %lu %lf %lu %lu", &t_inode.flag,&t_inode.count, &t_inode.files, &t_inode.xfer, &t_inode.visit, &t_inode.tstamp); /* Good record, insert into hash table */ if (put_inode(tmp_buf,t_inode.flag, t_inode.count,t_inode.files,t_inode.xfer,&ul_bogus, t_inode.visit+1,t_inode.tstamp,im_htab)) { if (verbose) /* Error adding username node, skipping .... */ fprintf(stderr,"%s %s\n",msg_nomem_i, t_inode.string); } } fclose(fp); check_dup = 1; /* enable duplicate checking */ return 0; /* return with ok code */ }