return required_privileges_;
}
-void ComplicationProvider::Impl::OnVanish(const std::string& name) {
- LOGW("OnVanish %s", name.c_str());
- auto sender_info = sender_info_.find(name);
- if (sender_info != sender_info_.end()) {
- auto si = sender_info->second;
- gdbus_.get()->UnWatch(si->GetWatcherID());
- sender_info_.erase(name);
- delete si;
- LOGW("delete sender info done");
+void ComplicationProvider::Impl::OnVanish(const std::string& watch_name) {
+ LOGW("OnVanish %s", watch_name.c_str());
+ auto iter = sender_info_.begin();
+ for (; iter != sender_info_.end(); iter++) {
+ SenderInfo* si = iter->second;
+ if (watch_name.compare(si->GetWatchName()) == 0) {
+ gdbus_.get()->UnWatch(si->GetWatcherID());
+ sender_info_.erase(iter);
+ delete si;
+ LOGW("delete sender info done");
+ return;
+ }
}
}
}
ComplicationProvider::Impl::SenderInfo* ComplicationProvider::Impl::GetSenderInfo(
- std::string sender_name, std::string sender_app_id) {
- std::string watch_name = util::EncodeStr(util::EncodeType::Name, sender_app_id);
- if (watch_name.empty()) {
- LOGE("fail to get watch name");
- return NULL;
- }
+ std::string sender_name, GDBusConnection* connection, GVariant* parameters) {
- auto iter = sender_info_.find(watch_name);
+ auto iter = sender_info_.find(sender_name);
SenderInfo* si;
if (iter == sender_info_.end()) {
+ char* sender_app_id = NULL;
+ g_variant_get_child(parameters, 0, "&s", &sender_app_id);
+ if (sender_app_id == NULL ||
+ !util::CheckSender(sender_app_id, sender_name, connection)) {
+ LOGE("invalid sender_app_id %s", sender_app_id);
+ return NULL;
+ }
+
int watcher_id = 0;
watcher_id = gdbus_.get()->Watch(std::string(sender_app_id), this);
try {
LOGE("Permission denied");
return NULL;
}
- si = new SenderInfo(sender_name, sender_app_id.c_str(), watcher_id, watch_name);
- sender_info_[watch_name] = si;
+ std::string watch_name = util::EncodeStr(util::EncodeType::Name, sender_app_id);
+ if (watch_name.empty()) {
+ LOGE("fail to get watch name");
+ return NULL;
+ }
+ si = new SenderInfo(sender_name, sender_app_id, watcher_id, watch_name);
+ sender_info_[sender_name] = si;
LOGI("sender_info added (%s) ", watch_name.c_str());
} catch (const std::bad_alloc &ba) {
LOGE("SenderInfo::Exception bad_alloc");
char* shared_data_type;
char* sender_app_id = NULL;
- g_variant_get_child(parameters, 0, "&s", &sender_app_id);
- if (sender_app_id == NULL ||
- !util::CheckSender(sender_app_id, sender_name, connection)) {
- LOGE("invalid sender_app_id %s", sender_app_id);
- return;
- }
-
- SenderInfo* si = GetSenderInfo(sender_name, std::string(sender_app_id));
+ SenderInfo* si = GetSenderInfo(sender_name, connection, parameters);
if (si == NULL)
return;