本发明涉及网络技术,具体涉及ocf客户端对alljoyn服务的发现技术。
背景技术:
alljoyn的服务发现机制采用next-generationnameservice(ngns),ngns发现协议采用了通过使用alljoyn申请的多播地址和端口来发送基于多播的mdns。alljoyn服务消费端调用findadvertisename()初始化ngns消息序列,ngns通过多播dns发送基于dns-sd的查询消息;ngns使用alljoyn申请的多播地址和端口来发送基于多播的dns,ipv4组播地址为224.0.0.251,ipv6组播地址为ff02::fb,组播端口号为5353;任何与搜索名字匹配的服务提供端通过单播方式发送dns-sd消息响应服务消费端。
ocf的服务发现是基于coapdiscovery机制。所有发布中的ocf设备加入“allcoapnodes”多播分组,如ipv6中的ff0x::fd或监听端口“5683”。需要发现资源的ocf客户端也加入该多播分组。ocf客户端发送一个发现请求给多播分组和端口“5683”,请求的uri为/oic/res。如果ocf客户端正处在发现指定资源类型的过程中,则它应使用带有指定“rt”参数的查询指令,否则所有的ocf设备都会回复此请求。
可见,alljoyn系统的服务发现机制和ocf的资源发现机制使用两种完全不同的发现协议,因此,alljoyn设备与ocf设备之间无法互相发现。
技术实现要素:
针对现有alljoyn设备与ocf设备之间无法互相发现的问题,需要一种能够实现alljoyn设备与ocf设备之间互相发现的方案。
为此,本发明所要解决的技术问题是提供一种基于dns-sd的ocf客户端对alljoyn服务的发现方法,使得alljoyn设备与ocf设备之间可互相发现。
为了解决上述技术问题,本发明提供的基于dns-sd的ocf客户端对alljoyn服务的发现方法,通过发送符合alljoyn服务发现机制的dns-sd消息去发现alljoyn服务资源。
在本方案中,在ocf客户端,通过ocf的资源发现接口发现alljoyn服务资源,并将该资源生成alljoyn标准的dns-sd查询消息。
在本方案中,ocf客户端的资源发现接口将ocf的resourceuri映射为dns-sd消息中的txt记录的“path={uri}”,对应于alljoyn的对象路径;
将ocf的resourcetype映射为dns-sd消息中txt记录的“name={resourcetype}”,对应于alljoyn的well-knownname;
将ocf的resourceinteface映射为dns-sd消息中txt记录的“if={resourceinterface}”,对应于alljoyn的接口。
在本方案中,以多播的方式发送dns-sd消息。
在本方案中,alljoyn服务端收到dns-sd查询消息后,进行匹配,在alljoyn服务和ocf要发现的资源相互匹配后,返回相应的dns-sd响应消息给ocf客户端。
在本方案中,ocf客户端在接收到dns-sd响应消息后,进行解析得到alljoyn服务的资源属性。
通过本方案可以实现ocf客户端设备对alljoyn服务资源的发现,实现了ocf协议与alljoyn协议互联互通。
附图说明
以下结合附图和具体实施方式来进一步说明本发明。
图1为本方案中dns-sd消息的生成流程图;
图2为本方案中ocf客户端发现alljoyn服务资源的流程图;
图3为本发明实例中ocf客户端发现alljoyn服务资源的流程图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本方案基于dns-sd消息,有效实现ocf客户端对alljoyn服务的发现。由ocf客户端通过发送符合alljoyn服务发现机制的dns-sd消息去发现alljoyn服务资源。
为此,本方案在ocf客户端,使用ocf的资源发现接口去发现alljoyn服务资源,此时使用的alljoyn服务资源符合ocf标准资源定义规范,拥有resourceuri,resourcetype等;ocf客户端的资源发现接口将该资源生成alljoyn标准的dns-sd查询消息,由此实现对ocf客户端设备对alljoyn服务资源的发现。
其中,dns-sd(dns-basedservicediscovery)定义了一种配置dnsptr,srv和txt记录的常规方法。
而alljoyn客户端通过如下名字格式来查询某一dnsptr记录,从而发现某一服务的所有实例:
<service>.<domain>。
dns-sd响应方返回dnssrv和dnstxt记录,且srv和txt有如下的命名格式:
<instance>.<service>.<domain>。
在此基础上,为生成符合alljoyn服务发现机制的dns-sd消息(即alljoyn标准的dns-sd消息),ocf客户端发现资源接口需要提供resourceuri,resourcetype和resourceinterface。
同时,ocf资源与alljoyndns-sd消息之间采用如下的映射规则:
将ocf的resourceuri映射为dns-sd消息中的txt记录的“path={uri}”,对应于alljoyn的对象路径;
将ocf的resourcetype映射为dns-sd消息中txt记录的“name={resourcetype}”,对应于alljoyn的well-knownname;
将ocf的resourceinterface映射为dns-sd消息中txt记录的“if={resourceinterface}”,对应于alljoyn的接口。
据此,本方案中dns-sd消息的生成流程如下(参见图1):
(1)定义要发现的alljoyn服务的resourceuri、resourcetype和resourceinterface,以及ocf客户端应用程序调用findresource()方法;
(2)c++sdk通过进程间通信调用底层栈的资源发现方法ocdoresource()方法;
(3)ocstack接收到待发现alljoyn资源的参数,按照上述对应的映射规则转化封装成dns-sd消息;
(4)调用socket,以多播的方式发送dns-sd消息,其中ipv4组播地址为224.0.0.251,ipv6组播地址为ff02::fb,组播端口号为5353。
基于上述的dns-sd查询消息,ocf客户端在发送dns-sd查询消息后,alljoyn服务端收到该dns-sd查询消息,如果alljoyn服务端拥有和dns-sd查询消息相同的well-knownname,将会返回相应的dns-sd响应消息给ocf客户端,至此,完成ocf客户端对alljoyn服务的发现过程。
由此,ocf客户端基于dns-sd消息发现alljoyn服务的流程如下(参见图2):
(1)alljoyn服务提供端连接alljoynrouter,注册总线对象,申请well-knownname;
(2)alljoyn服务对象开启mdns端口监听;
(3)ocf客户端初始化,调用ocf资源发现接口,寻找alljoyn资源;
(4)ocstack根据发现的alljoyn资源属性生成dns-sd查询消息;
(5)按照mdns多播发送dns-sd查询消息;
(6)alljoyn服务端收到dns-sd查询消息,解析txt记录,匹配对应的well-knownname和接口;
(7)alljoyn服务和ocf要发现的资源相互匹配,alljoyn服务端发送dns-sd回复;
(8)ocf客户端收到dns-sd回复,解析txt记录,得到alljoyn服务的资源属性,完成对alljoyn服务资源的发现过程。
下面以资源发现的实例具体阐述ocf客户端基于dns-sd消息对alljoyn服务的发现过程。
首先,如下表所示,分别为alljoyn标准服务对象和ocf标准资源进行定义:
由此,ocf客户端对alljoyn服务的发现的整个流程如下(参见图3):
(1)alljoyn服务提供端注册总线对象,对象路径为:/org/freedesktop/example,接口为:org.alljoyn.example.test。
(2)alljoyncore向alljoyn路由申请well-knownname:org.alljoyn.example。
(3)alljoyn服务端绑定端口,开启mdns端口监听。
(4)ocf客户端调用资源发现函数,发现资源:
resourcetype:org.alljoyn.example,
resourceuri:/org/freedesktop/example,
resoueceinterface:org.alljoyn.example.test。
(5)ocstack根据alljoyn资源属性生成对应的dns-sd查询消息。
(6)mdns多播发送dns-sd查询消息。
(7)alljoyn服务端通过mdns端口监听,收到dns-sd查询消息,解析txt记录,匹配对应的well-knownname,对象路径和接口;
(8)在alljoyn服务和ocf要发现的资源相互匹配后,alljoyn服务端发送dns-sd回复(单播响应)。
(9)ocf客户端收到dns-sd回复,解析txt记录,得到alljoyn服务的资源属性,完成对alljoyn服务资源的发现过程。
由上实例可知,本方案实现了ocf客户端对alljoyn服务的发现,有效实现了ocf协议与alljoyn协议互联互通。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。