int _mosquitto_packet_handle(struct mosquitto *mosq) { assert(mosq); switch((mosq->in_packet.command)&0xF0){ case PINGREQ: return _mosquitto_handle_pingreq(mosq); case PINGRESP: return _mosquitto_handle_pingresp(mosq); case PUBACK: return _mosquitto_handle_pubackcomp(mosq, "PUBACK"); case PUBCOMP: return _mosquitto_handle_pubackcomp(mosq, "PUBCOMP"); case PUBLISH: return _mosquitto_handle_publish(mosq); case PUBREC: return _mosquitto_handle_pubrec(mosq); case PUBREL: return _mosquitto_handle_pubrel(NULL, mosq); case CONNACK: return _mosquitto_handle_connack(mosq); case SUBACK: return _mosquitto_handle_suback(mosq); case UNSUBACK: return _mosquitto_handle_unsuback(mosq); default: /* If we don't recognise the command, return an error straight away. */ _mosquitto_log_printf(mosq, MOSQ_LOG_ERR, "Error: Unrecognised command %d\n", (mosq->in_packet.command)&0xF0); return MOSQ_ERR_PROTOCOL; } }
int mqtt3_packet_handle(struct mosquitto_db *db, struct mosquitto *context) { if(!context) return MOSQ_ERR_INVAL; switch((context->in_packet.command)&0xF0){//高4位为消息类型 case PINGREQ: return _mosquitto_handle_pingreq(context);//简单给客户端发送PINGREQ包就行 case PINGRESP: return _mosquitto_handle_pingresp(context);//不需要额外处理 case PUBACK: return _mosquitto_handle_pubackcomp(context, "PUBACK");//我们给客户端发送一条PUBLISH消息,对方返回一条PUBACK表示收到了 case PUBCOMP: return _mosquitto_handle_pubackcomp(context, "PUBCOMP");//对方给我们返回了一个PUBCOMP,也就是QOS2的第四个包,那我们就可以将这条消息直接给弄掉了 case PUBLISH: return mqtt3_handle_publish(db, context);//处理订阅消息 case PUBREC: return _mosquitto_handle_pubrec(context);//对方跟我说,他已经记录了刚才给他的QOS2消息。等待我发送PUBREL case PUBREL: return _mosquitto_handle_pubrel(db, context);//客户端发送PUBLIS,我们立即回复PUBREC,现在是该对方发送PUBREL的时候了,接到这个就可以真正发布了 case CONNECT: return mqtt3_handle_connect(db, context);//带密码登陆/重登陆 case DISCONNECT: return mqtt3_handle_disconnect(db, context);//客户端主动断开一个连接,这里只是关闭SOCKET,设置state,其他数据都没有动 case SUBSCRIBE: return mqtt3_handle_subscribe(db, context);//订阅一个topic case UNSUBSCRIBE: return mqtt3_handle_unsubscribe(db, context);//退订一个topic default: /* If we don't recognise the command, return an error straight away. */ return MOSQ_ERR_PROTOCOL; } }
int mqtt3_packet_handle(struct mosquitto_db *db, struct mosquitto *context) { if(!context) return MOSQ_ERR_INVAL; switch((context->in_packet.command)&0xF0){ case PINGREQ: return _mosquitto_handle_pingreq(context); case PINGRESP: return _mosquitto_handle_pingresp(context); case PUBACK: return _mosquitto_handle_pubackcomp(context, "PUBACK"); case PUBCOMP: return _mosquitto_handle_pubackcomp(context, "PUBCOMP"); case PUBLISH: // return mqtt3_handle_publish(db, context); case PUBREC: return _mosquitto_handle_pubrec(context); case PUBREL: return _mosquitto_handle_pubrel(db, context); case CONNECT: // return mqtt3_handle_connect(db, context); case DISCONNECT: return mqtt3_handle_disconnect(db, context); case SUBSCRIBE: // return mqtt3_handle_subscribe(db, context); case UNSUBSCRIBE: return mqtt3_handle_unsubscribe(db, context); case CONNACK: return mqtt3_handle_connack(db, context); case SUBACK: return _mosquitto_handle_suback(context); case UNSUBACK: return _mosquitto_handle_unsuback(context); default: /* If we don't recognise the command, return an error straight away. */ return MOSQ_ERR_PROTOCOL; } }