Example #1
0
static
rc_t CC KBufferedStreamWhack ( KBufferedStream *self )
{
    if ( self -> out_buffer != NULL && self -> out_marker != 0 )
    {
        size_t num_writ;
        KStreamWriteAll ( self -> out, self -> out_buffer, self -> out_marker, & num_writ );
    }

    KStreamRelease ( self -> in );
    KStreamRelease ( self -> out );

    if ( self -> in_buffer != NULL )
        free ( self -> in_buffer );
    if ( self -> out_buffer != NULL )
        free ( self -> out_buffer );

    free ( self );
    return 0;
}
Example #2
0
rc_t raw_search_request( const request_params * request,
                        on_string_t on_line,
                        uint32_t * rslt_code,
                        void * data )
{
    rc_t rc;
    cgi_request * req;
    request_params validated_request;

    validate_request_params( request, &validated_request );
    rc = make_cgi_request( &req, validated_request.search_url );
    if ( rc == 0 )
    {
        const char ** ptr = validated_request.terms;
        rc = add_cgi_request_param( req, "version=%s", validated_request.search_ver );
        while ( rc == 0 && *ptr != NULL )
        {
            rc = add_cgi_request_param( req, "term=%s", *ptr );
            ptr++;
        }
        ptr = validated_request.params;
        while ( rc == 0 && *ptr != NULL )
        {
            rc = add_cgi_request_param( req, "%s", *ptr );
            ptr++;
        }
        if ( rc == 0 )
        {
            struct KStream * stream;
            rc = perform_cgi_request( req, &stream, rslt_code );
            if ( rc == 0 )
            {
                rc = stream_line_read( stream, on_line,
                    validated_request.buffer_size, validated_request.timeout_ms, data );
                KStreamRelease( stream );
            }
        }
        release_cgi_request( req );
    }
    return rc;
}
Example #3
0
static
rc_t CC
_HttpStreamCloseInternals_ZHR ( const struct XFSHttpStream * self )
{
    struct XFSHttpStream * Stream = ( struct XFSHttpStream * ) self;

    if ( Stream == 0 ) {
        return 0;
    }

    if ( Stream -> str != NULL ) {
        KStreamRelease ( Stream -> str );

        Stream -> str = NULL;
    }

    if ( Stream -> res != NULL ) {
        KClientHttpResultRelease ( Stream -> res );

        Stream -> res = NULL;
    }

    if ( Stream -> req != NULL ) {
        KClientHttpRequestRelease ( Stream -> req );

        Stream -> req = NULL;
    }

    if ( Stream -> http != NULL ) {
        KClientHttpRelease ( Stream -> http );

        Stream -> http = NULL;
    }

    return 0;
}   /* _HttpStreamCloseInternals_ZHR () */
Example #4
0
rc_t CC KMain (int argc, char * argv[])
{
    Args * args;
    uint32_t pcount;
    rc_t rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef));

    if ( rc == 0 )
    {
        rc = ArgsParamCount (args, &pcount);
        if ( rc == 0 )
        {
            if ( pcount != 0 )
            {
                rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive);
                MiniUsage (args);
            }
            else
            { 
                const KStream *std_in;
                rc = KStreamMakeStdIn ( & std_in );
                if ( rc == 0 )
                {
                    KStream* buffered;
                    rc = KStreamMakeBuffered ( &buffered, std_in, 0 /*input-only*/, 0 /*use default size*/ );
                    if ( rc == 0 )
                    {
                        GeneralLoader loader ( *buffered );
                        
                        rc = ArgsOptionCount (args, OPTION_INCLUDE_PATHS, &pcount);
                        if ( rc == 0 )
                        {
                            for ( uint32_t i = 0 ; i < pcount; ++i )
                            {
                                const char* value;
                                rc = ArgsOptionValue (args, OPTION_INCLUDE_PATHS, i, &value);
                                if ( rc != 0 )
                                {
                                    break;
                                }
                                loader . AddSchemaIncludePath ( value );
                            }
                        }
                        
                        rc = ArgsOptionCount (args, OPTION_SCHEMAS, &pcount);
                        if ( rc == 0 )
                        {
                            for ( uint32_t i = 0 ; i < pcount; ++i )
                            {
                                const char* value;
                                rc = ArgsOptionValue (args, OPTION_SCHEMAS, i, &value);
                                if ( rc != 0 )
                                {
                                    break;
                                }
                                loader . AddSchemaFile( value );
                            }
                        }
                        
                        rc = ArgsOptionCount (args, OPTION_TARGET, &pcount);
                        if ( rc == 0 && pcount == 1 )
                        {
                            const char* value;
                            rc = ArgsOptionValue (args, OPTION_TARGET, 0, &value);
                            if ( rc == 0 )
                            {
                                loader . SetTargetOverride ( value );
                            }
                        }
                        
                        if ( rc == 0 )
                        {
                            rc = loader . Run();
                        }
                        KStreamRelease ( buffered );
                    }
                    KStreamRelease ( std_in );
                }
            }
        }
    }
    
    if ( rc != 0) 
    {
        LOGERR ( klogErr, rc, "load failed" );
    }
    
    ArgsWhack(args);
    return rc;
}
Example #5
0
/* MakeBuffered
 *  makes a one or two-way stream buffer
 */
