业务系统的协议解析方法及装置与流程

文档序号:12493760阅读:402来源:国知局
业务系统的协议解析方法及装置与流程

本发明涉及物联网通讯技术领域,尤其涉及一种业务系统的协议解析方法及装置。



背景技术:

随着信息通信技术的不断发展,通信网络作为信息通信技术的重要基础,已经从人到人的通信发展到人与物、物与物之间的通信,并逐渐趋向于从纵向的局部物与物相连过渡到横向的跨应用、跨地域的物联网。物联网在1999年被提出,其定义为将所有物品通过射频识别(RFID)、红外传感、全球定位系统、激光扫描灯信息传感设备与互联网连接起来,进行信息交互和通信,实现智能化识别、定位、跟踪、监控和管理。

目前的物联网通信处于初步的发展阶段,物联网通讯设计中都是根据一种已经设计好的通讯协议,简单的在业务系统的逻辑中,通过硬编码的方式进行协议的解析。

现有技术中所有的逻辑都在一个处理器中,耦合度高,随着业务的扩展,程序的复杂度越来越高。并且,使用条件判断语句解析报文再进行分发处理时,在通讯协议上每新增一种业务,都需要对判断语句进行修改,随着业务的扩展,判断语句会日益复杂,并且每一次更新,都可能对以往所有的逻辑产生影响。所以,现有的物联网通讯技术中存在着扩展性低的问题。



技术实现要素:

本发明实施例提出了一种业务系统的协议解析方法,可以解决物联网通讯技术中存在的扩展性低的技术问题。

一种业务系统的协议解析方法,包括:

在接收到通讯报文时,查找与所述接收到的通讯报文匹配的协议匹配对象;

通过所述协议匹配对象中预定义的函数返回与所述通讯报文对应的业务标识和业务类型;

根据所述通讯报文生成数据对象;

根据所述业务标识和所述业务类型查找对应的业务模块调用接口,将所述数据对象传递至所述业务模块调用接口进行处理。

可选的,在所述查找与所述接收到的通讯报文匹配的协议匹配对象之前,还包括:

加载新增的协议匹配对象,获取所述新增的协议匹配对象的标识;

获取输入的与所述协议匹配对象对应的关键字,将所述新增的协议匹配对象的标识以及与所述新增的协议匹配对象对应的关键字存储在XML文件中。

可选的,所述查找与所述接收到的通讯报文匹配的协议匹配对象包括:

获取所述接收到的通讯报文中的关键字;

在所述XML文件中查询与所述关键字匹配的协议匹配对象的标识,根据所述标识获取对应的协议匹配对象。

可选的,所述方法还包括:

加载新增的业务模块,获取所述新增的业务模块的业务模块调用接口;

获取输入的与所述新增的业务模块对应的业务标识和业务类型,将所述新增的业务模块调用接口以及与所述新增的业务模块对应的业务标识和业务类型存储在所述XML文件中。

可选的,所述根据所述业务标识和所述业务类型查找对应的业务模块调用接口包括:

在所述XML文件中查询到与所述业务标识和所述业务类型匹配的业务模块调用接口时,调用查找到的业务模块调用接口。

此外,还提出了一种业务系统的协议解析装置。

一种业务系统的协议解析装置,包括:

协议匹配对象查找单元,用于在接收到通讯报文时,查找与所述接收到的通讯报文匹配的协议匹配对象;

通讯报文解析单元,用于通过所述协议匹配对象中预定义的函数返回与所述通讯报文对应的业务标识和业务类型;

数据对象生成单元,用于根据所述通讯报文生成数据对象;

业务模块调用单元,用于根据所述业务标识和所述业务类型查找对应的业务模块调用接口,将所述数据对象传递至所述业务模块调用接口进行处理。

可选的,所述装置还包括协议匹配对象添加单元,用于:

加载新增的协议匹配对象,获取所述新增的协议匹配对象的标识;

获取输入的与所述协议匹配对象对应的关键字,将所述新增的协议匹配对象的标识以及与所述新增的协议匹配对象对应的关键字存储在XML文件中。

可选的,所述协议匹配对象查找单元还用于:

