|
|
| version 1.2.2.16, 2012/06/20 15:01:30 | version 1.3, 2012/07/03 09:02:50 |
|---|---|
| Line 126 execProc(sched_task_t *task) | Line 126 execProc(sched_task_t *task) |
| char szLine[MAXPATHLEN + BUFSIZ] = { 0 }; | char szLine[MAXPATHLEN + BUFSIZ] = { 0 }; |
| snprintf(szLine, sizeof szLine, "%s '%s' %hu %u", AIT_GET_STR(&args->Value), | snprintf(szLine, sizeof szLine, "%s '%s' %hu %u", AIT_GET_STR(&args->Value), |
| (char*) TASK_ARG(task), (u_short) TASK_VAL(task), TASK_DATLEN(task)); | (char*) TASK_ARG(task), (u_short) TASK_VAL(task), (u_int) TASK_DATLEN(task)); |
| if (TASK_ARG(task)) | if (TASK_ARG(task)) |
| io_free(TASK_ARG(task)); | io_free(TASK_ARG(task)); |
| Line 148 pubRX(sched_task_t *task) | Line 148 pubRX(sched_task_t *task) |
| void *data = NULL; | void *data = NULL; |
| u_short mid; | u_short mid; |
| time_t tim; | time_t tim; |
| struct mqtthdr *hdr; | |
| rlen = RecvFrom(TASK_FD(task)); | rlen = RecvFrom(TASK_FD(task)); |
| if (rlen == -1) | if (rlen == -1) |
| Line 156 pubRX(sched_task_t *task) | Line 157 pubRX(sched_task_t *task) |
| Kill++; | Kill++; |
| return NULL; | return NULL; |
| } | } |
| siz = mqtt_readPUBLISH(args->msg, szTopic, sizeof szTopic, &mid, &data); | |
| if (siz == -1) | |
| goto end; | |
| /* send to output */ | while (rlen > 0) { |
| tim = time(NULL); | hdr = (struct mqtthdr*) args->msg->msg_base; |
| strftime(szTime, sizeof szTime, "%Y-%m-%d %H:%M:%S", localtime(&tim)); | |
| fprintf(TASK_ARG(task), "\n[%s] Message ID: %04hu, Length: %u, Topic: %s\n", | |
| szTime, mid, siz, szTopic); | |
| if (data) { | switch (hdr->mqtt_msg.type) { |
| fputs((const char*) data, TASK_ARG(task)); | case MQTT_TYPE_PUBLISH: |
| free(data); | siz = mqtt_readPUBLISH(args->msg, szTopic, sizeof szTopic, &mid, &data); |
| } | if (siz == -1) |
| goto end; | |
| else { | |
| siz = mqtt_pktLen(hdr); | |
| rlen -= siz; | |
| ioVERBOSE(4) printf("Remains %d bytes, packet %d bytes\n", | |
| rlen, siz); | |
| } | |
| fprintf(TASK_ARG(task), "\n"); | /* send to output */ |
| fflush(TASK_ARG(task)); | tim = time(NULL); |
| strftime(szTime, sizeof szTime, "%Y-%m-%d %H:%M:%S", localtime(&tim)); | |
| fprintf(TASK_ARG(task), "\n[%s] Message ID: %04hu, QoS: %hhu, " | |
| "Length: %u, Topic: %s\n", szTime, mid, hdr->mqtt_msg.qos, | |
| siz, szTopic); | |
| /* if exists exec script */ | if (data) { |
| if (!AIT_ISEMPTY(&args->Value)) | fputs((const char*) data, TASK_ARG(task)); |
| schedEvent(root, execProc, io_strdup(szTopic), mid, data, siz); | free(data); |
| } | |
| fprintf(TASK_ARG(task), "\n"); | |
| fflush(TASK_ARG(task)); | |
| /* if exists exec script */ | |
| if (!AIT_ISEMPTY(&args->Value)) | |
| schedEvent(root, execProc, io_strdup(szTopic), mid, data, siz); | |
| memmove(args->msg->msg_base, args->msg->msg_base + siz, rlen); | |
| break; | |
| case MQTT_TYPE_PINGREQ: | |
| siz = mqtt_msgPINGRESP(args->msg); | |
| if (siz == -1) | |
| goto end; | |
| else | |
| rlen -= siz; | |
| /* send ping reply */ | |
| if (SendTo(TASK_FD(task), siz) == -1) | |
| goto end; | |
| memmove(args->msg->msg_base, args->msg->msg_base + siz, rlen); | |
| break; | |
| default: | |
| ioVERBOSE(1) printf("Unwanted message type #%d ...\n", hdr->mqtt_msg.type); | |
| goto end; | |
| } | |
| } | |
| end: | end: |
| schedReadSelf(task); | schedReadSelf(task); |
| return NULL; | return NULL; |
| Line 390 main(int argc, char **argv) | Line 425 main(int argc, char **argv) |
| else | else |
| lf = stdout; | lf = stdout; |
| if (lf) { | if (lf) { |
| root = schedBegin(); | |
| ret = Subscribe(args->cli->sock, lf); | ret = Subscribe(args->cli->sock, lf); |
| root = schedBegin(); | |
| schedRead(root, pubRX, lf, args->cli->sock, NULL, 0); | schedRead(root, pubRX, lf, args->cli->sock, NULL, 0); |
| schedRun(root, &Kill); | schedRun(root, &Kill); |
| schedEnd(&root); | |
| if (un) | if (un) |
| Unsubscribe(args->cli->sock); | Unsubscribe(args->cli->sock); |
| fclose(lf); | fclose(lf); |
| schedEnd(&root); | |
| } else | } else |
| printf("Error:: in output file #%d - %s\n", errno, strerror(errno)); | printf("Error:: in output file #%d - %s\n", errno, strerror(errno)); |
| } else | } else |