Changeset 18920 for trunk/FACT++/dim/src
- Timestamp:
- 10/18/17 13:54:41 (7 years ago)
- Location:
- trunk/FACT++/dim/src
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/FACT++/dim/src/dic.c
r18349 r18920 520 520 int once_only, size = 0; 521 521 register DIC_SERVICE *servp; 522 522 char str[512]; 523 523 524 /* 524 525 dim_print_date_time(); … … 554 555 if((servp->pending == WAITING_DNS_UP) || (servp->pending == WAITING_DNS_ANSWER)) 555 556 { 557 sprintf(str, "Client Sending Command: Command %s discarded, no DNS answer\n", servp->serv_name); 558 error_handler(0, DIM_ERROR, DIMDNSCNERR, str); 559 /* 556 560 dim_print_date_time(); 557 printf(" 561 printf("Client Sending Command: Command %s discarded, no DNS answer\n", servp->serv_name); 558 562 fflush(stdout); 563 */ 559 564 } 560 565 /* … … 1894 1899 static int serv_packet_size = 0; 1895 1900 int type, ret; 1901 char str[256]; 1896 1902 1897 1903 if( !serv_packet_size ) { … … 1912 1918 if(!ret) 1913 1919 { 1914 dim_print_date_time(); 1915 printf(" Client Sending Service Request: Couldn't write to Conn %3d : Server %s@%s service %s\n", 1920 sprintf(str, "Client Sending Service Request: Couldn't write to Conn %3d : Server %s@%s service %s\n", 1916 1921 conn_id, Net_conns[conn_id].task, Net_conns[conn_id].node, servp->serv_name); 1917 fflush(stdout);1922 error_handler(0, DIM_ERROR, DIMTCPWRTMO, str); 1918 1923 } 1919 1924 return(ret); … … 1961 1966 int ret; 1962 1967 CMNDCB_ITEM *itemp; 1968 char str[256]; 1963 1969 1964 1970 size = servp->fill_size; … … 2033 2039 if(!ret) 2034 2040 { 2035 dim_print_date_time(); 2036 printf(" Client Sending Command: Couldn't write to Conn %3d : Server %s@%s\n",conn_id, 2041 sprintf(str, "Client Sending Command: Couldn't write to Conn %3d : Server %s@%s\n", conn_id, 2037 2042 Net_conns[conn_id].task, Net_conns[conn_id].node); 2038 fflush(stdout);2043 error_handler(0, DIM_ERROR, DIMTCPWRTMO, str); 2039 2044 } 2040 2045 return(ret); -
trunk/FACT++/dim/src/diccpp.cxx
r15282 r18920 987 987 ret = itsData[1]->getToken(currToken); 988 988 if(!ret) return 0; 989 server = currToken; 990 ret = itsData[1]->getToken(currToken); 989 if(!itsData[1]->cmpToken((char *)"@")) 990 { 991 server = currToken; 992 ret = itsData[1]->getToken(currToken); 993 } 991 994 if(!itsData[1]->cmpToken((char *)"@")) 992 995 return 0; -
trunk/FACT++/dim/src/dim_thr.c
r15282 r18920 736 736 else if(pclass == 2) 737 737 p = REALTIME_PRIORITY_CLASS; 738 /*added by dietrich beck, GSI*/ 739 #ifdef PHARLAP 740 ret = 1; 741 #else 738 742 ret = SetPriorityClass(hProc, p); 743 #endif 739 744 if(ret) 740 745 return 1; … … 755 760 hProc = GetCurrentProcess(); 756 761 762 /*added by dietrich beck, GSI*/ 763 #ifdef PHARLAP 764 ret = NORMAL_PRIORITY_CLASS; 765 #else 757 766 ret = GetPriorityClass(hProc); 758 if(ret == 0) 767 #endif 768 if (ret == 0) 759 769 return 0; 760 770 if(ret == IDLE_PRIORITY_CLASS) -
trunk/FACT++/dim/src/dis.c
r18349 r18920 178 178 void (*user_routine)(), dim_long tag, dim_long dnsid ) ); 179 179 _DIM_PROTO( static DIS_DNS_CONN *create_dns, (dim_long dnsid) ); 180 /* 181 _DIM_PROTO( int do_dis_remove_service, (unsigned service_id, int do_stop_serving, void **dnsp ) ); 182 _DIM_PROTO( void do_dis_stop_serving_dns, (DIS_DNS_CONN *dnsp ) ); 183 */ 180 184 181 185 void dis_set_debug_on() … … 324 328 } 325 329 326 static unsigned do_dis_add_service( char *name, char *type, void *address, int size,327 void (*user_routine)(), dim_long tag )328 {329 return do_dis_add_service_dns( name, type, address, size,330 user_routine, tag, 0 );331 }332 333 330 #ifdef VxWorks 334 331 void dis_destroy(int tid) … … 379 376 DISABLE_AST 380 377 */ 381 ret = do_dis_add_service ( name, type, address, size, user_routine, tag);378 ret = do_dis_add_service_dns( name, type, address, size, user_routine, tag, 0); 382 379 #ifdef VxWorks 383 380 servp = (SERVICE *)id_get_ptr(ret, SRC_DIS); … … 489 486 } 490 487 491 static unsigned do_dis_add_cmnd( char *name, char *type, void (*user_routine)(), dim_long tag)492 {493 return do_dis_add_cmnd_dns(name, type, user_routine, tag, 0);494 }495 496 488 unsigned dis_add_cmnd( char *name, char *type, void (*user_routine)(), dim_long tag ) 497 489 { … … 501 493 DISABLE_AST 502 494 */ 503 ret = do_dis_add_cmnd ( name, type, user_routine, tag);495 ret = do_dis_add_cmnd_dns( name, type, user_routine, tag, 0 ); 504 496 /* 505 497 ENABLE_AST … … 639 631 } 640 632 633 int decode_duplicated_info(char *info, char *sname) 634 { 635 int n_dupl; 636 /* 637 int first_service = 1; 638 */ 639 unsigned service_id; 640 char *ptr; 641 SERVICE *servp; 642 char str[256]; 643 644 ptr = strchr(info,' '); 645 if(ptr) 646 { 647 *ptr = '\0'; 648 strcpy(sname, info); 649 ptr++; 650 sscanf(ptr,"%d",&n_dupl); 651 } 652 ptr = strchr(ptr,' '); 653 while(ptr) 654 { 655 ptr++; 656 sscanf(ptr,"%x",&service_id); 657 if(service_id) 658 { 659 service_id &= 0x0FFFFFFF; 660 servp = (SERVICE *)id_get_ptr(service_id, SRC_DIS); 661 if(servp) 662 { 663 if((unsigned)servp->id == service_id) 664 { 665 servp->registered = -1; 666 /* 667 if(first_service) 668 { 669 strcat(sname, " (ex: "); 670 strcat(sname, servp->name); 671 strcat(sname, ")"); 672 first_service = 0; 673 } 674 */ 675 /* 676 if(Debug_on) 677 { 678 */ 679 sprintf(str, "Service %s already declared\n", servp->name); 680 error_handler(0, DIM_WARNING, DIMDNSDUPLC, str, -1); 681 /* 682 } 683 */ 684 } 685 } 686 } 687 ptr = strchr(ptr,' '); 688 } 689 return(n_dupl); 690 } 691 641 692 void recv_dns_dis_rout( int conn_id, DNS_DIS_PACKET *packet, int size, int status ) 642 693 { 643 char str[ 128];694 char str[MAX_NAME*2], dupl_server[MAX_NAME*2]; 644 695 int dns_timr_time; 645 696 extern int rand_tmout(int, int); … … 649 700 extern void do_dis_stop_serving_dns(DIS_DNS_CONN *); 650 701 DIS_DNS_CONN *dnsp; 651 int type, exit_code ;702 int type, exit_code, severity, n_dupl; 652 703 653 704 if(size){} … … 709 760 break; 710 761 case DNS_DIS_KILL : 711 sprintf(str,712 "%s: Some Services already known to DNS",713 dnsp->task_name);714 762 /* 715 763 exit(2); 716 764 */ 717 Serving = -1; 718 error_handler(0, DIM_FATAL, DIMDNSDUPLC, str, -1); 765 severity = DIM_FATAL; 766 if(size > DNS_DIS_HEADER) 767 { 768 n_dupl = decode_duplicated_info(packet->dup_info, dupl_server); 769 if(exit_code == 1) 770 { 771 Serving = -1; 772 sprintf(str, "%s: Server already declared by %s", dnsp->task_name, dupl_server); 773 } 774 else 775 { 776 severity = DIM_WARNING; 777 sprintf(str, "%s: %d Services already declared by %s", dnsp->task_name, 778 n_dupl, dupl_server); 779 } 780 } 781 else 782 { 783 Serving = -1; 784 sprintf(str, "%s: Some Services already known to DNS", 785 dnsp->task_name); 786 } 787 error_handler(0, severity, DIMDNSDUPLC, str, -1); 719 788 /* 720 789 do_dis_stop_serving_dns(dnsp); … … 850 919 n_services = 0; 851 920 tot_n_services = 0; 852 if( flag == NONE ) { 921 if( flag == NONE ) 922 { 853 923 dis_dns_p->n_services = htovl(n_services); 854 924 dis_dns_p->size = htovl( DIS_DNS_HEADER + … … 878 948 { 879 949 if(servp->dnsp == dnsp) 880 servp->registered = 0; 950 { 951 if(servp->registered >= 0) 952 servp->registered = 0; 953 } 881 954 } 882 955 } … … 890 963 if( flag == MORE ) 891 964 { 892 if( servp->registered ) 965 if( servp->registered != 0) 966 { 967 continue; 968 } 969 } 970 else if( flag == ALL ) 971 { 972 if( servp->registered < 0) 893 973 { 894 974 continue; … … 1095 1175 char str0[MAX_NAME], str1[MAX_NAME],str2[MAX_NAME], 1096 1176 str3[MAX_NAME],str4[MAX_NAME]; 1097 char task_name_aux[MAX_TASK_NAME] ;1177 char task_name_aux[MAX_TASK_NAME], task_name[MAX_NAME]; 1098 1178 extern int open_dns(); 1099 1179 extern DIS_DNS_CONN *dis_find_dns(dim_long); 1180 extern int dis_find_dns_task(dim_long, char *); 1100 1181 DIS_DNS_CONN *dnsp; 1101 1182 unsigned int more_ids[10] = {0}; 1183 int n; 1102 1184 1103 1185 dis_init(); … … 1121 1203 dll_init( (DLL *) Client_head ); 1122 1204 } 1205 strncpy( task_name, task, (size_t)MAX_NAME ); 1206 task_name[MAX_NAME-1] = '\0'; 1123 1207 if(dnsid == 0) 1124 1208 { … … 1127 1211 else if(!(dnsp = dis_find_dns(dnsid))) 1128 1212 { 1213 if((n = dis_find_dns_task(dnsid, task)) > 0) 1214 { 1215 sprintf(task_name, "%s-%i", task, n); 1216 } 1129 1217 dnsp = create_dns(dnsid); 1130 1218 } … … 1133 1221 if(Dis_first_time) 1134 1222 { 1135 strncpy( task_name_aux, task , (size_t)MAX_TASK_NAME );1223 strncpy( task_name_aux, task_name, (size_t)MAX_TASK_NAME ); 1136 1224 task_name_aux[MAX_TASK_NAME-1] = '\0'; 1137 1225 Port_number = SEEK_PORT; … … 1153 1241 dnsp->dis_first_time = 0; 1154 1242 1155 sprintf(str0, "%s/VERSION_NUMBER", task); 1156 sprintf(str1, "%s/CLIENT_LIST", task); 1157 sprintf(str2, "%s/SERVICE_LIST", task); 1158 sprintf(str3, "%s/SET_EXIT_HANDLER", task); 1159 sprintf(str4, "%s/EXIT", task); 1160 1161 more_ids[0] = do_dis_add_service_dns( str0, "L", &Version_number, 1243 sprintf(str0, "%s/VERSION_NUMBER", task_name); 1244 sprintf(str1, "%s/CLIENT_LIST", task_name); 1245 sprintf(str2, "%s/SERVICE_LIST", task_name); 1246 sprintf(str3, "%s/SET_EXIT_HANDLER", task_name); 1247 sprintf(str4, "%s/EXIT", task_name); 1248 1249 /*added by dietrich beck, GSI*/ 1250 #ifdef LABVIEWGSI 1251 Version_number = _swapl(Version_number); //need to swap this number, since we hacked MY_LITTLE_ENDIAN 1252 #endif 1253 more_ids[0] = do_dis_add_service_dns(str0, "L", &Version_number, 1162 1254 sizeof(Version_number), 0, 0, dnsid ); 1163 1255 … … 1169 1261 more_ids[4] = do_dis_add_cmnd_dns( str4, "L:1", exit_handler, 0, dnsid ); 1170 1262 more_ids[5] = 0; 1171 strcpy( dnsp->task_name, task );1263 strcpy( dnsp->task_name, task_name ); 1172 1264 if(Debug_on) 1173 1265 { 1174 1266 dim_print_date_time(); 1175 printf("start serving %s\n",task );1267 printf("start serving %s\n",task_name); 1176 1268 } 1177 1269 } … … 1258 1350 int find_release_request(); 1259 1351 DIS_DNS_CONN *dnsp; 1352 int ret = 1; 1260 1353 1261 1354 if(size){} … … 1371 1464 if((type != MONIT_ONLY) && (type != UPDATE)) 1372 1465 { 1373 execute_service(newp->req_id);1466 ret = execute_service(newp->req_id); 1374 1467 } 1375 1468 if((type != MONIT_ONLY) && (type != MONIT_FIRST)) … … 1383 1476 } 1384 1477 } 1385 if( new_client)1478 if((new_client) && (ret != -1)) 1386 1479 { 1387 1480 Last_client = conn_id; … … 1400 1493 register REQUEST *reqp; 1401 1494 register SERVICE *servp; 1402 char str[ 80], def[MAX_NAME];1495 char str[256], def[MAX_NAME]; 1403 1496 int conn_id, last_conn_id; 1404 1497 int *pkt_buffer, header_size, aux; … … 1410 1503 #endif 1411 1504 FORMAT_STR format_data_cp[MAX_NAME/4]; 1505 int ret = 1; 1412 1506 1413 1507 reqp = (REQUEST *)id_get_ptr(req_id, SRC_DIS); … … 1519 1613 if(reqp->delay_delete > 1) 1520 1614 { 1521 printf("Server (Explicitly) Updating Service %s: Couldn't write to Conn %3d : Client %s@%s\n",1615 sprintf(str, "Server (Explicitly) Updating Service %s: Couldn't write to Conn %3d : Client %s@%s\n", 1522 1616 servp->name, conn_id, 1523 1617 Net_conns[conn_id].task, Net_conns[conn_id].node); … … 1525 1619 else 1526 1620 { 1527 printf("Server Updating Service %s: Couldn't write to Conn %3d : Client %s@%s\n",1621 sprintf(str, "Server Updating Service %s: Couldn't write to Conn %3d : Client %s@%s\n", 1528 1622 servp->name, conn_id, 1529 1623 Net_conns[conn_id].task, Net_conns[conn_id].node); 1530 1624 } 1531 fflush(stdout);1625 error_handler(0, DIM_WARNING, DIMTCPWRTMO, str, -1); 1532 1626 } 1533 1627 if(reqp->delay_delete > 1) … … 1539 1633 reqp->delay_delete = 0; 1540 1634 release_conn(conn_id, 1, 0); 1635 ret = -1; 1541 1636 } 1542 1637 } … … 1553 1648 if(reqp->delay_delete > 0) 1554 1649 reqp->delay_delete--; 1555 return( 1);1650 return(ret); 1556 1651 } 1557 1652 … … 1562 1657 static int packet_size = 0; 1563 1658 int service_id; 1659 char str[256]; 1564 1660 1565 1661 reqp = (REQUEST *)id_get_ptr(req_id, SRC_DIS); … … 1579 1675 if( !dna_write(reqp->conn_id, dis_packet, DIS_HEADER) ) 1580 1676 { 1581 dim_print_date_time(); 1582 printf(" Server Removing Service: Couldn't write to Conn %3d : Client %s@%s\n", 1677 sprintf(str, "Server Removing Service: Couldn't write to Conn %3d : Client %s@%s\n", 1583 1678 reqp->conn_id, Net_conns[reqp->conn_id].task, Net_conns[reqp->conn_id].node); 1584 fflush(stdout);1679 error_handler(0, DIM_WARNING, DIMTCPWRTMO, str, -1); 1585 1680 release_conn(reqp->conn_id, 0, 0); 1586 1681 } … … 2058 2153 static int packet_size = 0; 2059 2154 int conn_id; 2060 char str[ 128];2155 char str[256]; 2061 2156 2062 2157 DISABLE_AST … … 2098 2193 if( !dna_write_nowait(conn_id, dis_packet, size + DIS_HEADER) ) 2099 2194 { 2100 dim_print_date_time(); 2101 printf(" Server Sending Service: Couldn't write to Conn %3d : Client %s@%s\n",conn_id, 2195 sprintf(str, "Server Sending Service: Couldn't write to Conn %3d : Client %s@%s\n",conn_id, 2102 2196 Net_conns[conn_id].task, Net_conns[conn_id].node); 2103 fflush(stdout);2197 error_handler(0, DIM_WARNING, DIMTCPWRTMO, str, -1); 2104 2198 release_conn(conn_id, 1, 0); 2105 2199 } … … 2111 2205 2112 2206 int dis_remove_service(unsigned service_id) 2207 { 2208 int ret; 2209 void *dnsp; 2210 int do_dis_remove_service(unsigned, int , void **); 2211 2212 ret = do_dis_remove_service(service_id, 1, &dnsp); 2213 return ret; 2214 } 2215 2216 int do_dis_remove_service(unsigned service_id, int do_stop_serving, void **thednsp) 2113 2217 { 2114 2218 register REQUEST *reqp, *auxp; … … 2197 2301 if(n_services == 5) 2198 2302 { 2199 if(Dis_conn_id) 2200 { 2201 dna_close(Dis_conn_id); 2202 Dis_conn_id = 0; 2203 } 2204 ENABLE_AST 2303 if(do_stop_serving) 2304 { 2305 if(Dis_conn_id) 2306 { 2307 dna_close(Dis_conn_id); 2308 Dis_conn_id = 0; 2309 } 2310 ENABLE_AST 2311 } 2312 else 2313 { 2314 *thednsp = dnsp; 2315 ENABLE_AST 2316 return -1; 2317 } 2318 2205 2319 /* 2206 2320 dis_stop_serving(); … … 2338 2452 2339 2453 dnsp = dis_find_dns(dnsid); 2340 do_dis_stop_serving_dns(dnsp); 2454 if(dnsp) 2455 do_dis_stop_serving_dns(dnsp); 2341 2456 } 2342 2457 … … 2701 2816 dim_print_date_time(); 2702 2817 dna_get_node_task(conn_id, node, task); 2703 printf(" 2818 printf("Couldn't write to client %s@%s, releasing connection %d\n", 2704 2819 task, node, conn_id); 2705 2820 fflush(stdout); … … 2987 3102 if(servp->dnsp != dnsp) 2988 3103 continue; 2989 if(servp->registered )3104 if(servp->registered > 0) 2990 3105 { 2991 3106 /* … … 3017 3132 buff_ptr += (int)strlen(buff_ptr); 3018 3133 } 3019 else if( servp->registered < (Last_n_clients+1))3134 else if((servp->registered > 0) && (servp->registered < (Last_n_clients+1))) 3020 3135 { 3021 3136 if(!done) … … 3371 3486 */ 3372 3487 return dnsp; 3488 } 3489 3490 int dis_find_dns_task(dim_long dnsid, char *task) 3491 { 3492 DIS_DNS_CONN *dnsp; 3493 int n = 0; 3494 3495 dnsp = (DIS_DNS_CONN *) DNS_head; 3496 while ( (dnsp = (DIS_DNS_CONN *) dll_get_next( (DLL *) DNS_head, (DLL *) dnsp))) 3497 { 3498 if(!strcmp(dnsp->task_name, task)) 3499 n++; 3500 } 3501 return n; 3373 3502 } 3374 3503 -
trunk/FACT++/dim/src/discpp.cxx
r18058 r18920 18 18 extern "C" { 19 19 extern void dis_init(); 20 extern int do_dis_remove_service(unsigned service_id, int do_stop_serving, void **dnsp ); 21 extern void do_dis_stop_serving_dns(void *dnsp); 20 22 21 23 static void user_routine( void *tagp, void **buf, int *size, int *first_time) … … 1001 1003 DimService::~DimService() 1002 1004 { 1005 int ret = 0; 1006 void *dnsp; 1007 1003 1008 DISABLE_AST 1004 1009 if(itsName) … … 1009 1014 // id_free(itsTagId, SRC_DIS); 1010 1015 if(itsId) 1011 dis_remove_service( itsId);1016 ret = do_dis_remove_service( itsId, 0, &dnsp ); 1012 1017 itsId = 0; 1013 1018 ENABLE_AST 1019 if(ret == -1) 1020 { 1021 do_dis_stop_serving_dns(dnsp); 1022 } 1014 1023 } 1015 1024 … … 1487 1496 DimCommand::~DimCommand() 1488 1497 { 1498 int ret; 1499 void *dnsp; 1500 1489 1501 DISABLE_AST 1490 1502 delete[] itsName; … … 1493 1505 // id_free(itsTagId, SRC_DIS); 1494 1506 if(itsId) 1495 dis_remove_service( itsId);1507 ret = do_dis_remove_service( itsId, 0, &dnsp ); 1496 1508 itsId = 0; 1497 1509 ENABLE_AST 1510 if(ret == -1) 1511 { 1512 do_dis_stop_serving_dns(dnsp); 1513 } 1498 1514 } 1499 1515 … … 1514 1530 DimRpc::~DimRpc() 1515 1531 { 1532 int ret; 1533 void *dnsp; 1534 1516 1535 DISABLE_AST 1517 1536 delete[] itsName; … … 1521 1540 // id_free(itsTagId, SRC_DIS); 1522 1541 if(itsIdIn) 1523 dis_remove_service( itsIdIn);1542 ret = do_dis_remove_service( itsIdIn, 0, &dnsp ); 1524 1543 if(itsIdOut) 1525 dis_remove_service( itsIdOut);1544 ret = do_dis_remove_service( itsIdOut, 0, &dnsp ); 1526 1545 itsIdIn = 0; 1527 1546 itsIdOut = 0; 1528 1547 ENABLE_AST 1548 if(ret == -1) 1549 { 1550 do_dis_stop_serving_dns(dnsp); 1551 } 1529 1552 } 1530 1553 -
trunk/FACT++/dim/src/dna.c
r15282 r18920 16 16 #define DNA 17 17 #include <dim.h> 18 #include <time.h> 18 19 19 20 /* global definitions */ … … 353 354 tcpip_code = dna_write_bytes(conn_id, &test_pkt, READ_HEADER_SIZE,0); 354 355 if(tcpip_failure(tcpip_code)) { 355 /* Connection lost. Signal upper layer ? */ 356 /* Connection lost. Signal upper layer ? No -> creates a deadlock in the Timer Thread*/ 357 /* 356 358 if(dna_connp->read_ast) 357 359 dna_connp->read_ast(conn_id, NULL, 0, STA_DISC); 360 */ 358 361 return; 359 362 } … … 624 627 time_t oldest; 625 628 int oldesti = 0; 629 /* 626 630 extern time_t time(); 631 */ 627 632 628 633 if(type == 0) … … 822 827 if (tcpip_failure(tcpip_code)) 823 828 { 829 if(src_type == SRC_DIS) 830 strcpy(src_type_str,"Server"); 831 else if(src_type == SRC_DIC) 832 strcpy(src_type_str,"Client"); 833 else 834 strcpy(src_type_str,"Unknown type"); 824 835 dim_print_date_time(); 825 printf(" Client Establishing Connection: Couldn't write to Conn %3d : Server %s@%s\n",conn_id, 826 Net_conns[conn_id].task, Net_conns[conn_id].node); 827 fflush(stdout); 836 sprintf(str," %s Establishing Connection: Couldn't write to Conn %3d : Server %s@%s\n", 837 src_type_str, conn_id, Net_conns[conn_id].task, Net_conns[conn_id].node); 838 if (!strcmp(server_task, "DIM_DNS")) 839 dna_report_error(conn_id, tcpip_code, str, DIM_ERROR, DIMDNSCNERR); 840 else 841 dna_report_error(conn_id, tcpip_code, str, DIM_ERROR, DIMTCPCNERR); 828 842 dna_close(conn_id); 829 843 return(0); … … 841 855 dna_report_error(conn_id, -1, 842 856 "Write timeout, disconnecting from", DIM_ERROR, DIMTCPWRTMO); 843 if(!find_pend_conn(Net_conns[conn_id].node, Net_conns[conn_id].task, 0, 0, 1)) 857 if (!find_pend_conn(Net_conns[conn_id].node, Net_conns[conn_id].task, 0, 0, 1)) 858 { 844 859 ins_pend_conn(Net_conns[conn_id].node, Net_conns[conn_id].task, 0, 0, 1, time(NULL)); 860 } 845 861 } 846 862 release_conn(conn_id); -
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) -
trunk/FACT++/dim/src/examples/test_server.c
r15282 r18920 67 67 char aux[80]; 68 68 char name[84]/*, name1[132]*/; 69 char srvname[64]; 69 70 /* 70 71 int on = 0; … … 93 94 printf("result = %d\n", status); 94 95 */ 96 dim_print_date_time(); 97 printf("Dim Server Starting up...\n"); 98 fflush(stdout); 95 99 if(argc){} 96 100 new_dns = dim_get_env_var("EXTRA_DNS_NODE", extra_dns, sizeof(extra_dns)); … … 107 111 dis_add_client_exit_handler(client_exited); 108 112 113 strcpy(srvname, argv[1]); 114 if(!strcmp(srvname,"xx1")) 115 strcpy(srvname,"xx"); 109 116 for(i = 0; i< 10; i++) 110 117 { 111 sprintf(str[i],"%s/Service_%03d", argv[1],i);118 sprintf(str[i],"%s/Service_%03d",srvname,i); 112 119 dis_add_service( str[i], "C", str[i], (int)strlen(str[i])+1, 113 120 (void *)0, 0 ); … … 123 130 strcpy(t.str,"hello world"); 124 131 125 sprintf(aux,"%s/TEST_SWAP", argv[1]);132 sprintf(aux,"%s/TEST_SWAP",srvname); 126 133 id = dis_add_service( aux, "l:3;d:1;s:1;c:1;s:1;f:1;c:20", &t, sizeof(t), 127 134 (void *)0, 0 ); 135 if(!strcmp(argv[1],"xx1")) 136 { 137 sprintf(aux,"%s/TEST_SWAP1",srvname); 138 id = dis_add_service( aux, "l:3;d:1;s:1;c:1;s:1;f:1;c:20", &t, sizeof(t), 139 (void *)0, 0 ); 140 } 128 141 if(id){} 129 sprintf(aux,"%s/TEST_CMD", argv[1]);142 sprintf(aux,"%s/TEST_CMD",srvname); 130 143 dis_add_cmnd(aux,"l:3;d:1;s:1;c:1;s:1;f:1;c:20",cmnd_rout, 0); 131 144 -
trunk/FACT++/dim/src/examples/test_server.cxx
r18349 r18920 137 137 // delete dim; 138 138 139 dis_set_debug_on(); 139 140 DimServer::start("TEST"); 140 141 extraDns = DimUtil::getEnvVar((char *)"EXTRA_DNS_NODE"); 141 142 if(extraDns) 142 newDns = new DimServerDns(extraDns, 0, (char *)"new_TEST"); 143 newDns = new DimServerDns(extraDns, 0, (char *)"TEST"); 144 // newDns = new DimServerDns(extraDns, 0, (char *)"new_TEST"); 143 145 144 146 // int i, arr[15000]; … … 156 158 if(extraDns) 157 159 { 158 new_servint = new DimService(newDns, "new_TEST/INTVAL",ival); 160 // new_servint = new DimService(newDns, "new_TEST/INTVAL",ival); 161 new_servint = new DimService(newDns, "TEST/new_INTVAL",ival); 159 162 } 160 163 -
trunk/FACT++/dim/src/tcpip.c
r18097 r18920 16 16 #ifdef WIN32 17 17 #define FD_SETSIZE 16384 18 #define poll(pfd,nfds,timeout) WSAPoll(pfd,nfds,timeout) 18 #endif 19 20 #include <stdio.h> 21 #include <time.h> 22 #define DIMLIB 23 #include <dim.h> 24 25 #ifdef WIN32 26 //#define poll(pfd,nfds,timeout) WSAPoll(pfd,nfds,timeout) 19 27 #define ioctl ioctlsocket 20 28 … … 26 34 #define EADDRNOTAVAIL WSAEADDRNOTAVAIL 27 35 #define EWOULDBLOCK WSAEWOULDBLOCK 36 #define EINPROGRESS WSAEINPROGRESS 28 37 #define ECONNREFUSED WSAECONNREFUSED 38 #define ETIMEDOUT WSAETIMEDOUT 29 39 #define HOST_NOT_FOUND WSAHOST_NOT_FOUND 30 40 #define NO_DATA WSANO_DATA … … 80 90 #define MY_FD_ISSET(fd, set) FD_ISSET(fd, set) 81 91 #endif 82 83 #include <stdio.h>84 #include <time.h>85 #define DIMLIB86 #include <dim.h>87 92 88 93 #define ushort unsigned short … … 813 818 fd_set rfds; 814 819 int conn_id, ret, selret, count; 820 #ifndef __linux__ 815 821 struct timeval timeout; 822 #endif 816 823 817 824 if(num){} 818 825 do 819 826 { 820 timeout.tv_sec = 0; /* Don't wait, just poll */821 timeout.tv_usec = 0;822 827 list_to_fds( &rfds ); 823 828 #ifdef __linux__ 824 829 selret = poll(Pollfds, Pollfd_size, 0); 825 830 #else 831 timeout.tv_sec = 0; /* Don't wait, just poll */ 832 timeout.tv_usec = 0; 826 833 selret = select(FD_SETSIZE, &rfds, NULL, NULL, &timeout); 827 834 #endif … … 890 897 #endif 891 898 if(ret <= 0) 892 893 printf("poll returned %d, errno %d\n", ret, errno);894 899 { 900 printf("poll/select returned %d, errno %d\n", ret, errno); 901 } 895 902 if(ret > 0) 896 903 { … … 1023 1030 int host_addr; 1024 1031 #endif 1025 int path, val, ret_code, ret ;1032 int path, val, ret_code, ret, retcon, selret; 1026 1033 int a,b,c,d; 1027 1034 /* Fix for gcc 4.6 "dereferencing type-punned pointer will break strict-aliasing rules"?!*/ … … 1029 1036 unsigned char *ipaddr = ipaddr_buff; 1030 1037 int host_number = 0; 1038 int tcpip_would_block(); 1039 #ifdef __linux__ 1040 struct pollfd pollitem; 1041 #else 1042 struct timeval timeout; 1043 fd_set rfds, wfds, efds; 1044 #endif 1045 int so_error = ETIMEDOUT; 1046 int so_error_len = sizeof(so_error); 1031 1047 1032 1048 dim_tcpip_init(0); … … 1161 1177 #endif 1162 1178 sockname.sin_port = htons((ushort) port); /* port number to send to */ 1163 while((ret = connect(path, (struct sockaddr*)&sockname, sizeof(sockname))) == -1 ) 1164 { 1165 if(errno != EINTR) 1179 /* 1180 while ((ret = connect(path, (struct sockaddr*)&sockname, sizeof(sockname))) == -1) 1181 { 1182 if (errno != EINTR) 1166 1183 { 1167 1184 closesock(path); … … 1169 1186 } 1170 1187 } 1171 strcpy( Net_conns[conn_id].node, node ); 1188 */ 1189 set_non_blocking(path); 1190 retcon = connect(path, (struct sockaddr*)&sockname, sizeof(sockname)); 1191 #ifndef WIN32 1192 ret = errno; 1193 #else 1194 ret = WSAGetLastError(); 1195 #endif 1196 set_blocking(path); 1197 if (retcon == -1) 1198 { 1199 if (tcpip_would_block(ret)) 1200 { 1201 #ifdef __linux__ 1202 pollitem.fd = path; 1203 pollitem.events = POLLIN | POLLOUT | POLLERR; 1204 pollitem.revents = 0; 1205 selret = poll(&pollitem, 1, CONNECT_TMOUT * 1000); 1206 #else 1207 timeout.tv_sec = CONNECT_TMOUT; 1208 timeout.tv_usec = 0; 1209 FD_ZERO(&wfds); 1210 FD_SET(path, &wfds); 1211 FD_ZERO(&rfds); 1212 FD_SET(path, &rfds); 1213 FD_ZERO(&efds); 1214 FD_SET(path, &efds); 1215 selret = select(FD_SETSIZE, &rfds, &wfds, &efds, &timeout); 1216 #endif 1217 if (selret > 0) 1218 { 1219 getsockopt(path, SOL_SOCKET, SO_ERROR, (void *)&so_error, &so_error_len); 1220 } 1221 } 1222 if (so_error != 0) 1223 { 1224 #ifndef WIN32 1225 errno = so_error; 1226 #else 1227 WSASetLastError(so_error); 1228 #endif 1229 closesock(path); 1230 return(0); 1231 } 1232 } 1233 strcpy(Net_conns[conn_id].node, node); 1172 1234 strcpy( Net_conns[conn_id].task, task ); 1173 1235 Net_conns[conn_id].channel = path; … … 1547 1609 if(code == EWOULDBLOCK) 1548 1610 return(1); 1549 return(0); 1611 else if (code == EINPROGRESS) 1612 return(1); 1613 return(0); 1550 1614 } 1551 1615 -
trunk/FACT++/dim/src/utilities.c
r15282 r18920 19 19 #define DIMLIB 20 20 #include <dim.h> 21 22 /*added by dietrich beck, GSI*/ 23 #ifdef PHARLAP 24 #define getenv(x) getenv2(x) 25 char* getenv2(envname) 26 char* envname; 27 { 28 char* buff; 29 int ml; 30 31 buff = (char*)malloc(200); 32 ml = GetEnvironmentVariable(envname, buff, 200); 33 34 if (ml == 0){ 35 buff = NULL; 36 } 37 return buff; 38 } 39 #endif 21 40 22 41 int get_proc_name(char *proc_name) -
trunk/FACT++/dim/src/webDid/webDid.c
r18058 r18920 6 6 #include <dis.h> 7 7 8 extern int WebDID_Debug; 8 int WebDID_Debug = 1; 9 int IsWebDID = 1; 9 10 10 11 typedef struct item{ 11 12 struct item *next; 13 int id; 14 /* must be here */ 15 char *service_format_ptr; 12 16 DNS_SERVER_INFO server; 13 17 DNS_SERVICE_INFO *service_ptr; … … 16 20 int busy; 17 21 int isSMI; 22 // char *servicelistp; 23 char **service_format_ptrp; 18 24 }SERVER; 19 25 … … 27 33 }NODE; 28 34 NODE *Node_head = (NODE *)0; 35 36 typedef struct req_ent { 37 struct req_ent *next; 38 struct req_ent *prev; 39 int conn_id; 40 // int service_id; 41 // int req_id; 42 // int type; 43 // struct serv *service_ptr; 44 int timeout; 45 // int format; 46 // int first_time; 47 // int delay_delete; 48 // int to_delete; 49 TIMR_ENT *timr_ent; 50 void *nolink; 51 int nolinksize; 52 struct reqp_ent *reqpp; 53 struct sitem *servicep; 54 } REQUEST; 55 56 typedef struct reqp_ent { 57 struct reqp_ent *next; 58 struct reqp_ent *prev; 59 REQUEST *reqp; 60 } REQUEST_PTR; 29 61 30 62 typedef struct sitem{ … … 43 75 time_t last_updated; 44 76 int n_browsers; 45 }CURR_SERVICE; 46 CURR_SERVICE *Curr_service_head = (CURR_SERVICE *)0; 77 int formatted; 78 // void *nolink; 79 // int nolinksize; 80 REQUEST *request_head; 81 int is_nolink; 82 }SERVICE; 83 SERVICE *Curr_service_head = (SERVICE *)0; 47 84 48 85 typedef struct objstate{ … … 62 99 struct bitem *next; 63 100 int id; 101 /* must be here */ 102 char *service_format_ptr; 64 103 int subscribe; 65 104 time_t last_subscribed; … … 71 110 int n_servers; 72 111 int n_nodes; 73 CURR_SERVICE *servicep;112 SERVICE *servicep; 74 113 char *JSONBuffer; 75 114 int JSONBufferSize; … … 78 117 char pattern[256]; 79 118 char curr_command[MAX_NAME]; 80 char *service_format_ptr;119 // char *service_format_ptr; 81 120 int isSMI; 82 121 int n_domains; … … 85 124 int curr_smidomain_nobjs; 86 125 OBJSTATE *smidomainp; 126 int formatted; 127 REQUEST_PTR *requestp_head; 87 128 }BROWSER; 88 129 BROWSER *Browser_head = (BROWSER *)0; … … 106 147 int N_services = 0; 107 148 static char no_link = -1; 108 static char no_link_str[5] = "DEAD"; 149 //static char no_link_str[5] = "DEAD"; 150 static char no_link_str[26] = "__DIM_SERVICE_NOT_THERE__"; 109 151 int no_link_int = -1; 110 152 FILE *fptr; … … 147 189 } 148 190 sprintf(icon_title,"DID %s",dns_node); 149 dim_print_date_time(); 150 printf("webDid Starting up on %s\n\t serving %s\n", local_node, Title); 191 if (IsWebDID) 192 { 193 dim_print_date_time(); 194 printf("webDid Starting up on %s\n\t serving %s\n", local_node, Title); 195 } 196 else 197 { 198 dim_print_date_time(); 199 printf("webDim Starting up on %s\n\t serving %s\n", local_node, Title); 200 } 151 201 Timer_q = dtq_create(); 152 dic_info_service( "DIS_DNS/SERVER_INFO",MONITORED,0,0,0,update_servers,0,202 dic_info_service((const char *)"DIS_DNS/SERVER_INFO",MONITORED,0,0,0,(void (*)(int *,void *,int *))update_servers,0, 153 203 &no_link,1); 154 204 return 1; … … 187 237 } 188 238 189 int find_server_service_pattern(SERVER *servp, char *pattern )239 int find_server_service_pattern(SERVER *servp, char *pattern, char **bufptr) 190 240 { 191 241 DNS_SERVICE_INFO *servicep; 192 242 int n_services, i; 193 243 int n_found = 0; 244 char *ptr, str[256], *sptr, *sformat, *stype; 245 int type, index; 246 char *addJSONChildStart(); 247 char *addJSONChildEnd(); 248 int doall = 0, doit = 0; 194 249 195 250 servicep = servp->service_ptr; 196 251 n_services = servp->server.n_services; 197 for(i = 0; i < n_services; i++) 198 { 199 if(strstr(servicep->name, pattern)) 252 if (!strcmp(pattern, "*")) 253 { 254 doall = 1; 255 } 256 for (i = 0; i < n_services; i++) 257 { 258 sptr = (char *)servp->service_format_ptrp[i]; 259 if (!sptr) 260 break; 261 if (!doall) 262 { 263 doit = 0; 264 // if (strstr(servicep->name, pattern)) 265 // if (sptr) 266 // { 267 // if (strstr(servicep->name, pattern)) 268 if (strstr(sptr, pattern)) 269 { 270 doit = 1; 271 } 272 // } 273 } 274 if (doall || doit) 200 275 { 201 276 n_found++; 277 if(bufptr) 278 { 279 /* 280 type = servicep->type; 281 if (type < 0xff) 282 printf("problem %s %d", servicep->name, servicep->type); 283 index = type; 284 type &= 0x000000FF; 285 index = (index >> 16) & 0xFFFF; 286 index--; 287 sptr = (char *)servp->service_format_ptrp[index]; 288 ptr = *bufptr; 289 sprintf(str, "name: \"%s\", format: \"%s\", type: %d", servicep->name, 290 (char *)sptr + strlen((const char *)sptr)+1, type); 291 */ 292 ptr = *bufptr; 293 sformat = (char *)sptr + strlen((const char *)sptr) + 1; 294 stype = (char *)sformat + strlen((const char *)sformat) + 1; 295 if (*stype = '\n') 296 type = 0; 297 else if (*stype == 'C') 298 type = 1; 299 else if (*stype == 'R') 300 type = 2; 301 sprintf(str, "name: \"%s\", format: \"%s\", type: %d", sptr, sformat, type); 302 ptr = addJSONChildStart(ptr, str, 0); 303 ptr = addJSONChildEnd(ptr, 1); 304 *bufptr = ptr; 305 } 202 306 } 203 307 servicep++; … … 206 310 } 207 311 208 int find_service_pattern(NODE *nodep, SERVER *servpp, char *pattern, int *n_servers )312 int find_service_pattern(NODE *nodep, SERVER *servpp, char *pattern, int *n_servers, char **ptr) 209 313 { 210 314 SERVER *servp; … … 217 321 while( (servp = (SERVER *)sll_get_next((SLL *)servp)) ) 218 322 { 219 if((ret = find_server_service_pattern(servp, pattern )))323 if((ret = find_server_service_pattern(servp, pattern, ptr))) 220 324 { 221 325 n_found += ret; … … 226 330 else 227 331 { 228 if((ret = find_server_service_pattern(servpp, pattern )))332 if((ret = find_server_service_pattern(servpp, pattern, ptr))) 229 333 { 230 334 n_found += ret; … … 236 340 } 237 341 238 CURR_SERVICE *find_curr_service(char *service)239 { 240 CURR_SERVICE *servicep;342 SERVICE *find_curr_service(char *service) 343 { 344 SERVICE *servicep; 241 345 242 346 servicep = Curr_service_head ; 243 while( (servicep = ( CURR_SERVICE *)sll_get_next((SLL *)servicep)) )347 while( (servicep = (SERVICE *)sll_get_next((SLL *)servicep)) ) 244 348 { 245 349 if(!strcmp(servicep->name,service)) … … 248 352 } 249 353 } 250 return (( CURR_SERVICE *)0);354 return ((SERVICE *)0); 251 355 } 252 356 … … 285 389 { 286 390 BROWSER *browserp; 287 int prepareJSONTree( );391 int prepareJSONTree(char *, BROWSER *); 288 392 289 393 browserp = Browser_head; … … 291 395 { 292 396 if(browserp->pattern[0] != '\0') 293 prepareJSONTree( browserp);397 prepareJSONTree("",browserp); 294 398 } 295 399 } … … 311 415 int prepareJSONTree(); 312 416 int prepareJSONHeader(); 417 void got_update_services(); 313 418 314 419 if(tag){} … … 379 484 strcpy(servp->name,sname); 380 485 servp->next = 0; 486 servp->id = 0; 381 487 servp->busy = 0; 382 488 servp->server.n_services = 0; 383 489 servp->service_ptr = 0; 490 servp->service_format_ptr = 0; 491 servp->service_format_ptrp = 0; 384 492 servp->isSMI = 0; 385 493 if(strstr(sname,"_SMI")) … … 407 515 servp->service_ptr = 0; 408 516 } 409 if(n_services != -1) 517 if (servp->service_format_ptr) 518 { 519 free(servp->service_format_ptr); 520 servp->service_format_ptr = 0; 521 } 522 if (servp->service_format_ptrp) 523 { 524 free(servp->service_format_ptrp); 525 servp->service_format_ptrp = 0; 526 } 527 if (n_services != -1) 410 528 { 411 529 service_size = n_services*(int)sizeof(DNS_SERVICE_INFO); … … 413 531 memcpy(servp->service_ptr, buffer->services, (size_t)service_size); 414 532 N_services += n_services; 533 sprintf(str, "%s/SERVICE_LIST", sname); 534 // printf("subscribe update_servers %s %d\n", sname, n_services); 535 dic_info_service(str, ONCE_ONLY, 20, 0, 0, 536 got_update_services, (dim_long)servp, "None", 5); 415 537 } 416 538 servp->busy = 1; … … 419 541 { 420 542 if(servp) 421 543 { 422 544 N_servers--; 423 545 if(servp->server.n_services != -1) 424 425 426 546 { 547 N_services -= servp->server.n_services; 548 } 427 549 servp->server.n_services = 0; 428 550 servp->busy = -1; 429 551 servp->isSMI = 0; 430 552 } 431 553 } 432 554 if(JSONHeader[0]) 433 555 prepareJSONHeader(); 556 // printf("update_servers %d %d %d\n", N_nodes, N_servers, N_services); 434 557 } 435 558 … … 437 560 { 438 561 BROWSER *browserp; 562 SERVER *servp; 563 DNS_SERVICE_INFO *servicep; 564 int i, j, n_services, index = 0, type; 565 char *ptr, *ptre, *ptr1, tmp[MAX_NAME], *sptr; 439 566 440 567 if(size){} 441 568 browserp = (BROWSER *)*tag; 442 if(browserp->service_format_ptr) 443 free(browserp->service_format_ptr); 444 browserp->service_format_ptr = (char *)malloc(strlen(buffer)+1); 445 strcpy(browserp->service_format_ptr, buffer); 569 if (browserp) 570 { 571 if (browserp->service_format_ptr) 572 free(browserp->service_format_ptr); 573 browserp->service_format_ptr = (char *)malloc(strlen(buffer) + 1); 574 strcpy(browserp->service_format_ptr, buffer); 575 } 576 if (browserp->id == 0) 577 { 578 servp = (SERVER *)browserp; 579 n_services = servp->server.n_services; 580 if (servp->service_format_ptrp) 581 free(servp->service_format_ptrp); 582 servp->service_format_ptrp = (char **)malloc(n_services*sizeof(char *)); 583 memset(servp->service_format_ptrp, 0, (size_t)n_services*sizeof(char *)); 584 ptr = servp->service_format_ptr; 585 servicep = servp->service_ptr; 586 for (i = 0; i < n_services; i++) 587 { 588 servicep->type &= 0x000000FF; 589 servicep++; 590 servp->service_format_ptrp[index++] = ptr; 591 ptre = strchr(ptr, '\n'); 592 ptr1 = strchr(ptr, '|'); 593 if(ptr1) 594 { 595 *ptr1 = '\0'; 596 ptr1++; 597 ptr1 = strchr(ptr1, '|'); 598 if (ptr1) 599 *ptr1 = '\0'; 600 } 601 ptr = ptre; 602 if (!ptr) 603 { 604 break; 605 if (!(*ptr)) 606 break; 607 } 608 ptr++; 609 if (!(*ptr)) 610 break; 611 } 612 /* 613 for (i = 0; i < n_services; i++) 614 { 615 if (!servp->service_format_ptrp[i]) 616 break; 617 servicep = servp->service_ptr; 618 for (j = 0; j < n_services; j++) 619 { 620 if (servicep->type < 0xFF) 621 { 622 if ((strstr(servicep->name, "/RpcIn")) || (strstr(servicep->name, "/RpcOut"))) 623 { 624 strcpy(tmp, servicep->name); 625 if ((ptr = strstr(tmp, "/RpcIn"))) 626 *ptr = '\0'; 627 if ((ptr = strstr(tmp, "/RpcOut"))) 628 *ptr = '\0'; 629 if (!strcmp(tmp, servp->service_format_ptrp[i])) 630 { 631 servicep->type |= ((i + 1) << 16); 632 break; 633 } 634 } 635 if (!strcmp(servicep->name, servp->service_format_ptrp[i])) 636 { 637 servicep->type |= ((i+1) << 16); 638 break; 639 } 640 } 641 // printf("%s %08x\n",servicep->name, servicep->type); 642 // if (servicep->type == 0) 643 // break; 644 servicep++; 645 } 646 } 647 */ 648 /* 649 servicep = servp->service_ptr; 650 for (i = 0; i < n_services; i++) 651 { 652 for (j = 0; j < n_services; j++) 653 { 654 if (!servp->service_format_ptrp[j]) 655 break; 656 if ((strstr(servicep->name, "/RpcIn")) || (strstr(servicep->name, "/RpcOut"))) 657 { 658 strcpy(tmp, servicep->name); 659 if ((ptr = strstr(tmp, "/RpcIn"))) 660 *ptr = '\0'; 661 if ((ptr = strstr(tmp, "/RpcOut"))) 662 *ptr = '\0'; 663 if (!strcmp(tmp, servp->service_format_ptrp[j])) 664 { 665 servicep->type |= ((j + 1) << 16); 666 break; 667 } 668 } 669 if (!strcmp(servicep->name, servp->service_format_ptrp[j])) 670 { 671 servicep->type |= ((j + 1) << 16); 672 break; 673 } 674 } 675 // if (servicep->type == 0) 676 // break; 677 type = servicep->type; 678 index = type; 679 type &= 0x000000FF; 680 index = (index >> 16) & 0xFFFF; 681 index--; 682 sptr = (char *)servp->service_format_ptrp[index]; 683 printf("%s %08x %s\n", servicep->name, servicep->type, (char *)sptr + strlen((const char *)sptr) + 1); 684 servicep++; 685 } 686 */ 687 } 688 // printf("got_update_services %s\n", buffer); 446 689 } 447 690 … … 454 697 BROWSER *browserp; 455 698 char *prepareJSONServiceList(); 456 BROWSER *create_browser( );699 BROWSER *create_browser(int); 457 700 458 701 if(!(browserp = find_browser(browser))) … … 610 853 } 611 854 612 int delete_curr_service( CURR_SERVICE *servicep)855 int delete_curr_service(SERVICE *servicep) 613 856 { 614 857 … … 620 863 if(servicep->buffer_str_size) 621 864 free(servicep->buffer_str); 865 // if (servicep->nolink) 866 // free(servicep->nolink); 622 867 sll_remove((SLL *)Curr_service_head, (SLL *)servicep); 623 868 free(servicep); … … 625 870 } 626 871 872 int close_browser(int browser) 873 { 874 BROWSER *browserp; 875 876 if ((browserp = find_browser(browser))) 877 delete_browser(browserp); 878 return 1; 879 } 627 880 int delete_browser(BROWSER *browserp) 628 881 { 629 CURR_SERVICE *servicep; 630 882 SERVICE *servicep; 883 int i; 884 885 release_all_requests(browserp); 886 if (browserp->requestp_head) 887 free(browserp->requestp_head); 888 /* 631 889 if((servicep = browserp->servicep)) 632 890 { … … 635 893 delete_curr_service(servicep); 636 894 } 895 */ 637 896 if(browserp->service_format_ptr) 638 897 free(browserp->service_format_ptr); … … 679 938 browserp->n_servers = 0; 680 939 browserp->n_services = 0; 681 browserp->servicep = 0;940 // browserp->servicep = 0; 682 941 browserp->JSONBuffer = 0; 683 942 browserp->JSONBufferSize = 0; … … 689 948 browserp->curr_smidomain[0] = '\0'; 690 949 browserp->smidomainp = 0; 691 sll_insert_queue((SLL *)Browser_head,(SLL *)browserp); 692 dtq_start_timer(10, check_browser, browserp); 950 browserp->requestp_head = (REQUEST_PTR *)malloc(sizeof(REQUEST_PTR)); 951 dll_init((DLL *)(browserp->requestp_head)); 952 sll_insert_queue((SLL *)Browser_head, (SLL *)browserp); 953 if(IsWebDID) 954 dtq_start_timer(10, check_browser, browserp); 693 955 return browserp; 694 956 } … … 716 978 } 717 979 718 int update_service_data(char *service, int conn_id, int subscribe, int req, int browser, int force) 719 { 720 CURR_SERVICE *servicep; 980 REQUEST *create_request(int conn_id, SERVICE *servicep, int timeout, void *nolink, int nolinksize) 981 { 982 REQUEST *newp; 983 984 newp = (REQUEST *)malloc(sizeof(REQUEST)); 985 newp->servicep = servicep; 986 newp->timeout = timeout; 987 newp->conn_id = conn_id; 988 // newp->first_time = 1; 989 // newp->delay_delete = 0; 990 // newp->to_delete = 0; 991 newp->timr_ent = 0; 992 newp->reqpp = 0; 993 newp->nolink = 0; 994 newp->nolinksize = 0; 995 if (nolinksize) 996 { 997 newp->nolink = malloc(nolinksize); 998 newp->nolinksize = nolinksize; 999 memcpy(newp->nolink, nolink, nolinksize); 1000 } 1001 dll_insert_queue((DLL *)servicep->request_head, (DLL *)newp); 1002 return newp; 1003 } 1004 1005 REQUEST_PTR *create_requestp(REQUEST *reqp, BROWSER *browserp) 1006 { 1007 REQUEST_PTR *reqpp; 1008 1009 reqpp = (REQUEST_PTR *)malloc(sizeof(REQUEST_PTR)); 1010 reqpp->reqp = reqp; 1011 reqp->reqpp = reqpp; 1012 dll_insert_queue((DLL *)browserp->requestp_head, (DLL *)reqpp); 1013 return reqpp; 1014 } 1015 1016 int release_request(REQUEST_PTR *reqpp) 1017 { 1018 REQUEST *reqp; 1019 SERVICE *servicep; 1020 1021 reqp = reqpp->reqp; 1022 if (reqp) 1023 { 1024 servicep = reqp->servicep; 1025 dll_remove((DLL *)reqp); 1026 } 1027 if (reqpp) 1028 dll_remove((DLL *)reqpp); 1029 if (reqp->nolink) 1030 free(reqp->nolink); 1031 // if (reqp->timr_ent) 1032 // dtq_rem_entry(Dis_timer_q, reqp->timr_ent); 1033 // id_free(reqp->req_id, SRC_DIS); 1034 servicep->n_browsers--; 1035 if (dll_empty((DLL *)servicep->request_head)) 1036 { 1037 // if (!servicep->n_browsers) 1038 // { 1039 free(servicep->request_head); 1040 delete_curr_service(servicep); 1041 // } 1042 } 1043 if (reqp) 1044 free(reqp); 1045 if (reqpp) 1046 free(reqpp); 1047 return 1; 1048 } 1049 1050 int release_all_requests(BROWSER *browserp) 1051 { 1052 REQUEST_PTR *reqpp, *auxp; 1053 int release_request(); 1054 1055 if (browserp) 1056 { 1057 reqpp = browserp->requestp_head; 1058 while ((reqpp = (REQUEST_PTR *)dll_get_next((DLL *)browserp->requestp_head, 1059 (DLL *)reqpp))) 1060 { 1061 auxp = reqpp->prev; 1062 release_request(reqpp); 1063 reqpp = auxp; 1064 } 1065 } 1066 return 1; 1067 } 1068 1069 REQUEST_PTR *find_request(SERVICE* servicep, int conn_id) 1070 { 1071 REQUEST_PTR *reqpp; 1072 REQUEST *reqp; 1073 1074 if (servicep) 1075 { 1076 reqp = servicep->request_head; 1077 while ((reqp = (REQUEST *)dll_get_next((DLL *)servicep->request_head, 1078 (DLL *)reqp))) 1079 { 1080 if (reqp->conn_id == conn_id) 1081 return reqp->reqpp; 1082 } 1083 } 1084 return (REQUEST_PTR *)0; 1085 } 1086 1087 int update_service_data(char *service, int conn_id, int subscribe, int req, int browser, int force, 1088 int formatted, void *nolink, int nolinksize) 1089 { 1090 SERVICE *servicep; 721 1091 time_t tsecs; 722 1092 void recv_service_info(); 723 1093 extern void sendData(); 724 1094 BROWSER *browserp; 1095 int i; 1096 REQUEST *reqp; 1097 REQUEST_PTR *reqpp; 725 1098 726 1099 if(req){} 727 1100 if(!Curr_service_head) 728 1101 { 729 Curr_service_head = ( CURR_SERVICE *)malloc(sizeof(CURR_SERVICE));1102 Curr_service_head = (SERVICE *)malloc(sizeof(SERVICE)); 730 1103 sll_init((SLL *)Curr_service_head); 731 1104 } … … 737 1110 return 1; 738 1111 } 739 if((servicep = browserp->servicep)) 740 { 741 servicep->n_browsers--; 742 if(!servicep->n_browsers) 743 delete_curr_service(servicep); 1112 browserp->formatted = formatted; 1113 if(IsWebDID) 1114 { 1115 /* 1116 if ((servicep = browserp->servicep)) 1117 { 1118 servicep->n_browsers--; 1119 if (!servicep->n_browsers) 1120 delete_curr_service(servicep); 1121 } 1122 */ 1123 release_all_requests(browserp); 1124 } 1125 if (subscribe == -2) 1126 { 1127 if ((servicep = find_curr_service(service))) 1128 { 1129 reqpp = find_request(servicep, conn_id); 1130 if (reqpp) 1131 release_request(reqpp); 1132 } 1133 return 1; 744 1134 } 745 1135 if(!(servicep = find_curr_service(service))) 746 1136 { 747 servicep = ( CURR_SERVICE *)malloc(sizeof(CURR_SERVICE));1137 servicep = (SERVICE *)malloc(sizeof(SERVICE)); 748 1138 strcpy(servicep->name,service); 749 1139 servicep->conn_id = conn_id; … … 760 1150 servicep->last_subscribed = tsecs; 761 1151 servicep->n_browsers = 0; 1152 servicep->formatted = formatted; 1153 servicep->request_head = (REQUEST *)malloc(sizeof(REQUEST)); 1154 servicep->is_nolink = 0; 1155 dll_init((DLL *)(servicep->request_head)); 1156 reqp = create_request(conn_id, servicep, subscribe, nolink, nolinksize); 1157 reqpp = create_requestp(reqp, browserp); 762 1158 sll_insert_queue((SLL *)Curr_service_head,(SLL *)servicep); 763 servicep->sid = (int)dic_info_service_stamped( service, MONITORED, subscribe, 0, 0,764 recv_service_info, servicep, &no_link_int, 4);1159 servicep->sid = (int)dic_info_service_stamped(service, MONITORED, 0, 0, 0, 1160 recv_service_info, servicep, no_link_str, strlen(no_link_str)); 765 1161 } 766 1162 else … … 768 1164 if(servicep->size) 769 1165 { 770 if((servicep->timestamp > browserp->last_updated) || (force)) 771 { 772 sendData(conn_id, servicep->buffer_str, 4); 1166 reqp = create_request(conn_id, servicep, subscribe, nolink, nolinksize); 1167 reqpp = create_requestp(reqp, browserp); 1168 if ((servicep->timestamp > browserp->last_updated) || (force)) 1169 { 1170 if(browserp->formatted) 1171 sendData(conn_id, servicep->buffer_str, 4); 1172 else 1173 { 1174 if (servicep->is_nolink) 1175 sendData(conn_id, reqp->nolink, 11); 1176 else 1177 sendData(conn_id, servicep->buffer, 11); 1178 // sendData(conn_id, servicep->buffer, 11); 1179 } 773 1180 } 774 1181 else 775 1182 { 776 1183 sendData(conn_id, "", 4); 777 1184 } 778 1185 browserp->last_updated = servicep->timestamp; … … 781 1188 if(force) 782 1189 { 783 browserp->servicep = servicep;1190 // browserp->servicep = servicep; 784 1191 servicep->n_browsers++; 785 1192 } … … 789 1196 int check_browser_changes(char *service, int conn_id, int subscribe, int req, int browser, int force) 790 1197 { 791 CURR_SERVICE *servicep;1198 SERVICE *servicep; 792 1199 time_t tsecs; 793 1200 void recv_service_info(); … … 803 1210 if(!Curr_service_head) 804 1211 { 805 Curr_service_head = ( CURR_SERVICE *)malloc(sizeof(CURR_SERVICE));1212 Curr_service_head = (SERVICE *)malloc(sizeof(SERVICE)); 806 1213 sll_init((SLL *)Curr_service_head); 807 1214 } … … 873 1280 void print_service_formatted(); 874 1281 extern void sendData(); 875 CURR_SERVICE *servicep;1282 SERVICE *servicep; 876 1283 time_t tsecs; 1284 REQUEST *reqp, *auxp; 877 1285 878 1286 servicep = *tag; … … 897 1305 strcpy(Curr_service_name, servicep->name); 898 1306 get_curr_service_format(); 899 if((*size == 4 ) && (*buffer == -1)) 900 { 1307 // if ((*size == servicep->nolinksize) && (!memcmp(buffer, servicep->nolink, servicep->nolinksize))) 1308 // if ((*size == 4) && (*buffer == -1)) 1309 servicep->is_nolink = 0; 1310 if ((*size == strlen(no_link_str)) && (!memcmp(buffer, no_link_str, strlen(no_link_str)))) 1311 { 1312 servicep->is_nolink = 1; 901 1313 sprintf(Service_content_str, 902 1314 "Service %s Not Available", Curr_service_name); … … 906 1318 print_service_formatted(servicep, buffer, *size); 907 1319 } 908 if(servicep->last_updated == 0) 909 { 910 sendData(conn_id, Service_content_str, 4); 1320 if(WebDID_Debug) 1321 printf("service updated - %s, conn_id %d\n", Curr_service_name, conn_id); 1322 1323 if (IsWebDID) 1324 { 1325 if (servicep->last_updated == 0) 1326 { 1327 if (servicep->formatted) 1328 sendData(conn_id, Service_content_str, 4); 1329 else 1330 sendData(conn_id, servicep->buffer, 11); 1331 tsecs = time((time_t *)0); 1332 servicep->last_updated = tsecs; 1333 } 1334 } 1335 else 1336 { 911 1337 tsecs = time((time_t *)0); 912 1338 servicep->last_updated = tsecs; 913 } 914 } 915 916 void print_service_formatted(CURR_SERVICE *servicep, void *buff, int size) 1339 reqp = servicep->request_head; 1340 while ((reqp = (REQUEST *)dll_get_next((DLL *)servicep->request_head, 1341 (DLL *)reqp))) 1342 { 1343 /* 1344 if (servicep->buffer_size < reqp->nolinksize) 1345 { 1346 if (servicep->buffer_size) 1347 free(servicep->buffer); 1348 servicep->buffer = malloc((size_t)reqp->nolinksize); 1349 servicep->buffer_size = reqp->nolinksize; 1350 } 1351 memcpy(servicep->buffer, (char *)reqp->nolink, (size_t)reqp->nolinksize); 1352 servicep->size = *size; 1353 */ 1354 if (servicep->is_nolink) 1355 sendData(reqp->conn_id, reqp->nolink, 11); 1356 else 1357 sendData(reqp->conn_id, servicep->buffer, 11); 1358 if (reqp->timeout == -1) 1359 { 1360 // May delete servicep... 1361 auxp = reqp->prev; 1362 release_request(reqp->reqpp); 1363 reqp = auxp; 1364 } 1365 } 1366 } 1367 } 1368 1369 void print_service_formatted(SERVICE *servicep, void *buff, int size) 917 1370 { 918 1371 char type; … … 1463 1916 } 1464 1917 1918 char *getJSONDimBuffer(char *node, int browser) 1919 { 1920 BROWSER *browserp; 1921 int prepareJSONDimTree(); 1922 1923 if (browser) 1924 { 1925 if ((browserp = find_browser(browser))) 1926 { 1927 if (browserp->pattern[0] != '\0') 1928 { 1929 prepareJSONDimTree(node, browserp); 1930 return(browserp->JSONBuffer); 1931 } 1932 browserp->n_services = 0; 1933 browserp->n_servers = 0; 1934 browserp->n_nodes = 0; 1935 } 1936 } 1937 prepareJSONDimTree(node, 0); 1938 return(JSONBuffer); 1939 } 1940 1465 1941 char *getJSONHeader(int isSMI) 1466 1942 { … … 1550 2026 if(selective) 1551 2027 { 1552 if(!(ret = find_service_pattern(nodep, 0, browserp->pattern, &tot_n_servers )))2028 if(!(ret = find_service_pattern(nodep, 0, browserp->pattern, &tot_n_servers, 0))) 1553 2029 { 1554 2030 nodep->match = 0; … … 1609 2085 if(selective) 1610 2086 { 1611 if(!(ret = find_service_pattern(nodep, servp, browserp->pattern, 0 )))2087 if(!(ret = find_service_pattern(nodep, servp, browserp->pattern, 0, 0))) 1612 2088 { 1613 2089 servp->match = 0; … … 1714 2190 if(selective) 1715 2191 { 1716 if(!(ret = find_service_pattern(nodep, 0, pattern, &tot_n_servers )))2192 if(!(ret = find_service_pattern(nodep, 0, pattern, &tot_n_servers, 0))) 1717 2193 { 1718 2194 nodep->match = 0; … … 1773 2249 if(selective) 1774 2250 { 1775 if(!(ret = find_service_pattern(nodep, servp, pattern, 0 )))2251 if(!(ret = find_service_pattern(nodep, servp, pattern, 0, 0))) 1776 2252 { 1777 2253 servp->match = 0; … … 1814 2290 */ 1815 2291 printf("%s\n",browserp->JSONSmiBuffer); 2292 return(1); 2293 } 2294 2295 int prepareJSONDimTree(char *node, BROWSER *browserp) 2296 { 2297 char *ptr; 2298 NODE *nodep; 2299 SERVER *servp; 2300 char str[256], aux[128]; 2301 int selective = 0; 2302 int n_nodes, tot_n_nodes; 2303 int n_servers, tot_n_servers; 2304 int ret, n_found = 0; 2305 2306 if (browserp) 2307 { 2308 if (browserp->pattern[0] != '\0') 2309 selective = 1; 2310 else 2311 return(0); 2312 } 2313 if (!selective) 2314 { 2315 if (JSONBufferSize == 0) 2316 { 2317 JSONBuffer = malloc((size_t)(N_nodes * 128 + N_servers * 128)); 2318 } 2319 else if (JSONBufferSize < N_nodes * 128 + N_servers * 128) 2320 { 2321 free(JSONBuffer); 2322 JSONBuffer = malloc((size_t)(N_nodes * 128 + N_servers * 128)); 2323 } 2324 ptr = JSONBuffer; 2325 } 2326 else 2327 { 2328 if (browserp->JSONBufferSize == 0) 2329 { 2330 browserp->JSONBuffer = malloc((size_t)(N_services * (128*2))); 2331 } 2332 else if (browserp->JSONBufferSize < (N_services * (128 * 2))) 2333 { 2334 free(browserp->JSONBuffer); 2335 browserp->JSONBuffer = malloc((size_t)(N_services * (128 * 2))); 2336 } 2337 ptr = browserp->JSONBuffer; 2338 } 2339 *ptr = '\0'; 2340 if (!strcmp(node, "src")) 2341 { 2342 ptr = addJSONStart(ptr); 2343 ptr = addJSONNodeStart(ptr, "services"); 2344 // sprintf(str, "text: \"%s\", id: \"Nodes\", expanded: false", Title); 2345 // ptr = addJSONChildStart(ptr, str, 1); 2346 // ptr = addJSONNodeStart(ptr, "children"); 2347 nodep = Node_head; 2348 tot_n_nodes = 0; 2349 while ((nodep = (NODE *)sll_get_next((SLL *)nodep))) 2350 { 2351 // nodep->match = 1; 2352 if (selective) 2353 { 2354 if (!(ret = find_service_pattern(nodep, 0, browserp->pattern, &tot_n_servers, &ptr))) 2355 { 2356 // nodep->match = 0; 2357 continue; 2358 } 2359 else 2360 { 2361 n_found += ret; 2362 } 2363 } 2364 tot_n_nodes++; 2365 } 2366 if(n_found) 2367 { 2368 ptr--; 2369 *(ptr-1) = ' '; 2370 } 2371 /* 2372 n_nodes = 0; 2373 nodep = Node_head; 2374 while ((nodep = (NODE *)sll_get_next((SLL *)nodep))) 2375 { 2376 if (!nodep->match) 2377 continue; 2378 getNodeLabel(nodep->name, aux); 2379 sprintf(str, "text: \"%s\", id: \"%s\", qtip: \"%s\"", 2380 aux, nodep->name, nodep->name); 2381 ptr = addJSONChildStart(ptr, str, 0); 2382 n_nodes++; 2383 if (WebDID_Debug) 2384 printf("adding %s %d %d\n", nodep->name, n_nodes, tot_n_nodes); 2385 if (n_nodes < tot_n_nodes) 2386 ptr = addJSONChildEnd(ptr, 1); 2387 else 2388 ptr = addJSONChildEnd(ptr, 0); 2389 } 2390 */ 2391 // ptr = addJSONNodeEnd(ptr); 2392 // ptr = addJSONChildEnd(ptr, 0); 2393 ptr = addJSONNodeEnd(ptr); 2394 ptr = addJSONEnd(ptr); 2395 if (selective) 2396 { 2397 browserp->n_services = n_found; 2398 browserp->n_servers = tot_n_servers; 2399 browserp->n_nodes = tot_n_nodes; 2400 } 2401 } 2402 else 2403 { 2404 if ((nodep = find_node(node))) 2405 { 2406 ptr = addJSONStart(ptr); 2407 ptr = addJSONNodeStart(ptr, "children"); 2408 servp = nodep->server_head; 2409 tot_n_servers = 0; 2410 while ((servp = (SERVER *)sll_get_next((SLL *)servp))) 2411 { 2412 servp->match = 1; 2413 if (servp->busy != 1) 2414 { 2415 servp->match = 0; 2416 continue; 2417 } 2418 if (selective) 2419 { 2420 if (!(ret = find_service_pattern(nodep, servp, browserp->pattern, 0, 0))) 2421 { 2422 servp->match = 0; 2423 continue; 2424 } 2425 else 2426 { 2427 n_found += ret; 2428 } 2429 } 2430 tot_n_servers++; 2431 } 2432 n_servers = 0; 2433 servp = nodep->server_head; 2434 while ((servp = (SERVER *)sll_get_next((SLL *)servp))) 2435 { 2436 if (!servp->match) 2437 continue; 2438 sprintf(str, "text: \"%s\", id: \"%d\", leaf: true, icon: \"server.png\"", servp->name, servp->server.pid); 2439 ptr = addJSONChildStart(ptr, str, 0); 2440 n_servers++; 2441 if (n_servers < tot_n_servers) 2442 ptr = addJSONChildEnd(ptr, 1); 2443 else 2444 ptr = addJSONChildEnd(ptr, 0); 2445 } 2446 ptr = addJSONNodeEnd(ptr); 2447 ptr = addJSONEnd(ptr); 2448 } 2449 } 2450 /* 2451 if(!selective) 2452 printf(" Nodes&Servers %s\n",JSONBuffer); 2453 else 2454 printf(" Nodes&Servers %s\n",browserp->JSONBuffer); 2455 */ 1816 2456 return(1); 1817 2457 } … … 1871 2511 if(selective) 1872 2512 { 1873 n_found = find_server_service_pattern(servp, browserp->pattern );2513 n_found = find_server_service_pattern(servp, browserp->pattern, 0); 1874 2514 } 1875 2515 ptr = JSONServices; -
trunk/FACT++/dim/src/webDid/webServer.c
r18058 r18920 5 5 #include <fcntl.h> 6 6 7 int WebDID_Debug = 0; 7 extern int WebDID_Debug; 8 extern int IsWebDID; 8 9 9 10 #define BUFSIZE 8096 … … 83 84 } 84 85 85 int getParameters(char *buffer, char (*pars)[], char *ptrs[] )86 int getParameters(char *buffer, char (*pars)[], char *ptrs[], int nmandatory) 86 87 { 87 88 char *ptr, *parptr; … … 106 107 for(i = 0; ptrs[i]; i++) 107 108 { 108 109 if((ptr = strchr(ptrs[i],'&'))) 109 110 *ptr = '\0'; 110 111 while((ptr = strchr(ptrs[i],'%'))) … … 121 122 } 122 123 } 123 if(found == n) 124 return 1; 125 else 126 return 0; 124 if(nmandatory == -1) 125 { 126 if(found == n) 127 return 1; 128 } 129 else if(found >= nmandatory) 130 { 131 return found; 132 } 133 return 0; 127 134 } 128 135 … … 136 143 strcpy(pars[1],"browser="); 137 144 pars[2][0] = '\0'; 138 ret = getParameters(buffer, pars, ptrs );145 ret = getParameters(buffer, pars, ptrs, -1); 139 146 if(!ret) 140 147 return 0; … … 158 165 strcpy(pars[3],"browser="); 159 166 pars[4][0] = '\0'; 160 ret = getParameters(buffer, pars, ptrs );167 ret = getParameters(buffer, pars, ptrs, -1); 161 168 if(!ret) 162 169 return 0; … … 181 188 strcpy(pars[3],"force="); 182 189 pars[4][0] = '\0'; 183 ret = getParameters(buffer, pars, ptrs );190 ret = getParameters(buffer, pars, ptrs, -1); 184 191 if(!ret) 185 192 return 0; … … 190 197 if(WebDID_Debug) 191 198 printf("\nparse service pars - service %s %d %d %d\n\n",service, *req, *browser, *force); 199 return 1; 200 } 201 202 int getServiceParametersDim(char *buffer, char *service, void *nolink, int *nolinksize, int *update) 203 { 204 char pars[10][32]; 205 char *ptrs[10]; 206 int ret; 207 char nolinkstr[MAX_NAME] = { '\0' }, updatestr[10] = { '\0' }; 208 char servicestr[MAX_NAME]; 209 210 strcpy(pars[0], "service="); 211 strcpy(pars[1], "nolink="); 212 strcpy(pars[2], "update="); 213 pars[3][0] = '\0'; 214 ret = getParameters(buffer, pars, ptrs, 1); 215 if (!ret) 216 return 0; 217 strcpy(servicestr, ptrs[0]); 218 if (ptrs[1]) 219 strcpy(nolinkstr, ptrs[1]); 220 if (ptrs[2]) 221 strcpy(updatestr, ptrs[2]); 222 // sscanf(ptrs[1], "%d", req); 223 // sscanf(ptrs[2], "%d", browser); 224 // sscanf(ptrs[3], "%d", force); 225 if (servicestr[0] == '"') 226 { 227 strcpy((char *)service, &servicestr[1]); 228 ((char *)service)[strlen(servicestr) - 2] = '\0'; 229 } 230 else 231 { 232 strcpy(service, ptrs[0]); 233 } 234 if ((nolink) && (nolinksize)) 235 { 236 if(nolinkstr[0] != '\0') 237 { 238 if (nolinkstr[0] == '"') 239 { 240 strcpy((char *)nolink, &nolinkstr[1]); 241 ((char *)nolink)[strlen(nolinkstr) - 2] = '\0'; 242 *nolinksize = strlen(nolinkstr) - 2 + 1; 243 } 244 else 245 { 246 sscanf(nolinkstr, "%d", (int *)nolink); 247 *nolinksize = sizeof(int); 248 } 249 } 250 else 251 { 252 *((int *)nolink) = -1; 253 *nolinksize = sizeof(int); 254 } 255 } 256 if (update) 257 { 258 if (updatestr[0] != '\0') 259 { 260 sscanf(updatestr, "%d", (int *)update); 261 } 262 } 263 if (WebDID_Debug) 264 printf("\nparse service pars - service %s %s %s\n\n", service, nolinkstr, updatestr); 192 265 return 1; 193 266 } … … 238 311 } 239 312 240 void sendData(int conn_id, char *buffer, int type )313 void sendData(int conn_id, char *buffer, int type, int oper) 241 314 { 242 315 static char date_buffer[128]; … … 250 323 extern char *getJSONHeader(); 251 324 extern char *getJSONBuffer(); 325 extern char *getJSONDimBuffer(); 252 326 char datatype[128]; 253 327 char *conv_buffer; 328 int conv_size = 0; 329 char nolink[MAX_NAME]; 330 int nolinksize; 331 int update; 254 332 255 333 conv_buffer = buffer; … … 287 365 else 288 366 { 289 update_service_data(service, conn_id, 0, req, browser, force );367 update_service_data(service, conn_id, 0, req, browser, force, 1, 0, 0); 290 368 return; 291 369 } … … 296 374 if(WebDID_Debug) 297 375 printf("%s\n",ptr); 376 strcpy(datatype,"text/html"); 377 } 378 else if(type == 10) 379 { 380 ret = getServiceParametersDim(conv_buffer, service, nolink, &nolinksize, &update); 381 if(!ret) 382 { 383 strcpy(snd_data_buffer,"{}"); 384 ptr = snd_data_buffer; 385 } 386 else 387 { 388 if (oper == 0) 389 update = -1; 390 else if (oper == -1) 391 update = -2; 392 update_service_data(service, conn_id, update, 0, conn_id, 1, 0, nolink, nolinksize); 393 return; 394 } 395 } 396 else if(type == 11) 397 { 398 ptr = conv_buffer; 399 if(WebDID_Debug) 400 printf("%s\n",ptr); 401 // strcpy(datatype,"application/octet-stream"); 298 402 strcpy(datatype,"text/html"); 299 403 } … … 330 434 } 331 435 } 332 getTime(date_buffer); 333 (void)sprintf(snd_buffer,"HTTP/1.1 200 OK\r\nDate: %s\r\nServer: DID/19.7\r\nContent-Length: %d\r\nContent-Type: %s\r\nConnection: close\r\n\r\n", 334 date_buffer, (int)strlen(ptr), datatype); 335 (void)web_write(conn_id,snd_buffer,(int)strlen(snd_buffer)); 436 else if (type == 12) 437 { 438 ret = getServiceParametersDim(conv_buffer, service, 0, 0, 0); 439 if (!ret) 440 { 441 strcpy(snd_data_buffer, "{}"); 442 ptr = snd_data_buffer; 443 } 444 else 445 { 446 find_services(service, conn_id, conn_id, 1); 447 ptr = getJSONDimBuffer("src", conn_id); 448 } 449 } 450 if (IsWebDID) 451 { 452 getTime(date_buffer); 453 /* 454 (void)sprintf(snd_buffer, "HTTP/1.1 200 OK\r\nDate: %s\r\nServer: DID/19.7\r\nContent-Length: %d\r\nContent-Type: %s\r\nKeep-Alive: timeout=1000\r\nConnection: keep-alive\r\n\r\n", 455 date_buffer, (int)strlen(ptr), datatype); 456 */ 457 (void)sprintf(snd_buffer, "HTTP/1.1 200 OK\r\nDate: %s\r\nServer: DID/19.7\r\nContent-Length: %d\r\nContent-Type: %s\r\nConnection: close\r\n\r\n", 458 date_buffer, (int)strlen(ptr), datatype); 459 (void)web_write(conn_id, snd_buffer, (int)strlen(snd_buffer)); 460 } 336 461 if(WebDID_Debug) 337 462 printf("SENDING DATA to conn %d:\n%s\n",conn_id, snd_buffer); … … 391 516 else 392 517 { 393 update_service_data(service, conn_id, 0, req, browser, force );518 update_service_data(service, conn_id, 0, req, browser, force, 0, 0); 394 519 return; 395 520 } … … 434 559 } 435 560 } 436 getTime(date_buffer); 437 (void)sprintf(snd_buffer,"HTTP/1.1 200 OK\r\nDate: %s\r\nServer: DID/19.7\r\nContent-Length: %d\r\nContent-Type: %s\r\nConnection: close\r\n\r\n", 438 date_buffer, (int)strlen(ptr), datatype); 439 (void)web_write(conn_id,snd_buffer,(int)strlen(snd_buffer)); 561 if (IsWebDID) 562 { 563 getTime(date_buffer); 564 (void)sprintf(snd_buffer, "HTTP/1.1 200 OK\r\nDate: %s\r\nServer: DID/19.7\r\nContent-Length: %d\r\nContent-Type: %s\r\nConnection: close\r\n\r\n", 565 date_buffer, (int)strlen(ptr), datatype); 566 (void)web_write(conn_id, snd_buffer, (int)strlen(snd_buffer)); 567 } 440 568 if(WebDID_Debug) 441 569 printf("SENDING DATA to conn %d:\n%s\n",conn_id, snd_buffer); … … 453 581 static char snd_buffer[BUFSIZE+1]; /* static so zero filled */ 454 582 static char date_buffer[128]; 583 char *ptr; 584 int operation = 0; 455 585 456 586 … … 462 592 if(WebDID_Debug) 463 593 printf("Got %s\n", buffer); 464 if( strncmp(buffer,"GET ",4) && strncmp(buffer,"get ",4) ) 465 { 466 log_it(SORRY,"Only simple GET operation supported",buffer,conn_id); 467 return; 468 } 469 594 if (IsWebDID) 595 { 596 if (strncmp(buffer, "GET ", 4) && strncmp(buffer, "get ", 4)) 597 { 598 log_it(SORRY, "Only simple GET operation supported", buffer, conn_id); 599 return; 600 } 601 } 470 602 for(i=4;i<BUFSIZE;i++) 471 603 { /* null terminate after the second space to ignore extra stuff */ … … 479 611 if(WebDID_Debug) 480 612 printf("Got 1 %s\n", buffer); 481 for(j=0;j<i-1;j++) /* check for illegal parent directory use .. */613 for(j=0;j<i-1;j++) /* check for illegal parent directory use .. */ 482 614 { 483 615 if(buffer[j] == '.' && buffer[j+1] == '.') … … 516 648 printf("SENDING to conn %d:\n%s\n",conn_id, snd_buffer); 517 649 */ 650 ptr = &buffer[5]; 651 if (!IsWebDID) 652 { 653 if (!strncmp(&buffer[0], "GET", 3) || !strncmp(&buffer[0], "get", 3)) 654 { 655 operation = 0; 656 } 657 if (!strncmp(&buffer[0], "SUBSCRIBE", 9) || !strncmp(&buffer[0], "subscribe", 9)) 658 { 659 operation = 1; 660 ptr = &buffer[11]; 661 } 662 if (!strncmp(&buffer[0], "UNSUBSCRIBE", 11) || !strncmp(&buffer[0], "unsubscribe", 11)) 663 { 664 operation = -1; 665 ptr = &buffer[13]; 666 } 667 } 518 668 if(fstr == 0) 519 669 { 520 670 if(WebDID_Debug) 521 671 printf("Got %s\n", buffer); 522 if(!strncmp(&buffer[5],"didHeader",9)) 523 { 524 sendData(conn_id, &buffer[5], 0); 525 return; 526 } 527 else if(!strncmp(&buffer[5],"didData",7)) 528 { 529 sendData(conn_id, &buffer[5], 1); 530 return; 531 } 532 else if(!strncmp(&buffer[5],"didServices",11)) 533 { 534 sendData(conn_id, &buffer[5], 2); 535 return; 536 } 537 else if(!strncmp(&buffer[5],"didServiceData",14)) 538 { 539 sendData(conn_id, &buffer[5], 3); 540 return; 541 } 542 else if(!strncmp(&buffer[5],"didPoll",7)) 543 { 544 sendData(conn_id, &buffer[5], 5); 545 return; 546 } 547 else if(!strncmp(&buffer[5],"didQuery",8)) 548 { 549 sendData(conn_id, &buffer[5], 6); 550 return; 551 } 552 else if(!strncmp(&buffer[5],"smiData",7)) 553 { 554 sendSmiData(conn_id, &buffer[5], 1); 555 return; 556 } 557 else if(!strncmp(&buffer[5],"smiObjects",10)) 558 { 559 sendSmiData(conn_id, &buffer[5], 2); 672 if (!strncmp(ptr, "didHeader", 9)) 673 { 674 sendData(conn_id, ptr, 0, 0); 675 return; 676 } 677 else if (!strncmp(ptr, "didData", 7)) 678 { 679 sendData(conn_id, ptr, 1, 0); 680 return; 681 } 682 else if (!strncmp(ptr, "didServices", 11)) 683 { 684 sendData(conn_id, ptr, 2, 0); 685 return; 686 } 687 else if (!strncmp(ptr, "didServiceData", 14)) 688 { 689 sendData(conn_id, ptr, 3, 0); 690 return; 691 } 692 else if (!strncmp(ptr, "dimService", 10)) 693 { 694 sendData(conn_id, ptr, 10, operation); 695 return; 696 } 697 else if (!strncmp(ptr, "didPoll", 7)) 698 { 699 sendData(conn_id, ptr, 5, 0); 700 return; 701 } 702 else if (!strncmp(ptr, "didQuery", 8)) 703 { 704 sendData(conn_id, ptr, 6, 0); 705 return; 706 } 707 else if (!strncmp(ptr, "dimBrowser", 10)) 708 { 709 sendData(conn_id, ptr, 12, 0); 710 return; 711 } 712 else if (!strncmp(ptr, "smiData", 7)) 713 { 714 sendSmiData(conn_id, ptr, 1); 715 return; 716 } 717 else if (!strncmp(ptr, "smiObjects", 10)) 718 { 719 sendSmiData(conn_id, ptr, 2); 560 720 return; 561 721 } … … 635 795 static void handler( int conn_id, char *packet, int size, int status ) 636 796 { 797 int close_browser(); 798 637 799 switch(status) 638 800 { … … 644 806 Net_conns[conn_id].task,Net_conns[conn_id].node ); 645 807 } 646 web_close(conn_id); 808 close_browser(conn_id); 809 web_close(conn_id); 647 810 break; 648 811 case STA_CONN: /* connection received */ … … 707 870 *ptr = '\0'; 708 871 } 709 chdir(currwd);710 log_it(LOG,"webDi dstarting",argv[1],getpid());872 // chdir(currwd); 873 log_it(LOG,"webDim starting",argv[1],getpid()); 711 874 /* setup the network socket */ 712 875 proto = 1; … … 714 877 get_node_name(dns_node); 715 878 did_init(dns_node, DNS_PORT); 716 if(!web_open_server("DID",handler, &proto, &port, error_handler)) 717 return(0); 879 if(IsWebDID) 880 { 881 if (!web_open_server("DID", handler, &proto, &port, error_handler)) 882 return(0); 883 } 884 else 885 { 886 if (!web_open_server("DimClient", handler, &proto, &port, error_handler)) 887 return(0); 888 } 718 889 /* 719 890 ret = matchString("hello world","*ll*");
Note:
See TracChangeset
for help on using the changeset viewer.