获取所述接收到的通讯报文中的关键字;

在所述XML文件中查询与所述关键字匹配的协议匹配对象的标识,根据所述标识获取对应的协议匹配对象。

可选的,所述装置还包括业务模块添加单元:

加载新增的业务模块,获取所述新增的业务模块的业务模块调用接口;

获取输入的与所述新增的业务模块对应的业务标识和业务类型,将所述新增的业务模块调用接口以及与所述新增的业务模块对应的业务标识和业务类型存储在所述XML文件中。

可选的,所述业务模块调用单元还用于:

在所述XML文件中查询到与所述业务标识和所述业务类型匹配的业务模块调用接口时,调用查找到的业务模块调用接口。

本发明实施例中通过查找与接收到的通讯报文匹配的协议匹配对象,根据协议匹配对象中预定义的函数返回与通讯报文对应的业务标识和业务类型,并根据通讯报文生成数据对象,将数据对象传递至与业务标识和业务类型对应的业务模块调用接口进行处理,采用XML文件格式保存协议匹配对象和业务模块调用接口,使得在对处理程序进行修改时,只需要改动XML文件中对应的模块;同时,在增加或者删除业务模块时,只需要添加或者删除相应的XML文件,而不必对整个业务处理程序进行改动,从而降低业务模块之间的耦合度,提高程序的可扩展性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

其中:

图1为一个实施例中一种业务系统的协议解析方法的流程图;

图2为另一个实施例中一种业务系统的协议解析方法的流程图;

图3为一个实施例中一种业务系统的协议解析装置的示意图;

图4为一个实施例中一种业务系统的协议解析装置的示意图;

图5为一个实施例中一种业务系统的协议解析装置的结构图;

图6为一个实施例中运行上述业务系统的协议解析方法的计算机系统的硬件架构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在一个实施例中,提出了一种业务系统的协议解析方法。该方法的实现可依赖于计算机程序,该计算机程序可以是通讯协议解析的管理程序。该计算机程序可运行于基于冯诺依曼体系的计算机系统之上。

参照图1,图1是本发明实施例中一种业务系统的协议解析方法的流程图,该业务系统的协议解析方法的执行包括以下步骤:

步骤S102:在接收到通讯报文时,查找与所述接收到的通讯报文匹配的协议匹配对象。

步骤S104:通过所述协议匹配对象中预定义的函数返回与所述通讯报文对应的业务标识和业务类型。

步骤S106:根据所述通讯报文生成数据对象。

通讯报文是网络传输的单位,传输过程中会不断的封装成分组、包、帧来进行传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据。比如里面有报文类型、报文版本、报文长度、报文实体等等信息。在本实施例中,与通讯报文匹配的协议匹配对象指对通讯协议进行处理的单元,其中包含3个内容:业务标识、匹配规则和消息转发方式。

其中,业务标识是通讯报文中携带的业务处理信息对应的业务处理对象,以社交软件“删除好友这一操作过程”为例,业务标识为删除好友,可能的值为:ms.person.friend.delete;匹配规则指从通讯报文中识别这一操作类型,以数据基于http传输为例,假设解析的通讯报文的url为“http://ip:port/iport/cdata?cliendId=3434UYU77&option=5&cmd=3&oporation=delete&id=eUYIIDUUSY”,匹配规则为识别url中的参数,从而确定具体业务,例如规则可能为:option为5,operation为delete且含有id的url,就认为是删除好友的操作。消息转发方式指的是确定了报文的业务特征后的处理方式。如可以将业务标识和其它信息(如人员id,姓名等),发往特定队列的消息队列,给专门处理好友的业务模块接收(也可能有其它方式,如通过websocket、thrift等推送消息)。

在本实施例中,可预先创建XML文件对协议匹配对象的标识进行保存,XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的标记(markup)是关键部分,可以创建内容,然后使用限定标记去标记它,从而使每个单词、短语或块成为可识别、可分类的信息。XML文件存在于业务模块,保存的是协议匹配对象中描述的业务标识,协议版本、调用类、调用函数、优先值。

