/** * search first avp begining with 'start->next' * if start==NULL, beging from head of avp list */ struct usr_avp *search_first_avp( unsigned short flags, int id, int_str *val, struct usr_avp *start) { struct usr_avp *head; struct usr_avp *avp; if (id < 0) { LM_ERR("invalid avp id %d\n", id); return 0; } if(start==0) { assert( crt_avps!=0 ); if (*crt_avps==0) return 0; head = *crt_avps; } else { if(start->next==0) return 0; head = start->next; } /* search for the AVP by ID (&name) */ avp = internal_search_ID_avp(head, id, flags&AVP_SCRIPT_MASK); /* get the value - if required */ if (avp && val) get_avp_val(avp, val); return avp; }
struct usr_avp *search_next_avp( struct usr_avp *avp, int_str *val ) { if (avp==0 || avp->next==0) return 0; avp = internal_search_ID_avp( avp->next, avp->id, avp->flags&AVP_SCRIPT_MASK ); if (avp && val) get_avp_val(avp, val); return avp; }
/** * search first avp begining with 'start->next' * if start==NULL, beging from head of avp list */ struct usr_avp *search_first_avp( unsigned short flags, int_str name, int_str *val, struct usr_avp *start) { struct usr_avp *head; struct usr_avp *avp; if(start==0) { assert( crt_avps!=0 ); if (*crt_avps==0) return 0; head = *crt_avps; } else { if(start->next==0) return 0; head = start->next; } if ( name.n==0) { LM_ERR("0 ID or NULL NAME AVP!\n"); return 0; } /* search for the AVP by ID (&name) */ if (flags&AVP_NAME_STR) { if ( name.s.s==0 || name.s.len==0) { LM_ERR("empty avp name!\n"); return 0; } avp = internal_search_name_avp(head,compute_ID(&name.s),&name.s, flags&AVP_SCRIPT_MASK); } else { avp = internal_search_ID_avp(head, name.n, flags&AVP_SCRIPT_MASK); } /* get the value - if required */ if (avp && val) get_avp_val(avp, val); return avp; }