aqhome-data: really fixed bug with creating bad device objects.
This commit is contained in:
@@ -79,7 +79,8 @@ static int _handleNewClient(AQH_OBJECT *o, AQH_OBJECT *clientEndpoint);
|
|||||||
static int _handleClientDown(AQH_OBJECT *o, AQH_OBJECT *clientEndpoint);
|
static int _handleClientDown(AQH_OBJECT *o, AQH_OBJECT *clientEndpoint);
|
||||||
static void _handleMsgsFromClient(AQH_OBJECT *o, AQHOME_SERVER *xo, AQH_OBJECT *ep);
|
static void _handleMsgsFromClient(AQH_OBJECT *o, AQHOME_SERVER *xo, AQH_OBJECT *ep);
|
||||||
static void _handleMsgFromClient(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg);
|
static void _handleMsgFromClient(AQH_OBJECT *o, AQH_OBJECT *ep, const AQH_MESSAGE *msg);
|
||||||
static void _createValue(AQHOME_SERVER *xo, AQH_OBJECT *epDriver, const char *deviceName, const AQH_VALUE *valueTemplate);
|
static void _createValue(AQHOME_SERVER *xo, AQH_OBJECT *epDriver,
|
||||||
|
const char *deviceName, const char *valueNameForSystem, const AQH_VALUE *valueTemplate);
|
||||||
static void _updateValue(AQHOME_SERVER *xo, AQH_VALUE *v, const char *deviceName, const AQH_VALUE *valueTemplate);
|
static void _updateValue(AQHOME_SERVER *xo, AQH_VALUE *v, const char *deviceName, const AQH_VALUE *valueTemplate);
|
||||||
static AQH_DEVICE *_getOrCreateDeviceForDriver(AQHOME_SERVER *xo, AQH_OBJECT *epDriver, const char *deviceName);
|
static AQH_DEVICE *_getOrCreateDeviceForDriver(AQHOME_SERVER *xo, AQH_OBJECT *epDriver, const char *deviceName);
|
||||||
static int _createPidFile(const char *pidFilename);
|
static int _createPidFile(const char *pidFilename);
|
||||||
@@ -655,7 +656,7 @@ AQH_VALUE *AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(AQH_OBJECT *o,
|
|||||||
v=AQH_Storage_GetValueByNameForSystem(xo->storage, GWEN_Buffer_GetStart(buf));
|
v=AQH_Storage_GetValueByNameForSystem(xo->storage, GWEN_Buffer_GetStart(buf));
|
||||||
if (v==NULL) {
|
if (v==NULL) {
|
||||||
if (AQH_Endpoint_GetPermissions(epDriver) & AQH_ENDPOINT_PERMS_ADDVALUE)
|
if (AQH_Endpoint_GetPermissions(epDriver) & AQH_ENDPOINT_PERMS_ADDVALUE)
|
||||||
_createValue(xo, epDriver, deviceName, valueTemplate);
|
_createValue(xo, epDriver, deviceName, GWEN_Buffer_GetStart(buf), valueTemplate);
|
||||||
else {
|
else {
|
||||||
DBG_ERROR(AQH_LOGDOMAIN, "No permissions to create value \"%s\"", GWEN_Buffer_GetStart(buf));
|
DBG_ERROR(AQH_LOGDOMAIN, "No permissions to create value \"%s\"", GWEN_Buffer_GetStart(buf));
|
||||||
GWEN_Buffer_free(buf);
|
GWEN_Buffer_free(buf);
|
||||||
@@ -672,20 +673,25 @@ AQH_VALUE *AqHomeDataServer_GetOrCreateValueForDriverWithTemplate(AQH_OBJECT *o,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void _createValue(AQHOME_SERVER *xo, AQH_OBJECT *epDriver, const char *deviceName, const AQH_VALUE *valueTemplate)
|
void _createValue(AQHOME_SERVER *xo, AQH_OBJECT *epDriver,
|
||||||
|
const char *deviceName, const char *valueNameForSystem, const AQH_VALUE *valueTemplate)
|
||||||
{
|
{
|
||||||
AQH_DEVICE *device;
|
AQH_DEVICE *device;
|
||||||
const char *serviceName;
|
const char *serviceName;
|
||||||
|
const char *valueName;
|
||||||
AQH_VALUE *v;
|
AQH_VALUE *v;
|
||||||
|
|
||||||
DBG_INFO(AQH_LOGDOMAIN, "Creating value \"%s\"", deviceName);
|
|
||||||
serviceName=AQH_Endpoint_GetServiceName(epDriver);
|
serviceName=AQH_Endpoint_GetServiceName(epDriver);
|
||||||
|
valueName=AQH_Value_GetName(valueTemplate);
|
||||||
device=(deviceName && *deviceName)?_getOrCreateDeviceForDriver(xo, epDriver, deviceName):NULL;
|
device=(deviceName && *deviceName)?_getOrCreateDeviceForDriver(xo, epDriver, deviceName):NULL;
|
||||||
|
|
||||||
|
DBG_ERROR(AQH_LOGDOMAIN,
|
||||||
|
"Creating value: service=\"%s\", device=\"%s\", value \"%s\"",
|
||||||
|
serviceName?serviceName:"<no service>", deviceName?deviceName:"<no device>", valueName?valueName:"<no value>");
|
||||||
v=AQH_Value_new();
|
v=AQH_Value_new();
|
||||||
AQH_Value_SetDriver(v, serviceName);
|
AQH_Value_SetDriver(v, serviceName);
|
||||||
AQH_Value_SetName(v, AQH_Value_GetName(valueTemplate));
|
AQH_Value_SetName(v, AQH_Value_GetName(valueTemplate));
|
||||||
AQH_Value_SetNameForSystem(v, deviceName);
|
AQH_Value_SetNameForSystem(v, valueNameForSystem);
|
||||||
AQH_Value_SetValueUnits(v, AQH_Value_GetValueUnits(valueTemplate));
|
AQH_Value_SetValueUnits(v, AQH_Value_GetValueUnits(valueTemplate));
|
||||||
AQH_Value_SetValueType(v, AQH_Value_GetValueType(valueTemplate));
|
AQH_Value_SetValueType(v, AQH_Value_GetValueType(valueTemplate));
|
||||||
AQH_Value_SetModality(v, AQH_Value_GetModality(valueTemplate));
|
AQH_Value_SetModality(v, AQH_Value_GetModality(valueTemplate));
|
||||||
@@ -755,7 +761,7 @@ AQH_DEVICE *_getOrCreateDeviceForDriver(AQHOME_SERVER *xo, AQH_OBJECT *epDriver,
|
|||||||
device=AQH_Storage_GetDeviceByNameForSystem(xo->storage, GWEN_Buffer_GetStart(buf));
|
device=AQH_Storage_GetDeviceByNameForSystem(xo->storage, GWEN_Buffer_GetStart(buf));
|
||||||
if (device==NULL) {
|
if (device==NULL) {
|
||||||
if (AQH_Endpoint_GetPermissions(epDriver) & AQH_ENDPOINT_PERMS_ADDDEVICE) {
|
if (AQH_Endpoint_GetPermissions(epDriver) & AQH_ENDPOINT_PERMS_ADDDEVICE) {
|
||||||
DBG_INFO(AQH_LOGDOMAIN, "Creating device \"%s\"", GWEN_Buffer_GetStart(buf));
|
DBG_ERROR(AQH_LOGDOMAIN, "Creating device \"%s\"", GWEN_Buffer_GetStart(buf));
|
||||||
device=AQH_Device_new();
|
device=AQH_Device_new();
|
||||||
AQH_Device_SetDriver(device, serviceName);
|
AQH_Device_SetDriver(device, serviceName);
|
||||||
AQH_Device_SetName(device, deviceName);
|
AQH_Device_SetName(device, deviceName);
|
||||||
|
|||||||
Reference in New Issue
Block a user