示例#1
0
void BaseApp::updateTime(){
	timestamp prev = curr;

	curr = getCurrentTime();
	frameTime = getTimeDifference(prev, curr);
	time = getTimeDifference(start, curr);
}
示例#2
0
文件: Main.cpp 项目: Bombe/tp
void Main::copierProgress(Copier* copier) {
	struct timeval now;
	uint64_t timeSpent;
	uint64_t sinceStart;
	double throughput;

	gettimeofday(&now, NULL);
	timeSpent = getTimeDifference(&this->lastTime, &now);

	if (timeSpent > 500000) {
		sinceStart = getTimeDifference(&this->startTime, &now);
		throughput = (copier->getCopied() / (sinceStart / 1000000.0));
		fprintf(stderr, "%llu bytes total, %llu seconds, %s/s%c[K\r", copier->getCopied(), sinceStart / 1000000, this->formatter->format("%.1f %s", throughput), 27);
		this->lastTime = now;
	}
}
示例#3
0
int cmc_groupsforuserfromusersystem(int socketha, char *_user, unsigned int us, char ***_groups, char *extra_in) {

	int n;
	char **groups;
	void *all, *p;

	#ifdef DEBUG_TIME
		struct timeval ts, te;
	#endif

	int allsize = 512 + 512 + sizeof(us);
	if ((all = malloc(allsize)) == NULL) {
		perror("cmc_groupsforuserfromusersystem; malloc all buf");
		return 0;
	}
	p = all;

	// kopierer all dataen i en pakke
	strncpy(p, _user, 512);
	p += 512;

	memcpy(p, &us, sizeof(us));
	p += sizeof(us);

	strncpy(p, extra_in, 512);
	p += 512;

	sendpacked(socketha, cm_groupsforuserfromusersystem, BLDPROTOCOLVERSION, allsize, all, "");

	free(all);

	if (recv(socketha, &n, sizeof n, MSG_WAITALL) == -1) {
		perror("groupsbyuserforcoll recv");
		return 0;
	}

	#ifdef DEBUG_TIME
		gettimeofday(&ts, NULL);
	#endif

	if (n > 0) {
		groups = calloc(n, MAX_LDAP_ATTR_LEN);
		if (recv(socketha, groups, n * MAX_LDAP_ATTR_LEN, MSG_WAITALL) == -1) {
			perror("groupsbyuserforcoll recv");
			return 0;
		}	
		*_groups = groups;
	} else {
		*_groups = NULL;
	}

	#ifdef DEBUG_TIME
		gettimeofday(&te, NULL);
		printf("grepme cmc_groupsforuserfromusersystem took: %f\n", getTimeDifference(&ts, &te));
	#endif

	return n;
}
示例#4
0
/*! This method returns the time (in seconds) since the last time the timer
    was restarted.
    \return double seconds that have passed since last restart of timer */
