+list<Device *> *DeviceManagerClient::parse_device_list_msg(BusMessage *msg_param,
+ int *err_flg) {
+ int ii;
+ long count;
+ ostringstream key;
+ string id;
+ string name;
+ string type;
+ string datastr;
+ EnumDeviceLifeCycleStatus state;
+ int state_i;
+ Device *dev;
+ Data *data;
+ list<Device *> *ret_val;
+
+ ret_val = new list<Device *>;
+ count = msg_param->get_long_parameter(RSP__DEVICE_LIST__DEVICE_COUNT, err_flg);
+ log_debug("device count: %ld\n", count);
+ if (*err_flg == PLP_OK) {
+ for (ii = 0; ii < count; ii++) {
+ data = NULL;
+
+ key.str("");
+ key << RSP__DEVICE_LIST__ID << ii;
+ id = msg_param->get_string_parameter(key.str(), err_flg);
+ if (*err_flg != PLP_OK) {
+ log_error("Failed to parse device id.\n");
+ break;
+ }
+
+ key.str("");
+ key << RSP__DEVICE_LIST__NAME << ii;
+ name = msg_param->get_string_parameter(key.str(), err_flg);
+ if (*err_flg != PLP_OK) {
+ log_error("Failed to parse name for the device: %s\n", id.c_str());
+ break;
+ }
+
+ key.str("");
+ key << RSP__DEVICE_LIST__TYPE << ii;
+ type = msg_param->get_string_parameter(key.str(), err_flg);
+ if (*err_flg != PLP_OK) {
+ log_error("Failed to parse type for the device: %s\n", id.c_str());
+ break;
+ }
+
+ key.str("");
+ key << RSP__DEVICE_LIST__LF_STATE << ii;
+ state_i = msg_param->get_int_parameter(key.str(), err_flg);
+ if (*err_flg != PLP_OK) {
+ log_error("Failed to parse life cycle state for the device: %s\n", id.c_str());
+ break;
+ }
+ state = (EnumDeviceLifeCycleStatus)state_i;
+
+ key.str("");
+ key << RSP__DEVICE_LIST__DATA << ii;
+ datastr = msg_param->get_string_parameter(key.str(), err_flg);
+ if (*err_flg == PLP_OK) {
+ data = Data::parse_string(datastr);
+ if (data == NULL) {
+ log_error("No data available for the device: %s\n", id.c_str());
+ }
+ }
+ else {
+ log_error("No data available for the device: %s\n", id.c_str());
+ }
+ dev = new DeviceData(id, type, name, state, data);
+ ret_val->push_back(dev);
+ }
+ }
+ return ret_val;
+}
+