Example #1
0
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 );
        }
    }
}
Example #2
0
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 );
    }
}
Example #3
0
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);
	}
}
Example #4
0
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 );
}
Example #5
0
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 );
}
Example #6
0
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);
	}
}