CN101309437B - 单向文件传输方法及接口配置装置 - Google Patents
单向文件传输方法及接口配置装置 Download PDFInfo
- Publication number
- CN101309437B CN101309437B CN2007101070105A CN200710107010A CN101309437B CN 101309437 B CN101309437 B CN 101309437B CN 2007101070105 A CN2007101070105 A CN 2007101070105A CN 200710107010 A CN200710107010 A CN 200710107010A CN 101309437 B CN101309437 B CN 101309437B
- Authority
- CN
- China
- Prior art keywords
- interface
- brew
- file
- unidirectional
- configuration
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Stored Programmes (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本发明提供了一种单向文件传输方法和接口配置装置,该方法包括以下步骤:步骤S302,在终端指定一个BREW接口并生成用于BREW接口的配置文件;步骤S304,设置用于BREW接口的至少一个单向文件传输功能接口;以及步骤S306,通过单向文件传输功能接口传输数据。本发明使用BREW接口完成FLUTE协议功能,通过BREW接口的与设备无关的特性,在支持BREW接口的终端上快速部署DVB-H电视业务功能。
Description
技术领域
本发明涉及移动通讯与数字电视领域,具体地涉及提供一种完成FLUTE(File delivery over Unidirectional Transport单向文件传输)协议功能、并符合BREW(Binary Runtime Environment forWireless无线二进制运行时环境)规范的方法,其实现与具体的开发平台无关。
背景技术
在DVB-H(Digital Video Broadcast—Handheld手持数字视频广播)手机电视终端中,需要实现IPDC(IP Datacast IP数据发送)协议栈。F1UTE协议作为IPDC的一部分,其作用就是提供文件传输功能,获取上层的ESG(Electronic Service Guide电子服务指导)模块所需要的内容,然后提供给ESG模块解析。按照常规的协议分层方式实现FLUTE协议,在不同的平台上支持DVB-H功能时,需要分别对不同的平台进行移植。这不利于DVB-H的功能的在不同平台上的快速支持。图1示出了现有技术中常用的FLUTE协议实现示意图。图2示出了BREW架构示意图。图1中,FLUTE作为IPDC协议族中的传输部分,其主要提供如下功能:ESG BootStrap的启动、ESG Container的接收、SDP文件的接收、用户请求的下载文件的接收。
因此,需要一种实现文件传输与具体终端平台无关的方案,能够解决上述相关技术中的问题。
发明内容
本发明的目的是提供一种方法,使用BREW接口完成FLUTE协议功能,通过BREW接口的与设备无关的特性,在支持BREW接口的终端上快速部署DVB-H电视业务功能。
根据本发明的一个方面,提供了一种单向文件传输方法,包括以下步骤:步骤S302,在终端指定一个BREW接口并生成用于BREW接口的配置文件;步骤S304,设置用于BREW接口的至少一个单向文件传输功能接口;以及步骤S306,通过单向文件传输功能接口传输数据。
在上述的单向文件传输方法中,步骤S302包括以下步骤:步骤S302-2,指定一个BREW接口;步骤S302-4,生成用于BREW接口的配置文件;以及步骤S302-6,利用配置文件设置通过BREW接口对文件和网络访问的权限。
在上述的单向文件传输方法,通过申请一个标号来唯一标识BREW接口。如果BREW接口为动态装载的接口,则从BREW官方机构获取该标号,如果BREW接口为静态接口,则该标号为在整个静态接口中唯一的。
在上述的单向文件传输方法中,配置文件为mif文件。
在上述的单向文件传输方法中,在步骤S302中还设置用于BREW接口的必要接口,必要接口至少包括:用于创建单向传输文件接口的功能接口、用于释放单向传输文件接口的功能接口、以及增加单向传输文件接口的引用次数的功能接口。
根据本发明的另一个方面,提供了一种BREW接口配置装置,包括:指定和配置模块,用于在终端指定一个BREW接口并生成用于BREW接口的配置文件;以及设置模块,设置用于BREW接口的至少一个单向文件传输功能接口,以通过单向文件传输功能接口传输数据。
其中,设置模块利用配置文件设置通过BREW接口进行文件和网络访问的权限。指定和配置模块通过申请一个标号来唯一标识BREW接口。
利用本发明提供的方法和装置,可以实现FLUTE协议的与具体终端平台无关,而在支持BREW的设备上快速部署DVB-H电视业务功能。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是示出现有技术中的FLUTE协议的实现示意图;
图2是BREW架构示意图;
图3示出了根据本发明的基于接口配置的单向文件传输方法的流程图;
图4示出了根据本发明的接口配置装置的结构的方框图;
图5示出了根据本发明的FLUTE协议实现示意图;
图6示出根据本发明的一个实施例的流程图;
图7示出了是根据本发明实施例的实现CFlute_New接口的逻辑流程图;
图8示出了是根据本发明实施例的实现CFlute_Start接口的逻辑流程图;
图9示出了是根据本发明实施例的实现CFlute_GetSessionFiles接口的逻辑流程图;
图10示出了是根据本发明实施例的实现CFlute_GetEsgFileList接口的逻辑流程图;
图11示出了是根据本发明实施例的实现CFlute_GetContainer接口的逻辑流程图;
图12示出了是根据本发明实施例的实现IFlute接口使用流程图;以及
图13是示出根据本发明实施例的配置BREW接口的流程图。
具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
参照图3,根据本发明的单向文件传输方法,包括以下步骤:步骤S302,在终端指定一个BREW接口并生成用于BREW接口的配置文件;步骤S304,设置用于BREW接口的至少一个单向文件传输功能接口;以及步骤S306,通过单向文件传输功能接口传输数据。
步骤S302包括以下步骤:步骤S302-2,指定一个BREW接口;步骤S302-4,生成用于BREW接口的配置文件;以及步骤S302-6,利用配置文件设置通过BREW接口对文件和网络访问的权限。
在上述的单向文件传输方法中,通过申请一个标号来唯一标识BREW接口。如果BREW接口为动态装载的接口,则从BREW官方机构获取该标号,如果BREW接口为静态接口,该标号为在整个静态接口中唯一的。
在上述的单向文件传输方法中,配置文件为mif文件。
在上述的单向文件传输方法中,在步骤S302中还设置用于所述BREW接口的必要接口,必要接口至少包括:用于创建单向传输文件接口的功能接口、用于释放单向传输文件接口的功能接口、以及增加单向传输文件接口的引用次数的功能接口。
图4示出了根据本发明的接口配置装置的结构的方框图。参照图4,根据本发明的BREW接口配置装置400包括:指定和配置模块402,用于在终端指定一个BREW接口并生成用于BREW接口的配置文件;以及设置模块404,设置用于BREW接口的至少一个单向文件传输功能接口,以通过单向文件传输功能接口传输数据。
设置模块利用配置文件设置通过BREW接口进行文件和网络访问的权限。指定和配置模块通过申请一个标号来唯一标识BREW接口。
下面将参照图5至图13详细说明本发明的实施例。
图5示出了根据本发明的FLUTE协议实现示意图。参照图5,FLUTE协议的实现包括以下步骤:
步骤S502~504,为FLUTE应用指定BREW接口,并设置BREW的必要接口;
步骤S506,实现FLUTE协议的功能接口;以及
步骤S508~510,终端利用BREW接口传输数据。
图6示出根据本发明的一个实施例的流程图。参照图6,实现本发明的一个实施例包括以下步骤:
步骤S602,为IFlute申请/确定一个标号,这个标号用于在BREW命名空间中唯一标志这个接口;
步骤S604,使用BREW Mif编辑器生成mif文件;
步骤S606,实现BREW的必要的接口,实现IFlute_New(),IFlute_Addref(),IFlute_Release()等BREW的必要的接口,其中IFlute_Addref用于增加IFlute接口的引用次数、IFlute_Release接口用于释放IFlute接口,IFlute_New接口用于执行创建IFlute接口的动作;以及
步骤S608,实现Flute协议的功能接口,其中,实现IFlute_Start()接口,以启动Flute协议栈和数字电视接收芯片,开始接收、分析数据;实现IFlute_SendBootStrapToESG()接口以将获取的bootstrap文件提供给Flute的应用ESG;实现IFlute_SendFileListToESG()以将获取的SDP、IMAGE文件提供给Flute的应用ESG;实现IFlute_SendAllContainerToESG()以将获取的container文件发送给Flute的应用ESG;实现IFlute_GetSessionFiles()以由Flute的应用ESG来进行调用,获取会话文件列表;实现IFlute_GetEsgFileList()以由Flute的应用ESG来进行调用,获取ESG所有需要的文件列表;以及实现IFlute_GetAllContainer()以由Flute的应用ESG来进行调用,获取container文件。
步骤S610,使用IFlute接口传输数据。在DVB-H协议栈初始化时,初始化IFlute接口,然后Flute的应用ESG根据ESG与Flute的接口交互流程进行调用IFlute,IFlute接口在后台等待数据,并根据获取数据的状态及时通知应用。
图7示出了是根据本发明实施例的实现CFlute_New接口的逻辑流程图。参照图7,实现本发明实施例的CFlute_New接口包括以下步骤:
步骤S702,对IFlute进行初始化;
步骤S704,创建IFileMgr接口,用于保存配置文件和接收到的数据;
步骤S706,创建INetMgr接口,用于通过ISocket接口接收数据;
步骤S708,判断是否已经有节目列表文件;如果有,则执行步骤S710,否则执行步骤S712;
步骤S710,读取界面列表文件,并继续执行步骤S712;
步骤S712,结束IFlute初始化。
图8示出了是根据本发明实施例的实现CFlute_Start接口的逻辑流程图。参照图8,实现根据本发明实施例的CFlute_Start接口包括以下步骤:
步骤S802,IFlute开始启动;
步骤S804,初始化IFlute协议栈;
步骤S806,初始化数字电视接收芯片;
步骤S808,判断启动数字电视接收芯片成功;如果成功,则执行步骤S812;如果不成功,则执行步骤S810;
步骤S810,IFlute启动失败;
步骤S812,IFlute启动成功。
图9示出了是根据本发明实施例的实现CFlute_GetSessionFiles接口的逻辑流程图。参照图9,实现根据本发明实施例的CFlute_GetSessionFiles接口包括以下步骤:
步骤S902,CFlute_GetSessionFiles开始;
步骤S904,根据ESG要求的文件信息初始化会话的IP地址和端口号;
步骤S906,设置数字电视接收芯片的过滤IP地址;
步骤S908,接收目的IP地址/端口号的数据;
步骤S910,根据Flute协议解析Flute报文;
步骤S912,判断是否接收了全部数据,如果是,则执行步骤S916,否则执行步骤S914;
步骤S914,数据接收失败;以及
步骤S916,数据接收成功并调用CFlute_SendBootStrapToESG通知ESG。
图10示出了是根据本发明实施例的实现CFlute_GetEsgFileList接口的逻辑流程图。参照图10,实现根据本发明实施例的CFlute_GetEsgFileList接口包括以下步骤:
步骤S1002,CFlute_GetEsgFileList开始;
步骤S1004,根据ESG要求的文件信息初始化会话的IP地址和端口号;
步骤S1006,设置数字电视接收芯片的过滤IP地址;
步骤S1008,接收目的IP地址/端口号的数据;
步骤S1010,根据Flute协议解析Flute报文;
步骤S1012,判断是否接收了全部数据,如果是,则执行步骤S1014,否则执行步骤S1016;
步骤S1014,成功并调用CFlute_SendFileListToESG通知ESG;以及
步骤S1016,数据接收失败。
图11示出了是根据本发明实施例的实现CFlute_GetContainer接口的逻辑流程图。参照图11,实现根据本发明实施例的CFlute_GetContainer接口包括以下步骤:
步骤S1102,CFlute_GetAllContainer开始;
步骤S1104,根据ESG要求的文件信息初始化会话的IP地址和端口号;
步骤S1106,设置数字电视接收芯片的过滤IP地址;
步骤S1108,接收目的IP地址/端口号的数据;
步骤S1110,根据Flute协议解析Flute报文;
步骤S1112,判断是否接收了全部数据,如果是,则执行步骤S1116,否则执行步骤S1114;
步骤S1114,数据接收失败;以及
步骤S1116,数据接收成功并调用CFlute_SendAllContainerToESG,通知ESG。
图12示出了是根据本发明实施例的实现IFlute接口使用流程图。参照图12,实现根据本发明实施例的CFlute_GetEsgFileList接口包括以下步骤:
步骤S1202,调用IShell_CreateInstance()创建IFlute接口;
步骤S1204,调用IFlute_Start()接口启动接收芯片和Flute协议栈;
步骤S1206,调用IFlute_GetSessionFiles()获取bootstrap信息;
步骤S1208,接收到通过IFlute_SendBootStrapToESG()接口发送的消息,ESG模块开始启动并做相应的动作;
步骤S1210,在需要获取文件列表信息时调用IFlute_GetEsgFileList;
步骤S1212,接收到通过IFlute_SendFileListToESG()接口发送的消息,ESG模块开始启动并做相应的动作;
步骤S1214,在需要获取container信息时调用IFlute_GetContainer;
步骤S1216,接收到通过IFlute_SendAllContainerToESG()接口发送的消息,ESG模块开始启动并做相应的动作;以及
步骤S1218,调用Iflute_Release()释放接口。
图13是示出根据本发明实施例的配置BREW接口的流程图。如图13所示,配置BREW接口包括以下步骤:
步骤S1302,定义IFlute接口;
AEEINTERFACE(IFlute)
{
INHERIT_IBase(IFlute);
boolean (*Start) (IFlute*pIFlute);
IWindow*(*GetSessionFiles)(IFlute*pIFlute);
int (*GetEsgFileList)(IFlute*pIFlute);
int (*SendBootStrapToESG)(IFlute*pIFlute);
int (*SendFileListToESG)(IFlute*pIFlute);
int (*SendAllContainerToESG)(IFlute*pIFlute);
int (*GetAllContainer)(IFlute*pIFlute);
};
#define IFLUTE_AddRef(p) AEEGETPVTBL((p),IFlute)->AddRef((p))
#define IFLUTE_Release(p) AEEGETPVTBL((p),IFlute)->Release((p))
#define IFLUTE_Start(p) AEETPVTBL((p),IFlute)->Start((p))
#define IFLUTE_GetSessionFiles(p) AEEGETPVTBL((p),IFlute)->GetSessionFiles((p))
#define IFLUTE_GetEsgFileList(p) AEEGETPVTBL((p),IFlute)->GetEsgFileList((p))
#define LUTE_SendBootStrapToESG(p)
AEEGETPVTBL((p),IFlute)->SendBootStrapToESG((p))
#defineIFLUTE_SendFileListToESG(p)
AEEGETPVTBL((p),IFlute)->SendFileListToESG((p))
#define IFLUTE_SendAllContainerToESG(p) AEEGETPVTBL((p),IFlute)->
SendAllContainerToESG((p))
#define IFLUTE_GetAllContainer(p) AEEGETPVTBL((p),IFlute)->GetContainer
((p))
步骤S1304,定义CFlute结构;
typedef struct CFluteTag
{
const AEEVTBL(IFlute)*pvt;
uint32 m_nRefs;
IFile *pFile;
IFileMgr *m_pIFileMgr;
INetMgr *m_pINetMgr;
E_FLUTE_STATE m_State;
E_DVB_STATE m_DvbState;
}CFlute;
步骤S1306,定义IF1ute接口函数列表;
static const VTBL(IFlute)gIFluteFuncs=
{
CFlute_AddRef,
CFlute_Release,
CFlute_Start,
CFlute_GetSessionFiles,
CFlute_GetEsgFileList,
CFlute_SendBootStrapToESG,
CFlute_SendFileListToESG,
CFlute_SendAllContainerToESG,
CFlute_GetAllContainer
};
步骤S1308,实现以下IFlute接口函数:
1)CFlute_AddRef接口,用于将m_nRefs值加1,增加引用次数;
2)CFlute Release接口,用于将m_nRefs减1,当值减到0时,释放所有相关资源;
3)CFlute_New接口
4)CFlute_Start接口
5)CFlute_GetSessionFiles
6)CFlute_GetEsgFileList
7)CFlute_GetContainer
8)CFlute_SendBootStrapToESG,CFlute_SendFileListToESG,CFlute_SendAllContainerToESG这三个接口用于通知ESG模块,将接收到的数据通过消息的方式送给ESG模块。
在本发明中,以标准的BREW接口形式提供FLUTE协议的功能,并且在实现过程中所需要的系统功能都调用标准的BREW接口功能,通过BREW接口规范,实现了该协议的实现与具体的开发平台无关,可以在支持BREW的平台上快速实现DVB-H业务功能。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种单向文件传输方法,其特征在于,包括以下步骤:
步骤S302,在终端指定一个BREW接口并生成用于所述BREW接口的配置文件;
步骤S304,设置用于所述BREW接口的至少一个单向文件传输功能接口;以及
步骤S306,通过所述单向文件传输功能接口传输数据。
2.根据权利要求1所述的单向文件传输方法,其特征在于,所述步骤S302包括以下步骤:
步骤S302-2,指定一个所述BREW接口;
步骤S302-4,生成用于所述BREW接口的配置文件;以及
步骤S302-6,利用所述配置文件设置通过所述BREW接口对文件和网络访问的权限。
3.根据权利要求2所述的单向文件传输方法,其特征在于,通过申请一个标号来唯一标识所述BREW接口。
4.根据权利要求3所述的单向文件传输方法,其特征在于,如果所述BREW接口为动态装载的接口,则从BREW官方机构获取所述标号。
5.根据权利要求3所述的单向文件传输方法,其特征在于,如果所述BREW接口为静态接口,所述标号为在整个静态接口中唯一的。
6.根据权利要求4或5所述的单向文件传输方法,其特征在于,所述配置文件为mif文件。
7.根据权利要求6所述的单向文件传输方法,其特征在于,在所述步骤S302中还设置用于所述BREW接口的必要接口,所述必要接口至少包括:用于创建单向传输文件功能接口的功能接口、用于释放所述单向传输文件功能接口的功能接口、以及增加所述单向传输文件功能接口的引用次数的功能接口。
8.一种BREW接口配置装置,其特征在于,包括:
指定和配置模块,用于在终端指定一个BREW接口并生成用于所述BREW接口的配置文件;以及
设置模块,设置用于所述BREW接口的至少一个单向文件传输功能接口,以通过所述单向文件传输功能接口传输数据。
9.根据权利要求8所述的BREW接口配置装置,其特征在于,所述设置模块利用所述配置文件设置通过所述BREW接口进行文件和网络访问的权限。
10.根据权利要求8所述的BREW接口配置装置,其特征在于,所述指定和配置模块通过申请一个标号来唯一标识所述BREW接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101070105A CN101309437B (zh) | 2007-05-17 | 2007-05-17 | 单向文件传输方法及接口配置装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101070105A CN101309437B (zh) | 2007-05-17 | 2007-05-17 | 单向文件传输方法及接口配置装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101309437A CN101309437A (zh) | 2008-11-19 |
CN101309437B true CN101309437B (zh) | 2011-06-22 |
Family
ID=40125608
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101070105A Expired - Fee Related CN101309437B (zh) | 2007-05-17 | 2007-05-17 | 单向文件传输方法及接口配置装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101309437B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2006090225A1 (en) * | 2005-02-25 | 2006-08-31 | Nokia Corporation | Device management broadcast operation |
CN1924805A (zh) * | 2005-09-02 | 2007-03-07 | 腾讯科技(深圳)有限公司 | 在无线二进制运行环境平台实现动态链接库方法 |
CN1934825A (zh) * | 2004-03-22 | 2007-03-21 | 诺基亚公司 | 通过通信协议传送广播/多播会话的参数 |
-
2007
- 2007-05-17 CN CN2007101070105A patent/CN101309437B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1934825A (zh) * | 2004-03-22 | 2007-03-21 | 诺基亚公司 | 通过通信协议传送广播/多播会话的参数 |
WO2006090225A1 (en) * | 2005-02-25 | 2006-08-31 | Nokia Corporation | Device management broadcast operation |
CN1924805A (zh) * | 2005-09-02 | 2007-03-07 | 腾讯科技(深圳)有限公司 | 在无线二进制运行环境平台实现动态链接库方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101309437A (zh) | 2008-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1309182B1 (en) | A method of providing a code upgrade to a host device having a smart card interface | |
EP1067458A1 (en) | Running and testing applications | |
US20060179465A1 (en) | Handling feature availability in a broadcast | |
CN101273560A (zh) | 在数字广播服务指南中递送消息传送模板的方法 | |
KR20030014355A (ko) | 소프트웨어를 업데이트하기 위한 방법 및 프로그램 | |
JP2009077451A (ja) | 伝送データ・ストリームからデータ・セクションを抽出する方法 | |
AU9639498A (en) | Downloading of applications in a digital decoder | |
US20070083920A1 (en) | Software providing method, software providing system, terminal apparatus and software obtaining method | |
WO2007064369A1 (en) | Method and apparatus for the seamless delivery of content | |
KR100712228B1 (ko) | 양방향 서비스를 위한 dmb/이동통신망 연동 플랫폼과,그를 이용한 dmb/이동통신망 통합 수신 단말 및 그 방법 | |
JP2001518256A5 (zh) | ||
CN100428147C (zh) | 便携式终端设备及其应用执行方法、程序和可读介质 | |
CN100387054C (zh) | 数字信号处理设备及其系统和扩充功能提供方法 | |
TWI221718B (en) | Modem driver for operation in a computer system having a memory, and method for employing said modem driver | |
RU2181905C2 (ru) | Разработка системы управления телевидением или радиовещанием | |
CN101309437B (zh) | 单向文件传输方法及接口配置装置 | |
KR19980081846A (ko) | 데이터 통신 시스템, 데이터 통신 방법, 데이터 수신기 및 데이터 수신 방법 | |
WO2006082858A1 (ja) | Java限定受信装置 | |
US20040088736A1 (en) | Contents providing system, mobile terminal | |
US20080209453A1 (en) | System and Method for Reducing the Start-up Time of Mhp Applications | |
KR20040094836A (ko) | 수신기, 송신 스테이션, 다운로드 방법, 컴퓨터 프로그램제품 및 신호 | |
RU2266626C2 (ru) | Компьютеризированный способ интерактивного цифрового широковещательного телевидения | |
Peng et al. | Integration of applications into digital television environment | |
WO1998043172A2 (en) | Access control system | |
CN101309387B (zh) | 手持数字视频广播播放器调试方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110622 Termination date: 20170517 |