软总线OpenSession失败问题分析(一)
关键字 软总线,OpenSession 问题描述 XX开发版同RK3568 eth组网,无法打开对端设备的音乐应用。 问题原因 应用侧StartAility 时,软总线OpenSession 失败,导致应用扭转业务失败。 分析过程 查看日志,可以看见,OpenSession 失败,往前查看日志
关键字
软总线,OpenSession
问题描述
XX开发版同RK3568 eth组网,无法打开对端设备的音乐应用。
问题原因
应用侧StartAility 时,软总线OpenSession 失败,导致应用扭转业务失败。
分析过程
查看日志,可以看见,OpenSession 失败,往前查看日志,软总线在选路时,本地的网络能力值为local 0。导致软总线选路失败。
在eth 组网的情况下,该local 值应该为64,可见,软总线模块没有正确获取网络特征值。手动插拔开发版网线,软总线模块的网络监听log没有打印对应的网络特征值变化。
抓取开发板开机log,可以看见软总线的网络监听注册失败。开机后,获取hdc shell 获取一下网络模块的进程,网络模块的进程存在,根据分析软总线模块的代码,该问题应该是软总线SA在网络模块SA前启动导致。
软总线的网络监听注册失败:
代码位置:foundation/communication/dsoftbus/adapter/common/bus_center/network/lnn_netmanager_listener.cpp
解决方案
软总线SA在网络模块SA前启动,导致注册网络模块监听失败,调用可以调用元能力的SubscribeSystemAbility 方法在软总线中注册网络模块SA的启动监听。
int32_t LnnSubcribeNetManagerService(void)
{
LNN_LOGI(LNN_BUILDER, "subscribe net manager service call");
OHOS::sptr<OHOS::ISystemAbilityManager> samgrProxy =
OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
if (samgrProxy == nullptr) {
LNN_LOGE(LNN_BUILDER, "abilityManager is nullptr");
return false;
}
OHOS::sptr<OHOS::NetManagerChangeListener> listener = new (std::nothrow) OHOS::NetManagerChangeListener();
if (listener == nullptr) {
LNN_LOGE(LNN_BUILDER, "failed to create listener");
return false;
}
int32_t ret = samgrProxy->SubscribeSystemAbility(OHOS::COMM_NET_CONN_MANAGER_SYS_ABILITY_ID, listener);
if (ret != OHOS::ERR_OK) {
LNN_LOGE(LNN_BUILDER, "subscribe system ability failed, ret=%{public}d", ret);
return false;
}
LNN_LOGI(LNN_BUILDER, "subscribe net manager service success");
return SOFTBUS_OK;
}
void NetManagerChangeListener::OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId)
{
LNN_LOGI(LNN_BUILDER, "net manager SA add %{public}d", systemAbilityId);
if (systemAbilityId == COMM_NET_CONN_MANAGER_SYS_ABILITY_ID) {
LNN_LOGE(LNN_BUILDER, "net manager SA add");
LnnInitNetManagerMonitorImpl();
}
}
完整代码可以参考附件patch。
合入patch 修改后,在开发板在开机启动时,有 RegisterIfacesStateChanged succ 打印。
分布式组网认证并进行扭转业务,app 扭转成功。日志显示网络特特征值local =64,进行eth热插拔,网络监听正常相应,问题解决。
更多推荐
所有评论(0)