On May 6, 2010, at 4:22 PM, Some Guy wrote:

> What we want to do is create the subrequest (or maybe just a request)
> without any previous request_rec* object.  At least that is what I figured
> markus meant when he said "build a request completely free".  From the APIs,
> this does not seem possible, and using libCurl may be the better solution.

Question:  when is the code being called?  On an incoming request?  Or is this 
something you are trying to do with a pool clean up?  Or init?  Since this is 
an apache module, it will have some sort of a hook, most can work (e.g. filters 
will still have a request).

So, if you don't have a request_rec structure anywhere because you are using 
the sub_request to log something to log something on a hook that has nothing to 
do with an incoming connection, it comes down to you building and populating 
the request_rec from scratch or using libcurl.  It really depends on your 
ultimate objective here.

Joe




> 
> On Thu, May 6, 2010 at 12:40 PM, Joe Lewis <j...@joe-lewis.com> wrote:
> 
>> On May 6, 2010, at 8:40 AM, Some Guy wrote:
>> 
>>> I wanted to do something similar, but the Apache 2 APIs require a
>>> request_rec* in the lookup_uri method.  Tracing the code in request.c, it
>>> uses the passed in request_rec* in make_sub_request.
>>> 
>>> The example Joe provided won't compile, and the request_rec can't be NULL
>>> otherwise the code will segfault.  Any other ways to do this?
>> 
>> There are many ways - you can use libCURL to make the request, or you can
>> revisit the two code examples I gave you.  One was from my memory, then
>> realizing I had forgotten a lot of it, I scraped some code from a functional
>> module.  Did you notice both examples?  The bottom one was just to point you
>> in the right direction.  I have simplified the other one that I had scraped
>> from a functional module, and stuffed it into a fresh module generated by
>> "apxs -g -n subrequest", and it compiled quite nicely.  The diff :
>> 
>> 47a48,55
>>>    request_rec       *subr;
>>>    int return_code;
>>>    subr = ap_sub_req_lookup_uri("/index.html",r,NULL);
>>>    if ((subr != NULL) && (subr->status == HTTP_OK)) {
>>>        return_code = ap_run_sub_req(subr);
>>>        ap_destroy_sub_req(subr);
>>>    }
>>> 
>> 
>> 
>> I am presuming you copied and pasted my over simplified example at the
>> bottom of my response rather than using the top code section.
>> 
>> 
>> 
>> 
>>> 
>>> On Tue, Apr 20, 2010 at 4:35 PM, Joe Lewis <j...@joe-lewis.com> wrote:
>>> 
>>>> ((template_context *)f->ctx)->include_r =
>>>> ap_sub_req_lookup_uri(uri,f->r,((template_context
>>>> *)f->ctx)->include_filter);
>>>> apr_table_setn(((template_context
>>>> *)f->ctx)->include_r->notes,TEMPLATE_OVERRIDE_PARSER,"-");
>>>> if ((((template_context *)f->ctx)->include_r != NULL) &&
>>>> (((template_context *)f->ctx)->include_r->status == HTTP_OK)) {
>>>> #ifdef DEBUG
>>>> ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, f->r, "mod_template:
>>>> mod_template_include() - calling ap_run_sub_req()");
>>>> 
>>>> On Apr 20, 2010, at 2:20 PM, <markus.l...@dlr.de> <markus.l...@dlr.de>
>>>> wrote:
>>>> 
>>>>> 
>>>>> Hi. Can I build a request completely free and send it with
>>>>> ap_run_sub_req? I could not find any good documentation or examples.
>>>>> 
>>>>> Thanks
>>>>> Markus
>> 

Reply via email to