在一个实施例中,可以通过获取接收到的通讯报文中的关键字,在XML文件中查询与关键字匹配的协议匹配对象的标识,根据查找到的标识获取对应的已加载到内存中的协议匹配对象。系统可在启动时加载预先定义的多个类型的协议匹配对象的类,并生成相应的协议匹配对象,存储在内存中,生成的协议匹配对象即具有相应的标识。系统也可在启动后动态地加载多个类型的协议匹配对象的类。例如,在通讯报文中查询到关键字“device”,根据该关键字在XML文件中查找到对应的协议匹配对象的标识如“device 1-4”,其中包含了关键字“device”,再根据该协议匹配标识获取对应的已加载到内存中的协议匹配对象。

这里的关键字匹配可以包含多种情况,可以是在关键字与协议匹配对象的标识完全相同时判定为匹配;也可以设定一定的百分比阈值,超过设定的阈值时判定为匹配,如关键字与协议匹配对象的标识的字符串的相似度为80%,设定的阈值为70%,此时即认为匹配成功。根据关键字匹配查找对应的协议匹配对象,可以快速地检测到相应的协议匹配对象,提高处理效率。

步骤S108:根据所述业务标识和所述业务类型查找对应的业务模块调用接口,将所述数据对象传递至所述业务模块调用接口进行处理。

在本实施例中,对通讯报文的业务处理需要通过调用对应的业务模块接口,并将数据对象传递到业务模块调用接口进行处理。例如,通讯报文中指示需要将设备1中的数据删除,其中的关键字为“device”,对应的协议匹配对象获取其中的业务标识为“device”,业务类型为“delete”,数据对象为“data”。此时,根据业务标识和业务类型查找到对应的业务模块调用接口,假设为调用函数“DELETE”,将数据对象“data”传递至函数“DELETE”进行处理。

参照图2,图2为本发明另一个实施例中一种业务系统的协议解析方法的流程图,包括以下步骤:

步骤S202:加载新增的协议匹配对象,获取所述新增的协议匹配对象的标识,获取输入的与所述协议匹配对象对应的关键字,将所述新增的协议匹配对象的标识以及与所述新增的协议匹配对象对应的关键字存储在XML文件中。

在本实施例中,可预先创建XML文件对协议匹配对象的标识进行保存,XML是可扩展标记语言(Extensible Markup Language)的缩写,其中的标记(markup)是关键部分,可以创建内容,然后使用限定标记去标记它,从而使每个单词、短语或块成为可识别、可分类的信息。XML文件存在于业务模块,保存的是协议匹配对象中描述的业务标识,协议版本、调用类、调用函数、优先值。

在一个实施例中,增加新的协议匹配对象时,获取新增的协议匹配对象的标识,获取输入的与协议匹配对象对应的关键字,将新增的协议匹配对象的标识以及与新增的协议匹配对象对应的关键字存储在XML文件中。之后通过获取接收到的通讯报文中的关键字,在XML文件中查询已加载到内存中的与关键字匹配的协议匹配对象的标识,根据查找到的标识获取对应的协议匹配对象。系统可在启动时加载预先定义的多个类型的协议匹配对象的类,并生成相应的协议匹配对象,存储在内存中,生成的协议匹配对象即具有相应的标识。系统也可在启动后动态地加载多个类型的协议匹配对象的类。

步骤S204:在接收到通讯报文时,查找与所述接收到的通讯报文匹配的协议匹配对象。

步骤S206:通过所述协议匹配对象中预定义的函数返回与所述通讯报文对应的业务标识和业务类型。

步骤S208:根据所述通讯报文生成数据对象。

