void add_parms_list( statement *stmt, char *separators, int flag ) /****************************************************************/ { int i = 0; char *p; if( flag ) { for( i = 0; i < MAX_STMT_PARMS; ++i ) { if( *(stmt->parms[ i ]) == '\0' ) { break; } } } for( ; i < MAX_STMT_PARMS; ++i ) { p = strtok( NULL, separators ); if( p == NULL ) { if( flag ) break; *(stmt->parms[ i ]) = '\0'; } else { strcpy( stmt->parms[ i ], p ); } } if(( strstr( stmt->name, "TEXT" ) != NULL ) || ( strcmp( stmt->name, "GROUPBOX" ) == 0 ) || ( strcmp( stmt->name, "CONTROL" ) == 0 )) { if( !process_parms( stmt->parms, MAX_STMT_PARMS, control_style_win, control_style_os2, CTRL_STYLE_CNT, 0, check_parm_item, "DT_MNEMONIC" ) && strcmp( stmt->text, "\"\"" ) ) { add_parms_item( stmt->parms, "DT_MNEMONIC", ADD_AFTER ); } } if(( strcmp( stmt->name + 1, "TEXT" ) == 0 ) && ( strlen( stmt->text ) > 10 )) { if( !process_parms( stmt->parms, MAX_STMT_PARMS, control_style_win, control_style_os2, CTRL_STYLE_CNT, 0, check_parm_item, "DT_WORDBREAK" ) ) { add_parms_item( stmt->parms, "DT_WORDBREAK", ADD_AFTER ); } } }
void convert_font( char *parms[], int parms_cnt ) /***********************************************/ { int i; if( opt.font ) { for( i = 0; i < parms_cnt; ++i ) { strcpy( parms[ i ], opt.font_name ); } } else { process_parms( parms, parms_cnt, font_win, font_os2, FONT_CNT, 0, convert_parm_table, NULL ); } }
int main (int argc, char *argv[]) { char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *dh; struct bpf_program filter; char filter_app[] = "ip and tcp"; bpf_u_int32 mask; bpf_u_int32 net; struct pcap_pkthdr header; const u_char *packet; if (parse_config (argv[0])) { printf ("Failed to parse config file, leaving\n"); return -1; } if (process_parms (argc,argv)) { printf ("Bad parameters, leaving\n"); return -1; } if (devname==NULL) { #ifdef WIN32 printf ("A device number is required. Run with -list to get a list.\n"); #else printf ("A device name (such as eth0) is required\n"); #endif exit (-1); } if (daemonize && debuglogdir[0]==0) { printf ("In daemon mode at least a debug log directory (-dd) must be used\n"); exit (-1); } #ifndef WIN32 if (daemonize) { switch (go_daemon()) { case -1: daemonize=0; log_debug (0, "Failed to become a daemon!"); exit (-1); case 1: // We are the parent. Exit and let the child on its own exit (0); case 0: log_debug (3, "Successfully became a daemon."); break; default: daemonize=0; log_debug (0, "This is a bug!"); exit (-1); } } #endif #ifdef WIN32 pcap_if_t *alldevs; int inum = atoi (devname); if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1) { fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf); exit(1); } int devnum=0; pcap_if_t *d; for(d=alldevs; d; d=d->next) { devnum++; printf("%d. %s", devnum, d->name); if (d->description) printf(" (%s)\n", d->description); else printf(" (No description available)\n"); } if(devnum==0) { printf("\nNo interfaces found! Make sure WinPcap is installed.\n"); return -1; } if(inum < 1 || inum > devnum) { printf("\nInterface number out of range.\n"); /* Free the device list */ pcap_freealldevs(alldevs); return -1; } /* Jump to the selected adapter */ for(d=alldevs, devnum=0; devnum< inum-1 ;d=d->next, devnum++) {;} strcpymalloc ( (u_char **) &devname, (u_char *) d->name); #endif log_debug (3, "Getting address and mask for device %s...",devname); if (pcap_lookupnet(devname, &net, &mask, errbuf)==-1) { log_debug (0, "error [%s]",errbuf); exit (-1); } log_debug (3, "OK"); log_debug (3, "Opening device..."); #ifdef WIN32 /* At this point, we don't need any more the device list. Free it */ dh = pcap_open (devname, 65535, promisc?PCAP_OPENFLAG_PROMISCUOUS:0, 1000, NULL, errbuf); pcap_freealldevs(alldevs); #else // dh = pcap_open_live (devname, 65535, promisc, 1000, errbuf); dh = pcap_open_offline(input_file, errbuf); #endif if (dh==NULL) { log_debug (0, "error [%s]",errbuf); exit (-1); } log_debug (3, "OK"); if (data_offset == -1) /* User didn't force an offset, try to find out */ { char *dln; log_debug (3, "Checking datalink type..."); if (get_datalink_info (dh, &dln, &data_offset)) { log_debug (0, "not supported. Please play with the -offset option (see docs)"); exit (-1); } log_debug (3, "OK, %s, offset = %d", dln, data_offset); } else { log_debug (1, "Using an user defined offset [%d], for datalink type [%d], good luck!", data_offset, get_datalink_type(dh)); } log_debug (3, "Compiling filter [%s]...",filter_app); if (pcap_compile(dh, &filter, filter_app, 0, net)==-1) { log_debug (0, "error [%s]",errbuf); exit (-1); } log_debug (3, "OK"); log_debug (3, "Setting filter..."); if (pcap_setfilter(dh, &filter)==-1) { log_debug (0, "error [%s]",errbuf); exit (-1); } log_debug (3, "OK"); log_debug (3, "Entering capture loop..."); if (chatlogdir[0]!=0) #ifdef WIN32 mkdir (chatlogdir); #else mkdir (chatlogdir,0700); #endif if (debuglogdir[0]!=0) #ifdef WIN32 mkdir (debuglogdir); #else mkdir (debuglogdir,0700); #endif long packet_count = 0; while (1) { packet = pcap_next(dh, &header); if (packet==NULL) { log_debug (5, "No packet received"); continue; } process_packet (++packet_count, &header,packet); } }
void process_dialog_declaration( FILE *fi, FILE *fo, char *line ) /***************************************************************/ { long font_size = 0; char *font_name = NULL; char *separators = " \t,|"; int font_set = 0; int hidden_dialog = 0; char *buff1; char *p; char **p2; size_t len; int sysmodal, visible; int i; ++dialogs_cnt; if( opt.quiet == 0 ) { fprintf( stdout, "." ); } // process DIALOG line buff1 = malloc( MAX_LINE_LEN ); strcpy( buff1, skip_separator( line ) ); p = strtok( buff1, separators ); if( p != NULL ) strcpy( dlg_hdr.ID, p ); p = strtok( NULL, " ,\t" ); while(( p != NULL ) && !isdigit( *p ) ) p = strtok( NULL, separators ); if( p != NULL ) dlg_hdr.x = atoi( p ) * CONV_X; p = strtok( NULL, separators ); if( p != NULL ) dlg_hdr.y = atoi( p ) * CONV_Y; p = strtok( NULL, separators ); if( p != NULL ) dlg_hdr.dx = atoi( p ) * CONV_X; p = strtok( NULL, separators ); if( p != NULL ) dlg_hdr.dy = atoi( p ) * CONV_Y; dlg_hdr.y = 230 - dlg_hdr.y - dlg_hdr.dy; strcpy( dlg_hdr.text, "\"\"" ); // process next lines my_fgets( line, MAX_LINE_LEN, fi ); while(( *line != '\0' ) && ( strstr( line, "BEGIN" ) == NULL )) { strcpy( buff1, line ); strtok( buff1, separators ); if( strstr( line, "STYLE" ) != NULL ) { add_parms_list( &dlg_hdr, separators, 1 ); len = strlen( line ); for( p = line + len - 1; len && isspace( *p ); --len ) *(p--) = '\0'; if( *p == '|' ) { my_fgets( line, MAX_LINE_LEN, fi ); strcpy( buff1, line ); p = strtok( buff1, separators ); while( p != NULL ) { add_parms_item( dlg_hdr.parms, p, ADD_AFTER ); p = strtok( NULL, separators ); } } } else if( (p = strstr( line, "CAPTION" )) != NULL ) { strcpy( dlg_hdr.text, p + 8 ); dlg_hdr.text[ strlen( dlg_hdr.text ) ] = '\0'; } else if( strstr( line, "FONT" ) != NULL ) { font_set = 1; p = strtok( NULL, separators ); font_size = strtol( p, &p, 10 ); p = strtok( NULL, "\"" ); p = strtok( NULL, "\"" ); if( opt.font ) { font_name = malloc( strlen( opt.font_name ) + 1 ); strcpy( font_name, opt.font_name ); if( opt.font_size != 0 ) { font_size = opt.font_size; } } else { if( p != NULL ) { font_name = malloc( strlen( p ) + 10 ); strcpy( font_name, p ); p2 = malloc( sizeof(char *) ); *p2 = font_name; convert_font( p2, 1 ); free( p2 ); } } } my_fgets( line, MAX_LINE_LEN, fi ); } process_style( dlg_hdr.parms, "DIALOG" ); if( font_set == 0 ) { font_name = malloc( 7 ); strcpy( font_name, "Helv" ); font_size = 10; } sysmodal = process_parms( dlg_hdr.parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, 0, check_parm_item, "FCF_SYSMODAL" ); if( opt.hide ) { for( i = 0; i < opt.flist_cnt; ++i ) { if( stricmp( dlg_hdr.ID, opt.flist_data[ i ] ) == 0 ) { hidden_dialog = 1; break; } } } visible = process_parms( dlg_hdr.parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, 0, check_parm_item, "WS_VISIBLE" ); fprintf( fo, "DLGTEMPLATE %s\n", dlg_hdr.ID ); fprintf( fo, "BEGIN\n%sDIALOG %s, %s, %d, %d, %d, %d, ", STR_SPC, dlg_hdr.text, dlg_hdr.ID, dlg_hdr.x, dlg_hdr.y, dlg_hdr.dx, dlg_hdr.dy ); if( hidden_dialog ) { fprintf( fo, "FS_BORDER | NOT FS_DLGBORDER | NOT WS_VISIBLE\n" ); } else { #if defined( OLD_FORMAT ) if( sysmodal && visible ) { fprintf( fo, "FS_SYSMODAL\n\t\t| WS_VISIBLE" ); } else if( sysmodal ) { fprintf( fo, "FS_SYSMODAL\n\t\t" ); } else if( visible ) { fprintf( fo, "WS_VISIBLE\n\t\t" ); } else { fprintf( fo, "0L\n\t\t" ); } #else if( sysmodal && visible ) { fprintf( fo, "\n\t\tFS_SYSMODAL | WS_VISIBLE" ); } else if( sysmodal ) { fprintf( fo, "\n\t\tFS_SYSMODAL" ); } else if( visible ) { fprintf( fo, "\n\t\tWS_VISIBLE" ); } else { fprintf( fo, "\n\t\t0L" ); } #endif out_parms_style( fo, dlg_hdr.parms, "DIALOG" ); } if(( font_name != NULL ) || ( font_size != 0 )) { fprintf( fo, "%sPRESPARAMS PP_FONTNAMESIZE, ", STR_SPC ); if( font_size != 0 ) { fprintf( fo, "\"%ld.%s\"\n", font_size, font_name ); } else { fprintf( fo, "\"%s\"\n", font_name ); } free( font_name ); } fprintf( fo, "%sBEGIN\n", STR_SPC ); free( buff1 ); }
void process_style( char *parms[], char *str ) /********************************************/ { char **ptr; control_type control = 0; int i; if( strcmp( str, "DIALOG" ) != 0 ) { ptr = malloc( sizeof(char *) ); *ptr = str; control = process_parms( ptr, 1, control_type_win, control_type_os2, CTRL_TYPE_CNT, 0, convert_parm_table, NULL ); free( ptr ); if( control == T_COMBOBOX ) { if( process_parms( parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, control, check_parm_item, "CBS_DROPDOWNLIST" ) ) { if( process_parms( parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, control, check_parm_item, "CBS_OWNERDRAW" ) ) { strcpy( str, "CONTROL" ); add_parms_item( parms, "\"watcombo\"", ADD_BEFORE ); } } } else if( control == T_CONTROL ) { if( process_parms( parms, MAX_STMT_PARMS, style_win[ control ], style_os2[ control ], style_cnt[ control ], control, check_parm_item, "BS_GROUPBOX" ) ) { strcpy( str, "GROUPBOX" ); control = T_GROUPBOX; for( i = 0; i < MAX_STMT_PARMS; ++i ) { *(parms[ i ]) = '\0'; } } } process_parms( parms, MAX_STMT_PARMS, style_win[ control ], style_os2[ control ], style_cnt[ control ], control, convert_parm_table, NULL ); if( control == T_CONTROL ) { process_parms( parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, control, convert_parm_table, NULL ); if( process_parms( parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, control, check_parm_item, "WC_STATIC" ) ) { if( !process_parms( parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, control, check_parm_item, "SS_" ) ) { add_parms_item( parms, "SS_GROUPBOX", ADD_AFTER ); } } } else { process_parms( parms, MAX_STMT_PARMS, control_style_win, control_style_os2, CTRL_STYLE_CNT, control, convert_parm_table, NULL ); } if( !process_parms( parms, MAX_STMT_PARMS, control_class_win, control_class_os2, CTRL_NAME_CNT, control, check_parm_item, "WS_VISIBLE" ) ) { add_parms_item( parms, "WS_VISIBLE", ADD_AFTER ); } } process_parms( parms, MAX_STMT_PARMS, window_style_win, window_style_os2, WND_STYLE_CNT, control, convert_parm_table, NULL ); }
int main (int argc, char *argv[]) { char errbuf[PCAP_ERRBUF_SIZE]; pcap_t *dh; struct bpf_program filter; bpf_u_int32 mask; bpf_u_int32 net; struct pcap_pkthdr header; const u_char *packet; if (parse_config (argv[0])) { printf ("Failed to parse config file, leaving\n"); return -1; } if (process_parms (argc,argv)) { printf ("Bad parameters, leaving\n"); return -1; } if (devname==NULL) { printf ("A device name (such as eth0) is required\n"); exit (-1); } if (daemonize) { switch (go_daemon()) { case -1: daemonize=0; log_debug (0, "Failed to become a daemon!"); exit (-1); case 1: // We are the parent. Exit and let the child on its own exit (0); case 0: log_debug (3, "Successfully became a daemon."); break; default: daemonize=0; log_debug (0, "This is a bug!"); exit (-1); } } else strcpy (debuglogdir,""); log_debug (3, "Getting address and mask for device %s...",devname); if (pcap_lookupnet(devname, &net, &mask, errbuf)==-1) { log_debug (0, "error [%s]",errbuf); exit (-1); } log_debug (3, "OK"); log_debug (3, "Opening device..."); dh = pcap_open_live (devname, 65535, promisc, 1000, errbuf); if (dh==NULL) { log_debug (0, "error [%s]",errbuf); exit (-1); } log_debug (3, "OK"); if (data_offset == -1) /* User didn't force an offset, try to find out */ { char *dln; log_debug (3, "Checking datalink type..."); if (get_datalink_info (dh, &dln, &data_offset)) { log_debug (0, "not supported. Please play with the -offset option (see docs)"); exit (-1); } log_debug (3, "OK, %s, offset = %d", dln, data_offset); } else { log_debug (1, "Using an user defined offset [%d], for datalink type [%d], good luck!", data_offset, get_datalink_type(dh)); } log_debug (3, "Compiling filter [%s]...",filter_app); if (pcap_compile(dh, &filter, filter_app, 0, net)==-1) { log_debug (0, "error: Couldn't parse filter %s", filter_app); exit (-1); } log_debug (3, "OK"); log_debug (3, "Setting filter..."); if (pcap_setfilter(dh, &filter)==-1) { log_debug (0, "error [%s]",errbuf); exit (-1); } log_debug (3, "OK"); log_debug (3, "Entering capture loop..."); if (chatlogdir[0]!=0) mkdir (chatlogdir,0700); if (debuglogdir[0]!=0) mkdir (debuglogdir,0700); long packet_count = 0; while (1) { packet = pcap_next(dh, &header); if (packet==NULL) { log_debug (5, "No packet received"); continue; } process_packet (++packet_count, &header,packet); } }