Hi,

I think xcap_server.c:xcaps_path_get_auid() needs to be updated for this
too?

Regards,

Peter

On Thu, 2012-10-25 at 10:58 +0200, Daniel-Constantin Mierla wrote:

> Module: sip-router
> Branch: master
> Commit: 5f813fdab34cb7507bc4dcc1b66ff87f90f69c9a
> URL:    
> http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=5f813fdab34cb7507bc4dcc1b66ff87f90f69c9a
> 
> Author: Daniel-Constantin Mierla <[email protected]>
> Committer: Daniel-Constantin Mierla <[email protected]>
> Date:   Thu Oct 25 10:56:41 2012 +0200
> 
> xcap_server: use a static table to keep the list of supported auids
> 
> - adding new auid requires an entry in this table and define of the
>   internal type
> 
> ---
> 
>  modules_k/xcap_server/xcap_misc.c |   99 
> +++++++++++++++++++++----------------
>  1 files changed, 57 insertions(+), 42 deletions(-)
> 
> diff --git a/modules_k/xcap_server/xcap_misc.c 
> b/modules_k/xcap_server/xcap_misc.c
> index 146e941..9e294c0 100644
> --- a/modules_k/xcap_server/xcap_misc.c
> +++ b/modules_k/xcap_server/xcap_misc.c
> @@ -40,6 +40,59 @@ extern str xcaps_root;
>  
>  static param_t *_xcaps_xpath_ns_root = NULL;
>  
> +typedef struct xcaps_auid_list {
> +     str auid;  /* auid value */
> +     char term; /* ending char (next one after auid) */
> +     int type;  /* internaly type id for auid */
> +} xcaps_auid_list_t;
> +
> +/* list of supported auid */
> +static xcaps_auid_list_t _xcaps_auid_list[] = {
> +     { { "pres-rules", 10 },
> +                     '/', PRES_RULES },
> +     { { "org.openmobilealliance.pres-rules", 33 },
> +                     '/', PRES_RULES },
> +     { { "rls-services", 12 },
> +                     '/', RLS_SERVICE },
> +     { { "pidf-manipulation", 17 },
> +                     '/', PIDF_MANIPULATION },
> +     { { "resource-lists", 14 },
> +                     '/', RESOURCE_LIST },
> +     { { "xcap-caps", 9 },
> +                     '/', XCAP_CAPS },
> +     { { "org.openmobilealliance.user-profile", 35},
> +                     '/', USER_PROFILE },
> +     { { "org.openmobilealliance.pres-content", 15},
> +                     '/', PRES_CONTENT },
> +     { { "org.openmobilealliance.search", 29},
> +                     '?', SEARCH },
> +
> +     { { 0, 0 }, 0, 0 }
> +};
> +
> +static int xcaps_find_auid(str *s, xcap_uri_t *xuri)
> +{
> +     int i;
> +     for(i=0; _xcaps_auid_list[i].auid.s!=NULL; i++)
> +     {
> +             if(s->len > _xcaps_auid_list[i].auid.len
> +                     && s->s[_xcaps_auid_list[i].auid.len] == 
> _xcaps_auid_list[i].term
> +                     && strncmp(s->s, _xcaps_auid_list[i].auid.s,
> +                                                     
> _xcaps_auid_list[i].auid.len) == 0)
> +             {
> +                     LM_DBG("matched %.*s\n", _xcaps_auid_list[i].auid.len,
> +                                     _xcaps_auid_list[i].auid.s);
> +                     xuri->type = _xcaps_auid_list[i].type;
> +                     xuri->auid.s = s->s;
> +                     xuri->auid.len = _xcaps_auid_list[i].auid.len;
> +                     return 0;
> +             }
> +     }
> +     LM_ERR("unsupported auid in [%.*s]\n", xuri->uri.len,
> +                             xuri->uri.s);
> +     return -1;
> +}
> +
>  /**
>   * parse xcap uri
>   */
> @@ -127,45 +180,11 @@ int xcap_parse_uri(str *huri, str *xroot, xcap_uri_t 
> *xuri)
>       }
>  
>       /* auid */
> -     xuri->auid.s = s.s;
> -     if(s.len>11 && strncmp(s.s, "pres-rules/", 11)==0)
> -     {
> -             LM_DBG("matched pres-rules\n");
> -             xuri->type = PRES_RULES;
> -             xuri->auid.len = 10;
> -     } else if(s.len>34 && strncmp(s.s, 
> "org.openmobilealliance.pres-rules/", 34)==0) {
> -             LM_DBG("matched oma pres-rules\n");
> -             xuri->type = PRES_RULES;
> -             xuri->auid.len = 33;
> -     } else if(s.len>13 && strncmp(s.s, "rls-services/", 13)==0) {
> -             LM_DBG("matched rls-services\n");
> -             xuri->type = RLS_SERVICE;
> -             xuri->auid.len = 12;
> -     } else if(s.len>18 && strncmp(s.s, "pidf-manipulation/", 18)==0) {
> -             LM_DBG("matched pidf-manipulation\n");
> -             xuri->type = PIDF_MANIPULATION;
> -             xuri->auid.len = 17;
> -     } else if(s.len>15 && strncmp(s.s, "resource-lists/", 15)==0) {
> -             LM_DBG("matched resource-lists\n");
> -             xuri->type = RESOURCE_LIST;
> -             xuri->auid.len = 14;
> -     } else if(s.len>10 && strncmp(s.s, "xcap-caps/", 10)==0) {
> -             LM_DBG("matched xcap-caps\n");
> -             xuri->type = XCAP_CAPS;
> -             xuri->auid.len = 9;
> -     } else if(s.len> 36 && strncmp(s.s, 
> "org.openmobilealliance.user-profile/", 36)==0) {
> -             LM_DBG("matched oma user-profile\n");
> -             xuri->type = USER_PROFILE;
> -             xuri->auid.len = 35;
> -     } else if(s.len> 36 && strncmp(s.s, 
> "org.openmobilealliance.pres-content/", 36)==0) {
> -             LM_DBG("matched oma pres-content\n");
> -             xuri->type = PRES_CONTENT;
> -             xuri->auid.len = 35;
> -     } else if(s.len> 30 && strncmp(s.s, "org.openmobilealliance.search?", 
> 30)==0) {
> -             LM_DBG("matched oma search\n");
> -             xuri->type = SEARCH;
> -             xuri->auid.len = 29;
> +     if(xcaps_find_auid(&s, xuri)<0)
> +             return -1;
>  
> +     /* handling special auids */
> +     if(xuri->type == SEARCH) {
>               s.s   += xuri->auid.len + 1;
>               s.len -= xuri->auid.len + 1;
>  
> @@ -197,10 +216,6 @@ int xcap_parse_uri(str *huri, str *xroot, xcap_uri_t 
> *xuri)
>               }
>  
>               return 0;
> -     } else {
> -             LM_ERR("unsupported auid in [%.*s]\n", xuri->uri.len,
> -                             xuri->uri.s);
> -             return -1;
>       }
>  
>       s.s   += xuri->auid.len + 1;
> 
> 
> _______________________________________________
> sr-dev mailing list
> [email protected]
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev


-- 
Peter Dunkley
Technical Director
Crocodile RCS Ltd
_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to