int parse_LSAs_file(char *filename){ FILE *f; f = fopen(filename, "r"); if(!f){ return -1; } char buffer[MAX_BUFFER]; char sender[MAX_BUFFER]; int seq_num; char neighbors[MAX_BUFFER]; while(fgets(buffer, MAX_BUFFER, f)){ sscanf(buffer, "%s %d %s", sender, &seq_num, neighbors); // printf("%s, %d, %s\n", sender, seq_num, neighbors); struct node* node_p = add_node(sender, &nodes); if(exist_in_list(servers, node_p)<0){ if(strncmp(node_p->name, "router", strlen("router"))!=0 || strlen(node_p->name)<strlen("router")){ add_node_list(&clients, node_p); } } if(node_p->seq_num<seq_num){ node_p->seq_num = seq_num; free(node_p->neighbors); node_p->neighbors = NULL; char* neighbor = strtok(neighbors, ","); while(neighbor){ struct node* p_neighbor = add_node(neighbor, &nodes); add_node_list(&(node_p->neighbors), p_neighbor); neighbor = strtok(NULL, ","); } } } fclose(f); return 1; }
// return -1 if error encountered int parse_server_file(char* filename){ FILE *f; f = fopen(filename, "r"); if(!f){ return -1; } char buffer[MAX_BUFFER]; while(fgets(buffer, MAX_BUFFER, f)){ buffer[strlen(buffer)-1] = '\0'; struct node* p_node = add_node(buffer, &nodes); add_node_list(&servers, p_node); } fclose(f); return 1; }
void init_node_list(u_int n, node_address *names, node_list *nodes) { nodes->node_list_len = 0; nodes->node_list_val = 0; add_node_list(n, names, nodes); }