25 Star 64 Fork 162

OpenHarmony / drivers_adapter_khdf_linux

 / 详情

HdfRemoteService 换成 HdfObject

已拒绝
任务
创建于  
2022-01-21 20:16

【任务描述】
int DevSvcManagerStubDispatch(
struct HdfRemoteService* service, int code, struct HdfSBuf *data, struct HdfSBuf *reply)
{

这里的 struct HdfRemoteService* service , 应该定义成struct HdfObject* service 比较合适
其他类似,因 struct DevSvcManagerStub *stub = (struct DevSvcManagerStub *)service 中 HdfRemoteService 和 DevSvcManagerStub 没有直接关系, 容易内参泄露
【解决方案】

【任务来源】

评论 (4)

cosmoslhf 创建了任务

DevSvcManagerStubDispatch(struct HdfRemoteService* service, ......)
{
struct DevSvcManagerStub *stub = (struct DevSvcManagerStub )service;
}
这里的 service,实际上是 HdfRemoteService->target,就是一个 HdfObject

yuanbo 任务状态待办的 修改为进行中

static HdfRemoteDispatcherDispatch方法存在两种使用情况:

  1. 作为服务端,HdfRemoteDispatcher由服务实现者定义并实例化,Dispatch回调方法为service的target对象,也就是HdfRemoteServiceObtain接口的第一个参数,在回调时确实存在参数实际类型不匹配的情况,但是,也是为例和下面的情况2做兼容产生的妥协。
  2. 作为客户端对象,HdfRemoteDispatcher由框架实现(参考下面实现),其HdfRemoteDispatcher也由框架定义和实例化,功能是通过IPC发送消息,Dispatch回调方法参数是完全匹配的,接受一个struct HdfRemoteService*对象。
struct HdfRemoteService *HdfRemoteAdapterBind(OHOS::sptr<OHOS::IRemoteObject> binder)
{
    struct HdfRemoteService *remoteService = nullptr;
    static HdfRemoteDispatcher dispatcher = {
        .Dispatch = HdfRemoteAdapterDispatch,
        .DispatchAsync = HdfRemoteAdapterDispatchAsync,
    };

    struct HdfRemoteServiceHolder *holder = new HdfRemoteServiceHolder();
    if (holder != nullptr) {
        holder->remote_ = binder;
        remoteService = &holder->service_;
        remoteService->dispatcher = &dispatcher;
        remoteService->index = (uint64_t)binder.GetRefPtr();
        return remoteService;
    }
    return nullptr;
}

所以,在服务端的'DevSvcManagerStubDispatch'参数类型不严格匹配,是出于统一客户端、服务端对象的设计妥协,无法直接修改为struct HdfObject*

yuanbo 负责人设置为yuanbo
yuanbo 添加协作者liuhonggang
yuanbo 任务状态进行中 修改为已拒绝
cosmoslhf 任务状态已拒绝 修改为进行中

@yuanbo 理解 , 收发 多是在 hdf_remote_adapter 里面, 但是
HdfRemoteService 以一个成员就是 HdfObject 对象, 无论 是对 服务端 还是 客户端 , 其实 将 Dispatch 第一个参数 改成 HdfObject * , 强制转换 能说的过去, 请 再考虑一下建议, 如还是 认为不行 , 可以关闭
,谢谢

HdfObject *表示过于宽泛,为让HdfRemoteServiceHdfRemoteDispatcher的联系更清晰,所以还是建议不修改。谢谢你的issue。

yuanbo 任务状态进行中 修改为已拒绝

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(4)
8486051 liangkzgitee 1615865665 7806875 yuanbogit 1628044815
1
https://gitee.com/openharmony/drivers_adapter_khdf_linux.git
git@gitee.com:openharmony/drivers_adapter_khdf_linux.git
openharmony
drivers_adapter_khdf_linux
drivers_adapter_khdf_linux

搜索帮助