guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: What replaces scm_register_module_xxx (Doc update?)


From: Neil Jerram
Subject: Re: What replaces scm_register_module_xxx (Doc update?)
Date: 17 Aug 2002 12:59:47 +0100
User-agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7

>>>>> "rm" == rm  <address@hidden> writes:

    rm> Apache (the application) loads mod_guile (an apache module). mod_guile
    rm> registers some callback functions with apache. Apache then calls theses
    rm> functions whenever it thinks that a certain part of a request 
(authrntication,
    rm> authorization, URL-rewrite, content delivery etc.) should be handled by
    rm> guile (as can be customized in apaches configuration file). mod_guile 
then
    rm> calls the function that is supposed to handle this part of a request
    rm> (again, the module and name of the function can be specified in the 
server
    rm> configuration files). To ba able to do something usefull, these 
functions
    rm> need to be able to access the data structures of the server/request.
    rm> Each hander function is passed a request-record structure (a SMOB 
arround
    rm> apaches 'real' datastructure) as a parameter - this structure has fields
    rm> that point to the server and connection record structures as well. 
    rm> Since all of these structures have quite a lot of fields we end up with
    rm> a lot of functions (getters/setters). All of these functions are defined
    rm> in mod_guile but of course should go into separate guile modules. Right
    rm> now (as you can see, i got it working ;-) the following modules are 
    rm> defined: (apache request), (apache server), (apache connection),
    rm> (apache tables), (mod-guile utils).

OK, so the idea is:

HTTP request for some URL --->
  mapped by Apache config file to generic mod_guile handler,
  with parameters indicating the module in which the appropriate
  handler proc lives, and perhaps the proc name as well (?)

mod_guile handler uses the module and calls the handler proc from that
  module (how do you handle handler procs with the same name in
  different modules? perhaps by not actually importing them)

Now we're into Scheme code, that has a SMOB in its hand and wants to
  use the utility functions defined in (apache request) etc. to play
  with it, which it does using use-module in the usual way.

And the problem was: how do you export the C definitions for (apache
request) etc. into their respective modules?

I presume that Marius's docs for the C module API have given you one
answer, using scm_c_define, scm_c_with_module etc.  Another
possibility would be to write a C function per module to register its
definitions as Guile primitives:

void mg_register_apache_request_primitives ()
{
  scm_c_define_gsubr (...);
  ...
}

Then at the top of apache/request.scm, you can call this using either
load-extension or the dynamic-* functions:

(define-module (apache request)
  ...)

(load-extension "libmg" "mg_register_apache_request_primitives")

Does this cover everything, and would you mind if I reworked this into
another example for the manual?

Regards,
        Neil





reply via email to

[Prev in Thread] Current Thread [Next in Thread]