Esempio n. 1
0
/*****************************************************************************
 * outputs_Close : Close all outputs and free allocated memory
 *****************************************************************************/
void outputs_Close( int i_num_outputs )
{
    int i;

    for ( i = 0; i < i_num_outputs; i++ )
    {
        output_t *p_output = pp_outputs[i];

        if ( p_output->config.i_config & OUTPUT_VALID )
        {
            msg_Dbg( NULL, "removing %s", p_output->config.psz_displayname );

            if ( p_output->p_packets )
                output_Flush( p_output );
            output_Close( p_output );
        }

        free( p_output );
    }

    free( pp_outputs );
}
Esempio n. 2
0
void config_ReadFile(void)
{
    FILE *p_file;
    char psz_line[2048];
    int i;

    if ( psz_conf_file == NULL )
    {
        msg_Err( NULL, "no config file" );
        return;
    }

    if ( (p_file = fopen( psz_conf_file, "r" )) == NULL )
    {
        msg_Err( NULL, "can't fopen config file %s", psz_conf_file );
        return;
    }

    while ( fgets( psz_line, sizeof(psz_line), p_file ) != NULL )
    {
        output_config_t config;
        output_t *p_output;
        char *psz_token, *psz_parser;

        psz_parser = strchr( psz_line, '#' );
        if ( psz_parser != NULL )
            *psz_parser-- = '\0';
        while ( psz_parser >= psz_line && isblank( *psz_parser ) )
            *psz_parser-- = '\0';
        if ( psz_line[0] == '\0' )
            continue;

        config_Defaults( &config );

        psz_token = strtok_r( psz_line, "\t\n ", &psz_parser );
        if ( psz_token == NULL || !config_ParseHost( &config, psz_token ))
        {
            config_Free( &config );
            continue;
        }

        psz_token = strtok_r( NULL, "\t\n ", &psz_parser );
        if ( psz_token == NULL )
        {
            config_Free( &config );
            continue;
        }
        if( atoi( psz_token ) == 1 )
            config.i_config |= OUTPUT_WATCH;
        else
            config.i_config &= ~OUTPUT_WATCH;

        psz_token = strtok_r( NULL, "\t\n ", &psz_parser );
        if ( psz_token == NULL )
        {
            config_Free( &config );
            continue;
        }

        if ( psz_token[0] == '*' )
        {
            config.b_passthrough = true;
        }
        else
        {
            config.i_sid = strtol(psz_token, NULL, 0);

            psz_token = strtok_r( NULL, "\t\n ", &psz_parser );
            if ( psz_token != NULL )
            {
                psz_parser = NULL;
                for ( ; ; )
                {
                    psz_token = strtok_r( psz_token, ",", &psz_parser );
                    if ( psz_token == NULL )
                        break;
                    config.pi_pids = realloc( config.pi_pids,
                                     (config.i_nb_pids + 1) * sizeof(uint16_t) );
                    config.pi_pids[config.i_nb_pids++] = strtol(psz_token, NULL, 0);
                    psz_token = NULL;
                }
            }
        }

        config_Print( &config );

        p_output = output_Find( &config );

        if ( p_output == NULL )
            p_output = output_Create( &config );

        if ( p_output != NULL )
        {
            free( p_output->config.psz_displayname );
            p_output->config.psz_displayname = strdup( config.psz_displayname );

            config.i_config |= OUTPUT_VALID | OUTPUT_STILL_PRESENT;
            output_Change( p_output, &config );
            demux_Change( p_output, &config );
        }

        config_Free( &config );
    }

    fclose( p_file );

    for ( i = 0; i < i_nb_outputs; i++ )
    {
        output_t *p_output = pp_outputs[i];
        output_config_t config;

        config_Init( &config );

        if ( (p_output->config.i_config & OUTPUT_VALID) &&
             !(p_output->config.i_config & OUTPUT_STILL_PRESENT) )
        {
            msg_Dbg( NULL, "closing %s", p_output->config.psz_displayname );
            demux_Change( p_output, &config );
            output_Close( p_output );
        }

        p_output->config.i_config &= ~OUTPUT_STILL_PRESENT;
        config_Free( &config );
    }
}