--- mqtt/src/daemon.c 2011/12/15 12:57:40 1.1.2.21 +++ mqtt/src/daemon.c 2011/12/16 02:09:20 1.1.2.23 @@ -145,6 +145,20 @@ startSession(sched_task_t *task) ioDEBUG(0, "Login:: ALLOWED for username %s ...", sess->sess_user); ret = MQTT_RETCODE_ACCEPTED; } + if (call.FiniSessPUB(&cfg, pub, sess->sess_cid, sess->sess_user, "%") > 0) { + // TODO: disconnect client + } + if (call.InitSessPUB(&cfg, pub, sess->sess_cid, sess->sess_user, sess->sess_addr, + sess->sess_will.flag, sess->sess_will.topic, sess->sess_will.msg, + sess->sess_will.qos, sess->sess_will.retain) == -1) { + ioDEBUG(0, "Session %s DENIED for username %s", sess->sess_cid, sess->sess_user); + ret = MQTT_RETCODE_DENIED; + goto end; + } else { + ioDEBUG(0, "Session %s from %s and username %s is started", + sess->sess_cid, sess->sess_addr, sess->sess_user); + ret = MQTT_RETCODE_ACCEPTED; + } ret = mqtt_msgCONNACK(&msg, ret); if ((ret = send(sess->sess_sock, msg.msg_base, ret, 0)) == -1) { @@ -166,7 +180,8 @@ startSession(sched_task_t *task) pthread_create(&sess->sess_tid, &attr, (void*(*)(void*)) thrSession, sess); pthread_mutex_unlock(&mtx_sess); - ioDEBUG(1, "ConnID=%s(%s) for %s login OK!", sess->sess_cid, sess->sess_user, sess->sess_addr); + call.LOG(logg, "Session %s started from %s for user %s OK!\n", sess->sess_cid, + sess->sess_addr, sess->sess_user); pthread_attr_destroy(&attr); return NULL; @@ -210,6 +225,7 @@ Run(int sock) int cli; pthread_t tid; ait_val_t *v; + char str[STRSIZ]; ioTRACE(1); @@ -226,9 +242,7 @@ Run(int sock) } while (!Kill) { - printf("%%%%%%%%%%rrrrrrrrrrrrrrrrrrrrr errno=%d\n", errno); if ((cli = accept(sock, &sa.sa, &sslen)) == -1) { - printf("rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr errno=%d\n", errno); if (!Kill) continue; ioLOGERR(0); @@ -238,10 +252,12 @@ Run(int sock) if (!v) { ioLIBERR(mqtt); break; - } else - io_n2addr(&sa, v); - ioDEBUG(1, "Connected client with socket=%d from %s:%d", cli, - AIT_GET_STR(v), io_n2port(&sa)); + } else { + memset(str, 0, sizeof str); + snprintf(str, sizeof str, "%s:%hu", io_n2addr(&sa, v), io_n2port(&sa)); + AIT_SET_STR(v, str); + } + ioDEBUG(1, "Connected client with socket=%d from %s", cli, AIT_GET_STR(v)); if (!schedRead(root, startSession, v, cli)) { io_freeVar(v);