double Timing::getElapsedTime( int iFactor )
{
#ifdef WIN32
  DWORD time2 = GetTickCount();
#else
  struct timeval time2;
  gettimeofday( &time2, NULL );
#endif
  return getTimeDifference( time2, time1 )*iFactor;
}
void WorldDrawer3d::idleCallbackFunction(){
	
	unsigned int diff = getTimeDifference();
	// Limit to 50 frames per second
	if (diff >= 20)
	{
		tick += diff;

		onIdle();

		//redisplay
		glutPostRedisplay();
	}
}
示例#6
0
int cmc_rewrite_url(int socketha, char *collection_in, const char *url_in, enum platform_type ptype, 
		enum browser_type btype, char *url_out, size_t url_out_len, char *uri_out, size_t uri_out_len, 
		char *fulluri_out, size_t fulluri_out_len)
{
	struct rewriteFormat rewrite;

	#ifdef DEBUG_TIME
		struct timeval start_time, end_time;
		printf("cmc_rewrite_url(collection_in=\"%s\", url_in=\"%s\")\n",collection_in,url_in);
		gettimeofday(&start_time, NULL);
	#endif



	memset(&rewrite, '\0', sizeof(rewrite));
	
				
	strscpy(rewrite.collection, collection_in, sizeof(rewrite.collection));
	strscpy(rewrite.url, url_in, sizeof(rewrite.url));
	rewrite.ptype = ptype;
	rewrite.btype = btype;

	sendpacked(socketha, cm_rewriteurl, BLDPROTOCOLVERSION, sizeof(rewrite), &rewrite, "");


	if (recvall(socketha, &rewrite, sizeof(rewrite)) == 0) {
		perror("recvall(url)");
		return 0;
	}

	strscpy(url_out, rewrite.url, url_out_len);
	strscpy(uri_out, rewrite.uri, uri_out_len);
	strscpy(fulluri_out, rewrite.fulluri, fulluri_out_len);

	#ifdef DEBUG
		printf("~cmc_rewrite_url [uri_out=\"%s\", fulluri=\"%s\"]\n",uri_out,fulluri_out);
	#endif

	#ifdef DEBUG_TIME
		gettimeofday(&end_time, NULL);
		printf("~cmc_rewrite_url(2) time %f\n",getTimeDifference(&start_time,&end_time));
	#endif

	return 1;
}
示例#7
0
void
reclose_cache(void)
{
	struct reformat *re;
        struct hashtable_itr *itr;
	char *filesname;

	#ifdef DEBUG_TIME
	        struct timeval start_time, end_time;
	        gettimeofday(&start_time, NULL);
	#endif

      	//itererer over hash, frigjør alle elementer
        if (lots_cache!= NULL && hashtable_count(lots_cache) > 0)
        {

                itr = hashtable_iterator(lots_cache);

                do {
                	filesname = hashtable_iterator_key(itr);
                        re = hashtable_iterator_value(itr);

			#ifdef DEBUG
			printf("reclose_cache: closing \"%s\"\n",filesname);
			#endif

			if (re != NULL) {
				reclose(re);
			}

             	} while (hashtable_iterator_remove(itr));

                free(itr);
	}
	#ifdef DEBUG_TIME
	        gettimeofday(&end_time, NULL);
	        printf("Time debug: reclose_cache %f\n",getTimeDifference(&start_time,&end_time));
	#endif


	return; 
}
示例#8
0
void brGetPages(int *sockfd,int nrOfServers,struct SiderHederFormat *SiderHeder,struct SiderFormat *Sider, 
	int *pageNr,int alreadynr) {

	int i,n;
	int net_status;

	#ifdef DEBUG_TIME
		struct timeval start_time, end_time;
		gettimeofday(&start_time, NULL);
	#endif

	#ifdef DEBUG
		printf("brGetPages: alreadynr %i, *pageNr %i, nrOfServers %i\n",alreadynr,*pageNr,nrOfServers);
	#endif

	//sejjer om vi har fåt et midlertidig svar på at jobben har begynt
	/****************************************************************/
	for (i=alreadynr;i<nrOfServers+alreadynr;i++) {

		if (sockfd[i] != 0) {

			//motter hedderen for svaret
			if (bsread (&sockfd[i],sizeof(net_status),(char *)&net_status,maxSocketWait_CanDo)) {

				if (net_status != net_CanDo) {
					dprintf("net_status wasen net_CanDo but %i\n",net_status);
					sockfd[i] = 0;
				}
			}
		}			
		
	}
	/****************************************************************/
	#ifdef DEBUG_TIME
		gettimeofday(&end_time, NULL);
		dprintf("Time debug: brGetPages.jobstart pages %f\n",getTimeDifference(&start_time,&end_time));
		gettimeofday(&start_time, NULL);
	#endif


	for (i=alreadynr;i<nrOfServers+alreadynr;i++) {

		//inaliserer til 0 slik at vi ikke tror at vi har noe data fra servere som ikke svarte
		SiderHeder[i].showabal = 0;
	
		//motter hedderen for svaret
		if (sockfd[i] != 0) {

			if (!bsread (&sockfd[i],sizeof(struct SiderHederFormat),(char *)&SiderHeder[i],maxSocketWait_SiderHeder)) {
				dprintf("brGetPages: Failed to bsread SiderHeder");
				continue; // ingen vits i å fortsette å lese fra denne hvis vi ikke fik til å gjøre dette read kallet
			}

#ifdef ATTRIBUTES
			if ((SiderHeder[i].navigation_xml = malloc( sizeof(char) * (SiderHeder[i].navigation_xml_len +1)) ) == NULL) {
				perror("Can't malloc data for navigation_xml");
				continue; // ingen vits å å fortsette mer
			}

			if (!bsread (&sockfd[i], SiderHeder[i].navigation_xml_len, SiderHeder[i].navigation_xml, maxSocketWait_SiderHeder)) {
				dprintf("brGetPages: Failed to bsread navigation_xml");
				continue; // ingen vits å å fortsette mer
			}

			SiderHeder[i].navigation_xml[SiderHeder[i].navigation_xml_len] = '\0';

			#ifdef DEBUG
				printf("\n\nnavigation_xml: %s\n\n", SiderHeder[i].navigation_xml);
			#endif

#endif
		}
	}

	#ifdef DEBUG_TIME
		gettimeofday(&end_time, NULL);
		dprintf("Time debug: brGetPages.reading heder pages %f\n",getTimeDifference(&start_time,&end_time));
		gettimeofday(&start_time, NULL);
	#endif


	for (i=alreadynr;i<nrOfServers+alreadynr;i++) {


			if (sockfd[i] == 0) {
				dprintf("Server nr %i don't have a open socket.",i);
			}
			else {
				int j;

				dprintf("aa: i: %i. Server \"%s\" that has %i pages. Soctet %i\n",
					i,
					SiderHeder[i].servername,
					SiderHeder[i].showabal,
					sockfd[i]);
		


				#ifdef DEBUG
					printf("brGetPages: trying to read %i bytes from server %i\n",sizeof(struct SiderFormat) * SiderHeder[i].showabal,i);
					printf("have %i pages\n",SiderHeder[i].showabal);
				#endif

				for (j = 0; j < SiderHeder[i].showabal; j++) {
					if ((n=bsread(&sockfd[i],sizeof(struct SiderFormat), (char *)&Sider[(*pageNr)],maxSocketWait_SiderHeder))) {
						size_t len;
						int k;
						/* Get urls ... */
						Sider[*pageNr].urls = calloc(Sider[*pageNr].n_urls, sizeof(*(Sider->urls)));
						if (Sider[*pageNr].url == NULL)
							err(1, "calloc(urls)");

						for (k = 0; k < Sider[*pageNr].n_urls; k++) {

							bsread(&sockfd[i], sizeof(len), (char *)&len, maxSocketWait_SiderHeder);
							Sider[*pageNr].urls[k].url = malloc(len+1);
							bsread(&sockfd[i], len, Sider[*pageNr].urls[k].url, maxSocketWait_SiderHeder);
							Sider[*pageNr].urls[k].url[len] = '\0';

							bsread(&sockfd[i], sizeof(len), (char *)&len, maxSocketWait_SiderHeder);
							Sider[*pageNr].urls[k].uri = malloc(len+1);
							bsread(&sockfd[i], len, Sider[*pageNr].urls[k].uri, maxSocketWait_SiderHeder);
							Sider[*pageNr].urls[k].uri[len] = '\0';

							bsread(&sockfd[i], sizeof(len), (char *)&len, maxSocketWait_SiderHeder);
							Sider[*pageNr].urls[k].fulluri = malloc(len+1);
							bsread(&sockfd[i], len, Sider[*pageNr].urls[k].fulluri, maxSocketWait_SiderHeder);
							Sider[*pageNr].urls[k].fulluri[len] = '\0';

							#ifdef DEBUG
								printf("n_urls=%i\n", Sider[*pageNr].n_urls);
								printf("url=\"%s\", uri=\"%s\", fulluri=\"%s\"\n", Sider[*pageNr].urls[k].url, Sider[*pageNr].urls[k].uri, Sider[*pageNr].urls[k].fulluri);
							#endif

						}

						bsread(&sockfd[i], sizeof(len), (char *)&len, maxSocketWait_SiderHeder);
						Sider[*pageNr].attributelen = len;

						Sider[*pageNr].attributes = malloc(len+1);
						bsread(&sockfd[i], len, Sider[*pageNr].attributes, maxSocketWait_SiderHeder);
						Sider[*pageNr].attributes[len] = '\0';

						

						(*pageNr) += 1;
					}
				}

				#ifdef DEBUG
					printf("brGetPages: did read %i element\n",n);
				#endif
			}
	}


	#ifdef DEBUG_TIME
		gettimeofday(&end_time, NULL);
		dprintf("Time debug: brGetPages.reading pages %f\n",getTimeDifference(&start_time,&end_time));
	#endif
}
示例#9
0
void connectHandler(int socket) {
        struct packedHedderFormat packedHedder;
	int isAuthenticated = 0;
	char tkeyForTest[32];
	int i,n;
	int intrespons;
	int count = 0;
	container *attrkeys = NULL;

        #ifdef DEBUG_TIME
      		struct timeval start_time, end_time;
                struct timeval tot_start_time, tot_end_time;
                gettimeofday(&tot_start_time, NULL);
        #endif

	ionice_benice();

while ((i=recv(socket, &packedHedder, sizeof(struct packedHedderFormat),MSG_WAITALL)) > 0) {

	#ifdef DEBUG
	printf("size is: %i\nversion: %i\ncommand: %i\n",packedHedder.size,packedHedder.version,packedHedder.command);
	#endif
	packedHedder.size = packedHedder.size - sizeof(packedHedder);

	if (attrkeys == NULL) {
		attrkeys = ropen();
	}

	if (packedHedder.command == bbc_askToAuthenticate) {
		if ((i=recv(socket, tkeyForTest, sizeof(tkeyForTest),MSG_WAITALL)) == -1) {
        	    perror("Cant read tkeyForTest");
        	    exit(1);
        	}		
		if (1) {
			printf("authenticated\n");
			intrespons = bbc_authenticate_ok;

			bbdocument_init(NULL);

			isAuthenticated = 1;
		}
		else {
			printf("authenticate faild\n");
			intrespons = bbc_authenticate_feiled;

               	}

		if ((n=sendall(socket, &intrespons, sizeof(intrespons))) == -1) {
                               perror("Cant recv filerest");
                               exit(1);
               	}
			
		
	}
	else {
		if (!isAuthenticated) {
			printf("user not autentikated\n");
			exit(1);
		}


		if (packedHedder.command == bbc_docadd) {
			#ifdef DEBUG
			printf("bbc_docadd\n");
			#endif

			char *subname,*documenturi,*documenttype,*document,*acl_allow,*acl_denied,*title,*doctype;
			char *attributes;
			int dokument_size;
			unsigned int lastmodified;

			#ifdef DEBUG_TIME
                		gettimeofday(&start_time, NULL);
        		#endif

			//subname
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			subname = malloc(intrespons +1);
			if ((i=recvall(socket, subname, intrespons)) == 0) {
                                perror("Cant read subname");
                                exit(1);
                        }

			//documenturi
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			documenturi = malloc(intrespons +1);
			if ((i=recvall(socket, documenturi, intrespons)) == 0) {
                                perror("Cant read documenturi");
                                exit(1);
                        }

			//documenttype
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			documenttype = malloc(intrespons +1);
			if ((i=recvall(socket, documenttype, intrespons)) == 0) {
                                perror("Cant read documenttype");
                                exit(1);
                        }

			//document
			//dokument_size
			if ((i=recvall(socket, &dokument_size, sizeof(dokument_size))) == 0) {
                    		perror("Cant read dokument_size");
                    		exit(1);
                	}

			document = malloc(dokument_size +1);

			if (dokument_size == 0) {
				document[0] = '\0';
			}
			else {
				if ((i=recvall(socket, document, dokument_size)) == 0) {
                        	        fprintf(stderr,"Can't read document of size %i\n",dokument_size);
					perror("recvall");
                        	        exit(1);
                        	}
			}
			//lastmodified
			if ((i=recvall(socket, &lastmodified, sizeof(lastmodified))) == 0) {
                    		perror("Cant read lastmodified");
                    		exit(1);
                	}

			//acl_allow
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			acl_allow = malloc(intrespons +1);
			if ((i=recvall(socket, acl_allow, intrespons)) == 0) {
                                perror("Cant read acl_allow");
                                exit(1);
                        }

			//acl_denied
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			acl_denied = malloc(intrespons +1);
			if ((i=recvall(socket, acl_denied, intrespons)) == 0) {
                                perror("Cant read acl_denied");
                                exit(1);
                        }

			//title
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			title = malloc(intrespons +1);
			if ((i=recvall(socket, title, intrespons)) == 0) {
                                perror("Cant read title");
                                exit(1);
                        }

			//doctype
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			doctype = malloc(intrespons +1);
			if ((i=recvall(socket, doctype, intrespons)) == 0) {
                                perror("Cant read doctype");
                                exit(1);
                        }

			// Attribute list
			if ((i = recvall(socket, &intrespons, sizeof(intrespons))) == 0)
				err(1, "Can't receive attribute list len");
			attributes = malloc(intrespons +1);
			if ((i=recvall(socket, attributes, intrespons)) == 0)
				err(1, "Can't receive attribute list");

			#ifdef DEBUG_TIME
                		gettimeofday(&end_time, NULL);
                		printf("Time debug: bbdn_docadd recv data time: %f\n",getTimeDifference(&start_time, &end_time));
        		#endif

			printf("\n");
			printf("########################################################\n");
			printf("Url: %s\n",documenturi);
			printf("got subname \"%s\": title \"%s\". Nr %i, dokument_size %i attrib: %s\n",subname,title,count,dokument_size, attributes);
			printf("########################################################\n");
			printf("calling bbdocument_add():\n");
        		#ifdef DEBUG_TIME
        		        gettimeofday(&start_time, NULL);
		        #endif

			intrespons = bbdocument_add(subname,documenturi,documenttype,document,dokument_size,lastmodified,acl_allow,acl_denied,title,doctype, attributes, attrkeys);

			printf(":bbdocument_add end\n");
			printf("########################################################\n");

			#ifdef DEBUG_TIME
                		gettimeofday(&end_time, NULL);
                		printf("Time debug: bbdn_docadd runing bbdocument_add() time: %f\n",getTimeDifference(&start_time, &end_time));
        		#endif
			free(subname);
			free(documenturi);
			free(documenttype);
			free(document);
			free(acl_allow);
			free(acl_denied);
			free(title);
			free(doctype);
			free(attributes);

			// send status
	                if ((n=sendall(socket, &intrespons, sizeof(intrespons))) == -1) {
                               perror("Cant recv filerest");
                               exit(1);
	                }

		}
		else if (packedHedder.command == bbc_opencollection) {
			char *subname;
			char path[PATH_MAX];

			printf("open collection\n");

                        if ((i=recv(socket, &intrespons, sizeof(intrespons),MSG_WAITALL)) == -1)
                                err(1, "Cant read intrespons");
                        subname = malloc(intrespons +1);
                        if ((i=recv(socket, subname, intrespons,MSG_WAITALL)) == -1)
                                err(1, "Cant read subname");

			GetFilPathForLot(path, 1, subname);
			strcat(path, "fullyCrawled");

			unlink(path);

			free(subname);
		}
		else if (packedHedder.command == bbc_closecollection) {
			printf("closecollection\n");
			char *subname;
			//subname
                        if ((i=recv(socket, &intrespons, sizeof(intrespons),MSG_WAITALL)) == -1) {
                                perror("Cant read intrespons");
                                exit(1);
                        }
                        subname = malloc(intrespons +1);
                        if ((i=recv(socket, subname, intrespons,MSG_WAITALL)) == -1) {
                                perror("Cant read subname");
                                exit(1);
                        }

			bbdocument_close(attrkeys);
			attrkeys = NULL;

			//toDo må bruke subname, og C ikke perl her
			printf("cleanin lots start\n");
			char command[PATH_MAX];
			snprintf(command,sizeof(command),"perl %s -l -s \"%s\"",bfile("perl/cleanLots.pl"),subname);

			printf("running \"%s\"\n",command);
			intrespons = system(command);
			printf("cleanin lots end\n");

			// legger subnamet til listen over ventene subnavn, og huper searchd.
			lot_recache_collection(subname);


			/* We are done crawling  */
			{
				int fd = lotOpenFileNoCasheByLotNrl(1, "fullyCrawled", ">>", '\0', subname);

				if (fd == -1) {
					warn("Unable to write fullyCrawled file");
				} else {
					close(fd);
				}
			}

			free(subname);

                        if ((n=sendall(socket, &intrespons, sizeof(intrespons))) == -1) {
                                       perror("Cant recv filerest");
                                       exit(1);
                        }
			
		}
		else if (packedHedder.command == bbc_deleteuri) {
			printf("deleteuri\n");
			char *subname, *uri;
			//subname
                        if ((i=recv(socket, &intrespons, sizeof(intrespons),MSG_WAITALL)) == -1) {
                                perror("Cant read intrespons");
                                exit(1);
                        }
                        subname = malloc(intrespons +1);
                        if ((i=recv(socket, subname, intrespons,MSG_WAITALL)) == -1) {
                                perror("Cant read subname");
                                exit(1);
                        }
			subname[intrespons] = '\0';
                        if ((i=recv(socket, &intrespons, sizeof(intrespons),MSG_WAITALL)) == -1) {
                                perror("Cant read intrespons");
                                exit(1);
                        }
                        uri = malloc(intrespons +1);
                        if ((i=recv(socket, uri, intrespons,MSG_WAITALL)) == -1) {
                                perror("Cant read uri");
                                exit(1);
                        }
			uri[intrespons] = '\0';

			printf("going to delete: %s from %s\n", uri, subname);

			/* Add docid to the gced file */
			{
				FILE *fh;
				unsigned int DocID, lastmodified;
				unsigned int lotNr;
				int err = 0;

				if (uriindex_get(uri, &DocID, &lastmodified, subname) == 0) {
					fprintf(stderr,"Unable to get uri info. uri=\"%s\",subname=\"%s\".",uri,subname);
					perror("Unable to get uri info");
					err++;
				}
				if (!err) {
					lotNr = rLotForDOCid(DocID);

					if ((fh = lotOpenFileNoCasheByLotNr(lotNr,"gced","a", 'e',subname)) == NULL) {
						perror("can't open gced file");
						err++;
					} else {
						fwrite(&DocID, sizeof(DocID), 1, fh);
						fclose(fh);
					}
				}
				if (!err) {
					struct reformat *re;

					if((re = reopen(rLotForDOCid(DocID), sizeof(struct DocumentIndexFormat), "DocumentIndex", subname, RE_HAVE_4_BYTES_VERSION_PREFIX)) == NULL) {
						perror("can't reopen()");
						err++;
					} else {
						DIS_delete(RE_DocumentIndex(re, DocID));
						reclose(re);
					}
				}
				//markerer at den er skitten
				if (!err) {
					FILE *dirtfh;
					dirtfh = lotOpenFileNoCashe(DocID,"dirty","ab",'e',subname);
					fwrite("1",1,1,dirtfh);
					fclose(dirtfh);
				}
				if (err == 0) 
					bbdocument_delete(uri, subname);
			}
			free(subname);

			intrespons = 1; // Always return ok for now
                        if ((n=sendall(socket, &intrespons, sizeof(intrespons))) == -1) {
                                       perror("Cant recv filerest");
                                       exit(1);
                        }

		}
		else if (packedHedder.command == bbc_deletecollection) {
			printf("deletecollection\n");
			char *subname, *uri;
			//subname
                        if ((i=recv(socket, &intrespons, sizeof(intrespons),MSG_WAITALL)) == -1) {
                                perror("Cant read intrespons");
                                exit(1);
                        }
                        subname = malloc(intrespons +1);
                        if ((i=recv(socket, subname, intrespons,MSG_WAITALL)) == -1) {
                                perror("Cant read subname");
                                exit(1);
                        }
			subname[intrespons] = '\0';


			printf("going to delete collection: %s\n", subname);

			intrespons = bbdocument_deletecoll(subname);

			if ((n=sendall(socket, &intrespons, sizeof(intrespons))) == -1) {
                	               perror("Cant recv filerest");
        	                       exit(1);
	               	}


			free(subname);
		}
		else if (packedHedder.command == bbc_addwhisper) {
			whisper_t add;
			char *subname;

			if ((i=recv(socket, &intrespons, sizeof(intrespons),MSG_WAITALL)) == -1) 
				err(1, "Cant read intrespons");
			subname = malloc(intrespons+1);
			if ((i=recv(socket, subname, intrespons,MSG_WAITALL)) == -1) {
				perror("Cant read subname");
				exit(1);
			}
			subname[intrespons] = '\0';
			if ((i=recv(socket, &add, sizeof(add),MSG_WAITALL)) == -1) 
				err(1, "Cant read add whisper");

			gcwhisper_write(subname, add);
			free(subname);

		}
		else if (packedHedder.command == bbc_HasSufficientSpace) {

			char *subname;
			//subname
			if ((i=recvall(socket, &intrespons, sizeof(intrespons))) == 0) {
                    		perror("Cant read intrespons");
                    		exit(1);
                	}
			subname = malloc(intrespons +1);
			if ((i=recvall(socket, subname, intrespons)) == 0) {
                                perror("Cant read subname");
                                exit(1);
                        }

			// tester bare i lot 1 her. Må også sjekke andre loter når vi begynner å støtte frlere disker på ES.
			intrespons = lotHasSufficientSpace(1, 4096, subname);

			if ((n=sendall(socket, &intrespons, sizeof(intrespons))) == -1) {
                	               perror("Cant recv filerest");
        	                       exit(1);
	               	}

			printf("~Asked for HasSufficientSpace for subname \"%s\". Returnerer %d\n",subname, intrespons);

			free(subname);
		}
		else {
			printf("unnown comand. %i\n", packedHedder.command);
		}
	}

	++count;

//	#ifdef DEBUG_BREAK_AFTER
//	if (count >= DEBUG_BREAK_AFTER) {
//		printf("exeting after %i docoments\n",count);
//		exit(1);
//	}
//	#endif


}

        #ifdef DEBUG_TIME
                gettimeofday(&tot_end_time, NULL);
                printf("Time debug: bbdn total time time: %f\n",getTimeDifference(&tot_start_time, &tot_end_time));
        #endif

}
示例#10
0
/* 
	This is the routine that is executed from a new thread 
*/
void *do_chld(void *arg)
{


	// starter loging
	bblog(DEBUGINFO, "searchd_child: Starting new thread.");
	bblog(DEBUGINFO, "searchd: do_chld()");

	// deklarerer variabler
	struct searchd_configFORMAT *searchd_config = arg;
	int   mysocfd = (*searchd_config).newsockfd;
	struct timeval globalstart_time, globalend_time;
	FILE *LOGFILE;
	int 	i,n;
	struct queryNodeHederFormat queryNodeHeder;
	struct SiderFormat *Sider;
	int net_status;
	int ranking;
	struct hashtable *crc32hashmap;
	int nrOfSubnames;
	config_setting_t *cfgstring;
	config_setting_t *cfgcollection;
	config_setting_t *cfgcollections;
	struct subnamesConfigFormat subnamesDefaultsConfig;
	char **Data;
        int Count;
        char groupOrQuery[1024];
        groupOrQuery[0] = '\0';


	struct SiderHederFormat *SiderHeder;


	// Setter signalhånterer for allarm. Hvis allarm skjer i straten av programet, er noe seriøst galt. For eks er vi tom for minne.
	//Da fungerer det dårlig å logge, syslog kan kalle malloc og slikt. Vil resette den til en versjon som logger før vi kjører søk.	
       	signal (SIGALRM, catch_alarm_nolog);

	/* Set an alarm to go off in a little while. This so we don't run forever if we get en ever loop */
       	alarm (searchd_config->optAlarm);


	dp_priority_locl_start();


	// første malloc. Har vi forlite minne vil vi henge her.
	if ((SiderHeder  = malloc(sizeof(struct SiderHederFormat))) == NULL) {
		bblog(ERROR, "malloc()");
		bblog(CLEAN, "~do_chld()");
		return 0;
	}


	gettimeofday(&globalstart_time, NULL);

	
	#ifdef WITH_THREAD
		bblog(DEBUGINFO, "Child thread [%d]: Socket number = %d", pthread_self(), mysocfd);
	#else
		bblog(DEBUGINFO, "Socket number = %d",mysocfd);
	#endif

	#ifdef DEBUG
        	struct timeval start_time, end_time;
	#endif

	// Setter signalhånterer for allarm. Hvis allarm skjer i straten av programet, er noe seriøst galt. For eks er vi tom for minne.
	//Da fungerer det dårlig å logge, syslog kan kalle malloc og slikt. Nå resetter vi den den til en versjon som logger søk.	
       	signal (SIGALRM, catch_alarm);

	/* Disable tcp delay */
	int nodelayflag = 1;
	setsockopt(mysocfd, IPPROTO_TCP, TCP_NODELAY, &nodelayflag, sizeof(int));


	/* read from the given socket */

	if ((i=recv(mysocfd, &queryNodeHeder, sizeof(queryNodeHeder),MSG_WAITALL)) == -1) {
		bblog_errno(ERROR, "recv()");
	}

	// Read collections /w cfg.
	if ((recv(mysocfd, &nrOfSubnames, sizeof nrOfSubnames, MSG_WAITALL)) == -1)
		bblog_errno(ERROR, "recv nrOfSubnames");

	bblog(DEBUGINFO, "nrOfSubnames: %d",nrOfSubnames);
	struct subnamesFormat subnames[nrOfSubnames];
	if (nrOfSubnames > 0) {
		if ((recv(mysocfd, &subnames, sizeof subnames, MSG_WAITALL)) == -1)
			bblog_errno(ERROR, "recv subnames");
	}


	//sender svar med en gang at vi kan gjøre dette
	net_status = net_CanDo;
	//if ((n=sendall(mysocfd,&net_status, sizeof(net_status))) != sizeof(net_status)) {
	if ((n=send(mysocfd,&net_status, sizeof(net_status),MSG_NOSIGNAL)) != sizeof(net_status)) {
		bblog_errno(ERROR, "searchd_child: Warning! Sent only %i of %i bytes at %s:%d",n,sizeof(net_status),__FILE__,__LINE__);
	}


	bblog(DEBUGINFO, "MaxsHits %i",queryNodeHeder.MaxsHits);
	//Sider  = (struct SiderFormat *)malloc(sizeof(struct SiderFormat) * (queryNodeHeder.MaxsHits));
	bblog(DEBUGINFO, "Ranking search?");


	#ifndef BLACK_BOKS
	//ToDo: må ha låsing her
        if ((LOGFILE = bfopen("config/query.log","a")) == NULL) {
                bblog_errno(ERROR, "logfile");
        }
        else {
                fprintf(LOGFILE,"%s\n",queryNodeHeder.query);
                fclose(LOGFILE);
        }
	#endif

	bblog(DEBUGINFO, "searchd_child: Incoming query: %s",queryNodeHeder.query);

	strcpy(SiderHeder->servername,servername);

#ifndef WITHOUT_THESAURUS
	// TODO: Denne må skalere til flere språk:
	char	*lang = NULL;
	switch (queryNodeHeder.lang)
	    {
		case LANG_NBO: lang = "nbo"; break;
		case LANG_ENG: lang = "eng"; break;
	    }

	bblog(INFO, "[searchd] lang_id = %i", queryNodeHeder.lang);
	bblog(INFO, "[searchd] lang = %s", lang);

	searchd_config->thesaurusp = NULL;
	if (lang != NULL && searchd_config->thesaurus_all != NULL)
	    {
		iterator	it = map_find(searchd_config->thesaurus_all, lang);
		if (it.valid)
		    {
			bblog(INFO, "[searchd] Loading %s thesaurus", lang);
			searchd_config->thesaurusp = map_val(it).ptr;
		    }
		else
		    {
			bblog(INFO, "[searchd] No thesaurus for %s", lang);
		    }
	    }
#endif

/***************************************/
	 	/****************/

	//dekoder subname

	bblog(DEBUGINFO, "nrOfSubnames %i",nrOfSubnames);
  	
/*
	nrOfSubnames = 1;

	subnames = malloc(sizeof(struct subnamesFormat) * nrOfSubnames);

	strscpy(subnames[0].subname,"www",sizeof(subnames[0].subname));
*/

	#ifdef DEBUG
	bblog(DEBUGINFO, "searchd_child: ");
	bblog(DEBUGINFO, "##########################################################");
	bblog(DEBUGINFO, "searchd_child: subnames:");
	bblog(DEBUGINFO, "Total of %i", nrOfSubnames);
	for (i=0;i<nrOfSubnames;i++) {
		bblog(DEBUGINFO, "searchd_child: subname nr %i: \"%s\"",i,subnames[i].subname);
	}
	bblog(DEBUGINFO, "searchd_child: ##########################################################");
	#endif

	SiderHeder->filtypesnrof = MAXFILTYPES;

	SiderHeder->errorstrlen=sizeof(SiderHeder->errorstr);



	int parsing_failed;
	attr_conf *navmenu_cfg = parse_navmenu_cfg(queryNodeHeder.navmenucfg, &parsing_failed, globalOptVerbose);
	if (parsing_failed) {
		SiderHeder->responstype = searchd_responstype_error;
		snprintf(SiderHeder->errorstr, sizeof SiderHeder->errorstr, 
			"An error occurred while parsing configuration for navigation menu.");
		SiderHeder->errorstrlen = strlen(SiderHeder->errorstr); // TODO: is errorstrlen even used?
	}


	if (!dosearch(queryNodeHeder.query, strlen(queryNodeHeder.query),&Sider,SiderHeder,SiderHeder->hiliteQuery,
		servername,subnames,nrOfSubnames,queryNodeHeder.MaxsHits,
		queryNodeHeder.start, queryNodeHeder.filterOn, 
		"",queryNodeHeder.orderby,SiderHeder->dates,queryNodeHeder.search_user,
		&SiderHeder->filters,
		searchd_config,
		SiderHeder->errorstr, &SiderHeder->errorstrlen,
		&global_DomainIDs, queryNodeHeder.HTTP_USER_AGENT,
		groupOrQuery, queryNodeHeder.anonymous, navmenu_cfg,
		spelling
		)) 
	{
		bblog(WARN, "searchd_child: dosearch did not return success");
		SiderHeder->responstype 	= searchd_responstype_error;
		//setter at vi ikke hadde noen svar
		SiderHeder->TotaltTreff 	= 0;
		SiderHeder->showabal		= 0;

		bblog(ERROR, "searchd_child: can't do dosearch: \"%s\"", SiderHeder->errorstr);
	}

	show_attributes_destroy(navmenu_cfg);

		

	dp_priority_locl_end();

	//kopierer inn subnames. Kan bare sende over MAX_COLLECTIONS, men søker i alle
	for (i=0;((i<MAX_COLLECTIONS) && (i<nrOfSubnames));i++) {
		SiderHeder->subnames[i] = subnames[i];
	}

	SiderHeder->nrOfSubnames = i--;

	if (globalOptVerbose) {
		bblog(INFO, "searchd_child: subnames:");
		for (i=0;i<SiderHeder->nrOfSubnames;i++) {
			bblog(INFO, "searchd_child: \t%s: %i",SiderHeder->subnames[i].subname,SiderHeder->subnames[i].hits);
		}
	
		bblog(INFO, "searchd_child:");
	}
	//finer først tiden vi brukte
        gettimeofday(&globalend_time, NULL);
        SiderHeder->total_usecs = getTimeDifference(&globalstart_time,&globalend_time);

	
	//printf("query \"%s\", TotaltTreff %i,showabal %i,filtered %i,total_usecs %f\n",queryNodeHeder.query,SiderHeder->TotaltTreff,SiderHeder->showabal,SiderHeder->filtered,SiderHeder->total_usecs);

	bblog(CLEAN, "|%-40s | %-11i | %-11i | %-11i | %-11f|",
		queryNodeHeder.query,
		SiderHeder->TotaltTreff,
		SiderHeder->showabal,
		SiderHeder->filtered,
		SiderHeder->total_usecs);

	#ifdef DEBUG
	gettimeofday(&start_time, NULL);
	#endif


	#if 1


	#ifdef DEBUG
	gettimeofday(&end_time, NULL);
	bblog(DEBUGINFO, "searchd_child: Time debug: sending SiderHeder %f",getTimeDifference(&start_time,&end_time));
	#endif
	

	#ifdef DEBUG
	gettimeofday(&start_time, NULL);
	#endif

	struct sendarrayFormat{
		int size;
		void *p;
		int copy;
	};

	void send_to_array (struct sendarrayFormat *sendarray, int *sendarraylength, void *p, int size, int copy) {

		#ifdef DEBUG
		printf("send_to_array(sendarraylength=%i,size=%i)\n",*sendarraylength,size);
		#endif

		if (size == 0) {
			return;
		}

		sendarray[*sendarraylength].copy = copy;
	
		if (copy) {
			sendarray[*sendarraylength].p = malloc(size);
			memcpy(sendarray[*sendarraylength].p,p,size); 
			sendarray[*sendarraylength].size = size;
		}
		else {
			sendarray[*sendarraylength].p = p;
			sendarray[*sendarraylength].size = size; 

		}
		*sendarraylength += 1;
	}
示例#11
0
void *issueAdd(void *arg) {

	int     mysocfd = (int) arg;

	struct betaler_keywords_visninger_format {
		int kid;
		int betaler_side_id;
	};

	struct betaler_keywords_visninger_format betaler_keywords_visninger[10];
	char buff[1024];
	struct timeval globalstart_time, globalend_time;
	unsigned int addid;
        char *strpointer;
	int siderType_ppctopNr,siderType_ppcsideNr;
	
	struct queryNodeHederFormat queryNodeHeder;
	char queryEscaped[MaxQueryLen*2+1];
	char ppcprovider[32];

	int i,n, y, net_status, showabal;;

	//sjekker vårt egent anonsesystem

	char mysql_query [2048];

	static MYSQL demo_db;


        MYSQL_RES *mysqlres; /* To be used to fetch information into */
        MYSQL_ROW mysqlrow;


	struct SiderHederFormat SiderHeder;
	struct ppcPagesFormat ppcPages[10];

	struct SiderFormat *Sider;

	gettimeofday(&globalstart_time, NULL);

	
        if ((i=recv(mysocfd, &queryNodeHeder, sizeof(queryNodeHeder),MSG_WAITALL)) == -1) {
                perror("recv");
        }

	printf("Query %s\n",queryNodeHeder.query);

	Sider  = (struct SiderFormat *)malloc(sizeof(struct SiderFormat) * (queryNodeHeder.MaxsHits));

        //setter alle sidene som sletett
        for (i=0;i<queryNodeHeder.MaxsHits;i++) {
                Sider[i].deletet = 1;
        }

        //sender svar med en gang at vi kan gjøre dette
        net_status = net_CanDo;
        if ((n=sendall(mysocfd,&net_status, sizeof(net_status))) != sizeof(net_status)) {
                printf("send only %i of %i\n",n,sizeof(net_status));
                perror("sendall net_status");
        }



        /********************************************************************************************/
        #ifdef DEBUG
                printf("sending query to ppc db\n");
        #endif


        mysql_init(&demo_db);

	#ifdef WITH_THREAD
		my_thread_init(); // kalt mysql_thread_init() i mysql 5.0
	#endif




        //if(!mysql_real_connect(&demo_db, "www2.boitho.com", "boitho_remote", "G7J7v5L5Y7", "boitho", 3306, NULL, 0)){
        if(!mysql_real_connect(&demo_db, "localhost", "boitho", "G7J7v5L5Y7", "boithoweb", 3306, NULL, 0)){
                printf(mysql_error(&demo_db));
                //return(1);
		pthread_exit((void *)1); /* exit with status */
        }

        //escaper queryet rikit
        mysql_real_escape_string(&demo_db,queryEscaped,queryNodeHeder.query,strlen(queryNodeHeder.query));

        sprintf(mysql_query, "select tittel,url,beskrivelse,betaler_sider.bruker_navn,betaler_keywords.betaler,betaler_keywords.kid,betaler_sider.id from betaler_keywords,betaler_sider where betaler_keywords.keyword ='%s' and betaler_keywords.betaler_side_id=betaler_sider.id order by betaler desc",queryEscaped);


        if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */
             	printf(mysql_error(&demo_db));
             	//return(1);
		pthread_exit((void *)1); /* exit with status */
        }
        #ifdef DEBUG
                printf("sending query to ppc db end\n");
        #endif

        /********************************************************************************************/


	SiderHeder.TotaltTreff = 0;
	int nrOfppcPages = 0;
	int nrOfBoithoAds = 0;
        //printer ut eventuelt ppc ord
        mysqlres=mysql_store_result(&demo_db); /* Download result from server */
        while ((mysqlrow=mysql_fetch_row(mysqlres)) != NULL) { /* Get a row from the results */
                        //printf("\t<beskrivelse>%s</beskrivelse>\n",mysqlrow[2]);
			//Sider[showabal].type = siderType_ppctop;

			strncpy(ppcPages[nrOfppcPages].title,mysqlrow[0],sizeof(ppcPages[nrOfppcPages].title));
			strncpy(ppcPages[nrOfppcPages].url,mysqlrow[1],sizeof(ppcPages[nrOfppcPages].url));
			strncpy(ppcPages[nrOfppcPages].uri,mysqlrow[1],sizeof(ppcPages[nrOfppcPages].uri));
			strncpy(ppcPages[nrOfppcPages].description,mysqlrow[2],sizeof(ppcPages[nrOfppcPages].description));
			strncpy(ppcPages[nrOfppcPages].user,mysqlrow[3],sizeof(ppcPages[nrOfppcPages].user));

			ppcPages[nrOfppcPages].thumbnail[0] = '\0';

			ppcPages[nrOfppcPages].bid = atof(mysqlrow[4]);
			ppcPages[nrOfppcPages].keyword_id = atoi(mysqlrow[5]);
			ppcPages[nrOfppcPages].DocID = strtoul(mysqlrow[6], (char **)NULL, 10);

			ppcPages[nrOfppcPages].allrank = 10000;

			#ifdef DEBUG
			printf("aa bid %f\n",ppcPages[nrOfppcPages].bid);
			printf("\tUrl: %s\n",ppcPages[nrOfppcPages].url);
	                printf("\tTitle: %s\n",ppcPages[nrOfppcPages].title);
			printf("keyword_id -%s-\n",mysqlrow[5]);
			#endif

			betaler_keywords_visninger[nrOfBoithoAds].kid = ppcPages[nrOfppcPages].keyword_id;
			betaler_keywords_visninger[nrOfBoithoAds].betaler_side_id = ppcPages[nrOfppcPages].DocID;
		++nrOfppcPages;
		++nrOfBoithoAds;
        }
	mysql_free_result(mysqlres);


	/*********************************/

	printf("contry: %s\n",queryNodeHeder.GeoIPcontry);

	if (strcmp(queryNodeHeder.GeoIPcontry,"NO") == 0) {
		strcpy(ppcprovider,"hent");
		//strcpy(ppcprovider,"revenuepilot");

	}
	else {
		//alle språk
		//strcpy(ppcprovider,"revenuepilot");
		//strcpy(ppcprovider,"searchboss");
	}
	strcpy(ppcprovider,"amazon");

	//temp: skrur av 3p xml feeds
	//getPpcAds(ppcprovider,ppcPages,&nrOfppcPages,&queryNodeHeder);

	//temp: Viser en mindre side da vi får problemer med siste?
	//nrOfppcPages--;

	showabal = 0;        
        for (i=0;i<nrOfppcPages;i++) {


		
		/*********************************************/
		//Sider[showabal].type = siderType_ppcside;
		#ifdef DEBUG
		printf("issue add. keyword_id %i\n",ppcPages[i].keyword_id);
		#endif
        	sprintf(mysql_query, "insert into issuedadds values(%s,'%s','%f','%s',%s,'%s','%s','%s','%s','%s','%s','%s','%i','%i')",
			"NULL",
			queryEscaped,
			ppcPages[i].bid,
			ppcPages[i].uri,
			"NOW()",
			0,
			ppcPages[i].user,
			queryNodeHeder.search_user,
			queryNodeHeder.userip,
			queryNodeHeder.HTTP_ACCEPT_LANGUAGE,
			queryNodeHeder.HTTP_USER_AGENT,
			queryNodeHeder.HTTP_REFERER,
			ppcPages[i].keyword_id,
			ppcPages[i].DocID
			);
        
		
		#ifdef DEBUG
		printf("ppc user %s\naffuser %s\n",Sider[i].user,queryNodeHeder.search_user);
		#endif
        	if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */
        	     	printf("Cant insert into issuedadds: %s\nSql query vas %s\n",mysql_error(&demo_db),mysql_query);
        	     	//return(1);
			pthread_exit((void *)1); /* exit with status */
	        }

		addid = mysql_insert_id(&demo_db);

		#ifdef DEBUG
		printf("addid %u\n",addid);
		#endif
		//sprintf(ppcPages[showabal].uri,"http://search.boitho.com/cgi-bin/addout.cgi?addid=%u&addurl=%s",addid,ppcPages[showabal].url);
		sprintf(ppcPages[showabal].uri,"http://bbh-001.boitho.com/cgi-bin/addout.cgi?addid=%u&addurl=%s",addid,ppcPages[showabal].url);
		
		//strcpy(Sider[i].uri,buff);
		/*********************************************/

			if (strlen(ppcPages[i].title) == (sizeof(ppcPages[i].title) -1)) {
				//strcpy(Sider[showabal].title,"Title to long.");
				
				strncpy(Sider[showabal].title,ppcPages[i].title,sizeof(Sider[showabal].title) -3);
				strcat(Sider[showabal].title,"..");
			}
			else {
				strncpy(Sider[showabal].title,ppcPages[i].title,sizeof(Sider[showabal].title));
			}


			strncpy(Sider[showabal].description,ppcPages[i].description,sizeof(Sider[showabal].description));
                        
			strncpy(Sider[showabal].url,ppcPages[i].url,sizeof(Sider[showabal].url));
			strncpy(Sider[showabal].uri,ppcPages[i].uri,sizeof(Sider[showabal].uri));
			strncpy(Sider[showabal].user,ppcPages[i].user,sizeof(Sider[showabal].user));
                        
			strscpy(Sider[showabal].domain,ppcPages[i].domain,sizeof(Sider[showabal].domain));
			
			strscpy(Sider[showabal].thumbnale,ppcPages[i].thumbnail,sizeof(Sider[showabal].thumbnale));

			Sider[showabal].thumbnailwidth = atol(ppcPages[i].thumbnailwidth);
			Sider[showabal].thumbnailheight = atol(ppcPages[i].thumbnailheight);
			
			Sider[showabal].bid = ppcPages[i].bid;

			Sider[showabal].iindex.allrank = ppcPages[i].allrank;


			#ifdef DEBUG
                        printf("%s\t%s\t%f\n",Sider[showabal].url,Sider[showabal].title,ppcPages[i].bid);
              		#endif
			

		++showabal;

        }

	/*********************************/
	siderType_ppctopNr = 0;
	siderType_ppcsideNr = 0;

        for(i=0;i<showabal;i++) {

			#ifdef DEBUG
			printf("uri %s\n",Sider[i].uri);
			#endif

			Sider[i].DocumentIndex.crc32 = crc32boitho(Sider[i].description);
                        Sider[i].deletet = 0;





		//lager fin beskrivlse som slutter på .. isteden får bare et kappet ord, hvis beskrivlese er for lang                
                if (strlen(Sider[i].description) >= 250) {
                	//søker oss til siste space , eller ; og avslutter der
                        if ((strpointer = (char *)strrchr(Sider[i].description,' ')) != NULL) {
                        	strpointer[0] = '\0';
                        }
                        else if ((strpointer = (char *)strrchr(Sider[i].description,';')) != NULL) {
                        	++strpointer; //pekeren peker på semikolonet. SKal ha det med, så må legge il en
                                strpointer[0] = '\0';
                        }
                        strncat(Sider[i].description,"..",2);
            	}
               	
		//hiliter ordet
		sprintf(buff,"<b>%s</b>",queryNodeHeder.query);
		strcasesandr(Sider[i].description,sizeof(Sider[i].description),queryNodeHeder.query,buff);

		//bestemmer ppc type
		//Sider[showabal].type = siderType_ppcside
		//Sider[i].type = siderType_ppctop;
		if ((siderType_ppctopNr < 2) && (strcasestr(Sider[i].description,queryNodeHeder.query) != 0)) {
			Sider[i].type = siderType_ppctop;
			++siderType_ppctopNr;
		}
		else {
			Sider[i].type = siderType_ppcside;
			++siderType_ppcsideNr;
		}

	}	

	//legger datane in i mysql database.
        for(i=0;i<showabal;i++) {


	}


	gettimeofday(&globalend_time, NULL);
	SiderHeder.total_usecs = getTimeDifference(&globalstart_time,&globalend_time);

	SiderHeder.TotaltTreff = showabal;
	SiderHeder.showabal = showabal;
	SiderHeder.filtered = 0;
	SiderHeder.hiliteQuery[0] = '\0';
	sprintf(SiderHeder.servername,"adserver.boitho.com");

	//SiderHeder.queryTime = 0;

        if ((n=sendall(mysocfd,&SiderHeder, sizeof(SiderHeder))) != sizeof(SiderHeder)) {
                printf("send only %i of %i\n",n,sizeof(SiderHeder));
                perror("sendall SiderHeder");
        }

        for(i=0;i<SiderHeder.showabal;i++) {
        //for (i=0;i<queryNodeHeder.MaxsHits;i++) {
		#ifdef DEBUG
                       printf("sending %s, deletet %i\n",Sider[i].url,Sider[i].deletet);
                       printf("bb: -%s-\n",Sider[i].title);
                       printf("url: -%s-\n",Sider[i].url);
			
		#endif

                //if (!Sider[i].deletet) {
                        if ((n=sendall(mysocfd,&Sider[i], sizeof(struct SiderFormat))) != sizeof(struct SiderFormat)) {
                                printf("send only %i of %i\n",n,sizeof(struct SiderFormat));
                                perror("sendall");
                        }

                //}
        }

	//logger alle visningene vi har hatt på egen ppc ord
	for (i=0;i<nrOfBoithoAds;i++) {
		sprintf(mysql_query, "insert DELAYED into betaler_keywords_visninger values(NULL,'%i','%i',NOW())",betaler_keywords_visninger[i].kid,betaler_keywords_visninger[i].betaler_side_id);


	        if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */
	             	printf(mysql_error(&demo_db));
	             	//return(1);
			pthread_exit((void *)0); /* exit with status */
	        }
		
	}


        mysql_close(&demo_db);

        //close(mysocfd);


	free(Sider);

	close(mysocfd);

 	#ifdef WITH_THREAD
		my_thread_end(); // kalt mysql_thread_end() i mysql 5.0
            	pthread_exit((void *)0); /* exit with status */
        #endif

	printf("end\n");
       

	//return 0;
}