[Freeswitch-users] need help with mod_xml_odbc

Leon de Rooij leon at scarlet-internet.nl
Thu Aug 27 07:57:08 PDT 2009


Hi Juan,

With debug=true you should be able to see what template it's trying to  
render in a loop, can you tell which one that is ? (I'm guessing it  
says 32 times it wants to render "not-found")

In the xml you pasted in your mail, you didn't specify the name of the  
"not-found" template, just <template>, that could be the problem..

To get around the problem of generating a wrong query when the ${user}  
is not given, you could simply encapsulate everything with a check- 
event-header, like this:

<template name="default">
   <xml-odbc-do name="check-event-header" if-name="user">
     <xml-odbc-do name="query" on-empty-result-break-to="not-found"  
value="...etc">
       ..rest of your template goes here..
     </xml-odbc-do>
   </xml-odbc-do>
</template>

But that would mean that an "empty" xml is returned whenever no $ 
{user} is provided. I didn't test how fs will react to that when it's  
looking up all the users for generating the acl list..

A way around that would be to only render your template when ${user}  
is set and otherwise render the not-found template, like this:

<template name="default">
   <xml-odbc-do name="check-event-header" if-name="user">
     <xml-odbc-do name="break-to" value="directory-user"/>
   </xml-odbc-do>
   <xml-odbc-do name="break-to" value="not-found"/>
</template>

<template name="directory-user">
   <xml-odbc-do name="query" on-empty-result-break-to="not-found"  
value="...etc">
     ..rest of your template goes here..
   </xml-odbc-do>
</template>

<template name="not-found">
etc...
</template>

---

Which comes close to how it's defined in the xml_odbc.conf.xml  
example, which solves it the other way around:

...
     <template name="default">
       <xml-odbc-do name="break-to" value="${section}"/>
     </template>

     <template name="directory"> -->
       <xml-odbc-do name="check-event-header" if-name="purpose">
         <!-- catches purpose gateways and network-list (any more?) -->
         <xml-odbc-do name="break-to" value="directory-${purpose}"/>
       </xml-odbc-do>
       <xml-odbc-do name="break-to" value="directory-user"/>
     </template>
...

- First it checks what section is requested, which is nice but not  
really necessary in your case, since you only bind to directory.
- Then it checks whether a purpose header is set (which was only the  
case for looking up acl's and gateways and NOT for regular user  
lookups last time I checked out the svn)
- If a purpose header IS set, then it tries to render directory-$ 
{purpose}, which isn't specified, so it falls back to "not-found"  
which is what you want in this case
- And as a last resort - this is where regular user lookups end up, it  
renders "directory-user" where you can put the template as specified  
above..

Hope that helps ?

regards,

Leon


On Aug 27, 2009, at 3:53 PM, Juan Backson wrote:

> Hi Leon,
>
> Thanks for your help.
>
> I have changed it according to your comment but I am still getting  
> the looping error.
>
> Would you please take a look see what else I did wrong?
>
> Also, sip_user is an integer field, so I can't really use ''.  Is  
> there anyway to get around that?
>
>
> <configuration name="xml_odbc.conf" description="XML ODBC  
> Configuration">
>
>   <settings>
>         <param name="binding" value="directory"/>
>     <param name="odbc-dsn" value="class5_odbc:root:abcd"/>
>     <param name="debug" value="true"/>
>     <param name="keep-files-around" value="true"/>
>   </settings>
>
>   <templates>
>
>     <template name="default">
>       <document type="freeswitch/xml">
>         <section name="directory">
>      <xml-odbc-do name="query" on-empty-result-break-to="not-found"  
> value="SELECT enabled, sip_password FROM agent WHERE sip_user =  $ 
> {user} and enabled='t'"/>
>         <domain name="${domain}">
>           <user id="${user}">
>             <params>
>               <xml-odbc-do name="query" value="SELECT sip_password  
> FROM agent WHERE sip_user = ${user}">
>                 <param name="password" value="${sip_password}"/>
>               </xml-odbc-do>
>             </params>
>               </user>
>         </domain>
>
>
>         </section>
>       </document>
>     </template>
>
>
>     <template>
>
>         <document type="freeswitch/xml">
>             <section name="result">
>                 <result status="not found"/>
>             </section>
>         </document>
>     </template>
>   </templates>
>
> </configuration>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org





More information about the FreeSWITCH-users mailing list