static inline const check_file_names(const char *str, const char *arr[]) { const char *p; p = find_file_name(str); for (; *arr != NULL; ++arr) { if (!strcmp(p, *arr)) return 0; } return -1; }
/** * open the file for saving option state. * * @param[in] opts the program options structure * @returns the open file pointer. It may be NULL. */ static FILE * open_sv_file(tOptions * opts) { FILE * fp; { int free_name = 0; char const * pzFName = find_file_name(opts, &free_name); if (pzFName == NULL) return NULL; fp = fopen(pzFName, "w" FOPEN_BINARY_FLAG); if (fp == NULL) { fprintf(stderr, zsave_warn, opts->pzProgName); fprintf(stderr, zNoCreat, errno, strerror(errno), pzFName); if (free_name) AGFREE((void*) pzFName ); return fp; } if (free_name) AGFREE((void*)pzFName); } fputs("# ", fp); { char const * e = strchr(opts->pzUsageTitle, NL); if (e++ != NULL) fwrite(opts->pzUsageTitle, 1, e - opts->pzUsageTitle, fp); } { time_t cur_time = time(NULL); char * time_str = ctime(&cur_time); fprintf(fp, zPresetFile, time_str); #ifdef HAVE_ALLOCATED_CTIME /* * The return values for ctime(), localtime(), and gmtime() * normally point to static data that is overwritten by each call. * The test to detect allocated ctime, so we leak the memory. */ AGFREE((void*)time_str); #endif } return fp; }
static void print_formatted_debug_msg(int level, char *file_spec, const char *func_name, int line_num, char *fmt, ...) { #ifdef UNIT_TEST /* nothing to do. */ #else uint8_t *msg = NULL; uint8_t *msg_offset; char *file_spec_sep = NULL; int remaining_msg_len = MAX_DEBUG_MSG_SIZE; int len; va_list ap; if (fmt == NULL) return; /* * Only want to print the file name where the debug print * statement originated, not the path to it. */ if (file_spec != NULL) file_spec = find_file_name(file_spec); msg = kmalloc(remaining_msg_len, GFP_KERNEL); if (msg == NULL) return; msg_offset = msg; if (file_spec != NULL) { if (func_name != NULL) file_spec_sep = "->"; else if (line_num != -1) file_spec_sep = ":"; } len = scnprintf(msg_offset, remaining_msg_len, "mhl: "); msg_offset += len; remaining_msg_len -= len; if (file_spec) { len = scnprintf(msg_offset, remaining_msg_len, "%s", file_spec); msg_offset += len; remaining_msg_len -= len; } if (file_spec_sep) { len = scnprintf(msg_offset, remaining_msg_len, "%s", file_spec_sep); msg_offset += len; remaining_msg_len -= len; } if (func_name) { len = scnprintf(msg_offset, remaining_msg_len, "%s", func_name); msg_offset += len; remaining_msg_len -= len; } if (line_num != -1) { if ((file_spec != NULL) || (func_name != NULL)) len = scnprintf(msg_offset, remaining_msg_len, ":%d ", line_num); else len = scnprintf(msg_offset, remaining_msg_len, "%d ", line_num); msg_offset += len; remaining_msg_len -= len; } va_start(ap, fmt); len = vscnprintf(msg_offset, remaining_msg_len, fmt, ap); va_end(ap); printk(msg); kfree(msg); #endif }
void print_formatted_debug_msg(int level, char *file_spec, const char *func_name, int line_num, char *fmt, ...) { uint8_t *msg = NULL; uint8_t *msg_offset; char *file_spec_sep = NULL; int remaining_msg_len = MAX_DEBUG_MSG_SIZE; int len; va_list ap; /* * Allow informational level debug messages to be turned off * by a switch on the starter kit board */ if (level > debug_msgs){ return; } if (fmt == NULL) return; /* * Only want to print the file name where the debug print * statement originated, not the path to it. */ if (file_spec != NULL) file_spec = find_file_name(file_spec); msg = kmalloc(remaining_msg_len, GFP_KERNEL); if(msg == NULL) return; msg_offset = msg; if (file_spec != NULL) { if (func_name != NULL) file_spec_sep = "->"; else if (line_num != -1) file_spec_sep = ":"; } len = scnprintf(msg_offset, remaining_msg_len, "mhl sii-8348: "); msg_offset += len; remaining_msg_len -= len; if (file_spec) { len = scnprintf(msg_offset, remaining_msg_len, "%s", file_spec); msg_offset += len; remaining_msg_len -= len; } if (file_spec_sep) { len = scnprintf(msg_offset, remaining_msg_len, "%s", file_spec_sep); msg_offset += len; remaining_msg_len -= len; } if (func_name) { len = scnprintf(msg_offset, remaining_msg_len, "%s", func_name); msg_offset += len; remaining_msg_len -= len; } if (line_num != -1) { if ((file_spec != NULL) || (func_name != NULL)) len = scnprintf(msg_offset, remaining_msg_len, ":%d ", line_num); else len = scnprintf(msg_offset, remaining_msg_len, "%d ", line_num); msg_offset += len; remaining_msg_len -= len; } va_start(ap, fmt); len = vscnprintf(msg_offset, remaining_msg_len, fmt, ap); va_end(ap); printk(msg); kfree(msg); }
/* int main() { return 0; } */ int communicate(struct donnees* donnees) { printf("communicate\n"); struct client* client=donnees->client; ulong ip = client->sockaddr->sin_addr.s_addr; struct peer* peer = find_peer(donnees->peer_list, ip); struct file_list* file_list = donnees->file_list; struct peer_list* peer_list = donnees->peer_list; int refresh_time=get_refresh_time(); printf("refresh time:%d\n",refresh_time); char* recv_buffer= malloc(sizeof(char)*RECV_BUF_SIZE); char* send_buffer= malloc(sizeof(char)*SEND_BUF_SIZE); char* s1 = malloc(RECV_BUF_SIZE*sizeof(char)); char* s2 = malloc(RECV_BUF_SIZE*sizeof(char)); char* s3 = malloc(RECV_BUF_SIZE*sizeof(char)); char* s4 = malloc(RECV_BUF_SIZE*sizeof(char)); char* s5 = malloc(RECV_BUF_SIZE*sizeof(char)); char* s6 = malloc(RECV_BUF_SIZE*sizeof(char)); char* s0 = malloc(RECV_BUF_SIZE*sizeof(char)); char* saux = malloc(RECV_BUF_SIZE*sizeof(char)); char** tab = malloc(7*sizeof(char *)); tab[0]=s0; tab[1]=s1; tab[2]=s2; tab[3]=s3; tab[4]=s4; tab[5]=s5; tab[6]=s6; int port; int read; int decalage; int length; int piece_size; struct timeval *t = malloc(sizeof(struct timeval)); struct timeval *t2 = malloc(sizeof(struct timeval)); struct timezone *tz = malloc(sizeof(struct timezone)); struct timezone *tz2 = malloc(sizeof(struct timezone)); gettimeofday(t,tz); while(1) { recv_buffer[0]='\0'; send_buffer[0]='\0'; gettimeofday(t2,tz2); if(( (int)(t2->tv_sec - t->tv_sec))>3*refresh_time) { if(peer!=NULL) { peer->time--; if(!peer->time) { peer_list_peer_delete(peer_list,file_list,peer->ip_address); } } //free free(s0); free(s1); free(s2); free(s3); free(s4); free(s5); free(s6); free(saux); free(recv_buffer); free(send_buffer); free(tab); free(t); free(t2); free(tz); free(tz2); end(client,donnees->ct); return 0; } read=read_client(client->sock, recv_buffer); if(read > 0) { gettimeofday(t,tz); if(peer!=NULL) peer->time ++; //print_data(file_list, peer_list); printf("received:\n"); switch(recv_buffer[0]) { pthread_mutex_lock(& mutex); case'a': decalage=0; while(compte_crochet_fermant(recv_buffer)<2) { decalage+=read; read=read_client(client->sock, recv_buffer + decalage); } recv_buffer[decalage+read]='\0'; printf("%s\n", recv_buffer); parse(recv_buffer, tab); port = atoi(s2); if(strcmp(s0,"announce")==0 && strcmp(s1,"listen")==0 && strcmp(s3,"seed")==0 && strcmp(s5,"leech")==0) { if(peer == NULL) { peer = peer_init(ip, port); peer_list_add(peer_list, peer); peer->time=1; } int i=0; while(strlen(s4+i) > 0) { if(compte_espace(s4+i)>3) { sscanf(s4+i, "%s %d %d %s", s1, &length, &piece_size, s2); sprintf(saux, "%s %d %d %s", s1, length, piece_size, s2); struct file* file = find_file(file_list, s1); if(NULL == file) { file = remplit_file(s1, length, piece_size, s2); file_list_add(file_list, file); } add_link(file, peer); i+=strlen(saux)+1; } else { sscanf(s4+i, "%s %d %d %s", s1, &length, &piece_size, s2); struct file* file = find_file(file_list, s1); if(NULL == file) { file = remplit_file(s1, length, piece_size, s2); file_list_add(file_list, file); } add_link(file, peer); s4[i]='\0'; } } struct file_list* f_add = keys_string_to_file_list(s6); update_add(file_list, peer, f_add); file_list_delete(f_add); write_client(client->sock, "ok"); printf("replied:ok\n"); } break; case'u': decalage=0; while(compte_crochet_fermant(recv_buffer)<2) { decalage+=read; read=read_client(client->sock, recv_buffer + decalage); } recv_buffer[decalage+read]='\0'; printf("%s\n", recv_buffer); parse(recv_buffer, tab); if(strcmp(s0,"update")==0 && strcmp(s1,"seed")==0 && strcmp(s3,"leech")==0) { if(peer==NULL){ //free free(s0); free(s1); free(s2); free(s3); free(s4); free(s5); free(s6); free(saux); free(recv_buffer); free(send_buffer); free(tab); free(t); free(t2); free(tz); free(tz2); end(client, donnees->ct); return 0;}//ferme la socket else { char* res=fusion_keys_string(s2, s4); struct file_list* f = keys_string_to_file_list(res); update_diff(f, peer->file_list, file_list, peer); file_list_delete(f); free(res); write_client(client->sock, "ok"); printf("replied:ok\n"); } } break; case'l': decalage=0; while(compte_crochet_fermant(recv_buffer)<1) { decalage+=read; read=read_client(client->sock, recv_buffer + decalage); } recv_buffer[decalage+read]='\0'; printf("%s\n", recv_buffer); parse(recv_buffer, tab); if(strcmp(s0,"look")==0) { char* filename="filename"; int egal=1; int i; s2[0]='\n'; for(i=0;i<8;i++) { if(s1[i]!=filename[i]) egal --; } if(egal==1) { for(i=10;i<((int) strlen(s1))-1;i++) { s2[i-10]=s1[i]; } s2[strlen(s1)-11]='\0'; printf("recherche:\nfilename=%s\n",s2); struct file* file=find_file_name(file_list, s2); if(file==NULL) write_client(client->sock, "list []"); else { sprintf(send_buffer, "list [%s %d %d %s]", s2, file->length, file->p_size, file->key); write_client(client->sock, send_buffer); printf("replied:%s\n", send_buffer); } } } break; case'g': recv_buffer[read]='\0'; printf("%s\n", recv_buffer); parse(recv_buffer, tab); if(strcmp(s0,"getfile")==0) { struct file* f=find_file(file_list, s1); if(f==NULL||f->peer_list->first==NULL) { sprintf(send_buffer, "peers %s []", s1); write_client(client->sock, send_buffer); } else { struct elt_peer* aux=f->peer_list->first; struct in_addr* in_addr1=malloc(sizeof(struct in_addr)); in_addr1->s_addr=aux->peer->ip_address; char* d= inet_ntoa(*in_addr1); sprintf(send_buffer, "peers %s [%s:%d", s1, d, aux->peer->port); aux=aux->next; while(aux!=NULL) { struct in_addr* in_addr=malloc(sizeof(struct in_addr)); in_addr->s_addr=aux->peer->ip_address; char* c= inet_ntoa(*in_addr); sprintf(send_buffer+strlen(send_buffer), " %s:%d", c, aux->peer->port); aux=aux->next; } sprintf(send_buffer+strlen(send_buffer), "]"); write_client(client->sock, send_buffer); printf("replied:%s\n", send_buffer); } } break; default: printf("entree non valide"); //free free(s0); free(s1); free(s2); free(s3); free(s4); free(s5); free(s6); free(saux); free(recv_buffer); free(send_buffer); free(tab); free(t); free(t2); free(tz); free(tz2); end(client,donnees->ct); return 0; } pthread_mutex_unlock( &mutex); } } return EXIT_SUCCESS; }