Network Working Group M. Terada Request for Comments: 4154 NTT DoCoMo Category: Informational K. Fujimura NTT September 2005
Network Working Group M. Terada Request for Comments: 4154 NTT DoCoMo Category: Informational K. Fujimura NTT September 2005
Voucher Trading System Application Programming Interface (VTS-API)
凭证交易系统应用程序编程接口(VTS-API)
Status of This Memo
关于下段备忘
This memo provides information for the Internet community. It does not specify an Internet standard of any kind. Distribution of this memo is unlimited.
本备忘录为互联网社区提供信息。它没有规定任何类型的互联网标准。本备忘录的分发不受限制。
Copyright Notice
版权公告
Copyright (C) The Internet Society (2005).
版权所有(C)互联网协会(2005年)。
IESG Note
IESG注释
This document is not a candidate for any level of Internet Standard. This document specifies the Voucher Trading System Application Programming Interface (VTS-API), which assumes that the VTS plug-in is trusted by its user. The application making calls to VTS-API ought to authenticate the VTS plug-in and securely bind the plug-in with the VTS provider information specified in the Voucher Component. However, this document does not specify an approach to application authentication. The VTS-API should not be used without being augmented by an application authentication mechanism.
本文件不适用于任何级别的互联网标准。本文档指定凭证交易系统应用程序编程接口(VTS-API),该接口假定VTS插件受其用户信任。调用VTS-API的应用程序应该验证VTS插件,并使用凭证组件中指定的VTS提供程序信息安全地绑定插件。但是,本文档没有指定应用程序身份验证的方法。未经应用程序身份验证机制增强,不得使用VTS-API。
Abstract
摘要
This document specifies the Voucher Trading System Application Programming Interface (VTS-API). The VTS-API allows a wallet or other application to issue, transfer, and redeem vouchers in a uniform manner independent of the VTS implementation. The VTS is a system for securely transferring vouchers; e.g., coupons, tickets, loyalty points, and gift certificates. This process is often necessary in the course of payment and/or delivery transactions.
本文件规定了凭证交易系统应用程序编程接口(VTS-API)。VTS-API允许钱包或其他应用程序以独立于VTS实施的统一方式发行、转账和兑换凭证。VTS是一个安全传输凭证的系统;e、 例如,优惠券、门票、忠诚度积分和礼券。在支付和/或交付交易过程中,此过程通常是必要的。
Table of Contents
目录
1. Introduction ................................................. 3 2. Processing Model ............................................. 4 3. Design Overview .............................................. 6 4. Concepts ..................................................... 6 5. Interface Definitions ........................................ 8 5.1. VTSManager .............................................. 8 5.1.1. getParticipantRepository ......................... 8 5.1.2. getVoucherComponentRepository .................... 8 5.2. ParticipantRepository ................................... 9 5.2.1. lookup ........................................... 9 5.3. Participant ............................................. 9 5.3.1. getIdentifier .................................... 10 5.3.2. getVTSAgent ...................................... 10 5.4. VTSAgent ................................................ 10 5.4.1. login ............................................ 11 5.4.2. logout ........................................... 12 5.4.3. prepare .......................................... 12 5.4.4. issue ............................................ 13 5.4.5. transfer ......................................... 14 5.4.6. consume .......................................... 15 5.4.7. present .......................................... 16 5.4.8. cancel ........................................... 17 5.4.9. resume ........................................... 18 5.4.10. create .......................................... 18 5.4.11. delete .......................................... 19 5.4.12. getContents ..................................... 19 5.4.13. getSessions ..................................... 19 5.4.14. getLog .......................................... 20 5.4.15. addReceptionListener ............................ 20 5.4.16. removeReceptionListener ......................... 21 5.5. Session ................................................. 21 5.5.1. getIdentifier .................................... 21 5.5.2. getVoucher ....................................... 22 5.5.3. getSender ........................................ 22 5.5.4. getReceiver ...................................... 22 5.5.5. isPrepared ....................................... 22 5.5.6. isActivated ...................................... 23 5.5.7. isSuspended ...................................... 23 5.5.8. isCompleted ...................................... 23 5.6. Voucher ................................................. 23 5.6.1. getIssuer ........................................ 23 5.6.2. getPromise ....................................... 24 5.6.3. getCount ......................................... 24 5.7. VoucherComponentRepository .............................. 24 5.7.1. register ......................................... 24 5.8. VoucherComponent ........................................ 25
1. Introduction ................................................. 3 2. Processing Model ............................................. 4 3. Design Overview .............................................. 6 4. Concepts ..................................................... 6 5. Interface Definitions ........................................ 8 5.1. VTSManager .............................................. 8 5.1.1. getParticipantRepository ......................... 8 5.1.2. getVoucherComponentRepository .................... 8 5.2. ParticipantRepository ................................... 9 5.2.1. lookup ........................................... 9 5.3. Participant ............................................. 9 5.3.1. getIdentifier .................................... 10 5.3.2. getVTSAgent ...................................... 10 5.4. VTSAgent ................................................ 10 5.4.1. login ............................................ 11 5.4.2. logout ........................................... 12 5.4.3. prepare .......................................... 12 5.4.4. issue ............................................ 13 5.4.5. transfer ......................................... 14 5.4.6. consume .......................................... 15 5.4.7. present .......................................... 16 5.4.8. cancel ........................................... 17 5.4.9. resume ........................................... 18 5.4.10. create .......................................... 18 5.4.11. delete .......................................... 19 5.4.12. getContents ..................................... 19 5.4.13. getSessions ..................................... 19 5.4.14. getLog .......................................... 20 5.4.15. addReceptionListener ............................ 20 5.4.16. removeReceptionListener ......................... 21 5.5. Session ................................................. 21 5.5.1. getIdentifier .................................... 21 5.5.2. getVoucher ....................................... 22 5.5.3. getSender ........................................ 22 5.5.4. getReceiver ...................................... 22 5.5.5. isPrepared ....................................... 22 5.5.6. isActivated ...................................... 23 5.5.7. isSuspended ...................................... 23 5.5.8. isCompleted ...................................... 23 5.6. Voucher ................................................. 23 5.6.1. getIssuer ........................................ 23 5.6.2. getPromise ....................................... 24 5.6.3. getCount ......................................... 24 5.7. VoucherComponentRepository .............................. 24 5.7.1. register ......................................... 24 5.8. VoucherComponent ........................................ 25
5.8.1. getIdentifier .................................... 25 5.8.2. getDocument ...................................... 26 5.9. ReceptionListener ....................................... 26 5.9.1. arrive ........................................... 26 5.10. Exceptions ............................................. 27 6. Example Code ................................................. 28 7. Security Considerations ...................................... 29 8. Acknowledgements ............................................. 30 9. Normative References ......................................... 30 10. Informative References ....................................... 30
5.8.1. getIdentifier .................................... 25 5.8.2. getDocument ...................................... 26 5.9. ReceptionListener ....................................... 26 5.9.1. arrive ........................................... 26 5.10. Exceptions ............................................. 27 6. Example Code ................................................. 28 7. Security Considerations ...................................... 29 8. Acknowledgements ............................................. 30 9. Normative References ......................................... 30 10. Informative References ....................................... 30
This document specifies the Voucher Trading System Application Programming Interface (VTS-API). The motivation and background of the Voucher Trading System (VTS) are described in Requirements for Generic Voucher Trading [VTS].
本文件规定了凭证交易系统应用程序编程接口(VTS-API)。凭证交易系统(VTS)的动机和背景在通用凭证交易要求[VTS]中进行了描述。
A voucher is a logical entity that represents a certain right, and it is logically managed by the VTS. A voucher is generated by the issuer, traded among users, and finally collected using VTS. The terminology and model of the VTS are also described in [VTS].
凭证是表示特定权利的逻辑实体,由VTS进行逻辑管理。凭证由发行人生成,在用户之间交易,最后使用VTS收集。[VTS]中还介绍了VTS的术语和型号。
VTSes can be implemented in different ways, such as a centralized VTS, which uses a centralized online server to store and manage all vouchers, or a distributed VTS, which uses per-user smartcards to maintain the vouchers owned by each user. However, the VTS-API allows a caller application to issue, transfer, and redeem vouchers in a uniform manner independent of the VTS implementation. Several attempts have been made to provide a generic payment API. Java Commerce Client [JCC] and Generic Payment Service Framework [GPSF], for example, introduce a modular wallet architecture that permits diverse types of payment modules to be added as plug-ins and supports both check-like/cash-like payment models. This document is inspired by these approaches but its scope is limited to the VTS model, in which the cash-like payment model is assumed and vouchers are directly or indirectly transferred between the sender (transferor) and receiver (transferee) via the VTS. This document is not intended to support API for SET, e-check, or other payment schemes that do not fit the VTS model.
VTS可以以不同的方式实施,例如集中式VTS,它使用集中式在线服务器存储和管理所有凭证,或分布式VTS,它使用每个用户的智能卡维护每个用户拥有的凭证。但是,VTS-API允许调用方应用程序以独立于VTS实现的统一方式发行、转账和兑换凭证。已经多次尝试提供通用支付API。例如,Java Commerce Client[JCC]和Generic Payment Service Framework[GPSF]引入了一种模块化钱包体系结构,允许将不同类型的支付模块作为插件添加,并支持支票/现金支付模式。本文件受这些方法的启发,但其范围仅限于悉尼威立雅运输公司模型,在该模型中,假设采用类似现金的支付模式,凭证通过悉尼威立雅运输公司在发送方(转让方)和接收方(受让方)之间直接或间接转让。本文档不支持SET、e-check或其他不符合VTS模型的支付方案的API。
Unlike the APIs provided in JCC and GPSF, which are designed to transfer only monetary values, this API enables the transfer of a wide range of values through the use of XML-based Generic Voucher Language [GVL]. The monetary meaning of the voucher is interpreted by the upper application layer using the information described in the language. This approach makes it possible to provide a simpler API in the voucher-transfer layer and enhances runtime efficiency. The
与JCC和GPSF中提供的API不同,JCC和GPSF中提供的API仅用于传递货币值,该API通过使用基于XML的通用凭证语言[GVL]实现了范围广泛的值传递。凭证的货币含义由上层应用程序层使用语言中描述的信息进行解释。这种方法可以在凭证传输层中提供更简单的API,并提高运行时效率。这个
API specification in this document is described in the Java language syntax. Bindings for other programming languages may be completed in a future version of this document or in separate related specifications.
本文档中的API规范是用Java语言语法描述的。其他编程语言的绑定可以在本文档的未来版本或单独的相关规范中完成。
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]
本文件中的关键词“必须”、“不得”、“要求”、“应”、“不应”、“应”、“不应”、“建议”、“可”和“可选”应按照[RFC2119]中所述进行解释
This section provides the processing model in which the VTS-API is used. A part of the text in this section has been taken from the Generic Voucher Language specification [GVL].
本节提供使用VTS-API的处理模型。本节中的部分文本取自通用凭证语言规范[GVL]。
There are several ways to implement VTS. For discount coupons or event tickets, for example, a smartcard-based distributed offline VTS is often preferred, whereas for bonds or securities, a centralized online VTS is preferred. While distributed VTSes would utilize public (asymmetric) key-based or shared (symmetric) key-based cryptographic challenge-and-response protocols to trade vouchers securely, centralized VTSes would utilize transactions that rewrite ownerships of vouchers on their database. Therefore, it is impractical to define standard protocols for issuing, transferring, or redeeming vouchers at this time.
有几种方法可以实现VTS。例如,对于折扣券或活动门票,通常首选基于智能卡的分布式离线VTS,而对于债券或证券,则首选集中式在线VTS。分布式VTSE将利用基于公共(非对称)密钥或共享(对称)密钥的加密质询和响应协议安全地交易凭证,而集中式VTSE将利用重写其数据库上凭证所有权的交易。因此,目前定义用于发行、转移或兑换凭证的标准协议是不切实际的。
To provide implementation flexibility, this document assumes a modular wallet architecture that allows multiple VTSes to be added as plug-ins. In this architecture, instead of specifying a standard voucher transfer protocol, two specifications, Voucher Component and VTS-API, are standardized (Figure 1).
为提供实施灵活性,本文档采用模块化钱包架构,允许将多个VTSE作为插件添加。在此体系结构中,没有指定标准凭证传输协议,而是标准化了凭证组件和VTS-API这两个规范(图1)。
Sender wallet/Issuing system Receiver wallet/Collecting system +---------------------------+ +---------------------------+ | | | | | | Voucher Component | | | | (Specifies VTS Provider and Promise) | | | |-------------------------------------------------------->| | | | | | | | | | Intention to receive and payment (option) | | | |<- - - - - - - - - - - - - - - - - - - - - - - - - - - - | | | | | | | | | | | | | | | | Issue/transfer/ VTS | | VTS Register | | | | redeem request plug-in | plug-in Listener(*1)| | | |------------------>| | | |<------------------| | | | (VTS API) |<- - - - - - - ->| (VTS API) | | | | | VTS-specific | | | | | | protocol if VTS | | | | | | is distributed | | | | | Result |<- - - - - - - ->| Notify(*2) | | | |<------------------| | | |------------------>| | +---------------------------+ +---------------------------+
Sender wallet/Issuing system Receiver wallet/Collecting system +---------------------------+ +---------------------------+ | | | | | | Voucher Component | | | | (Specifies VTS Provider and Promise) | | | |-------------------------------------------------------->| | | | | | | | | | Intention to receive and payment (option) | | | |<- - - - - - - - - - - - - - - - - - - - - - - - - - - - | | | | | | | | | | | | | | | | Issue/transfer/ VTS | | VTS Register | | | | redeem request plug-in | plug-in Listener(*1)| | | |------------------>| | | |<------------------| | | | (VTS API) |<- - - - - - - ->| (VTS API) | | | | | VTS-specific | | | | | | protocol if VTS | | | | | | is distributed | | | | | Result |<- - - - - - - ->| Notify(*2) | | | |<------------------| | | |------------------>| | +---------------------------+ +---------------------------+
(*1) Registration is optional. Note also that the VTS plug-ins are usually pre-registered when the wallet or collecting system is started.
(*1)注册是可选的。还请注意,VTS插件通常在钱包或收集系统启动时预先注册。
(*2) If a listener is registered.
(*2)如果已注册侦听器。
Figure 1. Wallet architecture with VTS plug-ins
图1。带VTS插件的钱包体系结构
In this architecture, a VTS provides a logical view of vouchers called a Valid Voucher Set (VVS), which is a set that includes the vouchers <I,P,H> managed by the VTS [VTS]. A user's wallet can access (e.g., view, transfer, and redeem) the subset of the VVS that includes a set of vouchers owned by the user by interacting with the VTS plug-in via the VTS-API. Likewise, an issuing system can issue a voucher and add it to the VVS, and a collecting system can be notified of the redemption of vouchers via the VTS-API.
在此体系结构中,VTS提供称为有效凭证集(VVS)的凭证逻辑视图,该集合包括VTS[VTS]管理的<I,P,H>凭证。用户的钱包可以通过VTS-API与VTS插件交互,访问(例如,查看、转账和兑换)VVS的子集,该子集包括用户拥有的一组凭证。同样,发行系统可以发行凭证并将其添加到VVS,并且可以通过VTS-API通知收款系统兑换凭证。
After a sender and a receiver agree on what vouchers are to be traded and which VTS is to be used, the issuing system or wallet system requests the corresponding VTS plug-in to permit the issue, transfer, or redemption transactions to be performed via the VTS-API. The VTS then logically rewrites the ownership of the vouchers on the VVS using the VTS-specific protocol. Since the VTS is responsible for preventing illegal acts on vouchers like forgery or reproduction, as required in [VTS], the protocol would include a cryptographic challenge-and-response (in a distributed VTS) or a transactional
在发送方和接收方就要交易的凭证和要使用的VTS达成一致后,发行系统或钱包系统请求相应的VTS插件,以允许通过VTS-API执行发行、转账或赎回交易。然后,VTS使用VTS特定协议在逻辑上重写VVS上凭证的所有权。根据[VTS]的要求,由于VTS负责防止伪造或复制凭证等非法行为,协议将包括加密质询和响应(在分布式VTS中)或事务性质询
database manipulation with adequate access controls (in a centralized VTS). Finally, a completion event is sent to the wallet systems or issuing/collecting systems.
具有足够访问控制的数据库操作(在集中式VTS中)。最后,完成事件被发送到钱包系统或发卡/收款系统。
This document describes the VTS-API specification. See [GVL] for the Voucher Component specification that gives the syntax and semantics for describing and interpreting the meaning of vouchers.
本文档描述了VTS-API规范。有关凭证组件规范,请参见[GVL],该规范提供了描述和解释凭证含义的语法和语义。
We have adopted the following approach to specify the VTS-API.
我们采用以下方法来指定VTS-API。
1) Provide an abstract and uniform API that encapsulates the VTS implementation. For example, a common API is provided for both centralized and distributed VTSes. Issuers and application developers have more freedom in VTS selection.
1) 提供封装VTS实现的抽象统一API。例如,为集中式和分布式VTSE提供了通用API。发行人和应用程序开发人员在VTS选择方面有更多的自由。
2) To provide an abstract and uniform API, this document introduces an interface called VTSAgent that is associated with a holder and provides methods to manipulate vouchers held by its holder. Vouchers are accessed through the methods provided by the VTSAgent.
2) 为了提供一个抽象和统一的API,本文引入了一个名为VTSAgent的接口,该接口与持有者关联,并提供了操作持有者持有的凭证的方法。通过VTSAgent提供的方法访问凭单。
3) Use existing standards for the VTS branding mechanism (negotiation). This document assumes that the VTS to be used for sending a voucher has settled the VTS-APIs are called. Negotiation can be done within the upper application layer using other standards (e.g., [IOTP] or [ECML]), if necessary.
3) 使用VTS品牌机制的现有标准(协商)。本文档假设用于发送凭证的VTS已结算,并调用VTS API。如有必要,可使用其他标准(例如,[IOTP]或[ECML])在上层应用层内进行协商。
4) Support only the push-type voucher transfer interface, in which the voucher transfer session is initiated by the transferor side. A pull-type voucher transfer interface can be implemented on top of the push-type VTS interface at the application level.
4) 仅支持推式凭证传递接口,凭证传递会话由传递方发起。在应用程序级别上,可以在推式VTS接口之上实现拉式凭证传输接口。
The VTS-API consists of the following interfaces. A VTS is required to implement all of the interfaces except ReceptionListener, which is intended to be implemented by wallets or other applications that use VTS.
VTS-API由以下接口组成。VTS需要实现除ReceiptonListener之外的所有接口,ReceiptonListener将由钱包或使用VTS的其他应用程序实现。
VTSManager Provides the starting point for using a VTS plug-in. All of the objects needed to manipulate vouchers can be directly or indirectly acquired via the VTSManager. A VTSManager maintains the two repositories: a ParticipantRepository and a VoucherComponentRepository, both of which are described below.
VTS管理器提供了使用VTS插件的起点。可以通过VTSManager直接或间接获取操作凭证所需的所有对象。VTSManager维护两个存储库:participatentrepository和VoucherComponentRepository,下面对这两个存储库进行了描述。
ParticipantRepository Provides the access points of participants that are to be trading partners. A ParticipantRepository maintains Participants and acts as an "address book" of trading partners.
ParticipantRepository为将成为贸易伙伴的参与者提供访问点。参与者地址簿维护参与者并充当贸易伙伴的“地址簿”。
Participant Represents a participant (such as an issuer, a holder, or a collector). A Participant interface knows how to obtain the corresponding VTSAgent described below.
参与者代表参与者(如发行人、持有人或收款人)。参与者界面知道如何获取下面描述的相应vtsage。
VTSAgent (extends Participant) Provides the access point of vouchers in the Valid Voucher Set (VVS) that is logically managed by the VTS. A VTSAgent provides a means of manipulating vouchers held by its holder according to basic trading methods; i.e., issue, transfer, consume, and present. Before calling trading methods, the application must create a Session, which is described below.
VTSAgent(扩展参与者)提供有效凭证集(VVS)中凭证的访问点,该凭证集由VTS进行逻辑管理。VTSAgent提供了一种根据基本交易方法操纵其持有人持有的凭证的方法;i、 例如,发行、转让、消费和赠送。在调用交易方法之前,应用程序必须创建一个会话,如下所述。
Session Represents the logical connection established by the trade. A Session has references to two Participant interfaces; i.e., those of the sender and the receiver. After trading methods are called using a Session, the Session holds a reference to the Vouchers to be traded.
会话表示由交易建立的逻辑连接。会话引用了两个参与者接口;i、 例如,发送方和接收方的信息。使用会话调用交易方法后,会话将保存对要交易的凭证的引用。
Voucher Represents one or more vouchers in which all of the issuer and promise parts of the vouchers are the same. A Voucher holds references to the Participant interface who issued the voucher (issuer) and to a VoucherComponent (promise), which is described below.
凭证表示一个或多个凭证,其中凭证的所有发行人和承诺部分相同。凭证包含对颁发凭证的参与者界面(颁发者)和凭证组件(承诺)的引用,如下所述。
VoucherComponent Represents a Voucher Component, described in [GVL]. It defines the promise part of the voucher.
凭证组件表示凭证组件,如[GVL]中所述。它定义凭证的承诺部分。
VoucherComponentRepository Provides the access points of VoucherComponents. A VoucherComponentRepository maintains VoucherComponents and acts as a "voucher type book" managed by the VTS. This document assumes that a set of VoucherComponents has been acquired and stored in this repository. Delivery of VoucherComponents is beyond the scope of this document. It may be delivered within the VTS from the trading partners or manually acquired from a trusted third party (see Section 3 of [GVL]).
VoucherComponentRepository提供VoucherComponents的访问点。VoucherComponentRepository维护VoucherComponents并充当VTS管理的“凭证类型簿”。本文档假定已获取并存储在此存储库中的一组VoucherComponents。VoucherComponents的交付超出了本文件的范围。可在悉尼威立雅运输公司内从贸易伙伴处交付,或从受信任的第三方处手动获取(见[GVL]第3节)。
ReceptionListener Provides a listener function with regard to the receipt of a voucher by a VTSAgent to wallets or other applications that implement this interface. (This interface may not be implemented as part of the VTS.)
ReceiptonListener提供了一个侦听器功能,用于VTSAgent向钱包或实现此接口的其他应用程序接收凭证。(此接口可能不是VTS的一部分。)
The interfaces defined in this document reside in the package named "org.ietf.vts". Wallets or other applications that use this API, should import this package as "import org.ietf.vts.*;".
本文档中定义的接口位于名为“org.ietf.vts”的包中。钱包或使用此API的其他应用程序应将此包作为“import org.ietf.vts.*”导入。
public interface VTSManager
公共接口VTSManager
Provides the starting point for using a VTS plug-in.
提供使用VTS插件的起点。
All of the objects needed to manipulate vouchers can be directly or indirectly acquired via a VTSManager so that wallets or other applications can make the VTS available by instantiating an object implementing this interface.
操作凭证所需的所有对象都可以通过VTSManager直接或间接获取,以便钱包或其他应用程序可以通过实例化实现此接口的对象使VTS可用。
A class that implements the VTSManager interface must have a public default constructor (a constructor without any parameters). The VTS provides a name for such a constructor so that the implementation class can bootstrap the interface.
实现VTSManager接口的类必须具有公共默认构造函数(不带任何参数的构造函数)。VTS为此类构造函数提供名称,以便实现类可以引导接口。
public ParticipantRepository getParticipantRepository()
public participatentrepository getparticipatentrepository()
Returns a repository that maintains Participants.
返回维护参与者的存储库。
Returns:
返回:
the ParticipantRepository of the VTS, or null if no ParticipantRepository is available.
VTS的ParticipantRepository,如果没有ParticipantRepository可用,则为null。
public VoucherComponentRepository getVoucherComponentRepository()
公共VoucherComponentRepository getVoucherComponentRepository()
Returns a repository that maintains VoucherComponents.
返回维护VoucherComponents的存储库。
Returns:
返回:
the VoucherComponentRepository of the VTS, or null if no VoucherComponentRepository is available.
VTS的VoucherComponentRepository,如果没有可用的VoucherComponentRepository,则为null。
public interface ParticipantRepository
公共接口参与式存储
Provides the access points of Participants. A ParticipantRepository maintains Participants and acts as an "address book" of trading partners.
提供参与者的访问点。参与者地址簿维护参与者并充当贸易伙伴的“地址簿”。
The object implementing this interface maintains Participants (or holds a reference to an object maintaining Participants), which are to be trading partners.
实现此接口的对象维护参与者(或保存对维护参与者的对象的引用),这些参与者将成为贸易伙伴。
The implementation of a ParticipantRepository may be either (an adaptor to) "yellow pages", which is a network-wide directory service like LDAP, or "pocket address book", which maintains only personal acquaintances.
participatentrepository的实现可以是(一个“黄页”的适配器),它是一种网络范围的目录服务,如LDAP,也可以是“袖珍通讯簿”,它只维护个人熟人。
public Participant lookup(String id)
公共参与者查找(字符串id)
Retrieves the participant that has the specified id.
检索具有指定id的参与者。
Returns:
返回:
the participant associated with the specified id, or null if the id is null or the corresponding participant cannot be found.
与指定id关联的参与者,如果id为null或找不到相应的参与者,则为null。
public interface Participant
公共接口参与者
Represents the participants (such as issuers, holders, and collectors).
代表参与者(如发行人、持有人和收款人)。
This interface is used as a representation of the trade partners and issuers of vouchers. Anyone can retrieve objects that implement Participants from the participant repository.
此界面用于表示贸易伙伴和凭证发行人。任何人都可以从参与者存储库中检索实现参与者的对象。
public String getIdentifier()
公共字符串getIdentifier()
Returns the identifier of the participant. Each participant must have a unique identifier.
返回参与者的标识符。每个参与者必须有一个唯一的标识符。
The identifier can be used for looking up and retrieving the participant via the ParticipantRepository.
该标识符可用于通过ParticipantRepository查找和检索参与者。
The format of the identifier is implementation-specific.
标识符的格式是特定于实现的。
Returns:
返回:
the identifier string of the participant.
参与者的标识符字符串。
VTSAgent getVTSAgent()
VTSAgent getVTSAgent()
Returns a VTSAgent, whose identifier is the same as the identifier of the participant.
返回一个VTSAgent,其标识符与参与者的标识符相同。
Returns:
返回:
an object that implements the VTSAgent.
实现VTSAgent的对象。
public interface VTSAgent extends Participant
公共接口VTSAgent扩展了参与者
Represents contact points to access vouchers in a Valid Voucher Set (VVS) that is managed by the VTS.
表示访问VTS管理的有效凭证集(VVS)中凭证的联系人。
Each VTSAgent is associated with a holder and provides a means for managing vouchers owned by the holder. The holder must be authenticated using the login() method before being called by any other method, otherwise, a VTSSecurityException will be issued.
每个VTSAgent与持有人关联,并提供一种管理持有人拥有的凭证的方法。在被任何其他方法调用之前,必须使用login()方法对持有者进行身份验证,否则将发出VTSSecurityException。
Before any trading method is called, e.g., issue(), transfer(), consume(), and present(), the application must establish a session by the prepare() method.
在调用任何交易方法(例如,issue()、transfer()、consume()和present())之前,应用程序必须通过prepare()方法建立会话。
Due to network failure, sessions may often be suspended when the voucher is sent via a network. The suspended sessions can be restarted by the resume() method. Details on the state management of a session are described in Section 5.5.
由于网络故障,当通过网络发送凭证时,会话通常可能会暂停。挂起的会话可以通过resume()方法重新启动。有关会话状态管理的详细信息,请参见第5.5节。
Some VTSAgents may not have all of the trading methods; a voucher collecting system doesn't require its VTSAgent to provide a method for issuing or creating vouchers. A VTSAgent returns a FeatureNotAvailableException when an unsupported method is invoked.
有些VTS可能没有所有的交易方法;凭证收集系统不要求其VTSAgent提供发布或创建凭证的方法。当调用不受支持的方法时,VTSAgent返回FeatureNotAvailableException。
public void login(String passphrase) throws VTSException
公共无效登录(字符串密码短语)引发VTSException
Authenticates the VTSAgent. The passphrase is specified if the VTS requires it for authentication, otherwise it must be null. Nothing is performed if the VTSAgent has already been logged-in. The authentication scheme is implementation-specific. Examples of the implementation are as follows:
验证VTSAgent。如果VTS需要密码短语进行身份验证,则指定密码短语,否则密码短语必须为空。如果VTSAgent已登录,则不执行任何操作。身份验证方案是特定于实现的。实施的例子如下:
1) Vouchers are managed on a remote centralized server (centralized VTS), which requires a password to login. In this case, the application may prompt the user to input the password and the password can be given to the VTSAgent through this method. For further information, see the Implementation Notes below.
1) 凭证在远程集中式服务器(集中式VTS)上进行管理,登录时需要密码。在这种情况下,应用程序可能会提示用户输入密码,并且可以通过此方法将密码提供给VTSAgent。有关更多信息,请参阅下面的实施说明。
2) Vouchers are managed on a remote centralized server (centralized VTS), which requires challenge-and-response authentication using smartcards held by users. In this case, the passphrase may be null because access to the smartcard can be done without contacting the application or user (i.e., the VTSAgent receives the challenge from the server, sends the challenge to the smartcard (within the VTS), and returns the response from the smartcard to the server). Note that a PIN to unlock the smartcard may be given through this method, depending on the implementation.
2) 凭证在远程集中式服务器(集中式VTS)上管理,这需要使用用户持有的智能卡进行质询和响应身份验证。在这种情况下,密码短语可能为空,因为可以在不联系应用程序或用户的情况下访问智能卡(即,VTSAgent从服务器接收质询,将质询发送到智能卡(在VTS内),并将智能卡的响应返回给服务器)。请注意,可以通过此方法提供解锁智能卡的PIN,具体取决于实现。
3) Each user holds their own smartcard in which their own vouchers are stored (distributed VTS). In this case, the passphrase may be null because no authentication is required. Note that a PIN to unlock the smartcard may be given, though this depends on the implementation.
3) 每个用户都持有自己的智能卡,其中存储着自己的凭证(分布式VTS)。在这种情况下,密码短语可能为空,因为不需要身份验证。请注意,可能会提供用于解锁智能卡的PIN,但这取决于实施情况。
Implementation Notes:
实施说明:
A VTS is responsible for providing secure ways for users to login(). It is strongly recommended that secure communication channels such as [TLS] be used if secret or private information is sent via networks. Fake server attacks, including the so-called MITM (man-in-the-middle), must be considered as well.
VTS负责为用户提供安全的登录方式()。如果通过网络发送机密或私人信息,强烈建议使用[TLS]等安全通信通道。还必须考虑假服务器攻击,包括所谓的MITM(中间人)。
Throws:
抛出:
VTSSecurityException - if authentication fails.
VTSSecurityException-如果身份验证失败。
public void logout() throws VTSException
public void logout()引发VTSException
Voids the authentication performed by the login() method.
使login()方法执行的身份验证无效。
After this method is called, calling any other method (except login()) will cause a VTSSecurityException.
调用此方法后,调用任何其他方法(login()除外)将导致VTSSecurityException。
The VTSAgent can login again by the login() method.
VTSAgent可以通过login()方法再次登录。
Throws:
抛出:
VTSSecurityException - if the VTSAgent is not authenticated correctly.
VTSSecurityException-如果VTSAgent未正确验证。
public Session prepare(Participant receiver) throws VTSException
公共会话准备(参与者-接收者)抛出vtscexception
Establishes a session that is required for trading vouchers. The trading partner who receives the vouchers is specified as the receiver. The vouchers to be traded will be specified later (when a trading method is called).
建立交易凭证所需的会话。接收凭证的交易伙伴被指定为接收方。待交易的凭证将在稍后指定(当调用交易方法时)。
The establishment of a session is implementation-specific. A centralized VTS implementation may start a transaction, while a distributed VTS implementation may get the challenge needed to create an authentic response from the receiver in the following trading method.
会议的设立是针对具体执行情况的。集中式VTS实施可能会启动交易,而分布式VTS实施可能会遇到在以下交易方法中从接收方创建真实响应所需的挑战。
If the VTSAgent does not have the ability to establish a session with the specified receiver (permanent error), the VTSAgent throws an InvalidParticipantExeption. If the VTSAgent cannot establish a session due to network failure (transient error), the VTSAgent throws a CannotProceedException.
如果VTSAgent无法与指定的接收者建立会话(永久性错误),VTSAgent将抛出InvalidParticipantExection。如果VTSAgent由于网络故障(暂时性错误)而无法建立会话,VTSAgent将抛出CannotProceedException。
Parameters:
参数:
receiver - the trading partner who receives vouchers.
接收方-接收凭证的交易伙伴。
Returns:
返回:
an established session whose state is "prepared" (see Section 5.5).
状态为“准备就绪”的已建立会话(见第5.5节)。
Throws:
抛出:
CannotProceedException - if the preparation of the session is aborted (e.g., network failures).
CannotProceedException-如果会话准备中止(例如,网络故障)。
FeatureNotAvailableException - if the VTSAgent does not provide any trading methods.
FeatureNotAvailableException-如果VTSAgent未提供任何交易方法。
InvalidParticipantException - if the specified participant is invalid.
InvalidParticipantException-如果指定的参与者无效。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void issue(Session session, VoucherComponent promise, java.lang.Number num) throws VTSException
公共无效问题(会话、VoucherComponent承诺、java.lang.Number num)引发VTSException
Issues vouchers. This method creates the specified number of vouchers <this, promise, receiver> and adds them to the VVS. If the VTS is distributed, this method would create a "response" that corresponds to the challenge received in the prepare() method and send it to the receiver. Note that the receiver is specified when prepare() is called. Nothing is performed if the specified number is 0.
发行凭单。此方法创建指定数量的凭证<This,promise,receiver>,并将其添加到VVS。如果VTS是分布式的,此方法将创建一个“响应”,对应于prepare()方法中接收到的质询,并将其发送给接收方。请注意,在调用prepare()时指定了接收器。如果指定的数字为0,则不执行任何操作。
The session MUST be "prepared" when calling this method. The state of the session will be "activated" when the vouchers are created, and it will be "completed" when the transaction is successfully completed or "suspended" if the transaction is interrupted abnormally (e.g., network failures).
调用此方法时,会话必须“准备就绪”。当创建凭证时,会话状态将为“激活”,当交易成功完成时,会话状态将为“完成”,如果交易异常中断(例如,网络故障),会话状态将为“暂停”。
Parameters:
参数:
session - the session used by the issue transaction.
会话-问题事务使用的会话。
promise - the promise part of the voucher.
承诺-凭证的承诺部分。
num - the number of vouchers to be issued.
num-要发布的凭证数。
Throws:
抛出:
CannotProceedException - if the transaction cannot be successfully completed.
CannotProceedException-如果事务无法成功完成。
FeatureNotAvailableException - if the VTSAgent does not provide a means of issuing vouchers.
FeatureNotAvailableException-如果VTSAgent未提供凭证的发行方式。
InvalidStateException - if the session is not "prepared".
InvalidStateException-如果会话未“准备就绪”。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void transfer(Session session, Participant issuer, VoucherComponent promise, java.lang.Number num) throws VTSException
公共无效传输(会话会话、参与者颁发者、VoucherComponent承诺、java.lang.Number num)引发VTSException
Transfers vouchers. This method rewrites the specified number of vouchers <issuer, promise, this> to <issuer, promise, receiver> in the VVS; i.e., deletes the vouchers from the sender and stores them for the receiver. Similar to issue(), this method would create and send the response to the receiver if the VTS is distributed. The VTSAgent must have sufficient vouchers in the VVS. Nothing is performed if the specified number is 0.
转账凭证。此方法将VVS中指定数量的凭证<issuer,promise,This>重写为<issuer,promise,receiver>;i、 例如,从发送方删除凭证,并将其存储给接收方。与issue()类似,如果VTS是分布式的,此方法将创建响应并将其发送给接收器。VTSAgent必须在VVS中有足够的凭证。如果指定的数字为0,则不执行任何操作。
The session MUST be "prepared" when calling this method. The state of the session will be "activated" when the voucher are retrieved from the sender, and it will be "completed" when the transaction is successfully completed or "suspended" if the transaction is interrupted abnormally (e.g., network failures).
调用此方法时,会话必须“准备就绪”。当从发送方检索凭证时,会话状态将为“激活”;当交易成功完成时,会话状态将为“完成”;如果交易异常中断(例如,网络故障),会话状态将为“暂停”。
If null is specified for the issuer parameter, it indicates "any issuer". This method selects vouchers to be transferred from the set of vouchers returned by the getContents(null, promise).
如果为issuer参数指定null,则表示“任何issuer”。此方法从getContents返回的一组凭证(null,promise)中选择要传输的凭证。
Parameters:
参数:
session - the session used by the transfer transaction.
会话-传输事务使用的会话。
issuer - the issuer part of the voucher, or null.
发卡机构-凭证的发卡机构部分,或为空。
promise - the promise part of the voucher.
承诺-凭证的承诺部分。
num - the number of vouchers to be transferred.
num—要传输的凭证数。
Throws:
抛出:
CannotProceedException - if the transaction cannot be successfully completed.
CannotProceedException-如果事务无法成功完成。
FeatureNotAvailableException - if the VTSAgent does not provide a means of transferring vouchers.
FeatureNotAvailableException-如果VTSAgent未提供凭证传输方式。
InsufficientVoucherException - if the VTSAgent does not have a sufficient number of vouchers to transfer.
不足凭证例外-如果VTSAgent没有足够数量的凭证进行转账。
InvalidStateException - if the session is not "prepared".
InvalidStateException-如果会话未“准备就绪”。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void consume(Session session, Participant issuer, VoucherComponent promise, java.lang.Number num) throws VTSException
public void consume(会话会话、参与者颁发者、VoucherComponent承诺、java.lang.Number num)引发VTSException
Consumes vouchers. This method deletes the specified number of vouchers <issuer, promise, this> from the VVS and notifies the receiver of the deletion. Similar to issue() and transfer(), the response would be created and sent to the receiver if the VTS is distributed so that the receiver can obtain proof of the deletion. The VTSAgent must have a sufficient number of vouchers in the VVS. Nothing is performed if the specified number is 0.
消费代金券。此方法从VVS中删除指定数量的凭证<issuer,promise,This>,并通知接收方删除。与issue()和transfer()类似,如果分发VTS,将创建响应并将其发送给接收方,以便接收方可以获得删除的证据。VTSAgent必须在VVS中有足够数量的凭证。如果指定的数字为0,则不执行任何操作。
The session MUST be "prepared" when this method is called. The state of the session will be "activated" when the vouchers are deleted, and it will be "completed" when the transaction is successfully completed or "suspended" if the transaction is interrupted abnormally (e.g., network failures).
调用此方法时,必须“准备”会话。当凭证被删除时,会话状态将被“激活”,当交易成功完成时,会话状态将被“完成”,如果交易异常中断(例如网络故障),会话状态将被“暂停”。
If null is specified for the issuer parameter, it indicates "any issuer". This method selects vouchers to be consumed from the set of vouchers returned by the getContents(null, promise).
如果为issuer参数指定null,则表示“任何issuer”。此方法从getContents返回的一组凭证(null,promise)中选择要使用的凭证。
Parameters:
参数:
session - the session used by the consume transaction.
会话-消费事务使用的会话。
issuer - the issuer part of the voucher, or null.
发卡机构-凭证的发卡机构部分,或为空。
promise - the promise part of the voucher.
承诺-凭证的承诺部分。
num - the number of vouchers to be consumed.
num—要使用的凭证数。
Throws:
抛出:
CannotProceedException - if the transaction cannot be successfully completed.
CannotProceedException-如果事务无法成功完成。
FeatureNotAvailableException - if the VTSAgent does not provide a means of consuming vouchers.
FeatureNotAvailableException-如果VTSAgent未提供使用凭证的方法。
InsufficientVoucherException - if the VTSAgent does not have a sufficient number of vouchers to consume.
不足凭证例外-如果VTSAgent没有足够数量的凭证可供消费。
InvalidStateException - if the session is not "prepared".
InvalidStateException-如果会话未“准备就绪”。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void present(Session session, Participant issuer, VoucherComponent promise, java.lang.Number num) throws VTSException
public void present(会话会话、参与者颁发者、VoucherComponent承诺、java.lang.Number num)引发VTSException
Presents vouchers. This method shows that the sender has the specified number of vouchers <issuer, promise, this> in the VVS to the receiver of the session; no modification is performed to the VVS. However, the response would be sent to the receiver as well as consume() in order to prove that the VTS has been distributed. The VTSAgent must have a sufficient number of vouchers in the VVS. Nothing is performed if the specified number is 0.
出示凭单。此方法显示发送方在VVS中向会话接收方提供指定数量的凭证<发卡方,承诺,此>;未对VVS进行任何修改。但是,响应将被发送到接收器以及consume(),以证明VTS已分发。VTSAgent必须在VVS中有足够数量的凭证。如果指定的数字为0,则不执行任何操作。
The session MUST be "prepared" when this method is called. The state of the session will be "activated" when the vouchers are
调用此方法时,必须“准备”会话。当凭证被激活时,会话的状态将被“激活”
retrieved, and it will be "completed" when the transaction is successfully completed or "suspended" if the transaction is interrupted abnormally (e.g., by network failures).
当事务成功完成时,它将被“完成”,如果事务被异常中断(例如,由于网络故障),它将被“暂停”。
If null is specified for the issuer parameter, it indicates "any issuer". This method selects vouchers to be presented from the set of vouchers returned by the getContents(null, promise).
如果为issuer参数指定null,则表示“任何issuer”。此方法从getContents返回的一组凭证(null,promise)中选择要显示的凭证。
Parameters:
参数:
session - the session used by the present transaction.
会话-当前事务使用的会话。
issuer - the issuer part of the voucher, or null.
发卡机构-凭证的发卡机构部分,或为空。
promise - the promise part of the voucher.
承诺-凭证的承诺部分。
num - the number of the voucher to be presented.
num-要出示的凭证的编号。
Throws:
抛出:
CannotProceedException - if the transaction cannot be successfully completed.
CannotProceedException-如果事务无法成功完成。
InsufficientVoucherException - if the VTSAgent does not have a sufficient number of vouchers to present.
不足凭证例外-如果VTSAgent没有足够数量的凭证可供出示。
InvalidStateException - if the session is not "prepared".
InvalidStateException-如果会话未“准备就绪”。
FeatureNotAvailableException - if the VTSAgent does not provide a means of presenting vouchers.
FeatureNotAvailableException-如果VTSAgent未提供出示凭证的方式。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void cancel(Session session) throws VTSException
公共作废取消(会话)引发VTSExException
Releases the session. "Prepared" sessions MUST be canceled. An implementation MAY be permitted to cancel "activated" or "suspended" sessions.
释放会话。“准备好的”会话必须取消。可以允许实现取消“激活”或“暂停”会话。
Throws:
抛出:
InvalidStateException - if the state of the session cannot be canceled.
InvalidStateException-如果无法取消会话状态。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void resume(Session session) throws VTSException
公共无效恢复(会话)引发VTSExException
Restarts the session. Only "suspended" sessions can be resumed. The state of the session will be re-"activated" immediately, and it will be "completed" when the transaction is successfully completed or "suspended" again if the transaction is interrupted abnormally (e.g., network failures).
重新启动会话。只能恢复“暂停”会话。会话状态将立即重新“激活”,当事务成功完成时,会话状态将“完成”,如果事务异常中断(例如网络故障),会话状态将再次“暂停”。
Throws:
抛出:
CannotProceedException - if the transaction cannot be successfully completed.
CannotProceedException-如果事务无法成功完成。
InvalidStateException - if the session is not "suspended".
InvalidStateException-如果会话未“挂起”。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void create(VoucherComponent promise, java.lang.Number num) throws VTSException
public void create(VoucherComponent promise,java.lang.Number num)抛出VTSException
Creates vouchers where the issuer is the VTSAgent itself. This method creates the specified number of vouchers <this, promise, this> and adds them to the VVS. Nothing is performed if the specified number is 0.
创建凭证,其中发行人是VTSAgent本身。此方法创建指定数量的凭证<This,promise,This>,并将其添加到VVS。如果指定的数字为0,则不执行任何操作。
Throws:
抛出:
FeatureNotAvailableException - if the VTSAgent does not provide a means of creating vouchers.
FeatureNotAvailableException-如果VTSAgent未提供创建凭证的方法。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void delete(Participant issuer, VoucherComponent promise, java.lang.Number num) throws VTSException
public void delete(参与者颁发者、VoucherComponent承诺、java.lang.Number num)引发VTSException
Deletes vouchers. This method deletes the specified number of vouchers <issuer, promise, this> from the VVS. The VTSAgent must have sufficient vouchers in the VVS. Nothing is performed if the specified number is 0.
删除凭证。此方法从VVS中删除指定数量的凭单<issuer,promise,This>。VTSAgent必须在VVS中有足够的凭证。如果指定的数字为0,则不执行任何操作。
Throws:
抛出:
InsufficientVoucherException - if the VTSAgent does not have a sufficient number of vouchers to delete.
不足凭证例外-如果VTSAgent没有足够数量的凭证可删除。
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public java.util.Set getContents(Participant issuer, VoucherComponent promise) throws VTSException
public java.util.Set getContents(参与者颁发者、VoucherComponent承诺)引发VTSException
Returns the set of vouchers whose issuer and promise both match the issuer and promise specified in the parameters.
返回其颁发者和承诺均与参数中指定的颁发者和承诺匹配的凭证集。
If null is specified for the issuer or promise parameter, it indicates "any issuer" or "any promise", respectively. If null is specified for both parameters, this method selects all vouchers owned by the holder from the VVS.
如果为issuer或promise参数指定null,则分别表示“任何issuer”或“任何promise”。如果两个参数都指定为null,则此方法从VVS中选择持有人拥有的所有凭证。
Returns:
返回:
the set of vouchers held by the holder of the VTSAgent.
票据持有人持有的一套凭证。
Throws:
抛出:
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public java.util.Set getSessions() throws VTSException
public java.util.Set getSessions()引发VTSExException
Returns a set of incomplete sessions prepared by the VTSAgent.
返回VTSAgent准备的一组未完成会话。
Returns:
返回:
the set of sessions prepared by the VTSAgent that are not yet completed.
VTSAgent准备的尚未完成的会话集。
Throws:
抛出:
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public java.util.Set getLog() throws VTSException
public java.util.Set getLog()引发VTSException
Returns a set of completed sessions prepared or received by the VTSAgent. This set represents the trading log of the VTSAgent. A VTS may delete an old log eventually, so that the entire log may not be returned; the amount of the log kept by the VTSAgent is implementation-specific.
返回VTSAgent准备或接收的一组已完成会话。此集合表示VTSAgent的交易日志。VTS最终可能会删除一个旧日志,因此可能不会返回整个日志;VTSAgent保留的日志量是特定于实现的。
Returns:
返回:
the set of completed sessions prepared or received by the VTSAgent.
VTSAgent准备或接收的已完成会话集。
Throws:
抛出:
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void addReceptionListener(ReceptionListener l) throws VTSException
public void addReceptionListener(ReceptionListener l)引发VTSexException
Adds a ReceptionListener to the listener list.
将ReceptionListener添加到侦听器列表。
After a ReceptionListener l is registered by this method, l.arrive() will be called whenever the VTSAgent receives a voucher.
通过此方法注册ReceiptOnListener l后,每当VTSAgent收到凭证时,就会调用l.Arrival()。
Nothing is performed if the specified listener is null.
如果指定的侦听器为null,则不执行任何操作。
Throws:
抛出:
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public void removeReceptionListener(ReceptionListener l) throws VTSException
公共无效清除器ReceptionListener(ReceptionListener l)引发VTSexException
Removes a ReceptionListener from the listener list.
从侦听器列表中删除ReceptionListener。
Nothing is performed when the specified listener is null or not registered.
当指定的侦听器为null或未注册时,不执行任何操作。
Throws:
抛出:
VTSSecurityException - if the VTSAgent cannot be authenticated correctly.
VTSSecurityException-如果无法正确验证VTSAgent。
public interface Session
公共接口会话
Represents the logical connection established by the trade. Sessions are established by VTSAgent#prepare().
表示交易建立的逻辑连接。会话由VTSAgent#prepare()建立。
A session has four states: prepared, activated, suspended, and completed. The initial state of a session is "prepared", and the session will be "activated" immediately when any of the trading methods of VTSAgent is called. The "activated" session will be "completed" after the trading method is successfully completed. If the trading method fails transiently (e.g., network failure), the session will be "suspended". Suspended sessions can be re-"activated" and restarted by calling VTSAgent#resume().
会话有四种状态:已准备、已激活、已暂停和已完成。会话的初始状态为“准备”,当调用VTSAgent的任何交易方法时,会话将立即“激活”。交易方法成功完成后,“激活”会话将“完成”。如果交易方法暂时失败(例如网络故障),会话将被“暂停”。挂起的会话可以通过调用VTSAgent#resume()重新“激活”并重新启动。
A completed session may disappear from the VTSAgent; the session will be collected by the GC unless other objects keep its reference.
已完成的会话可能会从VTSAgent中消失;除非其他对象保留其引用,否则会话将由GC收集。
public String getIdentifier()
公共字符串getIdentifier()
Returns the identifier of the session. The generation scheme of the identifier is implementation-specific. An implementation may use a transaction ID as the identifier of the session.
返回会话的标识符。标识符的生成方案是特定于实现的。实现可以使用事务ID作为会话的标识符。
Returns:
返回:
the string of the identifier of the session.
会话标识符的字符串。
public Voucher getVoucher()
公共凭证getVoucher()
Returns the voucher to be traded using the session, or returns null if the session has not been activated.
返回要使用会话进行交易的凭证,如果会话尚未激活,则返回null。
Returns:
返回:
the voucher to be traded, or null if the state of the session is "prepared".
要交易的凭证,如果会话状态为“准备就绪”,则为空。
public Participant getSender()
公共参与者getSender()
Returns the sender of the session (i.e., the creator who prepared the session).
返回会话的发件人(即准备会话的创建者)。
Returns:
返回:
the sender of the session.
会话的发件人。
public Participant getReceiver()
公共参与者getReceiver()
Returns the receiver of the session (i.e., the participant specified when preparing the session (by the VTSAgent#prepare() method)).
返回会话的接收者(即准备会话时指定的参与者(通过VTSAgent#prepare()方法))。
Returns:
返回:
the receiver of the session.
会话的接收者。
public boolean isPrepared()
公共布尔值isPrepared()
Verifies if the session is "prepared".
验证会话是否已“准备就绪”。
Returns:
返回:
true if the session is in the "prepared" state, otherwise, false.
如果会话处于“准备就绪”状态,则为true,否则为false。
public boolean isActivated()
公共布尔值已激活()
Verifies if the session is "activated".
验证会话是否已“激活”。
Returns:
返回:
true if the session is in the "activated" state, otherwise, false.
如果会话处于“已激活”状态,则为true,否则为false。
public boolean isSuspended()
公共布尔值isSuspended()
Verifies if the session is "suspended".
验证会话是否已“挂起”。
Returns:
返回:
true if the session is in the "suspended" state, otherwise, false.
如果会话处于“挂起”状态,则为true,否则为false。
public boolean isCompleted()
公共布尔值已完成()
Verifies if the session is "completed".
验证会话是否“已完成”。
Returns:
返回:
true if the session is in the "completed" state, otherwise, false.
如果会话处于“已完成”状态,则为true,否则为false。
public interface Voucher
公共接口凭证
Represents voucher(s) described in [VTS]. An object implementing this interface can represent more than one voucher if all of the issuer part and the promise part of the vouchers are the same.
表示[VTS]中描述的凭证。如果凭证的所有颁发者部分和承诺部分相同,则实现此接口的对象可以表示多个凭证。
public Participant getIssuer()
公共参与者getIssuer()
Returns the issuer part of the voucher(s).
返回凭证的颁发者部分。
Returns:
返回:
the participant who issued the voucher(s).
颁发凭单的参与者。
public VoucherComponent getPromise()
公共凭证组件getPromise()
Returns the promise part of the voucher(s).
返回凭证的承诺部分。
Returns:
返回:
the voucher component that defines the promise of the voucher.
定义凭证承诺的凭证组件。
public java.lang.Number getCount()
public java.lang.Number getCount()
Returns the number of the voucher(s).
返回凭证的编号。
Returns:
返回:
the positive (>0) number of the voucher(s).
凭证的正数(>0)。
public interface VoucherComponentRepository
公共接口VoucherComponentRepository
Maintains VoucherComponents.
维护Voucher组件。
An object implementing VoucherComponentRepository provides a means of retrieving the voucher components that are the promises of vouchers in the VVS.
实现VoucherComponentRepository的对象提供了一种检索凭证组件的方法,这些凭证组件是VVS中凭证的承诺。
Before issuing a voucher, the promise of the voucher must be registered with this repository. The repository can be implemented as either a network-wide directory service or personal storage like the ParticipantRepository.
在颁发凭单之前,必须在此存储库中注册凭单的承诺。存储库可以实现为网络范围的目录服务或个人存储,如ParticipantRepository。
public VoucherComponent register(org.w3c.dom.Document document)
公共凭证组件注册表(org.w3c.dom.Document)
Creates a voucher component associated with the specified DOM object and registers the voucher component with the repository.
创建与指定DOM对象关联的凭证组件,并在存储库中注册该凭证组件。
A voucher component of the voucher to be issued must be registered using this method.
必须使用此方法注册要发布的凭证的凭证组件。
Nothing is performed (and the method returns null) if the specified document is null or the syntax of the document does not conform to the VTS.
如果指定的文档为null或文档的语法不符合VTS,则不执行任何操作(方法返回null)。
The method returns the registered voucher component if the specified DOM object has been already registered (no new voucher component is created in this case).
如果指定的DOM对象已经注册(在这种情况下不创建新的凭证组件),则该方法返回已注册的凭证组件。
Returns:
返回:
a registered voucher component associated with the specified document, or null if the document is null or has wrong syntax.
与指定文档关联的已注册凭证组件,如果文档为空或语法错误,则为空。
public interface VoucherComponent
公共接口VoucherComponent
Represents the voucher component that defines the promise of the voucher.
表示定义凭证承诺的凭证组件。
Each VoucherComponent object has its own unique identifier and is associated with an XML document that describes the promise made by the issuer of the voucher (e.g., goods or services can be claimed in exchange for redeeming the voucher).
每个VoucherComponent对象都有自己的唯一标识符,并与一个XML文档相关联,该文档描述了凭单发行人所做的承诺(例如,可以要求商品或服务来兑换凭单)。
This interface can be implemented as sort of a "smart pointer" to the XML document. An implementation may have a reference to a voucher component repository instead of the voucher component, and it may retrieve the document dynamically from the repository when the getDocument() method is called.
这个接口可以实现为指向XML文档的某种“智能指针”。实现可以引用凭证组件存储库而不是凭证组件,并且在调用getDocument()方法时可以从存储库中动态检索文档。
public String getIdentifier()
公共字符串getIdentifier()
Returns the identifier of the voucher component. Each voucher component must have a unique identifier. The identifier may be used to check for equivalence of voucher components.
返回凭证组件的标识符。每个凭证组件必须具有唯一标识符。标识符可用于检查凭证组件的等效性。
The format of the identifier is implementation-specific, however, it is RECOMMENDED that the hash value of the voucher component in the identifier be included to assure uniqueness. For generating the hash value, it is desirable to use a secure hash function (e.g., [SHA-1]) and to apply a canonicalization function (e.g., [EXC-C14N]) before applying the hash function to minimize the impact of insignificant format changes to the voucher component, (e.g., line breaks or character encoding).
标识符的格式是特定于实现的,但是,建议在标识符中包含凭证组件的哈希值,以确保唯一性。为了生成散列值,需要使用安全散列函数(例如,[SHA-1]),并在应用散列函数之前应用规范化函数(例如,[EXC-C14N]),以最小化对凭证组件的不重要格式更改(例如,换行或字符编码)的影响。
Returns:
返回:
the identifier string of the voucher component.
凭证组件的标识符字符串。
public org.w3c.dom.Document getDocument()
public org.w3c.dom.Document getDocument()
Returns a Document Object Model [DOM] representation of the document associated with the voucher component by the VoucherComponentRepository#register() method.
通过VoucherComponentRepository#register()方法返回与凭证组件关联的文档的文档对象模型[DOM]表示形式。
The DOM object to be returned may be retrieved from a VoucherComponentRepository on demand, instead of the VoucherComponent always keeping a reference to the DOM object.
要返回的DOM对象可以根据需要从VoucherComponentRepository检索,而不是VoucherComponent始终保留对DOM对象的引用。
The VTS must guarantee that the getDocument method will eventually return the DOM object, provided that the voucher associated with the corresponding voucher component exists in the VVS.
VTS必须保证getDocument方法最终将返回DOM对象,前提是VVS中存在与相应凭证组件关联的凭证。
Returns:
返回:
a DOM representation of the document associated with the voucher component.
与凭证组件关联的文档的DOM表示形式。
Throws:
抛出:
DocumentNotFoundException - if the associated DOM object cannot be retrieved.
DocumentNotFoundException-如果无法检索关联的DOM对象。
public interface ReceptionListener extends java.util.EventListener
公共接口ReceptionListener扩展了java.util.EventListener
Provides a listener interface with a notification that a VTSAgent has received a voucher.
提供一个侦听器接口,其中包含VTSAgent已收到凭证的通知。
When a voucher arrives at the VTSAgent, the VTSAgent invokes the arrive() method of each registered ReceptionListener. ReceptionListeners can obtain a Session object, which contains information about the received voucher and the sender of the voucher.
当凭证到达VTSAgent时,VTSAgent调用每个已注册的ReceiptOnListener的Arrival()方法。ReceiptonListeners可以获取会话对象,该对象包含有关已接收凭证和凭证发件人的信息。
This interface is intended to provide a means of notifying a wallet that "You have new vouchers", so that this interface may be implemented by wallets or other applications that use VTS.
此接口旨在提供一种通知钱包“您有新凭证”的方式,以便钱包或使用VTS的其他应用程序可以实现此接口。
public void arrive(Session session)
公众假期(课时)
Provides notification of the arrival of a voucher.
提供凭证到达的通知。
After the listener is registered to a VTSAgent (by the VTSAgent#addReceptionListener() method), the VTSAgent invokes this method whenever it receives a voucher.
侦听器注册到VTSAgent后(通过VTSAgent#addReceiptOnListener()方法),VTSAgent在收到凭证时调用此方法。
The specified session is equivalent to the session used by the sender to trade the voucher. The state of the session is "completed" when this method is called.
指定的会话相当于发件人用于交易凭证的会话。调用此方法时,会话的状态为“已完成”。
java.lang.Exception +-- VTSException +-- CannotProceedException +-- DocumentNotFoundException +-- FeatureNotAvailableException +-- InsufficientVoucherException +-- InvalidParticipantException +-- InvalidStateException +-- VTSSecurityException
java.lang.Exception +-- VTSException +-- CannotProceedException +-- DocumentNotFoundException +-- FeatureNotAvailableException +-- InsufficientVoucherException +-- InvalidParticipantException +-- InvalidStateException +-- VTSSecurityException
VTSException This is the superclass of all exceptions thrown by the methods in the interfaces that construct the VTS-API.
VTSException这是由构造VTS-API的接口中的方法引发的所有异常的超类。
CannotProceedException This exception is thrown when a trading is interrupted by network failures or other errors.
CannotProceedException当交易因网络故障或其他错误而中断时,会引发此异常。
DocumentNotFoundException This exception is thrown when the document associated with a voucher component cannot be found.
DocumentNotFoundException在找不到与凭证组件关联的文档时引发此异常。
FeatureNotAvailableException This exception is thrown when the invoked method is not supported.
FeatureNotAvailableException在不支持调用的方法时引发此异常。
InsufficientVoucherException This exception is thrown when the number of the voucher is less than the number specified for trading.
InsufficientVoucherException当凭证编号小于为交易指定的编号时,会引发此异常。
InvalidParticipantException This exception is thrown when the specified participant cannot be located.
InvalidParticipantException当找不到指定的参与者时,会引发此异常。
InvalidStateException This exception is thrown when the state of the session is invalid and the operation cannot proceed.
InvalidStateException会话状态无效且操作无法继续时引发此异常。
VTSSecurityException This exception is thrown when authentication fails, or when a method that requires authentication in advance is called without authentication.
VTSSecurityException当身份验证失败时,或在没有身份验证的情况下调用需要提前身份验证的方法时,会引发此异常。
// Issue a voucher
//签发凭单
VTSManager vts = new FooVTSManager(); ParticipantRepository addrBook = vts.getParticipantRepository(); VoucherComponentRepository vcr = vts.getVoucherComponentRepository();
VTSManager vts = new FooVTSManager(); ParticipantRepository addrBook = vts.getParticipantRepository(); VoucherComponentRepository vcr = vts.getVoucherComponentRepository();
Participant you = addrBook.lookup("http://example.org/foo"); // looks up a trading partner identified as // "http://example.org/foo". VTSAgent me = addrBook.lookup("myName").getVTSAgent(); // a short-cut name may be used if VTS implementation allows.
Participant you = addrBook.lookup("http://example.org/foo"); // looks up a trading partner identified as // "http://example.org/foo". VTSAgent me = addrBook.lookup("myName").getVTSAgent(); // a short-cut name may be used if VTS implementation allows.
VoucherComponent promise = vcr.register(anXMLVoucherDocument); // registers a voucher component that corresponds to the voucher // to be issued.
VoucherComponent promise=vcr.寄存器(anXMLVoucherDocument);//注册与要发布的凭证//对应的凭证组件。
try { me.login(); // sets up the issuer's smartcard (assuming distributed VTS). s = me.prepare(you); // receives a challenge from the partner. me.issue(s, promise, 1); // sends a voucher using the received challenge. me.logout(); } catch (VTSException e) { // if an error (e.g., a network trouble) occurs... System.err.println("Sorry."); e.printStackTrace(); // this example simply prints a stack trace, but a real wallet // may prompt the user to retry (or cancel). }
try { me.login(); // sets up the issuer's smartcard (assuming distributed VTS). s = me.prepare(you); // receives a challenge from the partner. me.issue(s, promise, 1); // sends a voucher using the received challenge. me.logout(); } catch (VTSException e) { // if an error (e.g., a network trouble) occurs... System.err.println("Sorry."); e.printStackTrace(); // this example simply prints a stack trace, but a real wallet // may prompt the user to retry (or cancel). }
// Transfer all my vouchers
//转帐我所有的凭单
VTSManager vts = new FooVTSManager(); ParticipantRepository addrBook = vts.getParticipantRepository();
VTSManager vts = new FooVTSManager(); ParticipantRepository addrBook = vts.getParticipantRepository();
Participant you = addrBook.lookup("8f42 5aab ffff cafe babe..."); // some VTS implementations would use a hash value of a public key // (aka fingerprint) as an identifier of a participant. VTSAgent me = addrBook.lookup("myName").getVTSAgent();
Participant you = addrBook.lookup("8f42 5aab ffff cafe babe..."); // some VTS implementations would use a hash value of a public key // (aka fingerprint) as an identifier of a participant. VTSAgent me = addrBook.lookup("myName").getVTSAgent();
try { me.login(); Iterator i = me.getContents(null, null).iterator();
try { me.login(); Iterator i = me.getContents(null, null).iterator();
while (i.hasNext()) { Voucher v = (Voucher) i.next(); s = me.prepare(you); me.transfer(s, v.getIssuer(), v.getPromise(), v.getCount()); }
while (i.hasNext()) { Voucher v = (Voucher) i.next(); s = me.prepare(you); me.transfer(s, v.getIssuer(), v.getPromise(), v.getCount()); }
me.logout(); } catch (VTSException e) { System.err.println("Sorry."); e.printStackTrace(); }
me.logout(); } catch (VTSException e) { System.err.println("Sorry."); e.printStackTrace(); }
// Register an incoming voucher notifier (biff)
//注册传入凭证通知程序(biff)
VTSManager vts = new FooVTSManager();
VTSManager vts = new FooVTSManager();
ParticipantRepository addrBook = vts.getParticipantRepository(); VTSAgent me = addrBook.lookup("myName").getVTSAgent();
ParticipantRepository addrBook = vts.getParticipantRepository(); VTSAgent me = addrBook.lookup("myName").getVTSAgent();
ReceptionListener listener = new ReceptionListener() { public void arrive(Session s) { System.out.println("You got a new voucher."); } };
ReceptionListener listener = new ReceptionListener() { public void arrive(Session s) { System.out.println("You got a new voucher."); } };
try { me.login(); me.addReceptionListener(listener); me.logout(); } catch (VTSException e) { System.err.println("Sorry."); e.printStackTrace(); }
try { me.login(); me.addReceptionListener(listener); me.logout(); } catch (VTSException e) { System.err.println("Sorry."); e.printStackTrace(); }
Security is very important for trading vouchers. VTS implementations are responsible for preventing illegal acts upon vouchers (as described in [VTS]), as well as preventing malicious access from invalid users and fake server attacks, including man-in-the-middle attacks.
交易凭证的安全性非常重要。VTS实施负责防止凭证上的非法行为(如[VTS]中所述),以及防止无效用户的恶意访问和虚假服务器攻击,包括中间人攻击。
The means to achieve the above requirements are not specified in this document because they depend on VTS implementation. However,
本文件未规定实现上述要求的方法,因为它们取决于VTS的实施。然而
securing communication channels (e.g., using TLS) between client VTS plug-ins and the central server in a centralized VTS (as described in 5.4.1 login()), and applying cryptographic challenge-and-response techniques in a distributed VTS are likely to be helpful and are strongly recommended to implement a secure VTS.
在集中式VTS(如5.4.1 login()中所述)中保护客户端VTS插件和中央服务器之间的通信通道(例如,使用TLS),并在分布式VTS中应用加密质询和响应技术可能会有所帮助,强烈建议实施安全VTS。
This document assumes that the VTS plug-in is trusted by its user. The caller application of a VTS should authenticate the VTS plug-in and bind it securely using the VTS Provider information specified in the Voucher Component. This document, however, does not specify any application authentication scheme and it is assumed to be specified by other related standards. Until various VTS systems are deployed, it is enough to manually check and install VTS plug-ins like other download applications.
本文档假定用户信任VTS插件。VTS的调用方应用程序应验证VTS插件,并使用凭证组件中指定的VTS提供程序信息将其安全绑定。然而,本文件并未规定任何应用程序身份验证方案,并假定由其他相关标准规定。在部署各种VTS系统之前,与其他下载应用程序一样,手动检查和安装VTS插件就足够了。
The following persons, in alphabetic order, contributed substantially to the material herein:
以下人员按字母顺序对本文件中的材料做出了重大贡献:
Donald Eastlake 3rd Iguchi Makoto Yoshitaka Nakamura Ryuji Shoda
唐纳德东湖3号伊口町Makoto Yoshitaka Nakamura Ryuji Shoda
[DOM] V. Apparao, S. Byrne, M. Champion, S. Isaacs, I. Jacobs, A. Le Hors, G. Nicol, J. Robie, R. Sutor, C. Wilson, and L. Wood. "Document Object Model (DOM) Level 1 Specification", W3C Recommendation, October 1998, <http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/>
[DOM] V. Apparao, S. Byrne, M. Champion, S. Isaacs, I. Jacobs, A. Le Hors, G. Nicol, J. Robie, R. Sutor, C. Wilson, and L. Wood. "Document Object Model (DOM) Level 1 Specification", W3C Recommendation, October 1998, <http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/>
[GVL] Fujimura, K. and M. Terada, "XML Voucher: Generic Voucher Language", RFC 4153, September 2005.
[GVL]Fujimura,K.和M.Terada,“XML凭证:通用凭证语言”,RFC 4153,2005年9月。
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2119]Bradner,S.,“RFC中用于表示需求水平的关键词”,BCP 14,RFC 2119,1997年3月。
[ECML] Eastlake 3rd, D., "Electronic Commerce Modeling Language (ECML) Version 2 Specification", RFC 4112, June 2005.
[ECML]Eastlake 3rd,D.,“电子商务建模语言(ECML)第2版规范”,RFC4112005年6月。
[EXC-C14N] J. Boyer, D. Eastlake, and J. Reagle, "Exclusive XML Canonicalization Version 1.0", W3C Recommendation, July 2002, <http://www.w3.org/TR/2002/REC-xml-exc-c14n- 20020718/>
[EXC-C14N] J. Boyer, D. Eastlake, and J. Reagle, "Exclusive XML Canonicalization Version 1.0", W3C Recommendation, July 2002, <http://www.w3.org/TR/2002/REC-xml-exc-c14n- 20020718/>
[GPSF] G. Lacoste, B. Pfitzmann, M. Steiner, and M. Waidner (Eds.), "SEMPER - Secure Electronic Marketplace for Europe," LNCS 1854, Springer-Verlag, 2000.
[GPSF]G.Lacoste,B.Pfizmann,M.Steiner和M.Waidner(编辑),“SEMPER-欧洲安全电子市场”,LNCS 1854,Springer Verlag,2000年。
[IOTP] Burdett, D., "Internet Open Trading Protocol - IOTP Version 1.0", RFC 2801, April 2000.
[IOTP]Burdett,D.,“互联网开放交易协议-IOTP版本1.0”,RFC2801,2000年4月。
[JCC] T. Goldstein, "The Gateway Security Model in the Java Electronic Commerce Framework", Proc. of Financial Cryptography '97, 1997.
[JCC]T.Goldstein,“Java电子商务框架中的网关安全模型”,Proc。1997年《金融密码术》杂志。
[SHA-1] Department of Commerce/National Institute of Standards and Technology, "FIPS PUB 180-1. Secure Hash Standard. U.S.", <http://csrc.nist.gov/publications/fips/fips180-2/ fips180-2withchangenotice.pdf>
[SHA-1] Department of Commerce/National Institute of Standards and Technology, "FIPS PUB 180-1. Secure Hash Standard. U.S.", <http://csrc.nist.gov/publications/fips/fips180-2/ fips180-2withchangenotice.pdf>
[TLS] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC 2246, January 1999.
[TLS]Dierks,T.和C.Allen,“TLS协议版本1.0”,RFC 2246,1999年1月。
[VTS] Fujimura, K. and D. Eastlake, "Requirements and Design for Voucher Trading System (VTS)", RFC 3506, March 2003.
[VTS]Fujimura,K.和D.Eastlake,“凭证交易系统(VTS)的要求和设计”,RFC 3506,2003年3月。
Authors' Addresses
作者地址
Masayuki Terada NTT DoCoMo, Inc. 3-5 Hikari-no-oka, Yokosuka-shi, Kanagawa, 239-8536 JAPAN
日本神奈川横须贺市Hikari no oka 3-5号田田田正行公司,邮编:239-8536
Phone: +81-(0)46-840-3809 Fax: +81-(0)46-840-3705 EMail: te@rex.yrp.nttdocomo.co.jp
Phone: +81-(0)46-840-3809 Fax: +81-(0)46-840-3705 EMail: te@rex.yrp.nttdocomo.co.jp
Ko Fujimura NTT Corporation 1-1 Hikari-no-oka, Yokosuka-shi, Kanagawa, 239-0847 JAPAN
日本神奈川横须贺市Hikari no oka 1-1藤村NTT公司,邮编:239-0847
Phone: +81-(0)46-859-3053 Fax: +81-(0)46-859-1730 EMail: fujimura.ko@lab.ntt.co.jp
Phone: +81-(0)46-859-3053 Fax: +81-(0)46-859-1730 EMail: fujimura.ko@lab.ntt.co.jp
Full Copyright Statement
完整版权声明
Copyright (C) The Internet Society (2005).
版权所有(C)互联网协会(2005年)。
This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.
本文件受BCP 78中包含的权利、许可和限制的约束,除其中规定外,作者保留其所有权利。
This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
本文件及其包含的信息是按“原样”提供的,贡献者、他/她所代表或赞助的组织(如有)、互联网协会和互联网工程任务组不承担任何明示或暗示的担保,包括但不限于任何保证,即使用本文中的信息不会侵犯任何权利,或对适销性或特定用途适用性的任何默示保证。
Intellectual Property
知识产权
The IETF takes no position regarding the validity or scope of any Intellectual Property Rights or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; nor does it represent that it has made any independent effort to identify any such rights. Information on the procedures with respect to rights in RFC documents can be found in BCP 78 and BCP 79.
IETF对可能声称与本文件所述技术的实施或使用有关的任何知识产权或其他权利的有效性或范围,或此类权利下的任何许可可能或可能不可用的程度,不采取任何立场;它也不表示它已作出任何独立努力来确定任何此类权利。有关RFC文件中权利的程序信息,请参见BCP 78和BCP 79。
Copies of IPR disclosures made to the IETF Secretariat and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.
向IETF秘书处披露的知识产权副本和任何许可证保证,或本规范实施者或用户试图获得使用此类专有权利的一般许可证或许可的结果,可从IETF在线知识产权存储库获取,网址为http://www.ietf.org/ipr.
The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology that may be required to implement this standard. Please address the information to the IETF at ietf-ipr@ietf.org.
IETF邀请任何相关方提请其注意任何版权、专利或专利申请,或其他可能涵盖实施本标准所需技术的专有权利。请将信息发送至IETF的IETF-ipr@ietf.org.
Acknowledgement
确认
Funding for the RFC Editor function is currently provided by the Internet Society.
RFC编辑功能的资金目前由互联网协会提供。