Navigation


Changeset 1387:d70f5f6cb306 in freeDiameter for extensions/rt_ereg/rtereg.c


Ignore:
Timestamp:
Oct 15, 2019, 11:25:47 PM (5 years ago)
Author:
Thomas Klausner <tk@giga.or.at>
Branch:
default
Phase:
public
Message:

rt_ereg: improve logging and locking

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/rt_ereg/rtereg.c

    r1338 r1387  
    9494                struct fd_list * c;
    9595
    96                 TRACE_DEBUG(ANNOYING, "Attempt pattern matching of '%.*s' with rule '%s'", (int)len, value, r->pattern);
     96                LOG_D("[rt_ereg] attempting pattern matching of '%.*s' with rule '%s'", (int)len, value, r->pattern);
    9797
    9898                #ifdef HAVE_REG_STARTEND
     
    119119
    120120                        /* Error while compiling the regex */
    121                         TRACE_DEBUG(INFO, "Error while executing the regular expression '%s':", r->pattern);
     121                        LOG_E("[rt_ereg] error while executing the regular expression '%s':", r->pattern);
    122122
    123123                        /* Get the error message size */
     
    129129                        /* Get the error message content */
    130130                        regerror(err, &r->preg, errstr, bl);
    131                         TRACE_DEBUG(INFO, "\t%s", errstr);
     131                        LOG_E("\t%s", errstr);
    132132
    133133                        /* Free the buffer, return the error */
     
    138138
    139139                /* From this point, the expression matched the AVP value */
    140                 TRACE_DEBUG(FULL, "[rt_ereg] Match: '%s' to value '%.*s' => '%s' += %d",
    141                                         r->pattern,
    142                                         (int)len,
    143                                         value,
    144                                         r->server,
    145                                         r->score);
     140                LOG_D("[rt_ereg] Match: '%s' to value '%.*s' => '%s' += %d", r->pattern, (int)len, value, r->server, r->score);
    146141
    147142                for (c = candidates->next; c != candidates; c = c->next) {
     
    168163//      for (i = 0; i<rtereg_conf[j].level; i++) {
    169164        if (level > rtereg_conf[conf_index].level) {
    170                 TRACE_DEBUG(INFO, "internal error, dug too deep");
     165                LOG_E("internal error, dug too deep");
    171166                return 1;
    172167        }
     
    179174                if ((avp_hdr->avp_code == dictdata.avp_code) && (avp_hdr->avp_vendor == dictdata.avp_vendor)) {
    180175                        if (level != rtereg_conf[conf_index].level - 1) {
    181                                 TRACE_DEBUG(INFO, "[rt_ereg] found grouped AVP %d (vendor %d), digging deeper", avp_hdr->avp_code, avp_hdr->avp_vendor);
     176                                LOG_D("[rt_ereg] found grouped AVP %d (vendor %d), digging deeper", avp_hdr->avp_code, avp_hdr->avp_vendor);
    182177                                CHECK_FCT(find_avp(nextavp, conf_index, level+1, candidates));
    183178                        } else {
    184                                 TRACE_DEBUG(INFO, "[rt_ereg] found AVP %d (vendor %d)", avp_hdr->avp_code, avp_hdr->avp_vendor);
     179                                struct dictionary * dict;
     180                                LOG_D("[rt_ereg] found AVP %d (vendor %d)", avp_hdr->avp_code, avp_hdr->avp_vendor);
     181                                CHECK_FCT(fd_dict_getdict(what, &dict));
     182                                CHECK_FCT_DO(fd_msg_parse_dict(nextavp, dict, NULL), /* nothing */);
    185183                                if (avp_hdr->avp_value != NULL) {
     184                                        LOG_A("avp_hdr->avp_value NOT NULL, matching");
    186185#ifndef HAVE_REG_STARTEND
    187186                                        int ret;
     
    224223        int j, ret;
    225224
    226         TRACE_ENTRY("%p %p %p", cbdata, *pmsg, candidates);
     225        LOG_A("[rt_ereg] rtereg_out arguments: %p %p %p", cbdata, *pmsg, candidates);
    227226
    228227        CHECK_PARAMS(pmsg && *pmsg && candidates);
     
    239238                for (j=0; j<rtereg_conf_size; j++) {
    240239                        where = *pmsg;
    241                         TRACE_DEBUG(INFO, "[rt_ereg] iterating over AVP group %d", j);
     240                        LOG_D("[rt_ereg] iterating over AVP group %d", j);
    242241                        if ((ret=find_avp(where, j, 0, candidates)) != 0) {
    243242                                break;
     
    302301static int rtereg_entry(char * conffile)
    303302{
    304         TRACE_ENTRY("%p", conffile);
     303        LOG_A("[rt_ereg] started with conffile '%p'", conffile);
    305304
    306305        rt_ereg_config_file = conffile;
    307306
    308307        if (rtereg_init() != 0) {
    309             return 1;
     308                return 1;
    310309        }
    311310
     
    322321        /* Initialize the configuration */
    323322        if ((rtereg_conf=malloc(sizeof(*rtereg_conf))) == NULL) {
    324             TRACE_DEBUG(INFO, "malloc failured");
    325             return 1;
     323                LOG_E("[rt_ereg] malloc failured");
     324                return 1;
    326325        }
    327326        rtereg_conf_size = 1;
     
    367366static void rtereg_fini(void)
    368367{
    369         TRACE_ENTRY();
    370 
    371368        /* Unregister the cb */
    372369        CHECK_FCT_DO( fd_rt_out_unregister ( rtereg_hdl, NULL ), /* continue */ );
    373370
     371#ifndef HAVE_REG_STARTEND
     372        free(buf);
     373        buf = NULL;
     374#endif /* HAVE_REG_STARTEND */
     375
     376        if (pthread_rwlock_wrlock(&rte_lock) != 0) {
     377                fd_log_error("%s: write-locking failed in fini, giving up", MODULE_NAME);
     378                return;
     379        }
    374380        /* Destroy the data */
    375381        rtereg_conf_free(rtereg_conf, rtereg_conf_size);
    376382        rtereg_conf = NULL;
    377383        rtereg_conf_size = 0;
    378 #ifndef HAVE_REG_STARTEND
    379         free(buf);
    380         buf = NULL;
    381 #endif /* HAVE_REG_STARTEND */
     384
     385        if (pthread_rwlock_unlock(&rte_lock) != 0) {
     386                fd_log_error("%s: write-unlocking failed in fini", MODULE_NAME);
     387                return;
     388        }
    382389
    383390        /* Done */
Note: See TracChangeset for help on using the changeset viewer.