Beispiel #1
0
int
SendFailMsg(q_msg *m)
{
	SendResp(m, -1);
	free(m);
	return(0);
}
Beispiel #2
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);
}
Beispiel #3
0
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);
}