通讯报文是网络传输的单位,传输过程中会不断的封装成分组、包、帧来进行传输,封装的方式就是添加一些信息段,那些就是报文头以一定格式组织起来的数据。比如里面有报文类型、报文版本、报文长度、报文实体等等信息。在本实施例中,与通讯报文匹配的协议匹配对象指对通讯协议进行处理的单元,其中包含3个内容:业务标识、匹配规则和消息转发方式。其中,以社交软件“删除好友这一操作过程”为例,业务标识为删除好友,可能的值为:ms.person.friend.delete;匹配规则指从通讯报文中识别这一操作类型,以数据基于http传输为例,假设解析的通讯报文的url为“http://ip:port/iport/cdata?cliendId=3434UYU77&option=5&cmd=3&oporation=delete&id=eUYIIDUUSY”,匹配规则为识别url中的参数,从而确定具体业务,例如规则可能为:option为5,operation为delete且含有id的url,就认为是删除好友的操作。消息转发方式指的是确定了报文的业务特征后的处理方式。如可以将业务标识和其它信息(如人员id,姓名等),发往特定队列的消息队列,给专门处理好友的业务模块接收(也可能有其它方式,如通过websocket、thrift等推送消息)。

在一个实施例中,可以通过获取接收到的通讯报文中的关键字,在XML文件中查询与关键字匹配的协议匹配对象的标识,根据查找到的标识获取对应的已加载到内存中的协议匹配对象。系统可在启动时加载预先定义的多个类型的协议匹配对象的类,并生成相应的协议匹配对象,存储在内存中,生成的协议匹配对象即具有相应的标识。系统也可在启动后动态地加载多个类型的协议匹配对象的类。

例如,在通讯报文中查询到关键字“device”,根据该关键字在XML文件中查找到对应的协议匹配对象的标识如“device 1-4”,其中包含了关键字“device”,再根据该协议匹配标识获取对应的已加载到内存中的协议匹配对象。这里的关键字匹配可以包含多种情况,可以是在关键字与协议匹配对象的标识完全相同时判定为匹配;也可以设定一定的百分比阈值,超过设定的阈值时判定为匹配,如关键字与协议匹配对象的标识的字符串的相似度为80%,设定的阈值为70%,此时即认为匹配成功。根据关键字匹配查找对应的协议匹配对象,可以快速地检测到相应的协议匹配对象,提高处理效率。

步骤S210:加载新增的业务模块,获取所述新增的业务模块的业务模块调用接口,获取输入的与所述新增的业务模块对应的业务标识和业务类型,将所述新增的业务模块调用接口以及与所述新增的业务模块对应的业务标识和业务类型存储在所述XML中。

在本实施例中,增加新的业务模块时,获取所述新增的业务模块的业务模块调用接口,获取输入的与新增的业务模块对应的业务标识和业务类型,将新增的业务模块调用接口以及与新增的业务模块对应的业务标识和业务类型存储在所述XML中。在调用业务模块接口时,在XML文件中查询到已加载到内存中的与业务标识和业务类型匹配的业务模块调用接口时,调用查找到的业务模块调用接口,这里的业务模块调用接口可以是函数或者链接等多种类型。

例如,仍以上述业务标识“device”为例,需要添加输出数据的业务模块,假设为“print”函数,只需要在预先XML文件中写入对应的业务标识“device”和业务类型“print”,在接收到通讯报文时,从XML文件中查询到业务标识“device”和业务类型“print”对应的业务模块调用接口,将需要处理的数据对象“data”发送至业务模块“print”函数即可。新增加或者删除协议匹配对象和业务模块时,都只需要在XML文件中进行添加或者删除相应的指令,而不需要对整个处理程序进行大幅度的改动,从而降低业务模块之间的耦合度,提高程序的可扩展性。

步骤S212:根据所述业务标识和所述业务类型查找对应的业务模块调用接口,将所述数据对象传递至所述业务模块调用接口进行处理。

在本实施例中,对通讯报文的业务处理需要通过调用对应已加载到内存中的业务模块接口,并将数据对象传递到业务模块调用接口进行处理。例如,通讯报文中指示需要将设备1中的数据删除,其中的关键字为“device”,对应的协议匹配对象获取其中的业务标识为“device”,业务类型为“delete”,数据对象为“data”。此时,根据业务标识和业务类型查找到对应的业务模块调用接口,假设为调用函数“DELETE”,将数据对象“data”传递至函数“DELETE”进行处理。

