//Handler for all requests and responses from the server. This function routes the
//right handlers
void onMessage(MessageData* md)
{
	//printf("onMessage\n");
	if (md) {
		MQTTMessage* message = md->message;

		char *topic = malloc(md->topicName->lenstring.len + 1);

		sprintf(topic, "%.*s", md->topicName->lenstring.len,
				md->topicName->lenstring.data);
		printf("onMessage topic:%s\n",topic);
		if(!strcmp(topic,DMRESPONSE)){
			messageResponse(md);
		}

		if (!strcmp(topic, dmUpdate)) {
			messageUpdate(md);
		}

		if (!strcmp(topic, dmObserve)) {
			messageObserve(md);
		}

		if (!strcmp(topic, dmCancel)) {
			messageCancel(md);
		}

		if (!strcmp(topic, dmReboot)) {
			messageForAction(md,1);
		}

		if (!strcmp(topic, dmFactoryReset)) {
			messageForAction(md,0);
		}

		if (!strcmp(topic, dmFirmwareDownload)) {
			messageFirmwareDownload(md);
		}

		if (!strcmp(topic, dmFirmwareUpdate)) {
			messageFirmwareUpdate(md);
		}

		free(topic);
	}
}
Esempio n. 2
0
File: message.c Progetto: aosm/bind
void    notify_message(struct sockaddr *from, int proto, u_char *msg, int len)
{
    u_short     *p = (u_short *) msg ;
    u_short     msgid, flags ;
    MSGPTR      pMsg ;
#ifdef  DEBUG
    char    logbuf[256] ;
#endif
    
    msgid = ntohs(p[0]) ;
    flags = ntohs(p[1]) ;
    
#ifdef DEBUG
    if ((flags & 0x8000) == 0) {
        sprintf(logbuf, "Request  %04x (%04x) from %s, %d bytes", 
                            msgid, flags, addrFmt(from, proto), len) ;
    } else {
        sprintf(logbuf, "Response %04x (%04x) from %s %d bytes", 
	                    msgid, flags, addrFmt(from, proto), len) ;
    }
    TRACE("%s\n", logbuf) ;

    strcpy(logbuf, "    ") ;

    switch ((flags & 0x7800) >> 11) {
        case 0  : strcat(logbuf, "QUERY  ") ; break ;
	case 1  : strcat(logbuf, "IQUERY ") ; break ;
	case 2  : strcat(logbuf, "STATUS ") ; break ;
	default : strcat(logbuf, "UNKNOWN") ; break ;
    }
    if ((flags & 0x0400) != 0) {
        strcat(logbuf, ",AA") ;
    }
    if ((flags & 0x0200) != 0) {
        strcat(logbuf, ",TC") ;
    }
    if ((flags & 0x0100) != 0) {
        strcat(logbuf, ",RD") ;
    }
    if ((flags & 0x0080) != 0) {
        strcat(logbuf, ",RA") ;
    }
    switch (flags & 0x00f) {
        case 0  : strcat(logbuf, ",No Error       ") ; break ;
	case 1  : strcat(logbuf, ",Format Error   ") ; break ;
	case 2  : strcat(logbuf, ",Server Failure ") ; break ;
	case 3  : strcat(logbuf, ",Name Error     ") ; break ;
	case 4  : strcat(logbuf, ",Not Implemented") ; break ;
	case 5  : strcat(logbuf, ",Refused        ") ; break ;
	default : strcat(logbuf, ",Unknown Error  ") ; break ;
    }
    TRACE("%s\n", logbuf) ;
#endif

    if ((flags & 0x8000) == 0) {        /* request from client  */

        if ((pMsg = searchReq(msgid, proto, from)) == NULL) {
	    pMsg = createReq(msgid, proto, from) ;
	}
	if (pMsg == NULL) {
	    WARN("notify_message - cannot create message record\n") ;
	    return ;
	}
	messageForward(pMsg, msg, len) ;
	
    } else {                            /* response from server */

        if ((pMsg = searchOrg(msgid, proto)) == NULL) {
	    WARN("notify_message - no corresponding request\n") ;
	    return ;
	}
	messageResponse(pMsg, msg, len) ;
	disposeReq(pMsg);
    }
}