Diff for /mqtt/src/dl.c between versions 1.1.2.3 and 1.2.2.2

version 1.1.2.3, 2011/11/23 08:09:40 version 1.2.2.2, 2012/02/01 15:44:40
Line 2 Line 2
 #include "rtlm.h"  #include "rtlm.h"
   
   
static void *acc_rtlm, *pub_rtlm;static void *acc_rtlm, *pub_rtlm, *log_rtlm;
   
   struct tagCallbacks call;
   
   
 /*  /*
  * mqttLog() Log message to syslog   * mqttLog() Log message to syslog
  *   *
Line 25  mqttLog(const char *fmt, ...) Line 27  mqttLog(const char *fmt, ...)
 void *  void *
 mqttLoadRTLM(sl_config *cfg, int modtype)  mqttLoadRTLM(sl_config *cfg, int modtype)
 {  {
        const char *str;        const char *str, *attr;
         void *rtlm = NULL;          void *rtlm = NULL;
           void *(*mqttOpenRTLM)(sl_config *);
           void (*mqttCloseRTLM)(void *);
   
         if (!cfg)          if (!cfg)
                 return NULL;                  return NULL;
   
        str = (const char*) CFG(cfg_GetAttribute(cfg, CFG("mqttd"), CFG(modtype ? "pub_file" : "acc_file")));        switch (modtype) {
                 case 0:
                         attr = "acc_file";
                         break;
                 case 1:
                         attr = "pub_file";
                         break;
                 default:
                         attr = "log_file";
                         break;
         }
 
         str = (const char*) CFG(cfg_GetAttribute(cfg, CFG("mqttd"), CFG(attr)));
         if (!str) {          if (!str) {
                 mqttLog("Error:: RTL module not found\n");                  mqttLog("Error:: RTL module not found\n");
                 return NULL;                  return NULL;
Line 39  mqttLoadRTLM(sl_config *cfg, int modtype) Line 55  mqttLoadRTLM(sl_config *cfg, int modtype)
   
         rtlm = dlopen(str, RTLD_LAZY);          rtlm = dlopen(str, RTLD_LAZY);
         if (!rtlm) {          if (!rtlm) {
                mqttLog("Error:: RTL module not found %s\n", dlerror());                mqttLog("Error:: RTL module %s not found %s\n", str, dlerror());
                 return NULL;                  return NULL;
         }          }
   
        mqttOpenDB = dlsym(rtlm, "mqtt_db_open");        mqttOpenRTLM = dlsym(rtlm, "mqtt_rtlm_open");
        if (!mqttOpenDB) {        if (!mqttOpenRTLM) {
                 mqttLog("Error:: Can't found mqtt_db_open call\n");                  mqttLog("Error:: Can't found mqtt_db_open call\n");
                 dlclose(rtlm);                  dlclose(rtlm);
                 return NULL;                  return NULL;
         }          }
        mqttCloseDB = dlsym(rtlm, "mqtt_db_close");        mqttCloseRTLM = dlsym(rtlm, "mqtt_rtlm_close");
        if (!mqttCloseDB) {        if (!mqttCloseRTLM) {
                 mqttLog("Error:: Can't found mqtt_db_close call\n");                  mqttLog("Error:: Can't found mqtt_db_close call\n");
                 dlclose(rtlm);                  dlclose(rtlm);
                 return NULL;                  return NULL;
         }          }
   
        if (modtype) {        switch (modtype) {
                pub_rtlm = rtlm;                case 0:
        } else {                        acc_rtlm = rtlm;
                acc_rtlm = rtlm;                        call.OpenACC = mqttOpenRTLM;
                         call.CloseACC = mqttCloseRTLM;
                         call.LoginACC = dlsym(rtlm, "mqtt_rtlm_login");
                         if (!call.LoginACC) {
                                 mqttLog("Error:: incorrect module ...\n");
                                 dlclose(rtlm);
                                 return NULL;
                         }
                         break;
                 case 1:
                         pub_rtlm = rtlm;
                         call.OpenPUB = mqttOpenRTLM;
                         call.ClosePUB = mqttCloseRTLM;
                         call.InitSessPUB = dlsym(rtlm, "mqtt_rtlm_init_session");
                         call.FiniSessPUB = dlsym(rtlm, "mqtt_rtlm_fini_session");
                         call.ChkSessPUB = dlsym(rtlm, "mqtt_rtlm_chk_session");
                         call.WritePUB_topic = dlsym(rtlm, "mqtt_rtlm_write_topic");
                         call.ReadPUB_topic = dlsym(rtlm, "mqtt_rtlm_read_topic");
                         call.DeletePUB_topic = dlsym(rtlm, "mqtt_rtlm_delete_topic");
                         call.WritePUB_subscribe = dlsym(rtlm, "mqtt_rtlm_write_subscribe");
                         call.ReadPUB_subscribe = dlsym(rtlm, "mqtt_rtlm_read_subscribe");
                         call.DeletePUB_subscribe = dlsym(rtlm, "mqtt_rtlm_delete_subscribe");
                         if (!call.InitSessPUB || !call.FiniSessPUB || !call.ChkSessPUB || 
                                         !call.WritePUB_topic || !call.ReadPUB_topic || 
                                         !call.DeletePUB_topic || !call.WritePUB_subscribe || 
                                         !call.ReadPUB_subscribe || !call.DeletePUB_subscribe) {
                                 mqttLog("Error:: incorrect module ...\n");
                                 dlclose(rtlm);
                                 return NULL;
                         }
                         break;
                 default:
                         log_rtlm = rtlm;
                         call.OpenLOG = mqttOpenRTLM;
                         call.CloseLOG = mqttCloseRTLM;
                         call.LOG = dlsym(rtlm, "mqtt_rtlm_logger");
                         if (!call.LOG) {
                                 mqttLog("Error:: incorrect module ...\n");
                                 dlclose(rtlm);
                                 return NULL;
                         }
                         break;
         }          }
   
         return rtlm;          return rtlm;
Line 68  mqttLoadRTLM(sl_config *cfg, int modtype) Line 125  mqttLoadRTLM(sl_config *cfg, int modtype)
 void  void
 mqttUnloadRTLM(int modtype)  mqttUnloadRTLM(int modtype)
 {  {
        dlclose((modtype ? pub_rtlm : acc_rtlm));        switch (modtype) {
                 case 0:
                         dlclose(acc_rtlm);
                         break;
                 case 1:
                         dlclose(pub_rtlm);
                         break;
                 default:
                         dlclose(log_rtlm);
                         break;
         }
 }  }
   
 inline int  inline int

Removed from v.1.1.2.3  
changed lines
  Added in v.1.2.2.2


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