int SendFailMsg(q_msg *m) { SendResp(m, -1); free(m); return(0); }
int CmdWorker(q_msg *m) { char *c = &(m->cmd[0]); char s[MAX_MSGLEN]; int rc; NETDEBUG(MEXECD, NETLOG_DEBUG2, ("To: %x From: %x Flag: %x Cmd: %s\n", m->self_id, m->peer_id, m->flag, c)); if (ISSET_BIT(m, OUT_BIT)) { rc = System(c, s, MAX_CMDLEN); } else { rc = System(c, NULL, 0); s[0]='\0'; } NETDEBUG(MEXECD, NETLOG_DEBUG2, ("Cmd returned %d\n", rc)); if (ISSET_BIT(m, REQ_BIT)) { strncpy(c, s, MAX_CMDLEN); SendResp(m, rc); } free(m); return(rc); }
uint8_t RecvCommand() { uint8_t Cmd; char Username[32]; uint8_t TargetUser = MAX_USERS+1; uint8_t DeviceType; uint16_t DeviceId; uint16_t AlarmId; uint8_t NewDevice; uint8_t UserId; // Read in the one-byte command if (!ReadBytes((unsigned char *)&Cmd, 1)) { return(0); } switch (Cmd) { case CMD_POWER_OFF: SendResp(RESP_SUCCESS, NULL); return(0); break; case CMD_ADD_USER: if (!AddUser()) { SendResp(RESP_ADD_USER_FAILED, NULL); return(1); } SendResp(RESP_SUCCESS, NULL); break; case CMD_DEL_USER: if (!DelUser()) { SendResp(RESP_DEL_USER_FAILED, NULL); return(1); } SendResp(RESP_SUCCESS, NULL); break; case CMD_ADD_DEVICE: // Read in the device type if (!ReadBytes((unsigned char *)&DeviceType, 1)) { return(0); } // Find the next available device slot if ((NewDevice = FindAvailableDevice()) >= MAX_DEVICES) { SendResp(RESP_INVALID_CMD, NULL); return(0); } switch (DeviceType) { case DEVICE_KEYPAD: if (!(DeviceId = NewGenericDevice(DeviceType, NewDevice))) { SendResp(RESP_ADD_DEVICE_FAILED, NULL); return(0); } break; case DEVICE_SWIPE: if (!(DeviceId = NewGenericDevice(DeviceType, NewDevice))) { SendResp(RESP_ADD_DEVICE_FAILED, NULL); return(0); } break; case DEVICE_CONTACT: if (!(DeviceId = NewContact(NewDevice))) { SendResp(RESP_ADD_DEVICE_FAILED, NULL); return(0); } break; case DEVICE_MOTION: if (!(DeviceId = NewMotion(NewDevice))) { SendResp(RESP_ADD_DEVICE_FAILED, NULL); return(0); } break; case DEVICE_HEAT: if (!(DeviceId = NewHeat(NewDevice))) { SendResp(RESP_ADD_DEVICE_FAILED, NULL); return(0); } break; case DEVICE_SMOKE: if (!(DeviceId = NewSmoke(NewDevice))) { SendResp(RESP_ADD_DEVICE_FAILED, NULL); return(0); } break; case DEVICE_ALARM: if (!(DeviceId = NewGenericDevice(DeviceType, NewDevice))) { SendResp(RESP_ADD_DEVICE_FAILED, NULL); return(1); } break; default: SendResp(RESP_ADD_DEVICE_FAILED, NULL); break; } // Send success along with the generated DeviceId SendResp(RESP_SUCCESS, (unsigned char *)&DeviceId); break; case CMD_DEL_DEVICE: // Read in the device id if (!ReadBytes((unsigned char *)&DeviceId, 2)) { return(0); } if (!DeleteDevice(DeviceId)) { SendResp(RESP_DEL_DEVICE_FAILED, NULL); return(1); } SendResp(RESP_SUCCESS, NULL); break; case CMD_GRANT_ACCESS: // Read in the device id if (!ReadBytes((unsigned char *)&DeviceId, 2)) { return(0); } // Read in the user id if (!ReadBytes((unsigned char *)&UserId, 1)) { return(0); } if (!GrantAccess(DeviceId, UserId)) { SendResp(RESP_GRANT_FAILED, NULL); return(1); } SendResp(RESP_SUCCESS, NULL); break; case CMD_UPDATE_DEVICE: // Read in the device id if (!ReadBytes((unsigned char *)&DeviceId, 2)) { return(0); } if (!UpdateDevice(DeviceId)) { SendResp(RESP_UPDATE_DEVICE_FAILED, NULL); return(1); } SendResp(RESP_SUCCESS, NULL); break; case CMD_ADD_DEVICE_TO_ALARM: // Read in the device id if (!ReadBytes((unsigned char *)&DeviceId, 2)) { return(0); } // Read in the alarm id if (!ReadBytes((unsigned char *)&AlarmId, 2)) { return(0); } if (!AddDeviceToAlarm(DeviceId, AlarmId)) { SendResp(RESP_ADD_DEVICE_TO_ALARM_FAILED, NULL); return(0); } SendResp(RESP_SUCCESS, NULL); break; case CMD_LIST_ALARM_CODES: // Read in the device id if (!ReadBytes((unsigned char *)&DeviceId, 2)) { return(0); } if (!ListValidAlarmCodes(DeviceId)) { SendResp(RESP_INVALID_CMD, NULL); return(0); } break; default: SendResp(RESP_INVALID_CMD, NULL); return(1); break; } return(1); }