Annotation of mqtt/src/dl.c, revision 1.1.2.5

1.1.2.1   misho       1: #include "global.h"
                      2: #include "rtlm.h"
                      3: 
                      4: 
1.1.2.4   misho       5: static void *acc_rtlm, *pub_rtlm, *log_rtlm;
1.1.2.1   misho       6: 
1.1.2.5 ! misho       7: struct tagCallbacks call;
        !             8: 
1.1.2.1   misho       9: 
                     10: /*
                     11:  * mqttLog() Log message to syslog
                     12:  *
                     13:  * @fmt = format string
                     14:  * @... = argument list
                     15:  * return: none
                     16:  */
                     17: void
                     18: mqttLog(const char *fmt, ...)
                     19: {
                     20:        va_list lst;
                     21: 
                     22:        va_start(lst, fmt);
                     23:        vsyslog(LOG_ERR, fmt, lst);
                     24:        va_end(lst);
                     25: }
                     26: 
                     27: void *
                     28: mqttLoadRTLM(sl_config *cfg, int modtype)
                     29: {
1.1.2.4   misho      30:        const char *str, *attr;
1.1.2.1   misho      31:        void *rtlm = NULL;
1.1.2.4   misho      32:        void *(*mqttOpenRTLM)(sl_config *);
                     33:        void (*mqttCloseRTLM)(void *);
1.1.2.1   misho      34: 
                     35:        if (!cfg)
                     36:                return NULL;
                     37: 
1.1.2.4   misho      38:        switch (modtype) {
                     39:                case 0:
                     40:                        attr = "acc_file";
                     41:                        break;
                     42:                case 1:
                     43:                        attr = "pub_file";
                     44:                        break;
                     45:                default:
                     46:                        attr = "log_file";
                     47:                        break;
                     48:        }
                     49: 
                     50:        str = (const char*) CFG(cfg_GetAttribute(cfg, CFG("mqttd"), CFG(attr)));
1.1.2.1   misho      51:        if (!str) {
                     52:                mqttLog("Error:: RTL module not found\n");
                     53:                return NULL;
                     54:        }
                     55: 
                     56:        rtlm = dlopen(str, RTLD_LAZY);
                     57:        if (!rtlm) {
                     58:                mqttLog("Error:: RTL module not found %s\n", dlerror());
                     59:                return NULL;
                     60:        }
                     61: 
1.1.2.4   misho      62:        mqttOpenRTLM = dlsym(rtlm, "mqtt_rtlm_open");
                     63:        if (!mqttOpenRTLM) {
1.1.2.1   misho      64:                mqttLog("Error:: Can't found mqtt_db_open call\n");
                     65:                dlclose(rtlm);
                     66:                return NULL;
                     67:        }
1.1.2.4   misho      68:        mqttCloseRTLM = dlsym(rtlm, "mqtt_rtlm_close");
                     69:        if (!mqttCloseRTLM) {
1.1.2.1   misho      70:                mqttLog("Error:: Can't found mqtt_db_close call\n");
                     71:                dlclose(rtlm);
                     72:                return NULL;
                     73:        }
                     74: 
1.1.2.4   misho      75:        switch (modtype) {
                     76:                case 0:
                     77:                        acc_rtlm = rtlm;
1.1.2.5 ! misho      78:                        call.OpenACC = mqttOpenRTLM;
        !            79:                        call.CloseACC = mqttCloseRTLM;
1.1.2.4   misho      80:                        break;
                     81:                case 1:
                     82:                        pub_rtlm = rtlm;
1.1.2.5 ! misho      83:                        call.OpenPUB = mqttOpenRTLM;
        !            84:                        call.ClosePUB = mqttCloseRTLM;
1.1.2.4   misho      85:                        break;
                     86:                default:
                     87:                        log_rtlm = rtlm;
1.1.2.5 ! misho      88:                        call.OpenLOG = mqttOpenRTLM;
        !            89:                        call.CloseLOG = mqttCloseRTLM;
        !            90:                        call.LOG = dlsym(rtlm, "mqtt_rtlm_logger");
1.1.2.4   misho      91:                        break;
1.1.2.1   misho      92:        }
                     93: 
                     94:        return rtlm;
                     95: }
                     96: 
                     97: void
                     98: mqttUnloadRTLM(int modtype)
                     99: {
1.1.2.4   misho     100:        switch (modtype) {
                    101:                case 0:
                    102:                        dlclose(acc_rtlm);
                    103:                        break;
                    104:                case 1:
                    105:                        dlclose(pub_rtlm);
                    106:                        break;
                    107:                default:
                    108:                        dlclose(log_rtlm);
                    109:                        break;
                    110:        }
1.1.2.1   misho     111: }
1.1.2.2   misho     112: 
                    113: inline int
                    114: mqttMkDir(sl_config *cfg)
                    115: {
1.1.2.3   misho     116:        const char *str;
1.1.2.2   misho     117: 
                    118:        if (!cfg)
                    119:                return -1;
                    120: 
1.1.2.3   misho     121:        str = (const char*) cfg_GetAttribute(cfg, CFG("mqttd"), CFG("statedir"));
1.1.2.2   misho     122:        if (!str)
                    123:                return -1;
                    124: 
                    125:        if (mkdir(str, 0600) == -1 && errno != EEXIST)
                    126:                return -1;
                    127: 
                    128:        return 0;
                    129: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>