LIB_EXPORT rc_t CC KStreamMakeBuffered ( KStream ** buffered,
    const KStream * in, KStream * out, size_t buffer_size )
{
    rc_t rc;

    if ( buffered == NULL )
        rc = RC ( rcNS, rcStream, rcConstructing, rcParam, rcNull );
    else
    {
        bool can_read = ( in == NULL ) ? false : in -> read_enabled;
        bool can_write = ( out == NULL ) ? false : out -> write_enabled;

        if ( ! can_read && ! can_write )
            rc = RC ( rcNS, rcStream, rcConstructing, rcStream, rcNoPerm );
        else
        {
            KBufferedStream * bs = calloc ( 1, sizeof * bs );
            if ( bs == NULL )
                rc = RC ( rcNS, rcStream, rcConstructing, rcMemory, rcExhausted );
            else
            {
                rc = KStreamInit ( & bs -> dad, ( const KStream_vt* ) & vtKBufferedStream, 
                    "KBufferedStream", "adapter", can_read, can_write );
                if ( rc == 0 )
                {
                    bs -> buffer_size = buffer_size ? buffer_size : DEFAULT_BUFFER_SIZE;
                    if ( in != NULL )
                        bs -> in_buffer = malloc ( bs -> buffer_size );
                    if ( out != NULL )
                        bs -> out_buffer = malloc ( bs -> buffer_size );
                    if ( ( in != NULL && bs -> in_buffer == NULL ) ||
                         ( out != NULL && bs -> out_buffer == NULL ) )
                    {
                        rc = RC ( rcNS, rcStream, rcConstructing, rcMemory, rcExhausted );
                    }
                    else
                    {
                        rc = KStreamAddRef ( in );
                        if ( rc == 0 )
                        {
                            rc = KStreamAddRef ( out );
                            if ( rc ==  0 )
                            {
                                bs -> in = in;
                                bs -> out = out;
                                * buffered = & bs -> dad;
                                
                                return 0;
                            }
                            
                            KStreamRelease ( in );
                        }
                    }

                    if ( bs -> in_buffer != NULL )
                        free ( bs -> in_buffer );
                    if ( bs -> out_buffer != NULL )
                        free ( bs -> out_buffer );
                }

                free ( bs );
            }
        }

        * buffered = NULL;
    }

    return rc;
}
Example #6
0
rc_t raw_names_request( const request_params * request,
                        on_string_t on_line,
                        uint32_t * rslt_code,
                        void * data )
{
    rc_t rc;
    cgi_request * req;
    request_params validated_request;

    validate_request_params( request, &validated_request );
    rc = make_cgi_request( &req, validated_request.names_url );
    if ( rc == 0 )
    {
        int i = 0;
        const char ** ptr = validated_request.terms;
        rc = add_cgi_request_param( req, "version=%s", validated_request.names_ver );
        for ( i = 0; rc == 0 && *ptr != NULL; ++ i, ++ ptr )
        {
            if ( validated_request . names_ver [ 0 ] < '3' )
                rc = add_cgi_request_param( req, "acc=%s", *ptr );
            else
                rc = add_cgi_request_param( req, "object=%d||%s", i, *ptr );
        }
        rc = add_cgi_request_param ( req, "accept-proto=%s",
                                     validated_request . proto );
        ptr = validated_request.params;
        while ( rc == 0 && *ptr != NULL )
        {
            rc = add_cgi_request_param( req, "%s", *ptr );
            ptr++;
        }
        if ( rc == 0 && validated_request . projects != NULL &&
             validated_request . projects [ 0 ] != 0 )
        {
            const KRepositoryMgr * mgr = NULL;
            uint32_t * ptr = NULL;
            rc = KRepositoryMgr_Make ( & mgr );
            for ( ptr = validated_request . projects;
                  rc == 0 && * ptr != 0; ++ ptr )
            {
                char buffer [ 64 ] = "";
                size_t ticket_size = 0;
                rc = KRepositoryMgr_DownloadTicket ( mgr, * ptr,
                    buffer, sizeof buffer, & ticket_size );
                if ( rc != 0 )
                    PLOGERR ( klogErr, ( klogErr, rc,
                        "Cannot add project '$(p)'", "p=%u", * ptr ) );
                else
                    rc = add_cgi_request_param ( req,
                        "tic=%.*s", ( int ) ticket_size, buffer );
            }
            RELEASE ( KRepositoryMgr, mgr );
        }
        if ( rc == 0 )
        {
            struct KStream * stream;
            rc = perform_cgi_request( req, &stream, rslt_code );
            if ( rc == 0 )
            {
                rc = stream_line_read( stream, on_line,
                    validated_request.buffer_size, validated_request.timeout_ms, data );
                KStreamRelease( stream );
            }
        }
        release_cgi_request( req );
    }
    return rc;
}