Changeset 18920 for trunk/FACT++/dim/src/dns.c
- Timestamp:
- 10/18/17 13:54:41 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/dim/src/dns.c
r18097 r18920 116 116 { 117 117 dim_print_date_time(); 118 printf(" 118 printf("Disconnect received - conn: %d to %s@%s\n", conn_id, 119 119 Net_conns[conn_id].task,Net_conns[conn_id].node ); 120 120 } … … 126 126 { 127 127 dim_print_date_time(); 128 printf(" 128 printf("Connection request received - conn: %d\n", conn_id); 129 129 } 130 130 /* handle_conn( conn_id ); */ … … 141 141 default: 142 142 dim_print_date_time(); 143 printf(" 143 printf("conn: %d to %s@%s, Bad packet\n", conn_id, 144 144 Net_conns[conn_id].task,Net_conns[conn_id].node ); 145 145 printf("packet->size = %d\n", vtohl(packet->size)); … … 155 155 default: 156 156 dim_print_date_time(); 157 printf( " 157 printf( "- DIM panic: recv_rout(): Bad switch, exiting...\n"); 158 158 abort(); 159 159 } … … 172 172 } 173 173 */ 174 } 175 176 void create_service_entry( int conn_id, DIS_DNS_PACKET *packet, int i, int state) 177 { 178 DNS_SERVICE *servp; 179 int name_too_long = 0; 180 char *ptrt; 181 void service_insert(); 182 183 if((int)strlen(Dns_conns[conn_id].task_name) == MAX_TASK_NAME-4-1) 184 name_too_long = 1; 185 servp = (DNS_SERVICE *)malloc(sizeof(DNS_SERVICE)); 186 if(name_too_long) 187 { 188 if(strstr(packet->services[i].service_name,"/CLIENT_LIST")) 189 { 190 strncpy(Dns_conns[conn_id].long_task_name, packet->services[i].service_name, 191 (size_t)MAX_NAME); 192 ptrt = strstr(Dns_conns[conn_id].long_task_name,"/CLIENT_LIST"); 193 *ptrt = '\0'; 194 } 195 } 196 strncpy( servp->serv_name, 197 packet->services[i].service_name, 198 (size_t)MAX_NAME ); 199 strncpy( servp->serv_def, 200 packet->services[i].service_def, 201 (size_t)MAX_NAME ); 202 servp->state = state; 203 servp->conn_id = conn_id; 204 servp->server_format = vtohl(packet->format); 205 servp->serv_id = vtohl(packet->services[i].service_id); 206 dll_insert_queue( (DLL *) 207 Dns_conns[conn_id].service_head, 208 (DLL *) servp ); 209 servp->node_head = (RED_NODE *) malloc(sizeof(NODE)); 210 dll_init( (DLL *) servp->node_head ); 211 servp->next = 0; 212 if(state == 1) 213 { 214 service_insert( &(servp->next) ); 215 Dns_conns[conn_id].n_services++; 216 } 217 } 218 219 int warn_server(int conn_id) 220 { 221 DNS_SERVICE *servp; 222 DNS_DIS_PACKET *dis_packet; 223 int n_dupl, dupl_conn_id; 224 char vname[MAX_NAME], dupl_server[MAX_NAME]; 225 int type, size, dupl_id, kill_anyway, ret; 226 char *ptr; 227 228 ret = 1; 229 type = DNS_DIS_KILL; 230 n_dupl = 0; 231 strcpy(vname, Dns_conns[conn_id].task_name); 232 strcat(vname, "/VERSION_NUMBER"); 233 dupl_id = 0; 234 kill_anyway = 0; 235 dupl_conn_id = Dns_conns[conn_id].already; 236 servp = (DNS_SERVICE *)Dns_conns[conn_id].service_head; 237 while( (servp = (DNS_SERVICE *) dll_get_next( 238 (DLL *) Dns_conns[conn_id].service_head, 239 (DLL *) servp)) ) 240 { 241 if(servp->state == -2) 242 { 243 if(!dupl_id) 244 { 245 dupl_id = servp->serv_id; 246 sprintf(dupl_server,"%s(%d)@%s:%d", 247 Dns_conns[dupl_conn_id].task_name, 248 Dns_conns[dupl_conn_id].pid, 249 Dns_conns[dupl_conn_id].node_name, 250 Dns_conns[dupl_conn_id].port); 251 } 252 if(!strcmp(servp->serv_name, vname)) 253 kill_anyway = 1; 254 n_dupl++; 255 } 256 } 257 /* allocate Header + space for <server_name>:<pid>@<node_name>:<port_number> + n duplicated + duplicated ids */ 258 dis_packet = (DNS_DIS_PACKET *)malloc(DNS_DIS_HEADER + MAX_NAME*2 + (n_dupl+1)*10); 259 sprintf(dis_packet->dup_info, "%s %d", dupl_server, n_dupl); 260 ptr = dis_packet->dup_info + strlen(dis_packet->dup_info); 261 if(kill_anyway) 262 { 263 type |= (0x01 << (int)16) & (int)0xFFFF0000; 264 dim_print_date_time(); 265 printf("Server already declared by conn %d - %s@%s:%d (PID %d), Killing server conn %d - %s@%s:%d (PID %d) \n", 266 dupl_conn_id, 267 Dns_conns[dupl_conn_id].task_name, 268 Dns_conns[dupl_conn_id].node_name, 269 Dns_conns[dupl_conn_id].port, 270 Dns_conns[dupl_conn_id].pid, 271 conn_id, 272 Dns_conns[conn_id].task_name, 273 Dns_conns[conn_id].node_name, 274 Dns_conns[conn_id].port, 275 Dns_conns[conn_id].pid); 276 fflush(stdout); 277 } 278 else 279 { 280 servp = (DNS_SERVICE *)Dns_conns[conn_id].service_head; 281 while( (servp = (DNS_SERVICE *) dll_get_next( 282 (DLL *) Dns_conns[conn_id].service_head, 283 (DLL *) servp)) ) 284 { 285 if(servp->state == -2) 286 { 287 dupl_id = servp->serv_id; 288 sprintf(ptr," %08X", dupl_id); 289 ptr += 9; 290 } 291 } 292 } 293 dis_packet->type = htovl(type); 294 size = DNS_DIS_HEADER + strlen(dis_packet->dup_info); 295 /* Unfortunatelly the size is wrong, this is for backward compatibility on the server side (it tested the size)*/ 296 dis_packet->size = htovl(DNS_DIS_HEADER); 297 /* 298 printf("Sendig packet %s\n", dis_packet->dup_info); 299 */ 300 if( !dna_write_nowait(conn_id, dis_packet, size) ) 301 { 302 dim_print_date_time(); 303 printf("Kill Server: Couldn't write, releasing %d\n",conn_id); 304 fflush(stdout); 305 ret = 0; 306 } 307 free(dis_packet); 308 return ret; 174 309 } 175 310 … … 180 315 int i, service_id; 181 316 int n_services; 182 char *ptr, *ptr1 , *ptrt;317 char *ptr, *ptr1; 183 318 int found; 184 319 void do_update_did(); … … 195 330 #endif 196 331 int update_did = 0; 332 /* 197 333 int name_too_long = 0; 334 */ 198 335 int rem_only = 0; 336 int all_services_registered = -1; 199 337 200 338 Dns_conns[conn_id].validity = (int)time(NULL); 201 339 if( !Dns_conns[conn_id].service_head ) 202 340 { 203 341 all_services_registered = 0; 204 342 if(vtohl(packet->n_services) > 0) 205 343 { … … 212 350 { 213 351 dim_print_date_time(); 214 printf( " 352 printf( "!!!! New Conn %3d : Server %s@%s (PID %d) registering %d services, to delete %d\n", 215 353 conn_id, packet->task_name, 216 354 packet->node_name, … … 246 384 { 247 385 dim_print_date_time(); 248 printf( " 386 printf( "!!!! New Conn %3d : Server %s@%s (PID %d) registered %d services\n", 249 387 conn_id, Dns_conns[conn_id].task_name, 250 388 Dns_conns[conn_id].node_name, … … 293 431 { 294 432 dim_print_date_time(); 295 printf(" 433 printf("Stop Server: Couldn't write, releasing %d\n",conn_id); 296 434 fflush(stdout); 297 435 } 298 436 dim_print_date_time(); 299 printf(" 437 printf("Connection from %s refused, stopping server %s\n", 300 438 Dns_conns[conn_id].node_name, 301 439 Dns_conns[conn_id].task_name); … … 332 470 dna_set_test_write(conn_id, dim_get_keepalive_timeout()); 333 471 dim_print_date_time(); 334 printf( " 472 printf( "Server %s out of error\n", 335 473 Dns_conns[conn_id].task_name ); 336 474 fflush(stdout); … … 339 477 } 340 478 n_services = vtohl(packet->n_services); 479 /* 341 480 if((int)strlen(Dns_conns[conn_id].task_name) == MAX_TASK_NAME-4-1) 342 481 name_too_long = 1; 482 */ 343 483 for( i = 0; i < n_services; i++ ) 344 484 { … … 347 487 { 348 488 dim_print_date_time(); 349 printf( " 489 printf( "Conn %3d : Server %s@%s (PID %d) registered %s\n", 350 490 conn_id, Dns_conns[conn_id].task_name, 351 491 Dns_conns[conn_id].node_name, … … 359 499 if(!strcmp(packet->services[i].service_name, "DUMMY_UPDATE_PACKET")) 360 500 { 501 all_services_registered = 1; 361 502 do_inform_clients(conn_id); 362 503 break; … … 378 519 { 379 520 dim_print_date_time(); 380 printf(" 521 printf("Couldn't write, releasing %d\n",servp->conn_id); 381 522 fflush(stdout); 382 523 } 383 524 dim_print_date_time(); 384 printf(" 525 printf("Service %s already declared, killing server %s\n", 385 526 servp->serv_name, Dns_conns[servp->conn_id].task_name); 386 527 fflush(stdout); … … 395 536 { 396 537 dim_print_date_time(); 397 printf(" 538 printf("Service %s already declared by conn %d - %s@%s:%d (PID %d), Redeclared by conn %d - %s@%s:%d (PID %d)(same server) - Closing both conns %d %d\n", 398 539 servp->serv_name, servp->conn_id, 399 540 Dns_conns[servp->conn_id].task_name, … … 418 559 else 419 560 { 420 Dns_conns[conn_id].already = 1; 421 561 Dns_conns[conn_id].already = servp->conn_id; 562 create_service_entry( conn_id, packet, i, -2); 563 /*DUPL 422 564 if( !dna_write_nowait(conn_id, &dis_packet, DNS_DIS_HEADER) ) 423 565 { … … 426 568 fflush(stdout); 427 569 } 570 */ 428 571 dim_print_date_time(); 429 printf(" Service %s already declared by conn %d - %s@%s:%d (PID %d), killing server conn %d - %s@%s:%d (PID %d) \n",572 printf("Service %s already declared by conn %d - %s@%s:%d (PID %d), Warning server conn %d - %s@%s:%d (PID %d) \n", 430 573 servp->serv_name, servp->conn_id, 431 574 Dns_conns[servp->conn_id].task_name, … … 439 582 Dns_conns[conn_id].pid); 440 583 fflush(stdout); 441 584 /*DUPL 442 585 release_conn(conn_id); 443 444 586 return(0); 587 */ 588 if((!all_services_registered) && (n_services < MAX_REGISTRATION_UNIT)) 589 all_services_registered = 1; 445 590 } 446 591 #ifdef VMS … … 481 626 dll_remove((DLL *) servp); 482 627 service_remove(&(servp->next)); 483 Curr_n_services--;484 628 free(servp); 485 629 Dns_conns[conn_id].n_services--; … … 489 633 { 490 634 dim_print_date_time(); 491 printf( "Conn %3d : Server %s@%s unregistered All services, releasing it.\n",635 printf("Conn %3d : Server %s@%s unregistered All services, releasing it.\n", 492 636 conn_id, Dns_conns[conn_id].task_name, 493 637 Dns_conns[conn_id].node_name ); … … 521 665 if(!(servp = service_exists(packet->services[i].service_name))) 522 666 { 523 servp = (DNS_SERVICE *)malloc(sizeof(DNS_SERVICE)); 524 if(name_too_long) 525 { 526 if(strstr(packet->services[i].service_name,"/CLIENT_LIST")) 527 { 528 strncpy(Dns_conns[conn_id].long_task_name, packet->services[i].service_name, 529 (size_t)MAX_NAME); 530 ptrt = strstr(Dns_conns[conn_id].long_task_name,"/CLIENT_LIST"); 531 *ptrt = '\0'; 532 } 533 } 534 strncpy( servp->serv_name, 535 packet->services[i].service_name, 536 (size_t)MAX_NAME ); 537 strncpy( servp->serv_def, 538 packet->services[i].service_def, 539 (size_t)MAX_NAME ); 540 servp->state = 1; 541 servp->conn_id = conn_id; 542 servp->server_format = vtohl(packet->format); 543 servp->serv_id = vtohl(packet->services[i].service_id); 544 dll_insert_queue( (DLL *) 545 Dns_conns[conn_id].service_head, 546 (DLL *) servp ); 547 Dns_conns[conn_id].n_services++; 548 service_insert( &(servp->next) ); 549 servp->node_head = (RED_NODE *) malloc(sizeof(NODE)); 550 dll_init( (DLL *) servp->node_head ); 551 Curr_n_services++; 667 create_service_entry( conn_id, packet, i, 1); 552 668 } 669 } 670 if((vtohl(packet->n_services) != 0) && Dns_conns[conn_id].already && all_services_registered) 671 { 672 /* 673 dim_print_date_time(); 674 printf("Services already declared Warning server\n"); 675 */ 676 warn_server(conn_id); 553 677 } 554 678 if(update_did) … … 559 683 { 560 684 dim_print_date_time(); 561 printf( "Conn %3d : Server %s@%s (PID %d) registered %d services\n",685 printf("Conn %3d : Server %s@%s (PID %d) registered %d services\n", 562 686 conn_id, Dns_conns[conn_id].task_name, 563 687 Dns_conns[conn_id].node_name, … … 620 744 { 621 745 dim_print_date_time(); 622 printf(" 746 printf("Server %s (%s@%s) has been set in error\n", 623 747 Dns_conns[conn_id].task_name, Net_conns[conn_id].task, Net_conns[conn_id].node); 624 748 fflush(stdout); … … 639 763 { 640 764 dim_print_date_time(); 641 printf(" 765 printf("Conn %3d : Server %s@%s Registration Requested\n", 642 766 conn_id, Net_conns[conn_id].task, Net_conns[conn_id].node); 643 767 fflush(stdout); … … 647 771 { 648 772 dim_print_date_time(); 649 printf(" 773 printf("Server Validity: Couldn't write, releasing Conn %3d : Server %s@%s\n",conn_id, 650 774 Net_conns[conn_id].task, Net_conns[conn_id].node); 651 775 fflush(stdout); … … 676 800 { 677 801 dim_print_date_time(); 678 printf(" 802 printf("Conn %3d : Client %s@%s requested %s\n", 679 803 conn_id, Net_conns[conn_id].task, Net_conns[conn_id].node, 680 804 serv_regp->service_name); … … 720 844 dic_packet.size = htovl(DNS_DIC_HEADER); 721 845 dim_print_date_time(); 722 printf(" 846 printf("Connection from %s refused, stopping client pid=%s\n", 723 847 Net_conns[conn_id].node, 724 848 Net_conns[conn_id].task); … … 727 851 { 728 852 dim_print_date_time(); 729 printf(" 853 printf("Stop Client: Couldn't write, releasing Conn %3d : Client %s@%s\n",conn_id, 730 854 Net_conns[conn_id].task, 731 855 Net_conns[conn_id].node); … … 773 897 } 774 898 service_remove(&(servp->next)); 775 Curr_n_services--;776 899 free(servp); 777 900 } … … 815 938 } 816 939 service_remove(&(servp->next)); 817 Curr_n_services--;818 940 free(servp); 819 941 } … … 850 972 servp->conn_id = 0; 851 973 service_insert(&(servp->next)); 852 Curr_n_services++;853 974 servp->node_head = (RED_NODE *)malloc(sizeof(NODE)); 854 975 dll_init( (DLL *) servp->node_head ); … … 930 1051 { 931 1052 dim_print_date_time(); 932 printf(" 1053 printf("Client Request: Couldn't write, releasing Conn %3d : Client %s@%s\n",conn_id, 933 1054 Net_conns[conn_id].task, 934 1055 Net_conns[conn_id].node); … … 962 1083 (DLL *) servp)) ) 963 1084 { 1085 /* DUPL 964 1086 if( servp->state != -1 ) 1087 */ 1088 if( servp->state > -1 ) 965 1089 { 966 1090 if( !dll_empty((DLL *) servp->node_head)) … … 1014 1138 { 1015 1139 dim_print_date_time(); 1016 printf(" 1140 printf("Inform Client: Couldn't write, releasing Conn %3d : Client %s@%s\n",nodep->conn_id, 1017 1141 Net_conns[nodep->conn_id].task, 1018 1142 Net_conns[nodep->conn_id].node); … … 1063 1187 { 1064 1188 dim_print_date_time(); 1065 printf(" 1189 printf("Releasing client on conn %d - %s@%s\n", 1066 1190 i, Net_conns[i].task, Net_conns[i].node); 1067 1191 fflush(stdout); … … 1088 1212 { 1089 1213 dim_print_date_time(); 1090 printf( "Conn %3d : Server %s@%s died\n",1214 printf("Conn %3d : Server %s@%s died\n", 1091 1215 conn_id, Dns_conns[conn_id].task_name, 1092 1216 Dns_conns[conn_id].node_name); … … 1098 1222 { 1099 1223 dim_print_date_time(); 1100 printf( "Conn %3d : Server %s@%s died\n",1224 printf("Conn %3d : Server %s@%s died\n", 1101 1225 conn_id, Dns_conns[conn_id].task_name, 1102 1226 Dns_conns[conn_id].node_name); … … 1119 1243 { 1120 1244 service_remove(&(servp->next)); 1121 Curr_n_services--;1122 1245 old_servp = servp; 1123 1246 servp = servp->server_prev; … … 1152 1275 { 1153 1276 dim_print_date_time(); 1154 printf(" 1277 printf("Conn %3d : Client %s@%s died\n", 1155 1278 conn_id, Net_conns[conn_id].task, Net_conns[conn_id].node); 1156 1279 fflush(stdout); … … 1172 1295 { 1173 1296 service_remove(&(servp->next)); 1174 Curr_n_services--;1175 1297 free( servp ); 1176 1298 } … … 1187 1309 { 1188 1310 dim_print_date_time(); 1189 printf(" 1311 printf("Conn %3d : Undefined Type %s@%s died\n", 1190 1312 conn_id, Net_conns[conn_id].task, 1191 1313 Net_conns[conn_id].node); … … 1281 1403 (DLL *) servp)) ) 1282 1404 { 1405 if(servp->state == -2) 1406 continue; 1283 1407 strncpy(dns_service_info->name, servp->serv_name, (size_t)MAX_NAME); 1284 1408 dns_service_info->status = htovl(1); … … 1448 1572 get_node_name(node); 1449 1573 dim_print_date_time(); 1450 printf(" 1574 printf("DNS version %d starting up on %s\n",DIM_VERSION_NUMBER, node); 1451 1575 fflush(stdout); 1452 1576 … … 1506 1630 1507 1631 dim_print_date_time(); 1508 printf(" 1632 printf("Connection Statistics :\n"); 1509 1633 for(i = 0; i< Curr_N_Conns; i++) 1510 1634 { … … 1595 1719 type |= (soft_code << (int)16) & (int)0xFFFF0000; 1596 1720 dim_print_date_time(); 1597 printf(" 1721 printf("Killing server %s@%s with exit code %d\n", 1598 1722 Dns_conns[i].task_name, Dns_conns[i].node_name, soft_code); 1599 1723 } … … 1601 1725 { 1602 1726 dim_print_date_time(); 1603 printf(" 1727 printf("Killing server %s@%s\n", 1604 1728 Dns_conns[i].task_name, Dns_conns[i].node_name); 1605 1729 } … … 1609 1733 { 1610 1734 dim_print_date_time(); 1611 printf(" 1735 printf("Kill Server: Couldn't write, releasing %d\n",i); 1612 1736 fflush(stdout); 1613 1737 release_conn(i); … … 1636 1760 dll_insert_queue((DLL *) Service_hash_table[index], 1637 1761 (DLL *) servp); 1762 Curr_n_services++; 1638 1763 } 1639 1764 … … 1642 1767 { 1643 1768 if( servp->node_head ) 1769 { 1644 1770 free( servp->node_head ); 1645 dll_remove( (DLL *) servp ); 1771 } 1772 if(servp->next) 1773 { 1774 dll_remove( (DLL *) servp ); 1775 Curr_n_services--; 1776 } 1646 1777 } 1647 1778 … … 1834 1965 dim_print_date_time(); 1835 1966 conn_id = dis_get_conn_id(); 1836 printf(" 1967 printf("Got Browse Request <%s> from conn: %d %s@%s\n", buffer, conn_id, 1837 1968 Net_conns[conn_id].task,Net_conns[conn_id].node); 1838 1969 } … … 1842 1973 dim_print_date_time(); 1843 1974 conn_id = dis_get_conn_id(); 1844 printf(" 1975 printf("Browse Request <%s> found %d services\n", buffer, n); 1845 1976 } 1846 1977 if(!Rpc_info_size)
Note:
See TracChangeset
for help on using the changeset viewer.