在本实施例中,仍以上述删除好友为例,例如业务标识为ms.person.friend.delete,协议版本为v1.0.0,调用类为好友类,调用函数为删除,优先值为10,此时接收消息队列发送的消息即为触发好友类的删除操作。如果协议发生了升级(通讯时会上报协议版本),如新版本的app删除好友的同时抹掉与好友有关的痕迹,旧版本功能不变,此时只需要在XML增加另一个配置,如:业务标识为ms.person.friend.delete,协议版本为v1.1.0,调用类为好友类,调用函数为删除增强版,优先值为10,即可完成功能的扩展。

如果有定制需求,如该社交软件需要定制版本给某大型公司内部使用,该公司要求只能删除不属于公司员工的好友,传统的做法是,复制一份代码,修改删除好友功能,弊端是如果定制版发现增加好友的功能有问题,原来标准版本的代码也需要修改。标准版本增加的新功能,定制版本无法自动增加。这样做的项目越多,代码就越混乱,维护成本高。而在本发明实施例中,只需要增加一个功能包,功能包里也有一个XML,加上定制的删除好友内容,如:业务标识为ms.person.friend.delete,协议版本为v1.1.0,调用类为功能包好友类,调用函数为功能包删除,优先值为9,同时在功能包中加上功能包好友类和功能包删除函数。故只需要加入这个功能包,删除好友的操作执行的就是附加功能包中的操作,而不是原来主功能包中的操作,从而实现功能包形式的扩展性。

在一个实施例中,如附图3所示,为一个实施例中一种业务系统的协议解析装置的示意图,其中,服务器启动时初始化协议匹配扫描器,加载所有的协议匹配对象,在接收到通讯报文时,根据通讯报文中说明的协议标识,生成相应的请求调度器。请求调度器将通讯报文传输给协议转换器,协议转换器将通讯报文发送给协议匹配命中器。协议匹配命中器调用协议匹配扫描器,扫描所有的协议匹配器,并返回命中的业务标识和业务类型。协议转换匹配器根据业务标识找到对应的协议转换器,转换通讯报文成为数据对象返回给请求调度器。请求调度器根据业务标识、业务类型及数据对象启动主处理器,完成通讯报文的解析。根据以上步骤,通讯协议的增减只需要增减相应的协议匹配对象,所有的逻辑、流程都无需做任何的改动,实现高可扩展性。

在一个实施例中,如附图4所示,为一个实施例中一种业务系统的协议解析装置的示意图,其中,请求调度器根据业务标识、业务类型及数据对象启动主处理器之后,主处理器在列表中查询业务标识对应的处理类型,调用处理调度器。处理调度器会扫描所有标注的处理类和处理方法,找到标记相应处理类型的方法,将业务标识、数据对象用处理类型定义的方式传递给业务模块调用接口。业务模块调用接口根据业务标识和业务类型自动选择相应的业务处理模块,进行具体业务的处理。

此外,在一个实施例中,还提出了一种业务系统的协议解析装置,如图5所示,上述业务系统的协议解析装置包括协议匹配对象查找单元102,通讯报文解析单元104,数据对象生成单元106,业务模块调用单元108,协议匹配对象添加单元110,业务模块添加单元112,其中:

协议匹配对象查找单元102,用于在接收到通讯报文时,查找与所述接收到的通讯报文匹配的协议匹配对象;

通讯报文解析单元104,用于通过所述协议匹配对象中预定义的函数返回与所述通讯报文对应的业务标识和业务类型;

数据对象生成单元106,用于根据所述通讯报文生成数据对象;

业务模块调用单元108,用于根据所述业务标识和所述业务类型查找对应的业务模块调用接口,将所述数据对象传递至所述业务模块调用接口进行处理。

可选的,所述装置还包括协议匹配对象添加单元110,用于:

加载新增的协议匹配对象,获取所述新增的协议匹配对象的标识;

获取输入的与所述协议匹配对象对应的关键字,将所述新增的协议匹配对象的标识以及与所述新增的协议匹配对象对应的关键字存储在XML文件中。

可选的,所述协议匹配对象查找单元102还用于:

获取所述接收到的通讯报文中的关键字;

在所述XML文件中查询与所述关键字匹配的协议匹配对象的标识,根据所述标识获取对应的协议匹配对象。

可选的,所述装置还包括业务模块添加单元112:

