aqhome apps: fixed taglist handling.
This commit is contained in:
@@ -31,33 +31,35 @@
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleAddValue(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleAddValue(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
|
||||||
if (xo) {
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
AQH_MESSAGE *outMsg;
|
if (xo) {
|
||||||
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
AQH_MESSAGE *outMsg;
|
||||||
AQH_VALUE *recvdValue;
|
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
||||||
|
AQH_VALUE *recvdValue;
|
||||||
recvdValue=AQH_IpcdMessageValues_ReadFirstValue(tagList);
|
|
||||||
if (recvdValue) {
|
recvdValue=AQH_IpcdMessageValues_ReadFirstValue(tagList);
|
||||||
AQH_VALUE *value;
|
if (recvdValue) {
|
||||||
|
AQH_VALUE *value;
|
||||||
value=AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(o, ep, recvdValue);
|
|
||||||
if (value==NULL)
|
value=AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(o, ep, recvdValue);
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
if (value==NULL)
|
||||||
AQH_Value_free(recvdValue);
|
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
||||||
|
AQH_Value_free(recvdValue);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
resultCode=AQH_MSGDATA_RESULT_ERROR_BADDATA;
|
||||||
|
|
||||||
|
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_DATA_ID,
|
||||||
|
AQH_IPC_PROTOCOL_DATA_VERSION,
|
||||||
|
AQH_MSGTYPE_IPC_DATA_RESULT,
|
||||||
|
AQH_Endpoint_GetNextMessageId(ep),
|
||||||
|
AQH_IpcMessage_GetMsgId(msg),
|
||||||
|
resultCode, NULL);
|
||||||
|
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_BADDATA;
|
|
||||||
|
|
||||||
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_DATA_ID,
|
|
||||||
AQH_IPC_PROTOCOL_DATA_VERSION,
|
|
||||||
AQH_MSGTYPE_IPC_DATA_RESULT,
|
|
||||||
AQH_Endpoint_GetNextMessageId(ep),
|
|
||||||
AQH_IpcMessage_GetMsgId(msg),
|
|
||||||
resultCode, NULL);
|
|
||||||
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,16 +31,18 @@
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleAnnounceValue(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleAnnounceValue(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
|
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
if (xo) {
|
if (xo) {
|
||||||
AQH_VALUE *recvdValue;
|
AQH_VALUE *recvdValue;
|
||||||
|
|
||||||
recvdValue=AQH_IpcdMessageValues_ReadFirstValue(tagList);
|
recvdValue=AQH_IpcdMessageValues_ReadFirstValue(tagList);
|
||||||
if (recvdValue) {
|
if (recvdValue) {
|
||||||
AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(o, ep, recvdValue);
|
AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(o, ep, recvdValue);
|
||||||
AQH_Value_free(recvdValue);
|
AQH_Value_free(recvdValue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,49 +31,51 @@
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleConnect(GWEN_UNUSED AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleConnect(GWEN_UNUSED AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQH_MESSAGE *outMsg;
|
if (tagList) {
|
||||||
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
AQH_MESSAGE *outMsg;
|
||||||
char *clientId=NULL;
|
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
||||||
char *userId=NULL;
|
char *clientId=NULL;
|
||||||
char *passw=NULL;
|
char *userId=NULL;
|
||||||
uint32_t flags;
|
char *passw=NULL;
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
clientId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_CLIENTID, NULL);
|
clientId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_CLIENTID, NULL);
|
||||||
userId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_USERID, NULL);
|
userId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_USERID, NULL);
|
||||||
flags=AQH_Tag16_GetTagDataAsUint32(tagList, AQH_MSG_CONNECT_TAGS_FLAGS, 0);
|
flags=AQH_Tag16_GetTagDataAsUint32(tagList, AQH_MSG_CONNECT_TAGS_FLAGS, 0);
|
||||||
passw=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_PASSWORD, NULL);
|
passw=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_PASSWORD, NULL);
|
||||||
|
|
||||||
if (clientId)
|
if (clientId)
|
||||||
AQH_Endpoint_SetServiceName(ep, clientId);
|
AQH_Endpoint_SetServiceName(ep, clientId);
|
||||||
if (userId)
|
if (userId)
|
||||||
AQH_Endpoint_SetUserName(ep, userId);
|
AQH_Endpoint_SetUserName(ep, userId);
|
||||||
|
|
||||||
if (flags & AQH_MSG_CONNECT_FLAGS_WANTUPDATES)
|
if (flags & AQH_MSG_CONNECT_FLAGS_WANTUPDATES)
|
||||||
AQH_Endpoint_AddFlags(ep, AQH_ENDPOINT_FLAGS_WANTUPDATES);
|
AQH_Endpoint_AddFlags(ep, AQH_ENDPOINT_FLAGS_WANTUPDATES);
|
||||||
|
|
||||||
/* TODO: add user management, for now we allow all */
|
/* TODO: add user management, for now we allow all */
|
||||||
AQH_Endpoint_SetPermissions(ep,
|
AQH_Endpoint_SetPermissions(ep,
|
||||||
AQH_ENDPOINT_PERMS_LISTVALUES |
|
AQH_ENDPOINT_PERMS_LISTVALUES |
|
||||||
AQH_ENDPOINT_PERMS_READVALUE |
|
AQH_ENDPOINT_PERMS_READVALUE |
|
||||||
AQH_ENDPOINT_PERMS_ADDVALUE |
|
AQH_ENDPOINT_PERMS_ADDVALUE |
|
||||||
AQH_ENDPOINT_PERMS_LISTDATA |
|
AQH_ENDPOINT_PERMS_LISTDATA |
|
||||||
AQH_ENDPOINT_PERMS_READDATA |
|
AQH_ENDPOINT_PERMS_READDATA |
|
||||||
AQH_ENDPOINT_PERMS_ADDDATA |
|
AQH_ENDPOINT_PERMS_ADDDATA |
|
||||||
AQH_ENDPOINT_PERMS_LISTDEVICES |
|
AQH_ENDPOINT_PERMS_LISTDEVICES |
|
||||||
AQH_ENDPOINT_PERMS_READDEVICE |
|
AQH_ENDPOINT_PERMS_READDEVICE |
|
||||||
AQH_ENDPOINT_PERMS_ADDDEVICE |
|
AQH_ENDPOINT_PERMS_ADDDEVICE |
|
||||||
AQH_ENDPOINT_PERMS_MODDEVICE);
|
AQH_ENDPOINT_PERMS_MODDEVICE);
|
||||||
free(passw);
|
free(passw);
|
||||||
free(userId);
|
free(userId);
|
||||||
free(clientId);
|
free(clientId);
|
||||||
|
|
||||||
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_DATA_ID,
|
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_DATA_ID,
|
||||||
AQH_IPC_PROTOCOL_DATA_VERSION,
|
AQH_IPC_PROTOCOL_DATA_VERSION,
|
||||||
AQH_MSGTYPE_IPC_DATA_RESULT,
|
AQH_MSGTYPE_IPC_DATA_RESULT,
|
||||||
AQH_Endpoint_GetNextMessageId(ep),
|
AQH_Endpoint_GetNextMessageId(ep),
|
||||||
AQH_IpcMessage_GetMsgId(msg),
|
AQH_IpcMessage_GetMsgId(msg),
|
||||||
resultCode, NULL);
|
resultCode, NULL);
|
||||||
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -62,49 +62,51 @@ static void _getAndSendLastDatapoint(AQH_STORAGE *storage, AQH_OBJECT *ep, const
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleGetDataPoints(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *recvdMsg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleGetDataPoints(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *recvdMsg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
|
||||||
if (xo) {
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
uint32_t refMsgId;
|
if (xo) {
|
||||||
|
uint32_t refMsgId;
|
||||||
refMsgId=AQH_IpcMessage_GetMsgId(recvdMsg);
|
|
||||||
if (AQH_Endpoint_GetPermissions(ep) & AQH_ENDPOINT_PERMS_READDATA) {
|
refMsgId=AQH_IpcMessage_GetMsgId(recvdMsg);
|
||||||
char *valueName;
|
if (AQH_Endpoint_GetPermissions(ep) & AQH_ENDPOINT_PERMS_READDATA) {
|
||||||
|
char *valueName;
|
||||||
valueName=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSGDATA_GETDATA_TAGS_NAME, NULL);
|
|
||||||
if (valueName && *valueName) {
|
valueName=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSGDATA_GETDATA_TAGS_NAME, NULL);
|
||||||
AQH_VALUE *value;
|
if (valueName && *valueName) {
|
||||||
uint64_t tsBegin;
|
AQH_VALUE *value;
|
||||||
uint64_t tsEnd;
|
uint64_t tsBegin;
|
||||||
uint64_t numRequested;
|
uint64_t tsEnd;
|
||||||
|
uint64_t numRequested;
|
||||||
tsBegin=AQH_Tag16_GetTagDataAsUint64(tagList, AQH_MSGDATA_GETDATA_TAGS_BEGIN, 0);
|
|
||||||
tsEnd=AQH_Tag16_GetTagDataAsUint64(tagList, AQH_MSGDATA_GETDATA_TAGS_END, 0);
|
tsBegin=AQH_Tag16_GetTagDataAsUint64(tagList, AQH_MSGDATA_GETDATA_TAGS_BEGIN, 0);
|
||||||
numRequested=AQH_Tag16_GetTagDataAsUint64(tagList, AQH_MSGDATA_GETDATA_TAGS_NUM, 0);
|
tsEnd=AQH_Tag16_GetTagDataAsUint64(tagList, AQH_MSGDATA_GETDATA_TAGS_END, 0);
|
||||||
|
numRequested=AQH_Tag16_GetTagDataAsUint64(tagList, AQH_MSGDATA_GETDATA_TAGS_NUM, 0);
|
||||||
value=AQH_Storage_GetValueByNameForSystem(xo->storage, valueName);
|
|
||||||
if (value) {
|
value=AQH_Storage_GetValueByNameForSystem(xo->storage, valueName);
|
||||||
int resultCode;
|
if (value) {
|
||||||
|
int resultCode;
|
||||||
resultCode=_getAndSendDataPoints(xo->storage, ep, value, tsBegin, tsEnd, numRequested, refMsgId);
|
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, resultCode);
|
resultCode=_getAndSendDataPoints(xo->storage, ep, value, tsBegin, tsEnd, numRequested, refMsgId);
|
||||||
|
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, resultCode);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_INFO(NULL, "Value \"%s\" does not exist", valueName);
|
||||||
|
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, AQH_MSGDATA_RESULT_ERROR_NOTFOUND);
|
||||||
|
}
|
||||||
|
free(valueName);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "Value \"%s\" does not exist", valueName);
|
DBG_INFO(NULL, "Missing value name");
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, AQH_MSGDATA_RESULT_ERROR_NOTFOUND);
|
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, AQH_MSGDATA_RESULT_ERROR_BADDATA);
|
||||||
}
|
}
|
||||||
free(valueName);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "Missing value name");
|
DBG_ERROR(AQH_LOGDOMAIN, "No permissions to read data");
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, AQH_MSGDATA_RESULT_ERROR_BADDATA);
|
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, AQH_MSGDATA_RESULT_ERROR_PERMS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
DBG_ERROR(AQH_LOGDOMAIN, "No permissions to read data");
|
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(ep, refMsgId, AQH_MSGDATA_RESULT_ERROR_PERMS);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,55 +49,57 @@ static void _sendDeviceList(AQH_OBJECT *ep, const AQH_DEVICE_LIST *vl, uint32_t
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleGetDevices(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleGetDevices(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
|
||||||
if (xo) {
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
const AQH_DEVICE_LIST *origDeviceList;
|
if (xo) {
|
||||||
uint32_t refMsgId;
|
const AQH_DEVICE_LIST *origDeviceList;
|
||||||
|
uint32_t refMsgId;
|
||||||
refMsgId=AQH_IpcMessage_GetMsgId(msg);
|
|
||||||
|
refMsgId=AQH_IpcMessage_GetMsgId(msg);
|
||||||
DBG_ERROR(NULL, "HandleGetDevices");
|
|
||||||
origDeviceList=AQH_Storage_GetDeviceList(xo->storage);
|
DBG_ERROR(NULL, "HandleGetDevices");
|
||||||
if (origDeviceList) {
|
origDeviceList=AQH_Storage_GetDeviceList(xo->storage);
|
||||||
DBG_ERROR(NULL, "Have a list of %d devices", AQH_Device_List_GetCount(origDeviceList));
|
if (origDeviceList) {
|
||||||
if (AQH_Device_List_GetCount(origDeviceList)<AQHOMEDATA_DEVICESPERMSG) {
|
DBG_ERROR(NULL, "Have a list of %d devices", AQH_Device_List_GetCount(origDeviceList));
|
||||||
DBG_ERROR(NULL, "Sending all entries in one message");
|
if (AQH_Device_List_GetCount(origDeviceList)<AQHOMEDATA_DEVICESPERMSG) {
|
||||||
_sendDeviceList(ep, origDeviceList, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId);
|
DBG_ERROR(NULL, "Sending all entries in one message");
|
||||||
|
_sendDeviceList(ep, origDeviceList, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AQH_DEVICE_LIST *tmpDeviceList;
|
||||||
|
const AQH_DEVICE *v;
|
||||||
|
|
||||||
|
DBG_INFO(NULL, "Sending entries in multiple messages");
|
||||||
|
tmpDeviceList=AQH_Device_List_new();
|
||||||
|
v=AQH_Device_List_First(origDeviceList);
|
||||||
|
while(v) {
|
||||||
|
const AQH_DEVICE *next;
|
||||||
|
AQH_DEVICE *copyOfDevice;
|
||||||
|
|
||||||
|
next=AQH_Device_List_Next(v);
|
||||||
|
copyOfDevice=AQH_Device_dup(v);
|
||||||
|
AQH_Device_List_Add(copyOfDevice, tmpDeviceList);
|
||||||
|
if (AQH_Device_List_GetCount(tmpDeviceList)>=AQHOMEDATA_DEVICESPERMSG) {
|
||||||
|
DBG_ERROR(NULL, "Sending %d devices", AQH_Device_List_GetCount(tmpDeviceList));
|
||||||
|
_sendDeviceList(ep, tmpDeviceList, next?0:AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId);
|
||||||
|
AQH_Device_List_Clear(tmpDeviceList);
|
||||||
|
}
|
||||||
|
v=next;
|
||||||
|
}
|
||||||
|
if (AQH_Device_List_GetCount(tmpDeviceList)) {
|
||||||
|
DBG_ERROR(NULL, "Sending %d devices", AQH_Device_List_GetCount(tmpDeviceList));
|
||||||
|
_sendDeviceList(ep, tmpDeviceList, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId); /* send remaining */
|
||||||
|
}
|
||||||
|
AQH_Device_List_free(tmpDeviceList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
AQH_DEVICE_LIST *tmpDeviceList;
|
/* empty list */
|
||||||
const AQH_DEVICE *v;
|
_sendDeviceList(ep, NULL, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId);
|
||||||
|
|
||||||
DBG_INFO(NULL, "Sending entries in multiple messages");
|
|
||||||
tmpDeviceList=AQH_Device_List_new();
|
|
||||||
v=AQH_Device_List_First(origDeviceList);
|
|
||||||
while(v) {
|
|
||||||
const AQH_DEVICE *next;
|
|
||||||
AQH_DEVICE *copyOfDevice;
|
|
||||||
|
|
||||||
next=AQH_Device_List_Next(v);
|
|
||||||
copyOfDevice=AQH_Device_dup(v);
|
|
||||||
AQH_Device_List_Add(copyOfDevice, tmpDeviceList);
|
|
||||||
if (AQH_Device_List_GetCount(tmpDeviceList)>=AQHOMEDATA_DEVICESPERMSG) {
|
|
||||||
DBG_ERROR(NULL, "Sending %d devices", AQH_Device_List_GetCount(tmpDeviceList));
|
|
||||||
_sendDeviceList(ep, tmpDeviceList, next?0:AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId);
|
|
||||||
AQH_Device_List_Clear(tmpDeviceList);
|
|
||||||
}
|
|
||||||
v=next;
|
|
||||||
}
|
|
||||||
if (AQH_Device_List_GetCount(tmpDeviceList)) {
|
|
||||||
DBG_ERROR(NULL, "Sending %d devices", AQH_Device_List_GetCount(tmpDeviceList));
|
|
||||||
_sendDeviceList(ep, tmpDeviceList, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId); /* send remaining */
|
|
||||||
}
|
|
||||||
AQH_Device_List_free(tmpDeviceList);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
/* empty list */
|
|
||||||
_sendDeviceList(ep, NULL, AQH_MSGDATA_DEVICES_FLAGS_LASTMSG, refMsgId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,56 +49,58 @@ static void _sendValueList(AQH_OBJECT *ep, const AQH_VALUE_LIST *vl, uint32_t fl
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleGetValues(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleGetValues(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
|
||||||
if (xo) {
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
const AQH_VALUE_LIST *origValueList;
|
if (xo) {
|
||||||
|
const AQH_VALUE_LIST *origValueList;
|
||||||
uint32_t refMsgId;
|
|
||||||
|
uint32_t refMsgId;
|
||||||
refMsgId=AQH_IpcMessage_GetMsgId(msg);
|
|
||||||
|
refMsgId=AQH_IpcMessage_GetMsgId(msg);
|
||||||
DBG_INFO(NULL, "HandleGetValues");
|
|
||||||
origValueList=AQH_Storage_GetValueList(xo->storage);
|
DBG_INFO(NULL, "HandleGetValues");
|
||||||
if (origValueList) {
|
origValueList=AQH_Storage_GetValueList(xo->storage);
|
||||||
DBG_INFO(NULL, "Have a list of %d values", AQH_Value_List_GetCount(origValueList));
|
if (origValueList) {
|
||||||
if (AQH_Value_List_GetCount(origValueList)<AQHOMEDATA_VALUESPERMSG) {
|
DBG_INFO(NULL, "Have a list of %d values", AQH_Value_List_GetCount(origValueList));
|
||||||
DBG_INFO(NULL, "Sending all entries in one message");
|
if (AQH_Value_List_GetCount(origValueList)<AQHOMEDATA_VALUESPERMSG) {
|
||||||
_sendValueList(ep, origValueList, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId);
|
DBG_INFO(NULL, "Sending all entries in one message");
|
||||||
|
_sendValueList(ep, origValueList, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AQH_VALUE_LIST *tmpValueList;
|
||||||
|
const AQH_VALUE *v;
|
||||||
|
|
||||||
|
DBG_INFO(NULL, "Sending entries in multiple messages");
|
||||||
|
tmpValueList=AQH_Value_List_new();
|
||||||
|
v=AQH_Value_List_First(origValueList);
|
||||||
|
while(v) {
|
||||||
|
const AQH_VALUE *next;
|
||||||
|
AQH_VALUE *copyOfValue;
|
||||||
|
|
||||||
|
next=AQH_Value_List_Next(v);
|
||||||
|
copyOfValue=AQH_Value_dup(v);
|
||||||
|
AQH_Value_List_Add(copyOfValue, tmpValueList);
|
||||||
|
if (AQH_Value_List_GetCount(tmpValueList)>=AQHOMEDATA_VALUESPERMSG) {
|
||||||
|
DBG_INFO(NULL, "Sending %d values", AQH_Value_List_GetCount(tmpValueList));
|
||||||
|
_sendValueList(ep, tmpValueList, next?0:AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId);
|
||||||
|
AQH_Value_List_Clear(tmpValueList);
|
||||||
|
}
|
||||||
|
v=next;
|
||||||
|
}
|
||||||
|
if (AQH_Value_List_GetCount(tmpValueList)) {
|
||||||
|
DBG_INFO(NULL, "Sending %d values", AQH_Value_List_GetCount(tmpValueList));
|
||||||
|
_sendValueList(ep, tmpValueList, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId); /* send remaining */
|
||||||
|
}
|
||||||
|
AQH_Value_List_free(tmpValueList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
AQH_VALUE_LIST *tmpValueList;
|
/* empty list */
|
||||||
const AQH_VALUE *v;
|
_sendValueList(ep, NULL, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId);
|
||||||
|
|
||||||
DBG_INFO(NULL, "Sending entries in multiple messages");
|
|
||||||
tmpValueList=AQH_Value_List_new();
|
|
||||||
v=AQH_Value_List_First(origValueList);
|
|
||||||
while(v) {
|
|
||||||
const AQH_VALUE *next;
|
|
||||||
AQH_VALUE *copyOfValue;
|
|
||||||
|
|
||||||
next=AQH_Value_List_Next(v);
|
|
||||||
copyOfValue=AQH_Value_dup(v);
|
|
||||||
AQH_Value_List_Add(copyOfValue, tmpValueList);
|
|
||||||
if (AQH_Value_List_GetCount(tmpValueList)>=AQHOMEDATA_VALUESPERMSG) {
|
|
||||||
DBG_INFO(NULL, "Sending %d values", AQH_Value_List_GetCount(tmpValueList));
|
|
||||||
_sendValueList(ep, tmpValueList, next?0:AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId);
|
|
||||||
AQH_Value_List_Clear(tmpValueList);
|
|
||||||
}
|
|
||||||
v=next;
|
|
||||||
}
|
|
||||||
if (AQH_Value_List_GetCount(tmpValueList)) {
|
|
||||||
DBG_INFO(NULL, "Sending %d values", AQH_Value_List_GetCount(tmpValueList));
|
|
||||||
_sendValueList(ep, tmpValueList, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId); /* send remaining */
|
|
||||||
}
|
|
||||||
AQH_Value_List_free(tmpValueList);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
/* empty list */
|
|
||||||
_sendValueList(ep, NULL, AQH_MSGDATA_VALUES_FLAGS_LASTMSG, refMsgId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,66 +36,68 @@
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleModDevice(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *recvdMsg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleModDevice(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *recvdMsg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
|
||||||
if (xo) {
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
if (xo) {
|
||||||
|
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
||||||
if (AQH_Endpoint_GetPermissions(ep) & AQH_ENDPOINT_PERMS_MODDEVICE) {
|
|
||||||
AQH_DEVICE *device;
|
if (AQH_Endpoint_GetPermissions(ep) & AQH_ENDPOINT_PERMS_MODDEVICE) {
|
||||||
|
AQH_DEVICE *device;
|
||||||
device=AQH_IpcdMessageDevices_ReadFirstDevice(tagList);
|
|
||||||
if (device) {
|
device=AQH_IpcdMessageDevices_ReadFirstDevice(tagList);
|
||||||
const char *deviceNameForSystem;
|
if (device) {
|
||||||
|
const char *deviceNameForSystem;
|
||||||
deviceNameForSystem=AQH_Device_GetNameForSystem(device);
|
|
||||||
if (deviceNameForSystem && *deviceNameForSystem) {
|
deviceNameForSystem=AQH_Device_GetNameForSystem(device);
|
||||||
AQH_DEVICE *storedDevice;
|
if (deviceNameForSystem && *deviceNameForSystem) {
|
||||||
|
AQH_DEVICE *storedDevice;
|
||||||
storedDevice=AQH_Storage_GetDeviceByNameForSystem(xo->storage, deviceNameForSystem);
|
|
||||||
if (storedDevice) {
|
storedDevice=AQH_Storage_GetDeviceByNameForSystem(xo->storage, deviceNameForSystem);
|
||||||
const char *s;
|
if (storedDevice) {
|
||||||
|
const char *s;
|
||||||
s=AQH_Device_GetNameForGui(device);
|
|
||||||
if (s && *s)
|
s=AQH_Device_GetNameForGui(device);
|
||||||
AQH_Device_SetNameForGui(storedDevice, s);
|
if (s && *s)
|
||||||
|
AQH_Device_SetNameForGui(storedDevice, s);
|
||||||
s=AQH_Device_GetRoomName(device);
|
|
||||||
if (s && *s)
|
s=AQH_Device_GetRoomName(device);
|
||||||
AQH_Device_SetRoomName(storedDevice, s);
|
if (s && *s)
|
||||||
|
AQH_Device_SetRoomName(storedDevice, s);
|
||||||
s=AQH_Device_GetLocation(device);
|
|
||||||
if (s && *s)
|
s=AQH_Device_GetLocation(device);
|
||||||
AQH_Device_SetLocation(storedDevice, s);
|
if (s && *s)
|
||||||
|
AQH_Device_SetLocation(storedDevice, s);
|
||||||
s=AQH_Device_GetDescription(device);
|
|
||||||
if (s && *s)
|
s=AQH_Device_GetDescription(device);
|
||||||
AQH_Device_SetDescription(storedDevice, s);
|
if (s && *s)
|
||||||
|
AQH_Device_SetDescription(storedDevice, s);
|
||||||
AQH_Storage_AddRuntimeFlags(xo->storage, AQH_STORAGE_RTFLAGS_MODIFIED);
|
|
||||||
resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
AQH_Storage_AddRuntimeFlags(xo->storage, AQH_STORAGE_RTFLAGS_MODIFIED);
|
||||||
|
resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_INFO(NULL, "Device \"%s\" not found", deviceNameForSystem);
|
||||||
|
resultCode=AQH_MSGDATA_RESULT_ERROR_NOTFOUND;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "Device \"%s\" not found", deviceNameForSystem);
|
DBG_INFO(NULL, "No name for value");
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_NOTFOUND;
|
resultCode=AQH_MSGDATA_RESULT_ERROR_NOTFOUND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "No name for value");
|
DBG_INFO(NULL, "No device info in message");
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_NOTFOUND;
|
resultCode=AQH_MSGDATA_RESULT_ERROR_INVALID;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "No device info in message");
|
DBG_ERROR(NULL, "No permissions to read data");
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_INVALID;
|
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
||||||
}
|
}
|
||||||
|
AqHomeDataServer_SendResponseResultToEndpoint(ep, AQH_IpcMessage_GetMsgId(recvdMsg), resultCode);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "No permissions to read data");
|
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
|
||||||
}
|
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(ep, AQH_IpcMessage_GetMsgId(recvdMsg), resultCode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,67 +62,69 @@ static void _subRqAbort(AQH_MSG_REQUEST *rq, int reason);
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleSetData(AQH_OBJECT *o, AQH_OBJECT *epSrc, const AQH_MESSAGE *recvdMsg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleSetData(AQH_OBJECT *o, AQH_OBJECT *epSrc, const AQH_MESSAGE *recvdMsg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
|
||||||
if (xo) {
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
uint32_t msgId;
|
if (xo) {
|
||||||
AQH_VALUE *recvdValue;
|
uint32_t msgId;
|
||||||
|
AQH_VALUE *recvdValue;
|
||||||
msgId=AQH_IpcMessage_GetMsgId(recvdMsg);
|
|
||||||
DBG_INFO(NULL, "Received IPC SetDataRequest message (msgId=%d)", msgId);
|
msgId=AQH_IpcMessage_GetMsgId(recvdMsg);
|
||||||
|
DBG_INFO(NULL, "Received IPC SetDataRequest message (msgId=%d)", msgId);
|
||||||
recvdValue=AQH_IpcdMessageSetData_ReadValue(tagList);
|
|
||||||
if (recvdValue) {
|
recvdValue=AQH_IpcdMessageSetData_ReadValue(tagList);
|
||||||
const char *valueName;
|
if (recvdValue) {
|
||||||
char *valueDataFreeable;
|
const char *valueName;
|
||||||
AQH_VALUE *systemValue;
|
char *valueDataFreeable;
|
||||||
|
AQH_VALUE *systemValue;
|
||||||
valueName=AQH_Value_GetNameForSystem(recvdValue);
|
|
||||||
valueDataFreeable=AQH_IpcdMessageSetData_ReadData(tagList);
|
valueName=AQH_Value_GetNameForSystem(recvdValue);
|
||||||
|
valueDataFreeable=AQH_IpcdMessageSetData_ReadData(tagList);
|
||||||
systemValue=AQH_Storage_GetValueByNameForSystem(xo->storage, valueName);
|
|
||||||
if (systemValue) {
|
systemValue=AQH_Storage_GetValueByNameForSystem(xo->storage, valueName);
|
||||||
if (AQH_Value_GetValueType(systemValue)==AQH_ValueType_Actor) {
|
if (systemValue) {
|
||||||
const char *driverName;
|
if (AQH_Value_GetValueType(systemValue)==AQH_ValueType_Actor) {
|
||||||
|
const char *driverName;
|
||||||
driverName=AQH_Value_GetDriver(systemValue);
|
|
||||||
if (driverName && *driverName) {
|
driverName=AQH_Value_GetDriver(systemValue);
|
||||||
AQH_OBJECT *epDriver;
|
if (driverName && *driverName) {
|
||||||
|
AQH_OBJECT *epDriver;
|
||||||
epDriver=AqHomeDataServer_GetIpcEndpointByServiceName(o, driverName);
|
|
||||||
if (epDriver) {
|
epDriver=AqHomeDataServer_GetIpcEndpointByServiceName(o, driverName);
|
||||||
AQH_MSG_REQUEST *rq;
|
if (epDriver) {
|
||||||
|
AQH_MSG_REQUEST *rq;
|
||||||
DBG_ERROR(NULL, "Creating SETDATA request for driver endpoint (%s)", AQH_Endpoint_GetServiceName(epDriver));
|
|
||||||
rq=_mkRequest_SetData(o, epSrc, msgId, epDriver, systemValue, valueDataFreeable);
|
DBG_ERROR(NULL, "Creating SETDATA request for driver endpoint (%s)", AQH_Endpoint_GetServiceName(epDriver));
|
||||||
AqHomeDataServer_AddRequestToTree(o, rq);
|
rq=_mkRequest_SetData(o, epSrc, msgId, epDriver, systemValue, valueDataFreeable);
|
||||||
|
AqHomeDataServer_AddRequestToTree(o, rq);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_ERROR(NULL, "Driver \"%s\" not available", driverName);
|
||||||
|
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_GENERIC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_ERROR(NULL, "Driver \"%s\" not available", driverName);
|
DBG_ERROR(NULL, "No driver name");
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_GENERIC);
|
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_GENERIC);
|
||||||
}
|
}
|
||||||
}
|
} /* if actor */
|
||||||
else {
|
else {
|
||||||
DBG_ERROR(NULL, "No driver name");
|
DBG_ERROR(NULL, "Value \"%s\" is not an actor", valueName);
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_GENERIC);
|
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_INVALID);
|
||||||
}
|
}
|
||||||
} /* if actor */
|
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "Value \"%s\" is not an actor", valueName);
|
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_INVALID);
|
|
||||||
}
|
}
|
||||||
}
|
else {
|
||||||
|
DBG_ERROR(NULL, "Unknown value \"%s\"", valueName);
|
||||||
|
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_NOTFOUND);
|
||||||
|
}
|
||||||
|
AQH_Value_free(recvdValue);
|
||||||
|
free(valueDataFreeable);
|
||||||
|
} /* if recvdValue */
|
||||||
else {
|
else {
|
||||||
DBG_ERROR(NULL, "Unknown value \"%s\"", valueName);
|
DBG_ERROR(NULL, "No value in message");
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_NOTFOUND);
|
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_BADDATA);
|
||||||
}
|
}
|
||||||
AQH_Value_free(recvdValue);
|
|
||||||
free(valueDataFreeable);
|
|
||||||
} /* if recvdValue */
|
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "No value in message");
|
|
||||||
AqHomeDataServer_SendResponseResultToEndpoint(epSrc, msgId, AQH_MSGDATA_RESULT_ERROR_BADDATA);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,60 +53,62 @@ static void _sendDataChangedMsgToAllClients(AQHOME_SERVER *xo, AQH_OBJECT *epSrc
|
|||||||
|
|
||||||
void AqHomeDataServer_HandleUpdateData(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
void AqHomeDataServer_HandleUpdateData(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQHOME_SERVER *xo;
|
if (tagList) {
|
||||||
|
AQHOME_SERVER *xo;
|
||||||
xo=AqHomeDataServer_GetServerData(o);
|
|
||||||
if (xo) {
|
xo=AqHomeDataServer_GetServerData(o);
|
||||||
AQH_MESSAGE *outMsg;
|
if (xo) {
|
||||||
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
AQH_MESSAGE *outMsg;
|
||||||
AQH_VALUE *recvdValue;
|
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
||||||
|
AQH_VALUE *recvdValue;
|
||||||
recvdValue=AQH_IpcdMessageMultiData_ReadValue(tagList);
|
|
||||||
if (recvdValue) {
|
recvdValue=AQH_IpcdMessageMultiData_ReadValue(tagList);
|
||||||
const char *valueName;
|
if (recvdValue) {
|
||||||
const uint64_t *dataPoints=NULL;
|
const char *valueName;
|
||||||
uint64_t numberOfPoints=0;
|
const uint64_t *dataPoints=NULL;
|
||||||
|
uint64_t numberOfPoints=0;
|
||||||
valueName=recvdValue?AQH_Value_GetName(recvdValue):NULL;
|
|
||||||
AQH_IpcdMessageMultiData_ReadDatapoints(tagList, &dataPoints, &numberOfPoints);
|
valueName=recvdValue?AQH_Value_GetName(recvdValue):NULL;
|
||||||
if (numberOfPoints>0) {
|
AQH_IpcdMessageMultiData_ReadDatapoints(tagList, &dataPoints, &numberOfPoints);
|
||||||
AQH_VALUE *value;
|
if (numberOfPoints>0) {
|
||||||
|
AQH_VALUE *value;
|
||||||
value=AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(o, ep, recvdValue);
|
|
||||||
if (value) {
|
value=AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(o, ep, recvdValue);
|
||||||
if (AQH_Endpoint_GetPermissions(ep) & AQH_ENDPOINT_PERMS_ADDDATA) {
|
if (value) {
|
||||||
resultCode=_storeDataPoints(xo, value, dataPoints, numberOfPoints);
|
if (AQH_Endpoint_GetPermissions(ep) & AQH_ENDPOINT_PERMS_ADDDATA) {
|
||||||
if (resultCode==AQH_MSGDATA_RESULT_SUCCESS)
|
resultCode=_storeDataPoints(xo, value, dataPoints, numberOfPoints);
|
||||||
_sendDataChangedMsgToAllClients(xo, ep, value, dataPoints, numberOfPoints);
|
if (resultCode==AQH_MSGDATA_RESULT_SUCCESS)
|
||||||
|
_sendDataChangedMsgToAllClients(xo, ep, value, dataPoints, numberOfPoints);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_INFO(NULL, "No permissions to add data to value \"%s\"", valueName);
|
||||||
|
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "No permissions to add data to value \"%s\"", valueName);
|
DBG_INFO(NULL, "No permissions to add/create value \"%s\"", valueName);
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "No permissions to add/create value \"%s\"", valueName);
|
DBG_INFO(NULL, "No datapoints");
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_PERMS;
|
resultCode=AQH_MSGDATA_RESULT_ERROR_INVALID;
|
||||||
}
|
}
|
||||||
|
AQH_Value_free(recvdValue);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
DBG_INFO(NULL, "No datapoints");
|
DBG_INFO(NULL, "No value");
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_INVALID;
|
resultCode=AQH_MSGDATA_RESULT_ERROR_INVALID;
|
||||||
}
|
}
|
||||||
AQH_Value_free(recvdValue);
|
|
||||||
|
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_DATA_ID,
|
||||||
|
AQH_IPC_PROTOCOL_DATA_VERSION,
|
||||||
|
AQH_MSGTYPE_IPC_DATA_RESULT,
|
||||||
|
AQH_Endpoint_GetNextMessageId(ep),
|
||||||
|
AQH_IpcMessage_GetMsgId(msg),
|
||||||
|
resultCode, NULL);
|
||||||
|
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
DBG_INFO(NULL, "No value");
|
|
||||||
resultCode=AQH_MSGDATA_RESULT_ERROR_INVALID;
|
|
||||||
}
|
|
||||||
|
|
||||||
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_DATA_ID,
|
|
||||||
AQH_IPC_PROTOCOL_DATA_VERSION,
|
|
||||||
AQH_MSGTYPE_IPC_DATA_RESULT,
|
|
||||||
AQH_Endpoint_GetNextMessageId(ep),
|
|
||||||
AQH_IpcMessage_GetMsgId(msg),
|
|
||||||
resultCode, NULL);
|
|
||||||
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -423,34 +423,32 @@ void _handleMsgsFromClient(AQH_OBJECT *o, AQHOME_SERVER *xo, AQH_OBJECT *ep)
|
|||||||
void _handleMsgFromClient(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg)
|
void _handleMsgFromClient(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg)
|
||||||
{
|
{
|
||||||
GWEN_TAG16_LIST *tagList;
|
GWEN_TAG16_LIST *tagList;
|
||||||
|
uint16_t code;
|
||||||
|
uint8_t protoId;
|
||||||
|
|
||||||
tagList=AQH_IpcMessageTag16_ParsePayload(msg, 0);
|
tagList=AQH_IpcMessageTag16_ParsePayload(msg, 0);
|
||||||
if (tagList) {
|
|
||||||
uint16_t code;
|
|
||||||
uint8_t protoId;
|
|
||||||
|
|
||||||
code=AQH_IpcMessage_GetCode(msg);
|
code=AQH_IpcMessage_GetCode(msg);
|
||||||
protoId=AQH_IpcMessage_GetProtoId(msg);
|
protoId=AQH_IpcMessage_GetProtoId(msg);
|
||||||
if (protoId==AQH_IPC_PROTOCOL_DATA_ID) {
|
if (protoId==AQH_IPC_PROTOCOL_DATA_ID) {
|
||||||
DBG_INFO(NULL, "Received IPC packet %d (%x)", (int) code, code);
|
DBG_INFO(NULL, "Received IPC packet %d (%x)", (int) code, code);
|
||||||
switch(code) {
|
switch(code) {
|
||||||
case AQH_MSGTYPE_IPC_DATA_CONNECT_REQ: AqHomeDataServer_HandleConnect(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_CONNECT_REQ: AqHomeDataServer_HandleConnect(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_UPDATEDATA: AqHomeDataServer_HandleUpdateData(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_UPDATEDATA: AqHomeDataServer_HandleUpdateData(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_GETVALUES_REQ: AqHomeDataServer_HandleGetValues(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_GETVALUES_REQ: AqHomeDataServer_HandleGetValues(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_GETDATA_REQ: AqHomeDataServer_HandleGetDataPoints(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_GETDATA_REQ: AqHomeDataServer_HandleGetDataPoints(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_SETDATA: AqHomeDataServer_HandleSetData(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_SETDATA: AqHomeDataServer_HandleSetData(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_ADDVALUE: AqHomeDataServer_HandleAddValue(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_ADDVALUE: AqHomeDataServer_HandleAddValue(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_ANNOUNCEVALUE: AqHomeDataServer_HandleAnnounceValue(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_ANNOUNCEVALUE: AqHomeDataServer_HandleAnnounceValue(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_GETDEVICES_REQ: AqHomeDataServer_HandleGetDevices(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_GETDEVICES_REQ: AqHomeDataServer_HandleGetDevices(o, ep, msg, tagList); break;
|
||||||
case AQH_MSGTYPE_IPC_DATA_MODDEVICE_REQ: AqHomeDataServer_HandleModDevice(o, ep, msg, tagList); break;
|
case AQH_MSGTYPE_IPC_DATA_MODDEVICE_REQ: AqHomeDataServer_HandleModDevice(o, ep, msg, tagList); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
DBG_ERROR(NULL, "Invalid IPC protocol %d (%02x)", protoId, protoId);
|
|
||||||
}
|
|
||||||
GWEN_Tag16_List_free(tagList);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
DBG_ERROR(NULL, "Invalid IPC protocol %d (%02x)", protoId, protoId);
|
||||||
|
}
|
||||||
|
GWEN_Tag16_List_free(tagList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,50 +31,51 @@
|
|||||||
|
|
||||||
void AQH_NodeServer_HandleConnect(GWEN_UNUSED AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
void AQH_NodeServer_HandleConnect(GWEN_UNUSED AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg, const GWEN_TAG16_LIST *tagList)
|
||||||
{
|
{
|
||||||
AQH_MESSAGE *outMsg;
|
if (tagList) {
|
||||||
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
AQH_MESSAGE *outMsg;
|
||||||
char *clientId=NULL;
|
int resultCode=AQH_MSGDATA_RESULT_SUCCESS;
|
||||||
char *userId=NULL;
|
char *clientId=NULL;
|
||||||
char *passw=NULL;
|
char *userId=NULL;
|
||||||
uint32_t flags;
|
char *passw=NULL;
|
||||||
|
uint32_t flags;
|
||||||
clientId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_CLIENTID, NULL);
|
|
||||||
userId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_USERID, NULL);
|
clientId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_CLIENTID, NULL);
|
||||||
flags=AQH_Tag16_GetTagDataAsUint32(tagList, AQH_MSG_CONNECT_TAGS_FLAGS, 0);
|
userId=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_USERID, NULL);
|
||||||
passw=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_PASSWORD, NULL);
|
flags=AQH_Tag16_GetTagDataAsUint32(tagList, AQH_MSG_CONNECT_TAGS_FLAGS, 0);
|
||||||
|
passw=AQH_Tag16_GetTagDataAsNewString(tagList, AQH_MSG_CONNECT_TAGS_PASSWORD, NULL);
|
||||||
if (clientId)
|
|
||||||
AQH_Endpoint_SetServiceName(ep, clientId);
|
if (clientId)
|
||||||
if (userId)
|
AQH_Endpoint_SetServiceName(ep, clientId);
|
||||||
AQH_Endpoint_SetUserName(ep, userId);
|
if (userId)
|
||||||
|
AQH_Endpoint_SetUserName(ep, userId);
|
||||||
if (flags & AQH_MSG_CONNECT_FLAGS_WANTUPDATES)
|
|
||||||
AQH_Endpoint_AddFlags(ep, AQH_ENDPOINT_FLAGS_WANTUPDATES);
|
if (flags & AQH_MSG_CONNECT_FLAGS_WANTUPDATES)
|
||||||
|
AQH_Endpoint_AddFlags(ep, AQH_ENDPOINT_FLAGS_WANTUPDATES);
|
||||||
/* TODO: add user management, for now we allow all */
|
|
||||||
AQH_Endpoint_SetPermissions(ep,
|
/* TODO: add user management, for now we allow all */
|
||||||
AQH_ENDPOINT_PERMS_LISTVALUES |
|
AQH_Endpoint_SetPermissions(ep,
|
||||||
AQH_ENDPOINT_PERMS_READVALUE |
|
AQH_ENDPOINT_PERMS_LISTVALUES |
|
||||||
AQH_ENDPOINT_PERMS_ADDVALUE |
|
AQH_ENDPOINT_PERMS_READVALUE |
|
||||||
AQH_ENDPOINT_PERMS_LISTDATA |
|
AQH_ENDPOINT_PERMS_ADDVALUE |
|
||||||
AQH_ENDPOINT_PERMS_READDATA |
|
AQH_ENDPOINT_PERMS_LISTDATA |
|
||||||
AQH_ENDPOINT_PERMS_ADDDATA |
|
AQH_ENDPOINT_PERMS_READDATA |
|
||||||
AQH_ENDPOINT_PERMS_LISTDEVICES |
|
AQH_ENDPOINT_PERMS_ADDDATA |
|
||||||
AQH_ENDPOINT_PERMS_READDEVICE |
|
AQH_ENDPOINT_PERMS_LISTDEVICES |
|
||||||
AQH_ENDPOINT_PERMS_ADDDEVICE |
|
AQH_ENDPOINT_PERMS_READDEVICE |
|
||||||
AQH_ENDPOINT_PERMS_MODDEVICE);
|
AQH_ENDPOINT_PERMS_ADDDEVICE |
|
||||||
free(passw);
|
AQH_ENDPOINT_PERMS_MODDEVICE);
|
||||||
free(userId);
|
free(passw);
|
||||||
free(clientId);
|
free(userId);
|
||||||
|
free(clientId);
|
||||||
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_NODES_ID,
|
|
||||||
AQH_IPC_PROTOCOL_NODES_VERSION,
|
outMsg=AQH_IpcMessageResult_new(AQH_IPC_PROTOCOL_NODES_ID,
|
||||||
AQH_MSGTYPE_IPC_NODES_RESULT,
|
AQH_IPC_PROTOCOL_NODES_VERSION,
|
||||||
AQH_Endpoint_GetNextMessageId(ep),
|
AQH_MSGTYPE_IPC_NODES_RESULT,
|
||||||
AQH_IpcMessage_GetMsgId(msg),
|
AQH_Endpoint_GetNextMessageId(ep),
|
||||||
resultCode, NULL);
|
AQH_IpcMessage_GetMsgId(msg),
|
||||||
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
resultCode, NULL);
|
||||||
DBG_ERROR(NULL, "Client connected");
|
AQH_Endpoint_AddMsgOut(ep, outMsg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user