加载新增的业务模块,获取所述新增的业务模块的业务模块调用接口;

获取输入的与所述新增的业务模块对应的业务标识和业务类型,将所述新增的业务模块调用接口以及与所述新增的业务模块对应的业务标识和业务类型存储在所述XML文件中。

可选的,所述业务模块调用单元108还用于:

在所述XML文件中查询到与所述业务标识和所述业务类型匹配的业务模块调用接口时,调用查找到的业务模块调用接口。

本发明实施例中通过查找与接收到的通讯报文匹配的协议匹配对象,根据协议匹配对象中预定义的函数返回与通讯报文对应的业务标识和业务类型,并根据通讯报文生成数据对象,将数据对象传递至与业务标识和业务类型对应的业务模块调用接口进行处理,采用XML文件格式保存协议匹配对象和业务模块调用接口,使得在对处理程序进行修改时,只需要改动XML文件中对应的模块;同时,在增加或者删除业务模块时,只需要添加或者删除相应的XML文件,而不必对整个业务处理程序进行改动,从而降低业务模块之间的耦合度,提高程序的可扩展性。

在一个实施例中,如图6所示,图6展示了一种运行上述业务系统的协议解析方法的基于冯诺依曼体系的计算机系统的终端10。该计算机系统可以是智能手机、平板电脑、掌上电脑、笔记本电脑或个人电脑等终端设备。具体的,可包括通过系统总线连接的外部输入接口1001、处理器1002、存储器1003和输出接口1004。其中,外部输入接口1001可选的可至少包括网络接口10012。存储器1003可包括外存储器10032(例如硬盘、光盘或软盘等)和内存储器10034。输出接口1004可至少包括显示屏10042等设备。且所述处理器1002还用于执行上述业务系统的协议解析方法,包括:

在接收到通讯报文时,查找与所述接收到的通讯报文匹配的协议匹配对象;

通过所述协议匹配对象中预定义的函数返回与所述通讯报文对应的业务标识和业务类型;

根据所述通讯报文生成数据对象;

根据所述业务标识和所述业务类型查找对应的业务模块调用接口,将所述数据对象传递至所述业务模块调用接口进行处理。

可选的,在所述查找与所述接收到的通讯报文匹配的协议匹配对象之前,还包括:

加载新增的协议匹配对象,获取所述新增的协议匹配对象的标识;

获取输入的与所述协议匹配对象对应的关键字,将所述新增的协议匹配对象的标识以及与所述新增的协议匹配对象对应的关键字存储在XML文件中。

可选的,所述查找与所述接收到的通讯报文匹配的协议匹配对象包括:

获取所述接收到的通讯报文中的关键字;

在所述XML文件中查询与所述关键字匹配的协议匹配对象的标识,根据所述标识获取对应的协议匹配对象。

可选的,所述方法还包括:

加载新增的业务模块,获取所述新增的业务模块的业务模块调用接口;

获取输入的与所述新增的业务模块对应的业务标识和业务类型,将所述新增的业务模块调用接口以及与所述新增的业务模块对应的业务标识和业务类型存储在所述XML文件中。

可选的,所述根据所述业务标识和所述业务类型查找对应的业务模块调用接口包括:

在所述XML文件中查询到与所述业务标识和所述业务类型匹配的业务模块调用接口时,调用查找到的业务模块调用接口。

在本实施例中,本方法的运行基于计算机程序,该计算机程序的程序文件存储于前述基于冯诺依曼体系的计算机系统10的外存储器10032中,在运行时被加载到内存储器10034中,然后被编译为机器码之后传递至处理器1002中执行,从而使得基于冯诺依曼体系的计算机系统10中形成逻辑上的协议匹配对象查找单元102,通讯报文解析单元104,数据对象生成单元106,业务模块调用单元108,协议匹配对象添加单元110,业务模块添加单元112。且在业务系统的协议解析方法执行过程中,输入的参数均通过外部输入接口1001接收,并传递至存储器1003中缓存,然后输入到处理器1002中进行处理,处理的结果数据或缓存于存储器1003中进行后续地处理,或被传递至输出接口1004进行输出。

以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1