home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-10-14 | 165.1 KB | 5,100 lines |
-
-
-
-
-
-
- Network Working Group J. Kempf
- Request for Comments: 2614 E. Guttman
- Category: Informational Sun Microsystems
- June 1999
-
-
- An API for Service Location
-
- 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.
-
- Abstract
-
- The Service Location Protocol (SLP) provides a new way for clients to
- dynamically discovery network services. With SLP, it is simple to
- offer highly available services that require no user configuration or
- assistance from network administrators prior to use. This document
- describes standardized APIs for SLP in C and Java. The APIs are
- modular and are designed to allow implementations to offer just the
- feature set needed. In addition, standardized file formats for
- configuration and serialized registrations are defined, allowing SLP
- agents to set network and other parameters in a portable way. The
- serialized file format allows legacy services to be registered with
- SLP directory agents in cases where modifying the legacy service
- program code is difficult or impossible, and to portably exchange a
- registration database.
-
- Table of Contents
-
- 1. Introduction 4
- 1.1. Goals . . . . . . . . . . . . . . . . . . . . . . . . 4
- 1.2. Terminology . . . . . . . . . . . . . . . . . . . . . 4
- 2. File Formats 7
- 2.1. Configuration File Format . . . . . . . . . . . . . . 8
- 2.1.1. DA configuration . . . . . . . . . . . . . . 9
- 2.1.2. Static Scope Configuration . . . . . . . . . . 9
- 2.1.3. Tracing and Logging . . . . . . . . . . . . . 11
- 2.1.4. Serialized Proxy Registrations . . . . . . . . 11
- 2.1.5. Network Configuration Properties . . . . . . . 12
- 2.1.6. SA Configuration . . . . . . . . . . . . . . . 14
- 2.1.7. UA Configuration . . . . . . . . . . . . . . . 14
- 2.1.8. Security . . . . . . . . . . . . . . . . . . 15
- 2.2. Multihomed Machines. . . . . . . . . . . . . . . . . . 16
- 2.3. Serialized Registration File . . . . . . . . . . . . . 16
-
-
-
-
- Kempf & Guttman Informational [Page 1]
-
- RFC 2614 Service Location API June 1999
-
-
- 2.4. Processing Serialized Registration and Configuration
- Files . . . . . . . . . . . . . . . . . . . . . . . . 18
- 3. Binding Independent Implementation Considerations 18
- 3.1. Multithreading . . . . . . . . . . . . . . . . . . . . 18
- 3.2. Asynchronous and Incremental . . . . . . . . . . . . . 19
- 3.3. Type Checking for Service Types. . . . . . . . . . . . 19
- 3.4. Refreshing Registrations . . . . . . . . . . . . . . . 19
- 3.5. Configuration File Processing . . . . . . . . . . . . 19
- 3.6. Attribute Types . . . . . . . . . . . . . . . . . . . 20
- 3.7. Removal of Duplicates . . . . . . . . . . . . . . . . 20
- 3.8. Character Set Encoding . . . . . . . . . . . . . . . . 20
- 3.9. Error Semantics . . . . . . . . . . . . . . . . . . . 20
- 3.10. Modular Implementations . . . . . . . . . . . . . . . 24
- 3.11. Handling Special Service Types . . . . . . . . . . . . 24
- 3.12. Scope Discovery and Handling . . . . . . . . . . . . . 24
- 4. C Language Binding 25
- 4.1. Constant Types . . . . . . . . . . . . . . . . . . . . 26
- 4.1.1. URL Lifetimes. . . . . . . . . . . . . . . . . 26
- 4.1.2. Error Codes. . . . . . . . . . . . . . . . . . 26
- 4.1.3. SLPBoolean . . . . . . . . . . . . . . . . . . 27
- 4.2. Struct Types . . . . . . . . . . . . . . . . . . . . 28
- 4.2.1. SLPSrvURL . . . . . . . . . . . . . . . . . . 28
- 4.2.2. SLPHandle . . . . . . . . . . . . . . . . . . 29
- 4.3. Callbacks . . . . . . . . . . . . . . . . . . . . . . 29
- 4.3.1. SLPRegReport . . . . . . . . . . . . . . . . 30
- 4.3.2. SLPSrvTypeCallback . . . . . . . . . . . . . . 30
- 4.3.3. SLPSrvURLCallback . . . . . . . . . . . . . . 31
- 4.3.4. SLPAttrCallback . . . . . . . . . . . . . . . 33
- 4.4. Opening and Closing an SLPHandle . . . . . . . . . . . 34
- 4.4.1. SLPOpen. . . . . . . . . . . . . . . . . . . . 34
- 4.4.2. SLPClose . . . . . . . . . . . . . . . . . . . 35
- 4.5. Protocol API . . . . . . . . . . . . . . . . . . . . 36
- 4.5.1. SLPReg . . . . . . . . . . . . . . . . . . . . 36
- 4.5.2. SLPDereg . . . . . . . . . . . . . . . . . . . 37
- 4.5.3. SLPDelAttrs . . . . . . . . . . . . . . . . . 38
- 4.5.4. SLPFindSrvTypes. . . . . . . . . . . . . . . . 39
- 4.5.5. SLPFindSrvs . . . . . . . . . . . . . . . . . 41
- 4.5.6. SLPFindAttrs . . . . . . . . . . . . . . . . . 42
- 4.6. Miscellaneous Functions . . . . . . . . . . . . . . . 43
- 4.6.1. SLPGetRefreshInterval . . . . . . . . . . . . 44
- 4.6.2. SLPFindScopes . . . . . . . . . . . . . . . . 44
- 4.6.3. SLPParseSrvURL . . . . . . . . . . . . . . . . 45
- 4.6.4. SLPEscape . . . . . . . . . . . . . . . . . . 46
- 4.6.5. SLPUnescape . . . . . . . . . . . . . . . . . 47
- 4.6.6. SLPFree . . . . . . . . . . . . . . . . . . . 48
- 4.6.7. SLPGetProperty . . . . . . . . . . . . . . . . 48
- 4.6.8. SLPSetProperty . . . . . . . . . . . . . . . . 49
- 4.7. Implementation Notes . . . . . . . . . . . . . . . . 49
-
-
-
- Kempf & Guttman Informational [Page 2]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.7.1. Refreshing Registrations . . . . . . . . . . . 49
- 4.7.2. Syntax for String Parameters . . . . . . . . . 49
- 4.7.3. Client Side Syntax Checking . . . . . . . . . 50
- 4.7.4. System Properties . . . . . . . . . . . . . . 50
- 4.7.5. Memory Management . . . . . . . . . . . . . . 51
- 4.7.6. Asynchronous and Incremental Return Semantics. 51
- 4.8. Example. . . . . . . . . . . . . . . . . . . . . . . . 52
- 5. Java Language Binding 56
- 5.1. Introduction . . . . . . . . . . . . . . . . . . . . . 56
- 5.2. Exceptions and Errors . . . . . . . . . . . . . . . . 56
- 5.2.1. Class ServiceLocationException . . . . . . . . 57
- 5.3. Basic Data Structures . . . . . . . . . . . . . . . . 58
- 5.3.1. Interface ServiceLocationEnumeration . . . . . 58
- 5.3.2. Class ServiceLocationAttribute . . . . . . . 58
- 5.3.3. Class ServiceType . . . . . . . . . . . . . . 61
- 5.3.4. Class ServiceURL . . . . . . . . . . . . . . 63
- 5.4. SLP Access Interfaces . . . . . . . . . . . . . . . . 67
- 5.4.1. Interface Advertiser . . . . . . . . . . . . . 67
- 5.4.2. Interface Locator . . . . . . . . . . . . . . 69
- 5.5. The Service Location Manager . . . . . . . . . . . . . 72
- 5.5.1. Class ServiceLocationManager . . . . . . . . . 72
- 5.6. Service Template Introspection . . . . . . . . . . . . 74
- 5.6.1. Abstract Class TemplateRegistry . . . . . . . 74
- 5.6.2. Interface ServiceLocationAttributeVerifier . . 77
- 5.6.3. Interface ServiceLocationAttributeDescriptor . 79
- 5.7. Implementation Notes . . . . . . . . . . . . . . . . . 81
- 5.7.1. Refreshing Registrations . . . . . . . . . . . 81
- 5.7.2. Parsing Alternate Transports in ServiceURL . . 81
- 5.7.3. String Attribute Values . . . . . . . . . . . 82
- 5.7.4. Client Side Syntax Checking. . . . . . . . . . 82
- 5.7.5. Language Locale Handling . . . . . . . . . . . 82
- 5.7.6. Setting SLP System Properties. . . . . . . . . 83
- 5.7.7. Multithreading . . . . . . . . . . . . . . . . 83
- 5.7.8. Modular Implementations . . . . . . . . . . . 83
- 5.7.9. Asynchronous and Incremental Return Semantics. 84
- 5.8. Example. . . . . . . . . . . . . . . . . . . . . . . . 85
- 6. Internationalization Considerations 87
- 6.1. service URL. . . . . . . . . . . . . . . . . . . . . . 87
- 6.2. Character Set Encoding . . . . . . . . . . . . . . . . 87
- 6.3. Language Tagging . . . . . . . . . . . . . . . . . . 88
- 7. Security Considerations 88
- 8. Acknowledgements 88
- 9. References 89
- 10. Authors' Addresses 90
- 11. Full Copyright Statement 91
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 3]
-
- RFC 2614 Service Location API June 1999
-
-
- 1. Introduction
-
- The Service Location API is designed for standardized access to the
- Service Location Protocol (SLP). The APIs allow client and service
- programs to be be written or modified in a very simple manner to
- provide dynamic service discovery and selection. Bindings in the C
- and Java languages are defined in this document. In addition,
- standardized formats for configuration files and for serialized
- registration files are presented. These files allow SLP agents to
- configure network parameters, to register legacy services that have
- not been SLP enabled, and to portably exchange registration
- databases.
-
- 1.1. Goals
-
- The overall goal of the API is to enable source portability of
- applications that use the API between different implementations of
- SLP. The result should facilitate the adoption of SLP, and conversion
- of clients and service programs to SLP.
-
- The goals of the C binding are to create a minimal but complete
- access to the functionality of the SLP protocol, allowing for simple
- memory management and limited code size.
-
- The Java API provides for modular implementations (where unneeded
- features can be omitted) and an object oriented interface to the
- complete set of SLP data and functionality.
-
- The standardized configuration file and serialized file formats
- provide a simple syntax with complete functional coverage of the
- protocol, but without system dependent properties and secure
- information.
-
- 1.2. Terminology
-
- 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 RFC 2119 [1].
-
- Service Location Protocol (SLP)
-
- The underlying protocol allowing dynamic and scalable service
- discovery. This protocol is specified in the Service Location
- Protocol Version 2 [7].
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 4]
-
- RFC 2614 Service Location API June 1999
-
-
- SLP framework
-
- When a 'Service Location framework' is mentioned, it refers to
- both the SLP implementation and interface implementation; i.e.
- whatever provides the SLP functionality to user level programs.
- This includes remote agents.
-
- Directory Agent (DA)
-
- A service that automatically gathers service advertisements
- from SAs in order to provide them to UAs.
-
- User Agent (UA)
-
- This is the Service Location process or library that allows SLP
- requests to be made on behalf of a client process. UAs
- automatically direct requests to DAs when they exist. In their
- absence, UAs make requests to SAs.
-
- Service Agent (SA)
-
- This is the Service Location process or library that allows
- service software to register and deregister itself with the SLP
- framework. SAs respond to UA service requests, detect DAs and
- register service advertisements with them.
-
- SA Server
-
- Many operating system platforms only allow a single process to
- listen on a particular port number. Since SAs are required to
- listen on a multicast address for SLP service requests,
- implementations of the SLP framework on such platforms that
- want to support multiple SAs on one machine need to arrange for
- a single process to do the listening while the advertising SAs
- communicate with that process through another mechanism. The
- single listening process is called an SA server. SA servers
- share many characteristics with DAs, but they are not the same.
-
- Service Advertisement
-
- A URL possibly combined with service attributes. These are
- made available to UAs by SAs, either directly or via a DA.
-
- Locale
-
- The language localization that applies to strings passed into
- or returned from the SLP API. The Locale is expressed using a
- Language Tag [6]. All attribute strings are associated with a
-
-
-
- Kempf & Guttman Informational [Page 5]
-
- RFC 2614 Service Location API June 1999
-
-
- particular locale. The locale is completely orthogonal to the
- ANSI C locale. The SLP locale is mapped into the Java locale
- in the Java API.
-
- Service Template
-
- A document that describes the syntax of the URL for a given
- service type and a definition of all service attributes
- including the meaning, defaults, and constraints on values the
- attributes may take. See [8] for more information on service
- templates.
-
- The service: URL
-
- A service of a particular type announces its availability with
- a service: URL that includes its service access point (domain
- name or IP address, and possibly its port number) and
- optionally basic configuration parameters. The syntax of the
- service: URL is defined in the service template. Other URL's
- can be used in service advertisements if desired.
-
- Service Attributes
-
- The attributes associated with a given service. The values
- that can be assigned to service attributes are defined by the
- service template.
-
- Scope
-
- A string used to control the availability of service
- advertisements. Every SLP Agent is configured with one or more
- scope strings. Scopes are assigned by site administrators to
- group services for many purposes, but chiefly as a means of
- scalability. DAs store only services advertised having a scope
- string matching the scopes with which they are configured.
-
- Naming Authority (NA)
-
- This is a 'suffix' to the service type string. It completely
- changes the meaning of the service type. NAs are used for
- private definitions of well known Service Types and
- experimental Service Type extensions. The default NA is
- "IANA", which must not be explicitly included. Service types
- with the IANA naming authority are registered with the Internet
- Assigned Numbers Authority (see [8] for more information on the
- registration procedure).
-
-
-
-
-
- Kempf & Guttman Informational [Page 6]
-
- RFC 2614 Service Location API June 1999
-
-
- 2. File Formats
-
- This section describes the configuration and serialized registration
- file formats. Both files are defined in the UTF-8 character set [3].
-
- Attribute tags and values in the serialized registration file require
- SLP reserved characters to be escaped. The SLP reserved characters
- are `(', `)', `,', `\', `!', `<', `=', `>', `~' and control
- characters (characters with UTF codes less than 0x0020 and the
- character 0x007f, which is US-ASCII DEL). The escapes are formed
- exactly as for the wire protocol, i.e. a backslash followed by two
- hex digits representing the character. For example, the escape for '
- ,' is '\2c'. In addition, the characters `\n', `\r', `\t', and `_'
- are prohibited from attribute tags by the SLP wire syntax grammar.
- [7]
-
- In serialized registration files, escaped strings beginning with
- `\ff`, an encoding for a nonUTF-8 character, are treated as opaques.
- Exactly as in the wire protocol, syntactically correct opaque
- encodings consist of a string beginning with `\ff` and containing
- *only* escaped characters that are transformed to bytes. Such
- strings are only syntactically correct in the serialized registration
- file as attribute values. In other cases, whenever an escape is
- encountered and the character is not an SLP reserved character, an
- error is signaled.
-
- Escaped characters in URLs in serialized registration files use the
- URL escape convention. [2].
-
- Property names and values in the configuration file have a few
- reserved characters that are involved in file's lexical definition.
- The characters '.' and '=' are reserved in property names and must
- be escape. The characters ',', '(', and ')' are reserved in property
- values and must be escaped. In addition, scope names in the
- net.slp.useScopes property use the SLP wire format escape convention
- for SLP reserved characters. This simplifies implementation, since
- the same code can be used to unescape scope names as is used in
- processing the serialized registration file or for formatting wire
- messages.
-
- On platforms that only support US-ASCII and not UTF-8, the upper bit
- of bytes incoming from the configuration and registration files
- determines whether the character is US-ASCII or not US-ASCII.
- According to the standard UTF-8 encoding, the upper bit is zero if
- the character is US-ASCII and one if the character is multibyte and
- thus not US-ASCII. Platforms without intrinsic UTF-8 support are
- required to parse the multibyte character and store it in an
- appropriate internal format. Support for UTF-8 is required to
-
-
-
- Kempf & Guttman Informational [Page 7]
-
- RFC 2614 Service Location API June 1999
-
-
- implement the SLP protocol (see [7]), and can therefore be used in
- file processing as well.
-
- The location and name of the configuration file is system-dependent,
- but implementations of the API are encouraged to locate it together
- with other configuration files and name it consistently.
-
- 2.1. Configuration File Format
-
- The configuration file format consists of a newline delimited list of
- zero or more property definitions. Each property definition
- corresponds to a particular configurable SLP, network, or other
- parameter in one or more of the three SLP agents. The file format
- grammar in ABNF [5] syntax is:
-
- config-file = line-list
- line-list = line / line line-list
- line = property-line / comment-line
- comment-line = ( "#" / ";" ) 1*allchar newline
- property-line = property newline
- property = tag "=" value-list
- tag = prop / prop "." tag
- prop = 1*tagchar
- value-list = value / value "," value-list
- value = int / bool /
- "(" value-list ")" / string
- int = 1*DIGIT
- bool = "true" / "false" / "TRUE" / "FALSE"
- newline = CR / ( CRLF )
- string = 1*stringchar
- tagchar = DIGIT / ALPHA / tother / escape
- tother = %x21-%x2d / %x2f /
- %x3a / %x3c-%x40 /
- %x5b-%x60 / %7b-%7e
- ; i.e., all characters except `.',
- ; and `='.
- stringchar = DIGIT / ALPHA / sother / escape
- sother = %x21-%x29 / %x2a-%x2b /
- %x2d-%x2f / %x3a-%x40 /
- %x5b-%x60 / %7b-%7e
- ; i.e., all characters except `,'
- allchar = DIGIT / ALPHA / HTAB / SP
- escape = "\" HEXDIG HEXDIG
- ; Used for reserved characters
-
- With the exception of net.slp.useScopes, net.slp.DAAddresses, and
- net.slp.isBroadcastOnly, all other properties can be changed through
- property accessors in the C and Java APIs. The property accessors
-
-
-
- Kempf & Guttman Informational [Page 8]
-
- RFC 2614 Service Location API June 1999
-
-
- only change the property values in the running agent program and do
- not affect the values in the configuration file. The
- net.slp.useScopes and net.slp.DAAddresses properties are read-only
- because they control the agent's view of the scopes and DAs and are
- therefore critical to the function of the API scope discovery
- algorithm. Attempts to modify them are unlikely to yield productive
- results, and could harm the ability of the agent to find scopes and
- use DAs. The net.slp.isBroadcastOnly property is read-only because
- the API library needs to configure networking upon start up and
- changing this property might invalidate the configuration. Whether
- the local network uses broadcast or multicast is not likely to change
- during the course of the program's execution.
-
- The properties break down into the following subsections describes an
- area and its properties.
-
- 2.1.1. DA configuration
-
- Important configuration properties for DAs are included in this
- section. These are:
-
- net.slp.isDA
-
- A boolean indicating if the SLP server is to act as a DA. If
- false, not run as a DA. Default is false.
-
- net.slp.DAHeartBeat
-
- A 32 bit integer giving the number of seconds for the
- DA heartbeat. Default is 3 hours (10800 seconds). This
- property corresponds to the protocol specification parameter
- CONFIG_DA_BEAT [7]. Ignored if isDA is false.
-
- net.slp.DAAttributes
-
- A comma-separated list of parenthesized attribute/value list
- pairs that the DA must advertise in DAAdverts. The property
- must be in the SLP attribute list wire format, including
- escapes for reserved characters. [7]
-
- 2.1.2. Static Scope Configuration
-
- These properties allow various aspects of scope handling to be
- configured.
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 9]
-
- RFC 2614 Service Location API June 1999
-
-
- net.slp.useScopes
-
- A value-list of strings indicating the only scopes a UA or SA
- is allowed to use when making requests or registering, or the
- scopes a DA must support. If not present for the DA and SA,
- then in the absence of scope information from DHCP, the default
- scope "DEFAULT" is used. If not present for the UA, and there
- is no scope information available from DHCP, then the user
- scoping model is in force. Active and passive DA discovery
- or SA discovery are used for scope discovery, and the scope
- "DEFAULT" is used if no other information is available. If a
- DA or SA gets another scope in a request, a SCOPE_NOT_SUPPORTED
- error should be returned, unless the request was multicast, in
- which case it should be dropped. If a DA gets another scope in
- a registration, a SCOPE_NOT_SUPPORTED error must be returned.
- Unlike other properties, this property is "read-only", so
- attempts to change it after the configuration file has been
- read are ignored. See Section 3.12 for the algorithm the API
- uses in determining what scope information to present.
-
- net.slp.DAAddresses
-
- A value-list of IP addresses or DNS resolvable host names
- giving the SLPv2 DAs to use for statically configured UAs and
- SAs. Ignored by DAs (unless the DA is also an SA server).
- Default is none. Unlike other properties, this property is
- "read-only", so attempts to change it after the configuration
- file has been read are ignored.
-
- The following grammar describes the property:
-
-
- addr-list = addr / addr "," addr-list
- addr = fqdn / hostnumber
- fqdn = ALPHA / ALPHA *[ anum / "-" ] anum
- anum = ALPHA / DIGIT
- hostnumber = 1*3DIGIT 3("." 1*3DIGIT)
-
-
- An example is:
-
-
- sawah,mandi,sambal
-
-
- IP addresses can be used instead of host names in networks
- where DNS is not deployed, but network administrators are
- reminded that using IP addresses will complicate machine
-
-
-
- Kempf & Guttman Informational [Page 10]
-
- RFC 2614 Service Location API June 1999
-
-
- renumbering, since the SLP configuration property files
- in statically configured networks will have to be changed.
- Similarly, if host names are used, implementors must be careful
- that a name service is available before SLP starts, in other
- words, SLP cannot be used to find the name service.
-
- 2.1.3. Tracing and Logging
-
- This section allows tracing and logging information to be printed by
- the various agents.
-
- net.slp.traceDATraffic
-
- A boolean controlling printing of messages about traffic with
- DAs. Default is false.
-
- net.slp.traceMsg
-
- A boolean controlling printing of details on SLP messages.
- The fields in all incoming messages and outgoing replies are
- printed. Default is false.
-
- net.slp.traceDrop
-
- A boolean controlling printing details when a SLP message is
- dropped for any reason. Default is false.
-
- net.slp.traceReg
-
- A boolean controlling dumps of all registered services upon
- registration and deregistration. If true, the contents
- of the DA or SA server are dumped after a registration or
- deregistration occurs. Default is false.
-
- 2.1.4. Serialized Proxy Registrations
-
- These properties control the reading and writing of serialized
- registrations.
-
- net.slp.serializedRegURL
-
- A string containing a URL pointing to a document containing
- serialized registrations that should be processed when the DA
- or SA server starts up. Default is none.
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 11]
-
- RFC 2614 Service Location API June 1999
-
-
- 2.1.5. Network Configuration Properties
-
- The properties in this section allow various network configuration
- properties to be set.
-
- net.slp.isBroadcastOnly
-
- A boolean indicating if broadcast should be used instead of
- multicast. Like the net.slp.useScopes and net.slp.DAAddresses
- properties, this property is "read-only", so attempts to change
- it after the configuration file has been read are ignored.
- Default is false.
-
- net.slp.passiveDADetection
-
- A boolean indicating whether passive DA detection should be
- used. Default is true.
-
- net.slp.multicastTTL
-
- A positive integer less than or equal to 255, giving the
- multicast TTL. Default is 255.
-
- net.slp.DAActiveDiscoveryInterval
-
- A 16 bit positive integer giving the number of seconds
- between DA active discovery queries. Default is 900 seconds
- (15 minutes). This property corresponds to the protocol
- specification parameter CONFIG_DA_FIND [7]. If the property is
- set to zero, active discovery is turned off. This is useful
- when the DAs available are explicitly restricted to those
- obtained from DHCP or the net.slp.DAAddresses property.
-
- net.slp.multicastMaximumWait
-
- A 32 bit integer giving the maximum amount of time to perform
- multicast, in milliseconds. Default is 15000 ms (15 sec.).
- This property corresponds to the CONFIG_MC_MAX parameter in the
- protocol specification [7].
-
- net.slp.multicastTimeouts
-
- A value-list of 32 bit integers used as timeouts, in
- milliseconds, to implement the multicast convergence
- algorithm. Each value specifies the time to wait before
- sending the next request, or until nothing new has
- been learned from two successive requests. Default
- is: 3000,3000,3000,3000,3000. In a fast network the
-
-
-
- Kempf & Guttman Informational [Page 12]
-
- RFC 2614 Service Location API June 1999
-
-
- aggressive values of 1000,1250,1500,2000,4000 allow better
- performance. This property corresponds to the CONFIG_MC_RETRY
- parameter in the protocol specification [7]. Note that the
- net.slp.DADiscoveryTimeouts property must be used for active DA
- discovery.
-
- net.slp.DADiscoveryTimeouts
-
- A value-list of 32 bit integers used as timeouts, in
- milliseconds, to implement the multicast convergence algorithm
- during active DA discovery. Each value specifies the time
- to wait before sending the next request, or until nothing
- new has been learned from two successive requests. This
- property corresponds to the protocol specification parameter
- CONFIG_RETRY [7]. Default is: 2000,2000,2000,2000,3000,4000.
-
- net.slp.datagramTimeouts
-
- A value-list of 32 bit integers used as timeouts, in
- milliseconds, to implement unicast datagram transmission to
- DAs. The nth value gives the time to block waiting for a reply
- on the nth try to contact the DA. The sum of these values is
- the protocol specification property CONFIG_RETRY_MAX [7].
-
- net.slp.randomWaitBound
-
- A 32 bit integer giving the maximum value for all random
- wait parameters, in milliseconds. Default is 1000 (1
- sec.). This value corresponds to the protocol specification
- parameters CONFIG_START_WAIT, CONFIG_REG_PASSIVE, and
- CONFIG_REG_ACTIVE [7].
-
- net.slp.MTU
-
- A 16 bit integer giving the network packet MTU, in bytes.
- This is the maximum size of any datagram to send, but the
- implementation might receive a larger datagram. The maximum
- size includes IP, and UDP or TCP headers. Default is 1400.
-
- net.slp.interfaces
-
- Value-list of strings giving the IP addresses of network
- interfaces on which the DA or SA should listen on port 427 for
- multicast, unicast UDP, and TCP messages. Default is empty,
- i.e. use the default network interface. The grammar for this
- property is:
-
-
-
-
-
- Kempf & Guttman Informational [Page 13]
-
- RFC 2614 Service Location API June 1999
-
-
- addr-list = hostnumber / hostnumber "," addr-list
- hostnumber = 1*3DIGIT 3("." 1*3DIGIT)
-
-
- An example is:
-
-
- 195.42.42.42,195.42.142.1,195.42.120.1
-
-
- The example machine has three interfaces on which the DA should
- listen.
-
- Note that since this property only takes IP addresses, it will
- need to be changed if the network is renumbered.
-
- 2.1.6. SA Configuration
-
- This section contains configuration properties for the SA. These
- properties are typically set programmatically by the SA, since they
- are specific to each SA.
-
- net.slp.SAAttributes
-
- A comma-separated list of parenthesized attribute/value list
- pairs that the SA must advertise in SAAdverts. The property
- must be in the SLP attribute list wire format, including
- escapes for reserved characters. [7]
-
- 2.1.7. UA Configuration
-
- This section contains configuration properties for the UA. These
- properties can be set either programmatically by the UA or in the
- configuration file.
-
- net.slp.locale
-
- A RFC 1766 Language Tag [6] for the language locale. Setting
- this property causes the property value to become the default
- locale for SLP messages. Default is "en". This property is
- also used for SA and DA configuration.
-
- net.slp.maxResults
-
- A 32 bit integer giving the maximum number of results to
- accumulate and return for a synchronous request before the
- timeout, or the maximum number of results to return through a
- callback if the request results are reported asynchronously.
-
-
-
- Kempf & Guttman Informational [Page 14]
-
- RFC 2614 Service Location API June 1999
-
-
- Positive integers and -1 are legal values. If -1, indicates
- that all results should be returned. Default value is -1.
-
- DAs and SAs always return all results that match the
- request. This configuration value applies only to UAs, that
- filter incoming results and only return as many values as
- net.slp.maxResults indicates.
-
- net.slp.typeHint
-
- A value-list of service type names. In the absence of any
- DAs, UAs perform SA discovery for finding scopes. These SA
- discovery requests may contain a request for service types as
- an attribute.
-
- The API implementation will use the service type names supplied
- by this property to discover only those SAs (and their scopes)
- which support the desired service type or types. For example,
- if net.slp.typeHint is set to "service:imap,service:pop3" then
- SA discovery requests will include the search filter:
-
-
- (|(service-type=service:imap)(service-type=service:pop3))
-
-
- The API library can also use unicast to contact the discovered
- SAs for subsequent requests for these service types, to
- optimize network access.
-
- 2.1.8. Security
-
- The property in this section allows security for all agents to be set
- on or off. When the property is true, then the agent must include
- security information on all SLP messages transacted by that agent.
- Since security policy must be set network wide to be effective, a
- single property controls security for all agents. Key management and
- management of SLP SPI strings [7] are implementation and policy
- dependent.
-
- net.slp.securityEnabled
-
- A boolean indicating whether the agent should enable
- security for URLs, attribute lists, DAAdverts, and SAAdverts.
- Each agent is responsible for interpreting the property
- appropriately. Default is false.
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 15]
-
- RFC 2614 Service Location API June 1999
-
-
- 2.2. Multihomed Machines
-
- On multihomed machines, the bandwidth and latency characteristics on
- different network interfaces may differ considerably, to the point
- where different configuration properties are necessary to achieve
- optimal performance. The net.slp.interfaces property indicates which
- network interfaces are SLP enabled. An API library implementation
- may support configuration customization on a per network interface
- basis by allowing the interface IP address to be appended to the
- property name. In that case, the values of the property are only
- used for that particular interface, the generic property (or defaults
- if no generic property is set) applies to all others.
-
- For example, if a configuration has the following properties:
-
-
- net.slp.interfaces=125.196.42.41,125.196.42.42,125.196.42.43
- net.slp.multicastTTL.125.196.42.42=1
-
-
- then the network interface on subnet 42 is restricted to a TTL of 1,
- while the interfaces on the other subnets have the default multicast
- radius, 255.
-
- The net.slp.interfaces property must only be set if there is no
- routing between the interfaces. If the property is set, the DA (if
- any) and SAs should advertise with the IP address or host name
- appropriate to the interface on the interfaces in the list. If
- packets are routed between the interfaces, then the DA and SAs should
- only advertise on the default interface. The property should also be
- set if broadcast is used rather than multicast on the subnets
- connected to the interfaces. Note that even if unicast packets are
- not routed between the interfaces, multicast may be routed through
- another router. The danger in listening for multicast on multiple
- interfaces when multicast packets are routed is that the DA or SA may
- receive the same multicast request via more than one interface.
- Since the IP address is different on each interface, the DA or SA
- cannot identify the request as having already being answered via the
- previous responder's list. The requesting agent will end up getting
- URLs that refer to the same DA or service but have different
- addresses or host names.
-
- 2.3. Serialized Registration File
-
- The serialized registration file contains a group of registrations
- that a DA or SA server (if one exists) registers when it starts up.
- These registrations are primarily for older service programs that do
- not internally support SLP and cannot be converted, and for portably
-
-
-
- Kempf & Guttman Informational [Page 16]
-
- RFC 2614 Service Location API June 1999
-
-
- exchanging registrations between SLP implementations. The character
- encoding of the registrations is required to be UTF-8.
-
- The syntax of the serialized registration file, in ABNF format [5],
- is as follows:
-
-
- ser-file = reg-list
- reg-list = reg / reg reg-list
- reg = creg / ser-reg
- creg = comment-line ser-reg
- comment-line = ( "#" / ";" ) 1*allchar newline
- ser-reg = url-props [slist] [attr-list] newline
- url-props = surl "," lang "," ltime [ "," type ] newline
- surl = ;The registration's URL. See
- ; [8] for syntax.
- lang = 1*8ALPHA [ "-" 1*8ALPHA ]
- ;RFC 1766 Language Tag see [6].
- ltime = 1*5DIGIT
- ; A positive 16-bit integer
- ; giving the lifetime
- ; of the registration.
- type = ; The service type name, see [7]
- ; and [8] for syntax.
- slist = "scopes" "=" scope-list newline
- scope-list = scope-name / scope-name "," scope-list
- scope = ; See grammar of [7] for
- ; scope-name syntax.
- attr-list = attr-def / attr-def attr-list
- attr-def = ( attr / keyword ) newline
- keyword = attr-id
- attr = attr-id "=" attr-val-list
- attr-id = ;Attribute id, see [7] for syntax.
- attr-val-list = attr-val / attr-val "," attr-val-list
- attr-val = ;Attribute value, see [7] for syntax.
- allchar = char / WSP
- char = DIGIT / ALPHA / other
- other = %x21-%x2f / %x3a-%x40 /
- %x5b-%x60 / %7b-%7e
- ; All printable, nonwhitespace US-ASCII
- ; characters.
- newline = CR / ( CRLF )
-
-
- The syntax for scope names, attribute tags, and attribute values
- requires escapes for special characters as specified in [7]. DAs and
- SA servers that process serialized registrations must handle them
- exactly as if they were registered by an SA. In the url-props
-
-
-
- Kempf & Guttman Informational [Page 17]
-
- RFC 2614 Service Location API June 1999
-
-
- production, the type token is optional. If the type token is present
- for a service: URL, a warning is signaled and the type name is
- ignored. If the maximum lifetime is specified (65535 sec.), the
- registration is taken to be permanent, and is continually refreshed
- by the DA or SA server until it exits. Scopes can be included in a
- registration by including an attribute definition with tag "scopes"
- followed by a comma separated list of scope names immediately after
- the url-props production. If the optional scope list is present, the
- registrations are made in the indicated scopes; otherwise, they are
- registered in the scopes with which the DA or SA server was
- configured through the net.slp.useScopes property.
-
- If the scope list contains scopes that are not in the
- net.slp.useScopes property (provided that property is set) or are not
- specified by DHCP, the API library should reject the registration and
- issue a warning message.
-
- 2.4. Processing Serialized Registration and Configuration Files
-
- Implementations are encouraged to make processing of configuration
- and serialized files as transparent as possible to clients of the
- API. At the latest, errors must be caught when the relevant
- configuration item is used. At the earliest, errors may be caught
- when the relevant file is loaded into the executing agent. Errors
- should be reported by logging to the appropriate platform logging
- file, error output, or log device, and the default value substituted.
- Serialized registration file entries should be caught and reported
- when the file is loaded.
-
- Configuration file loading must be complete prior to the initiation
- of the first networking connection. Serialized registration must be
- complete before the DA accepts the first network request.
-
- 3. Binding Independent Implementation Considerations
-
- This section discusses a number of implementation considerations
- independent of language binding, with language specific notes where
- applicable.
-
- 3.1. Multithreading
-
- Implementations of both the C and Java APIs are required to make API
- calls thread-safe. Access to data structures shared between threads
- must be co-ordinated to avoid corruption or invalid access. One way
- to achieve this goal is to allow only one thread at a time in the
- implementing library. Performance in such an implementation suffers,
- however. Therefore, where possible, implementations are encouraged
- to allow multiple threads within the SLP API library.
-
-
-
- Kempf & Guttman Informational [Page 18]
-
- RFC 2614 Service Location API June 1999
-
-
- 3.2. Asynchronous and Incremental
-
- The APIs are designed to encourage implementations supporting
- asynchronous and incremental client interaction. The goal is to
- allow large numbers of returned service URLs, service types, and
- attributes without requiring the allocation of huge chunks of memory.
- The particular design features to support this goal differ in the two
- language bindings.
-
- 3.3. Type Checking for Service Types
-
- Service templates [8] allow SLP registrations to be type checked for
- correctness. Implementations of the API are free to make use of
- service type information for type checking, but are not required to
- do so. If a type error occurs, the registration should terminate
- with TYPE_ERROR.
-
- 3.4. Refreshing Registrations
-
- SLP advertisements carry an explicit lifetime with them. After the
- lifetime expires, the DA flushes the registration from its cache. In
- some cases, an application may want to have the URL continue being
- registered for the entire time during which the application is
- executing. The API includes provision for clients to indicate
- whether they want URLs to be automatically refreshed.
- Implementations of the SA API must provide this automatic refreshing
- capability. Note that a client which uses this facility should
- explicitly deregister the service URL before exiting, since the API
- implementation may not be able to assure that the URL is deregistered
- when the application exits, although it will time out in the DA
- eventually.
-
- 3.5. Configuration File Processing
-
- DAs, SAs and UAs processing the configuration file, and DAs and SA
- servers processing the serialized registration file are required to
- log any errors using whatever underlying error mechanism is
- appropriate for the platform. Examples include writing error
- messages to the standard output, writing to a system logging device,
- or displaying the errors to a logging window. After the error is
- reported, the offending property must be set to the default and
- program execution continued. An agent MUST NOT fail if a file format
- error occurs.
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 19]
-
- RFC 2614 Service Location API June 1999
-
-
- 3.6. Attribute Types
-
- String encoded attribute values do not include explicit type
- information. All UA implementations and those SA and DA
- implementations that choose to support type checking should use the
- type rules described in [8] in order to convert from the string
- representation on the wire to an object typed appropriately.
-
- 3.7. Removal of Duplicates
-
- The UA implementation SHOULD always collate results to remove
- duplicates during synchronous operations and for the Java API. During
- asynchronous operation in C, the UA implementation SHOULD forgo
- duplicate elimination to reduce memory requirements in the library.
- This allows the API library to simply take the returned attribute
- value list strings, URL strings, or service type list strings and
- call the callback function with it, without any additional
- processing. Naturally, the burden of duplicate elimination is thrown
- onto the client in this case.
-
- 3.8. Character Set Encoding
-
- Character string parameters in the Java API are all represented in
- Unicode internally because that is the Java-supported character set.
- Characters buffer parameters in the C API are represented in UTF-8 to
- maintain maximum compatibility on platforms that only support US-
- ASCII and not UTF-8. API functions are still required to handle the
- full range of UTF-8 characters because the SLP protocol requires it,
- but the API implementation can represent the characters internally in
- any convenient way. On the wire, all characters are converted to
- UTF-8. Inside URLs, characters that are not allowed by URL syntax
- [2] must be escaped according to the URL escape character convention.
- Strings that are included in SLP messages may include SLP reserved
- characters and can be escaped by clients through convenience
- functions provided by the API. The character encoding used in escapes
- is UTF-8.
-
- Due to constraints in SLP, no string parameter passed to the C or
- Java API may exceed 64K bytes in length.
-
- 3.9. Error Semantics
-
- All errors encountered processing SLP messages should be logged. For
- synchronous calls, an error is only reported on a call if no
- successful replies were received from any SLP framework entity. If
- an error occurred among one of several successful replies, then the
- error should be logged and the successful replies returned. For
- asynchronous calls, an error occurring during correspondence with a
-
-
-
- Kempf & Guttman Informational [Page 20]
-
- RFC 2614 Service Location API June 1999
-
-
- particular remote SLP agent is reported through the first callback
- (in the C API) or enumeration method invocation (in the Java API)
- after the error occurs, which would normally report the results of
- the correspondence. This allows the callback or client code to
- determine whether the operation should be terminated or continue. In
- some cases, the error returned from the SLP framework may be fatal
- (SLP_PARSE_ERROR, etc.). In these cases, the API library terminates
- the operation.
-
- Both the Java and C APIs contain language specific error code
- mechanisms for returning error information. The names of the error
- codes are consistent between the two implementations, however.
-
- The following error codes are returned from a remote agent (DA or SA
- server):
-
- LANGUAGE_NOT_SUPPORTED
-
- No DA or SA has service advertisement or attribute information
- in the language requested, but at least one DA or SA indicated,
- via the LANGUAGE_NOT_SUPPORTED error code, that it might have
- information for that service in another language.
-
- PARSE_ERROR
-
- The SLP message was rejected by a remote SLP agent. The API
- returns this error only when no information was retrieved, and
- at least one SA or DA indicated a protocol error. The data
- supplied through the API may be malformed or a may have been
- damaged in transit.
-
- INVALID_REGISTRATION
-
- The API may return this error if an attempt to register a
- service was rejected by all DAs because of a malformed URL or
- attributes. SLP does not return the error if at least one DA
- accepted the registration.
-
- AUTHENTICATION_ABSENT
-
- If the SLP framework supports authentication, this error arises
- when the UA or SA failed to send an authenticator for requests
- or registrations in a protected scope.
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 21]
-
- RFC 2614 Service Location API June 1999
-
-
- INVALID_UPDATE
-
- An update for a non-existing registration was issued, or the
- update includes a service type or scope different than that in
- the initial registration, etc.
-
- The following errors result from interactions with remote agents or
- can occur locally:
-
- AUTHENTICATION_FAILED
-
- If the SLP framework supports authentication, this error arises
- when a authentication on an SLP message failed.
-
- SCOPE_NOT_SUPPORTED
-
- The API returns this error if the SA has been configured with
- net.slp.useScopes value-list of scopes and the SA request did
- not specify one or more of these allowable scopes, and no
- others. It may be returned by a DA or SA if the scope included
- in a request is not supported by the DA or SA.
-
- REFRESH_REJECTED
-
- The SA attempted to refresh a registration more frequently
- than the minimum refresh interval. The SA should call the
- appropriate API function to obtain the minimum refresh interval
- to use.
-
- The following errors are generated through a program interacting with
- the API implementation. They do not involve a remote SLP agent.
-
- NOT_IMPLEMENTED
-
- If an unimplemented feature is used, this error is returned.
-
- NETWORK_INIT_FAILED
-
- If the network cannot initialize properly, this error is
- returned.
-
- NETWORK_TIMED_OUT
-
- When no reply can be obtained in the time specified by the
- configured timeout interval for a unicast request, this error
- is returned.
-
-
-
-
-
- Kempf & Guttman Informational [Page 22]
-
- RFC 2614 Service Location API June 1999
-
-
- NETWORK_ERROR
-
- The failure of networking during normal operations causes this
- error to be returned.
-
- BUFFER_OVERFLOW
-
- An outgoing request overflowed the maximum network MTU size.
- The request should be reduced in size or broken into pieces and
- tried again.
-
- MEMORY_ALLOC_FAILED
-
- If the API fails to allocate memory, the operation is aborted
- and returns this.
-
- PARAMETER_BAD
-
- If a parameter passed into an interface is bad, this error is
- returned.
-
- INTERNAL_SYSTEM_ERROR
-
- A basic failure of the API causes this error to be returned.
- This occurs when a system call or library fails. The operation
- could not recover.
-
- HANDLE_IN_USE
-
- In the C API, callback functions are not permitted to
- recursively call into the API on the same SLPHandle, either
- directly or indirectly. If an attempt is made to do so, this
- error is returned from the called API function.
-
- TYPE_ERROR
-
- If the API supports type checking of registrations against
- service type templates, this error can arise if the attributes
- in a registration do not match the service type template for
- the service.
-
- Some error codes are handled differently in the Java API. These
- differences are discussed in Section 5.
-
- The SLP protocol errors OPTION_NOT_UNDERSTOOD, VERSION_NOT_SUPPORTED,
- INTERNAL_ERROR, MSG_NOT_SUPPORTED, AUTHENTICATON_UNKNOWN, and
- DA_BUSY_NOW should be handled internally and not surfaced to clients
- through the API.
-
-
-
- Kempf & Guttman Informational [Page 23]
-
- RFC 2614 Service Location API June 1999
-
-
- 3.10. Modular Implementations
-
- Subset implementations that do not support the full range of
- functionality are required to nevertheless support every interface in
- order to maintain link compatibility between compliant API
- implementations and applications. If a particular operation is not
- supported, a NOT_IMPLEMENTED error should be returned. The Java API
- has some additional conventions for handling subsets. Applications
- that are expected to run on a wide variety of platforms should be
- prepared for subset API implementations by checking returned error
- codes.
-
- 3.11. Handling Special Service Types
-
- The service types service:directory-agent and service:service-agent
- are used internally in the SLP framework to discover DAs and SAs.
- The mechanism of DA and SA discovery is not normally exposed to the
- API client; however, the client may have interest in discovering DAs
- and SAs independently of their role in discovering other services.
- For example, a network management application may want to determine
- which machines are running SLP DAs. To facilitate that, API
- implementations must handle requests to find services and attributes
- for these two service types so that API clients obtain the
- information they expect.
-
- In particular, if the UA is using a DA, SrvRqst and AttrRqst for
- these service types must be multicast and not unicast to the DA, as
- is the case for other service types. If the requests are not
- multicast, the DA will respond with an empty reply to a request for
- services of type service:service-agent and with its URL only to a
- request for services of type service:directory-agent. The UA would
- therefore not obtain a complete picture of the available DAs and SAs.
-
- 3.12. Scope Discovery and Handling
-
- Both APIs contain an operation to obtain a list of currently known
- scope names. This scope information comes from a variety of places:
- DHCP, the net.slp.useScopes property, unicast to DAs configured via
- DHCP or the net.slp.DAAddresses property, and active and passive
- discovery.
-
- The API is required to be implemented in a way that re-enforces the
- administrative and user scoping models described in [7]. SA clients
- only support the administrative scoping model. SAs must know a
- priori what DAs they need to register with since there is typically
- no human intervention in scope selection for SAs. UAs must support
- both administrative and user scoping because an application may
- require human intervention in scope selection.
-
-
-
- Kempf & Guttman Informational [Page 24]
-
- RFC 2614 Service Location API June 1999
-
-
- API implementations are required to support administrative scoping in
- the following way. Scopes configured by DHCP and scopes of DAs
- configured by DHCP have first priority (in that order) and must be
- returned if they are available. The net.slp.useScopes property has
- second priority, and scopes discovered through the net.slp.useScopes
- property must be returned if this property is set and there are no
- scopes available from DHCP. If scopes are not available from either
- of these sources and the net.slp.DAAddresses property is set, then
- the scopes available from the configured DAs must be returned. Note
- that if both DAs and scopes are configured, the scopes of the
- configured DAs must match the configured scope list; otherwise and
- error is signaled and agent execution is terminated. If no
- configured scope information is available, then an SA client has
- default scope, "DEFAULT", and a UA client employs user scoping.
-
- User scoping is supported in the following way. Scopes discovered
- from active DA discovery, and from passive DA discovery all must be
- returned. If no information is available from active and passive DA
- discovery, then the API library may perform SA discovery, using the
- service types in the net.slp.typeHint property to limit the search to
- SAs supporting particular service types. If no net.slp.typeHint
- property is set, the UA may perform SA discovery without any service
- type query. In the absence of any of the above sources of
- information, the API must return the default scope, "DEFAULT". Note
- that the API must always return some scope information.
-
- SLP requires that SAs must perform their operations in all scopes
- currently known to them. [7]. The API enforces this constraint by
- not requiring the API client to supply any scopes as parameters to
- API operations. The API library must obtain all currently known
- scopes and use them in SA operations. UA API clients should use a
- scope obtained through one of the API operations for finding scopes.
- Any other scope name may result in a SCOPE_NOT_SUPPORTED error from a
- remote agent. The UA API library can optionally check the scope and
- return the error without contacting a remote agent.
-
- 4. C Language Binding
-
- The C language binding presents a minimal overhead implementation
- that maps directly into the protocol. There is one C language
- function per protocol request, with the exception of the SLPDereg()
- and SLPDelAttrs() functions, which map into different uses of the SLP
- deregister request. Parameters are for the most part character
- buffers. Memory management is kept simple by having the client
- allocate most memory and requiring that client callback functions
- copy incoming parameters into memory allocated by the client code.
- Any memory returned directly from the API functions is deallocated
- using the SLPFree() function.
-
-
-
- Kempf & Guttman Informational [Page 25]
-
- RFC 2614 Service Location API June 1999
-
-
- To conform with standard C practice, all character strings passed to
- and returned through the API are null terminated, even though the SLP
- protocol does not use null terminated strings. Strings passed as
- parameters are UTF-8 but they may still be passed as a C string (a
- null terminated sequence of bytes.) Escaped characters must be
- encoded by the API client as UTF-8. In the common case of US-ASCII,
- the usual one byte per character C strings work. API functions
- assist in escaping and unescaping strings.
-
- Unless otherwise noted, parameters to API functions and callbacks are
- non-NULL. Some parameters may have other restrictions. If any
- parameter fails to satisfy the restrictions on its value, the
- operation returns a PARAMETER_BAD error.
-
- 4.1. Constant Types
-
- 4.1.1. URL Lifetimes
-
- 4.1.1.1. Synopsis
-
-
- typedef enum {
- SLP_LIFETIME_DEFAULT = 10800,
- SLP_LIFETIME_MAXIMUM = 65535
- } SLPURLLifetime;
-
-
- 4.1.1.2. Description
-
- The SLPURLLifetime enum type contains URL lifetime values, in
- seconds, that are frequently used. SLP_LIFETIME_DEFAULT is 3 hours,
- while SLP_LIFETIME_MAXIMUM is about 18 hours and corresponds to the
- maximum size of the lifetime field in SLP messages.
-
- 4.1.2. Error Codes
-
- 4.1.2.1. Synopsis
-
-
- typedef enum {
- SLP_LAST_CALL = 1,
- SLP_OK = 0,
- SLP_LANGUAGE_NOT_SUPPORTED = -1,
- SLP_PARSE_ERROR = -2,
- SLP_INVALID_REGISTRATION = -3,
- SLP_SCOPE_NOT_SUPPORTED = -4,
- SLP_AUTHENTICATION_ABSENT = -6,
- SLP_AUTHENTICATION_FAILED = -7,
-
-
-
- Kempf & Guttman Informational [Page 26]
-
- RFC 2614 Service Location API June 1999
-
-
- SLP_INVALID_UPDATE = -13,
- SLP_REFRESH_REJECTED = -15,
- SLP_NOT_IMPLEMENTED = -17,
- SLP_BUFFER_OVERFLOW = -18,
- SLP_NETWORK_TIMED_OUT = -19,
- SLP_NETWORK_INIT_FAILED = -20,
- SLP_MEMORY_ALLOC_FAILED = -21,
- SLP_PARAMETER_BAD = -22,
- SLP_NETWORK_ERROR = -23,
- SLP_INTERNAL_SYSTEM_ERROR = -24,
- SLP_HANDLE_IN_USE = -25,
- SLP_TYPE_ERROR = -26
- } SLPError ;
-
-
- 4.1.2.2. Description
-
- The SLPError enum contains error codes that are returned from API
- functions.
-
- The SLP_OK code indicates that the no error occurred during the
- operation.
-
- The SLP_LAST_CALL code is passed to callback functions when the API
- library has no more data for them and therefore no further calls will
- be made to the callback on the currently outstanding operation. The
- callback can use this to signal the main body of the client code that
- no more data will be forthcoming on the operation, so that the main
- body of the client code can break out of data collection loops. On
- the last call of a callback during both a synchronous and
- asynchronous call, the error code parameter has value SLP_LAST_CALL,
- and the other parameters are all NULL. If no results are returned by
- an API operation, then only one call is made, with the error
- parameter set to SLP_LAST_CALL.
-
- 4.1.3. SLPBoolean
-
- 4.1.3.1. Synopsis
-
-
- typedef enum {
- SLP_FALSE = 0,
- SLP_TRUE = 1
-
- } SLPBoolean;
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 27]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.1.3.2. Description
-
- The SLPBoolean enum is used as a boolean flag.
-
- 4.2. Struct Types
-
- 4.2.1. SLPSrvURL
-
- 4.2.1.1. Synopsis
-
-
- typedef struct srvurl {
- char *s_pcSrvType;
- char *s_pcHost;
- int s_iPort;
- char *s_pcNetFamily;
- char *s_pcSrvPart;
- } SLPSrvURL;
-
-
- 4.2.1.2. Description
-
- The SLPSrvURL structure is filled in by the SLPParseSrvURL() function
- with information parsed from a character buffer containing a service
- URL. The fields correspond to different parts of the URL. Note that
- the structure is in conformance with the standard Berkeley sockets
- struct servent, with the exception that the pointer to an array of
- characters for aliases (s_aliases field) is replaced by the pointer
- to host name (s_pcHost field).
-
- s_pcSrvType
-
- A pointer to a character string containing the service
- type name, including naming authority. The service type
- name includes the "service:" if the URL is of the service:
- scheme. [7]
-
- s_pcHost
-
- A pointer to a character string containing the host
- identification information.
-
- s_iPort
-
- The port number, or zero if none. The port is only available
- if the transport is IP.
-
-
-
-
-
- Kempf & Guttman Informational [Page 28]
-
- RFC 2614 Service Location API June 1999
-
-
- s_pcNetFamily
-
- A pointer to a character string containing the network address
- family identifier. Possible values are "ipx" for the IPX
- family, "at" for the Appletalk family, and "" (i.e. the empty
- string) for the IP address family.
-
- s_pcSrvPart
-
- The remainder of the URL, after the host identification.
-
- The host and port should be sufficient to open a socket to the
- machine hosting the service, and the remainder of the URL should
- allow further differentiation of the service.
-
- 4.2.2. SLPHandle
-
- 4.2.2.1. Synopsis
-
-
- typedef void* SLPHandle;
-
-
- The SLPHandle type is returned by SLPOpen() and is a parameter to all
- SLP functions. It serves as a handle for all resources allocated on
- behalf of the process by the SLP library. The type is opaque, since
- the exact nature differs depending on the implementation.
-
- 4.3. Callbacks
-
- A function pointer to a callback function specific to a particular
- API operation is included in the parameter list when the API function
- is invoked. The callback function is called with the results of the
- operation in both the synchronous and asynchronous cases. The memory
- included in the callback parameters is owned by the API library, and
- the client code in the callback must copy out the contents if it
- wants to maintain the information longer than the duration of the
- current callback call.
-
- In addition to parameters for reporting the results of the operation,
- each callback parameter list contains an error code parameter and a
- cookie parameter. The error code parameter reports the error status
- of the ongoing (for asynchronous) or completed (for synchronous)
- operation. The cookie parameter allows the client code that starts
- the operation by invoking the API function to pass information down
- to the callback without using global variables. The callback returns
- an SLPBoolean to indicate whether the API library should continue
- processing the operation. If the value returned from the callback is
-
-
-
- Kempf & Guttman Informational [Page 29]
-
- RFC 2614 Service Location API June 1999
-
-
- SLP_TRUE, asynchronous operations are terminated, synchronous
- operations ignore the return (since the operation is already
- complete).
-
- 4.3.1. SLPRegReport
-
- 4.3.1.1. Synopsis
-
-
- typedef void SLPRegReport(SLPHandle hSLP,
- SLPError errCode,
- void *pvCookie);
-
-
- 4.3.1.2. Description
-
- The SLPRegReport callback type is the type of the callback function
- to the SLPReg(), SLPDereg(), and SLPDelAttrs() functions.
-
- 4.3.1.3. Parameters
-
- hSLP
-
- The SLPHandle used to initiate the operation.
-
- errCode
-
- An error code indicating if an error occurred during the
- operation.
-
- pvCookie
-
- Memory passed down from the client code that called the
- original API function, starting the operation. May be NULL.
-
- 4.3.2. SLPSrvTypeCallback
-
- 4.3.2.1. Synopsis
-
- typedef SLPBoolean SLPSrvTypeCallback(SLPHandle hSLP,
- const char* pcSrvTypes,
- SLPError errCode,
- void *pvCookie);
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 30]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.3.2.2. Description
-
- The SLPSrvTypeCallback type is the type of the callback function
- parameter to SLPFindSrvTypes() function. If the hSLP handle
- parameter was opened asynchronously, the results returned through the
- callback MAY be uncollated. If the hSLP handle parameter was opened
- synchronously, then the returned results must be collated and
- duplicates eliminated.
-
- 4.3.2.3. Parameters
-
- hSLP
-
- The SLPHandle used to initiate the operation.
-
- pcSrvTypes
-
- A character buffer containing a comma separated, null
- terminated list of service types.
-
- errCode
-
- An error code indicating if an error occurred during the
- operation. The callback should check this error code before
- processing the parameters. If the error code is other than
- SLP_OK, then the API library may choose to terminate the
- outstanding operation.
-
- pvCookie
-
- Memory passed down from the client code that called the
- original API function, starting the operation. May be NULL.
-
- 4.3.2.4. Returns
-
- The client code should return SLP_TRUE if more data is desired,
- otherwise SLP_FALSE.
-
- 4.3.3. SLPSrvURLCallback
-
- 4.3.3.1. Synopsis
-
-
- typedef SLPBoolean SLPSrvURLCallback(SLPHandle hSLP,
- const char* pcSrvURL,
- unsigned short sLifetime,
- SLPError errCode,
- void *pvCookie);
-
-
-
- Kempf & Guttman Informational [Page 31]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.3.3.2. Description
-
- The SLPSrvURLCallback type is the type of the callback function
- parameter to SLPFindSrvs() function. If the hSLP handle parameter
- was opened asynchronously, the results returned through the callback
- MAY be uncollated. If the hSLP handle parameter was opened
- synchronously, then the returned results must be collated and
- duplicates eliminated.
-
- 4.3.3.3. Parameters
-
- hSLP
-
- The SLPHandle used to initiate the operation.
-
- pcSrvURL
-
- A character buffer containing the returned service URL.
-
- sLifetime
-
- An unsigned short giving the life time of the service
- advertisement, in seconds. The value must be an unsigned
- integer less than or equal to SLP_LIFETIME_MAXIMUM.
-
- errCode
-
- An error code indicating if an error occurred during the
- operation. The callback should check this error code before
- processing the parameters. If the error code is other than
- SLP_OK, then the API library may choose to terminate the
- outstanding operation.
-
- pvCookie
-
- Memory passed down from the client code that called the
- original API function, starting the operation. May be NULL.
-
- 4.3.3.4. Returns
-
- The client code should return SLP_TRUE if more data is desired,
- otherwise SLP_FALSE.
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 32]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.3.4. SLPAttrCallback
-
- 4.3.4.1. Synopsis
-
-
- typedef SLPBoolean SLPAttrCallback(SLPHandle hSLP,
- const char* pcAttrList,
- SLPError errCode,
- void *pvCookie);
-
-
- 4.3.4.2. Description
-
- The SLPAttrCallback type is the type of the callback function
- parameter to SLPFindAttrs() function.
-
- The behavior of the callback differs depending on whether the
- attribute request was by URL or by service type. If the
- SLPFindAttrs() operation was originally called with a URL, the
- callback is called once regardless of whether the handle was opened
- asynchronously or synchronously. The pcAttrList parameter contains
- the requested attributes as a comma separated list (or is empty if no
- attributes matched the original tag list).
-
- If the SLPFindAttrs() operation was originally called with a service
- type, the value of pcAttrList and calling behavior depend on whether
- the handle was opened asynchronously or synchronously. If the handle
- was opened asynchronously, the callback is called every time the API
- library has results from a remote agent. The pcAttrList parameter
- MAY be uncollated between calls. It contains a comma separated list
- with the results from the agent that immediately returned results.
- If the handle was opened synchronously, the results must be collated
- from all returning agents and the callback is called once, with the
- pcAttrList parameter set to the collated result.
-
- 4.3.4.3. Parameters
-
- hSLP
-
- The SLPHandle used to initiate the operation.
-
- pcAttrList
-
- A character buffer containing a comma separated, null
- terminated list of attribute id/value assignments, in SLP wire
- format; i.e. "(attr-id=attr-value-list)" [7].
-
-
-
-
-
- Kempf & Guttman Informational [Page 33]
-
- RFC 2614 Service Location API June 1999
-
-
- errCode
-
- An error code indicating if an error occurred during the
- operation. The callback should check this error code before
- processing the parameters. If the error code is other than
- SLP_OK, then the API library may choose to terminate the
- outstanding operation.
-
- pvCookie
-
- Memory passed down from the client code that called the
- original API function, starting the operation. May be NULL.
-
- 4.3.4.4. Returns
-
- The client code should return SLP_TRUE if more data is desired,
- otherwise SLP_FALSE.
-
- 4.4. Opening and Closing an SLPHandle
-
- 4.4.1. SLPOpen
-
- 4.4.1.1. Synopsis
-
- SLPError SLPOpen(const char *pcLang, SLPBoolean isAsync, SLPHandle
- *phSLP);
-
- 4.4.1.2. Description
-
- Returns a SLPHandle handle in the phSLP parameter for the language
- locale passed in as the pcLang parameter. The client indicates if
- operations on the handle are to be synchronous or asynchronous
- through the isAsync parameter. The handle encapsulates the language
- locale for SLP requests issued through the handle, and any other
- resources required by the implementation. However, SLP properties
- are not encapsulated by the handle; they are global. The return
- value of the function is an SLPError code indicating the status of
- the operation. Upon failure, the phSLP parameter is NULL.
-
- An SLPHandle can only be used for one SLP API operation at a time.
- If the original operation was started asynchronously, any attempt to
- start an additional operation on the handle while the original
- operation is pending results in the return of an SLP_HANDLE_IN_USE
- error from the API function. The SLPClose() API function terminates
- any outstanding calls on the handle. If an implementation is unable
- to support a asynchronous( resp. synchronous) operation, due to
- memory constraints or lack of threading support, the
- SLP_NOT_IMPLEMENTED flag may be returned when the isAsync flag is
-
-
-
- Kempf & Guttman Informational [Page 34]
-
- RFC 2614 Service Location API June 1999
-
-
- SLP_TRUE (resp. SLP_FALSE).
-
- 4.4.1.3. Parameters
-
- pcLang
-
- A pointer to an array of characters containing the RFC 1766
- Language Tag [6] for the natural language locale of requests
- and registrations issued on the handle.
-
- isAsync
-
- An SLPBoolean indicating whether the SLPHandle should be opened
- for asynchronous operation or not.
-
- phSLP
-
- A pointer to an SLPHandle, in which the open SLPHandle is
- returned. If an error occurs, the value upon return is NULL.
-
- 4.4.2. SLPClose
-
- 4.4.2.1. Synopsis
-
-
- void SLPClose(SLPHandle hSLP);
-
-
- 4.4.2.2. Description
-
- Frees all resources associated with the handle. If the handle was
- invalid, the function returns silently. Any outstanding synchronous
- or asynchronous operations are cancelled so their callback functions
- will not be called any further.
-
- 4.4.2.3. Parameters
-
- SLPHandle
-
- A SLPHandle handle returned from a call to SLPOpen().
-
-
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 35]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.5. Protocol API
-
- 4.5.1. SLPReg
-
- 4.5.1.1. Synopsis
-
-
- SLPError SLPReg(SLPHandle hSLP,
- const char *pcSrvURL,
- const unsigned short usLifetime,
- const char *pcSrvType,
- const char *pcAttrs
- SLPBoolean fresh,
- SLPRegReport callback,
- void *pvCookie);
-
-
- 4.5.1.2. Description
-
- Registers the URL in pcSrvURL having the lifetime usLifetime with the
- attribute list in pcAttrs. The pcAttrs list is a comma separated
- list of attribute assignments in the wire format (including escaping
- of reserved characters). The usLifetime parameter must be nonzero
- and less than or equal to SLP_LIFETIME_MAXIMUM. If the fresh flag is
- SLP_TRUE, then the registration is new (the SLP protocol FRESH flag
- is set) and the registration replaces any existing registrations.
- The pcSrvType parameter is a service type name and can be included
- for service URLs that are not in the service: scheme. If the URL is
- in the service: scheme, the pcSrvType parameter is ignored. If the
- fresh flag is SLP_FALSE, then an existing registration is updated.
- Rules for new and updated registrations, and the format for pcAttrs
- and pcScopeList can be found in [7]. Registrations and updates take
- place in the language locale of the hSLP handle.
-
- The API library is required to perform the operation in all scopes
- obtained through configuration.
-
- 4.5.1.3. Parameters
-
- hSLP
-
- The language specific SLPHandle on which to register the
- advertisement.
-
- pcSrvURL
-
- The URL to register. May not be the empty string.
-
-
-
-
- Kempf & Guttman Informational [Page 36]
-
- RFC 2614 Service Location API June 1999
-
-
- usLifetime
-
- An unsigned short giving the life time of the service
- advertisement, in seconds. The value must be an unsigned
- integer less than or equal to SLP_LIFETIME_MAXIMUM and greater
- than zero.
-
- pcSrvType
-
- The service type. If pURL is a service: URL, then this
- parameter is ignored.
-
- pcAttrs
-
- A comma separated list of attribute assignment expressions for
- the attributes of the advertisement. Use empty string, "" for
- no attributes.
-
- fresh
-
- An SLPBoolean that is SLP_TRUE if the registration is new or
- SLP_FALSE if a reregistration.
-
- callback
-
- A callback to report the operation completion status.
-
- pvCookie
-
- Memory passed to the callback code from the client. May be
- NULL.
-
- 4.5.1.4. Returns
-
- If an error occurs in starting the operation, one of the SLPError
- codes is returned.
-
- 4.5.2. SLPDereg
-
- 4.5.2.1. Synopsis
-
-
- SLPError SLPDereg(SLPHandle hSLP,
- const char *pcURL,
- SLPRegReport callback,
- void *pvCookie);
-
-
-
-
-
- Kempf & Guttman Informational [Page 37]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.5.2.2. Description
-
- Deregisters the advertisement for URL pcURL in all scopes where the
- service is registered and all language locales. The deregistration
- is not just confined to the locale of the SLPHandle, it is in all
- locales. The API library is required to perform the operation in all
- scopes obtained through configuration.
-
- 4.5.2.3. Parameters
-
- hSLP
-
- The language specific SLPHandle to use for deregistering.
-
- pcURL
-
- The URL to deregister. May not be the empty string.
-
- callback
-
- A callback to report the operation completion status.
-
- pvCookie
-
- Memory passed to the callback code from the client. May be
- NULL.
-
- 4.5.2.4. Returns
-
- If an error occurs in starting the operation, one of the SLPError
- codes is returned.
-
- 4.5.3. SLPDelAttrs
-
- 4.5.3.1. Synopsis
-
-
- SLPError SLPDelAttrs(SLPHandle hSLP,
- const char *pcURL,
- const char *pcAttrs,
- SLPRegReport callback,
- void *pvCookie);
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 38]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.5.3.2. Description
-
- Delete the selected attributes in the locale of the SLPHandle. The
- API library is required to perform the operation in all scopes
- obtained through configuration.
-
- 4.5.3.3. Parameters
-
- hSLP
-
- The language specific SLPHandle to use for deleting attributes.
-
- pcURL
-
- The URL of the advertisement from which the attributes should
- be deleted. May not be the empty string.
-
- pcAttrs
-
- A comma separated list of attribute ids for the attributes to
- deregister. See Section 9.8 in [7] for a description of the
- list format. May not be the empty string.
-
- callback
-
- A callback to report the operation completion status.
-
- pvCookie
-
- Memory passed to the callback code from the client. May be
- NULL.
-
- 4.5.3.4. Returns
-
- If an error occurs in starting the operation, one of the SLPError
- codes is returned.
-
- 4.5.4. SLPFindSrvTypes
-
- 4.5.4.1. Synopsis
-
-
- SLPError SLPFindSrvTypes(SLPHandle hSLP,
- const char *pcNamingAuthority,
- const char *pcScopeList,
- SLPSrvTypeCallback callback,
- void *pvCookie);
-
-
-
-
- Kempf & Guttman Informational [Page 39]
-
- RFC 2614 Service Location API June 1999
-
-
- The SLPFindSrvType() function issues an SLP service type request for
- service types in the scopes indicated by the pcScopeList. The
- results are returned through the callback parameter. The service
- types are independent of language locale, but only for services
- registered in one of scopes and for the indicated naming authority.
-
- If the naming authority is "*", then results are returned for all
- naming authorities. If the naming authority is the empty string,
- i.e. "", then the default naming authority, "IANA", is used. "IANA"
- is not a valid naming authority name, and it is a PARAMETER_BAD error
- to include it explicitly.
-
- The service type names are returned with the naming authority intact.
- If the naming authority is the default (i.e. empty string) then it
- is omitted, as is the separating ".". Service type names from URLs
- of the service: scheme are returned with the "service:" prefix
- intact. [7] See [8] for more information on the syntax of service
- type names.
-
- 4.5.4.2. Parameters
-
- hSLP
-
- The SLPHandle on which to search for types.
-
- pcNamingAuthority
-
- The naming authority to search. Use "*" for all naming
- authorities and the empty string, "", for the default naming
- authority.
-
- pcScopeList
-
- A pointer to a char containing comma separated list of scope
- names to search for service types. May not be the empty
- string, "".
-
- callback
-
- A callback function through which the results of the operation
- are reported.
-
- pvCookie
-
- Memory passed to the callback code from the client. May be
- NULL.
-
-
-
-
-
- Kempf & Guttman Informational [Page 40]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.5.4.3. Returns
-
- If an error occurs in starting the operation, one of the SLPError
- codes is returned.
-
- 4.5.5. SLPFindSrvs
-
- 4.5.5.1. Synopsis
-
-
- SLPError SLPFindSrvs(SLPHandle hSLP,
- const char *pcServiceType,
- const char *pcScopeList,
- const char *pcSearchFilter,
- SLPSrvURLCallback callback,
- void *pvCookie);
-
-
- 4.5.5.2. Description
-
- Issue the query for services on the language specific SLPHandle and
- return the results through the callback. The parameters determine
- the results
-
- 4.5.5.3. Parameters
-
- hSLP
-
- The language specific SLPHandle on which to search for
- services.
-
- pcServiceType
-
- The Service Type String, including authority string if any, for
- the request, such as can be discovered using SLPSrvTypes().
- This could be, for example "service:printer:lpr" or
- "service:nfs". May not be the empty string.
-
- pcScopeList
-
- A pointer to a char containing comma separated list of scope
- names. May not be the empty string, "".
-
- pcSearchFilter
-
- A query formulated of attribute pattern matching expressions in
- the form of a LDAPv3 Search Filter, see [4]. If this filter
- is empty, i.e. "", all services of the requested type in the
-
-
-
- Kempf & Guttman Informational [Page 41]
-
- RFC 2614 Service Location API June 1999
-
-
- specified scopes are returned.
-
- callback
-
- A callback function through which the results of the operation
- are reported.
-
- pvCookie
-
- Memory passed to the callback code from the client. May be
- NULL.
-
- 4.5.5.4. Returns
-
- If an error occurs in starting the operation, one of the SLPError
- codes is returned.
-
- 4.5.6. SLPFindAttrs
-
- 4.5.6.1. Synopsis
-
-
- SLPError SLPFindAttrs(SLPHandle hSLP,
- const char *pcURLOrServiceType,
- const char *pcScopeList,
- const char *pcAttrIds,
- SLPAttrCallback callback,
- void *pvCookie);
-
-
- 4.5.6.2. Description
-
- This function returns service attributes matching the attribute ids
- for the indicated service URL or service type. If pcURLOrServiceType
- is a service URL, the attribute information returned is for that
- particular advertisement in the language locale of the SLPHandle.
-
- If pcURLOrServiceType is a service type name (including naming
- authority if any), then the attributes for all advertisements of that
- service type are returned regardless of the language of registration.
- Results are returned through the callback.
-
- The result is filtered with an SLP attribute request filter string
- parameter, the syntax of which is described in [7]. If the filter
- string is the empty string, i.e. "", all attributes are returned.
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 42]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.5.6.3. Parameters
-
- hSLP
-
- The language specific SLPHandle on which to search for
- attributes.
-
- pcURLOrServiceType
-
- The service URL or service type. See [7] for URL and service
- type syntax. May not be the empty string.
-
- pcScopeList
-
- A pointer to a char containing a comma separated list of scope
- names. May not be the empty string, "".
-
- pcAttrIds
-
- The filter string indicating which attribute values to return.
- Use empty string, "", to indicate all values. Wildcards
- matching all attribute ids having a particular prefix or suffix
- are also possible. See [7] for the exact format of the filter
- string.
-
- callback
-
- A callback function through which the results of the operation
- are reported.
-
- pvCookie
-
- Memory passed to the callback code from the client. May be
- NULL.
-
- 4.5.6.4. Returns
-
- If an error occurs in starting the operation, one of the SLPError
- codes is returned.
-
- 4.6. Miscellaneous Functions
-
- 4.6.1. SLPGetRefreshInterval
-
- 4.6.1.1. Synopsis
-
-
- unsigned short SLPGetRefreshInterval();
-
-
-
- Kempf & Guttman Informational [Page 43]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.6.1.2. Description
-
- Returns the maximum across all DAs of the min-refresh-interval
- attribute. This value satisfies the advertised refresh interval
- bounds for all DAs, and, if used by the SA, assures that no refresh
- registration will be rejected. If no DA advertises a min-refresh-
- interval attribute, a value of 0 is returned.
-
- 4.6.1.3. Returns
-
- If no error, the maximum refresh interval value allowed by all DAs (a
- positive integer). If no DA advertises a min-refresh-interval
- attribute, returns 0. If an error occurs, returns an SLP error code.
-
- 4.6.2. SLPFindScopes
-
- 4.6.2.1. Synopsis
-
-
- SLPError SLPFindScopes(SLPHandle hSLP,
- char** ppcScopeList);
-
-
- 4.6.2.2. Description
-
- Sets ppcScopeList parameter to a pointer to a comma separated list
- including all available scope values. The list of scopes comes from
- a variety of sources: the configuration file's net.slp.useScopes
- property, unicast to DAs on the net.slp.DAAddresses property, DHCP,
- or through the DA discovery process. If there is any order to the
- scopes, preferred scopes are listed before less desirable scopes.
- There is always at least one name in the list, the default scope,
- "DEFAULT".
-
- 4.6.2.3. Parameters
-
- hSLP
-
- The SLPHandle on which to search for scopes.
-
- ppcScopeList
-
- A pointer to char pointer into which the buffer pointer is
- placed upon return. The buffer is null terminated. The memory
- should be freed by calling SLPFree().
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 44]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.6.2.4. Returns
-
- If no error occurs, returns SLP_OK, otherwise, the appropriate error
- code.
-
- 4.6.3. SLPParseSrvURL
-
- 4.6.3.1. Synopsis
-
-
- SLPError SLPParseSrvURL(char *pcSrvURL
- SLPSrvURL** ppSrvURL);
-
-
- 4.6.3.2. Description
-
- Parses the URL passed in as the argument into a service URL structure
- and returns it in the ppSrvURL pointer. If a parse error occurs,
- returns SLP_PARSE_ERROR. The input buffer pcSrvURL is destructively
- modified during the parse and used to fill in the fields of the
- return structure. The structure returned in ppSrvURL should be freed
- with SLPFreeURL(). If the URL has no service part, the s_pcSrvPart
- string is the empty string, "", i.e. not NULL. If pcSrvURL is not a
- service: URL, then the s_pcSrvType field in the returned data
- structure is the URL's scheme, which might not be the same as the
- service type under which the URL was registered. If the transport is
- IP, the s_pcTransport field is the empty string. If the transport is
- not IP or there is no port number, the s_iPort field is zero.
-
- 4.6.3.3. Parameters
-
- pcSrvURL
-
- A pointer to a character buffer containing the null terminated
- URL string to parse. It is destructively modified to produce
- the output structure.
-
- ppSrvURL
-
- A pointer to a pointer for the SLPSrvURL structure to receive
- the parsed URL. The memory should be freed by a call to
- SLPFree() when no longer needed.
-
- 4.6.3.4. Returns
-
- If no error occurs, the return value is SLP_OK. Otherwise, the
- appropriate error code is returned.
-
-
-
-
- Kempf & Guttman Informational [Page 45]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.6.4. SLPEscape
-
- 4.6.4.1. Synopsis
-
-
- SLPError SLPEscape(const char* pcInbuf,
- char** ppcOutBuf,
- SLPBoolean isTag);
-
-
- 4.6.4.2. Description
-
- Process the input string in pcInbuf and escape any SLP reserved
- characters. If the isTag parameter is SLPTrue, then look for bad tag
- characters and signal an error if any are found by returning the
- SLP_PARSE_ERROR code. The results are put into a buffer allocated by
- the API library and returned in the ppcOutBuf parameter. This buffer
- should be deallocated using SLPFree() when the memory is no longer
- needed.
-
- 4.6.4.3. Parameters
-
- pcInbuf
-
- Pointer to he input buffer to process for escape characters.
-
- ppcOutBuf
-
- Pointer to a pointer for the output buffer with the SLP
- reserved characters escaped. Must be freed using SLPFree()
- when the memory is no longer needed.
-
- isTag
-
- When true, the input buffer is checked for bad tag characters.
-
- 4.6.4.4. Returns
-
- Return SLP_PARSE_ERROR if any characters are bad tag characters and
- the isTag flag is true, otherwise SLP_OK, or the appropriate error
- code if another error occurs.
-
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 46]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.6.5. SLPUnescape
-
- 4.6.5.1. Synopsis
-
-
- SLPError SLPUnescape(const char* pcInbuf,
- char** ppcOutBuf,
- SLPBoolean isTag);
-
-
- 4.6.5.2. Description
-
- Process the input string in pcInbuf and unescape any SLP reserved
- characters. If the isTag parameter is SLPTrue, then look for bad tag
- characters and signal an error if any are found with the
- SLP_PARSE_ERROR code. No transformation is performed if the input
- string is an opaque. The results are put into a buffer allocated by
- the API library and returned in the ppcOutBuf parameter. This buffer
- should be deallocated using SLPFree() when the memory is no longer
- needed.
-
- 4.6.5.3. Parameters
-
- pcInbuf
-
- Pointer to he input buffer to process for escape characters.
-
- ppcOutBuf
-
- Pointer to a pointer for the output buffer with the SLP
- reserved characters escaped. Must be freed using SLPFree()
- when the memory is no longer needed.
-
- isTag
-
- When true, the input buffer is checked for bad tag characters.
-
- 4.6.5.4. Returns
-
- Return SLP_PARSE_ERROR if any characters are bad tag characters and
- the isTag flag is true, otherwise SLP_OK, or the appropriate error
- code if another error occurs.
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 47]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.6.6. SLPFree
-
- 4.6.6.1. Synopsis
-
-
- void SLPFree(void* pvMem);
-
-
- 4.6.6.2. Description
-
- Frees memory returned from SLPParseSrvURL(), SLPFindScopes(),
- SLPEscape(), and SLPUnescape().
-
- 4.6.6.3. Parameters
-
- pvMem
-
- A pointer to the storage allocated by the SLPParseSrvURL(),
- SLPEscape(), SLPUnescape(), or SLPFindScopes() function.
- Ignored if NULL.
-
- 4.6.7. SLPGetProperty
-
- 4.6.7.1. Synopsis
-
-
- const char* SLPGetProperty(const char* pcName);
-
-
- 4.6.7.2. Description
-
- Returns the value of the corresponding SLP property name. The
- returned string is owned by the library and MUST NOT be freed.
-
- 4.6.7.3. Parameters
-
- pcName
-
- Null terminated string with the property name, from
- Section 2.1.
-
- 4.6.7.4. Returns
-
- If no error, returns a pointer to a character buffer containing the
- property value. If the property was not set, returns the default
- value. If an error occurs, returns NULL. The returned string MUST
- NOT be freed.
-
-
-
-
- Kempf & Guttman Informational [Page 48]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.6.8. SLPSetProperty
-
- 4.6.8.1. Synopsis
-
-
- void SLPSetProperty(const char *pcName,
- const char *pcValue);
-
-
- 4.6.8.2. Description
-
- Sets the value of the SLP property to the new value. The pcValue
- parameter should be the property value as a string.
-
- 4.6.8.3. Parameters
-
- pcName
-
- Null terminated string with the property name, from
- Section 2.1.
-
- pcValue
-
- Null terminated string with the property value, in UTF-8
- character encoding.
-
- 4.7. Implementation Notes
-
- 4.7.1. Refreshing Registrations
-
- Clients indicate that they want URLs to be automatically refreshed by
- setting the usLifetime parameter in the SLPReg() function call to
- SLP_LIFETIME_MAXIMUM. This will cause the API implementation to
- refresh the URL before it times out. Although using
- SLP_LIFETIME_MAXIMUM to designate automatic reregistration means that
- a transient URL can't be registered for the maximum lifetime, little
- hardship is likely to occur, since service URL lifetimes are measured
- in seconds and the client can simply use a lifetime of
- SLP_LIFETIME_MAXIMUM - 1 if a transient URL near the maximum lifetime
- is desired. API implementations MUST provide this facility.
-
- 4.7.2. Syntax for String Parameters
-
- Query strings, attribute registration lists, attribute deregistration
- lists, scope lists, and attribute selection lists follow the syntax
- described in [7] for the appropriate requests. The API directly
- reflects the strings passed in from clients into protocol requests,
- and directly reflects out strings returned from protocol replies to
-
-
-
- Kempf & Guttman Informational [Page 49]
-
- RFC 2614 Service Location API June 1999
-
-
- clients. As a consequence, clients are responsible for formatting
- request strings, including escaping and converting opaque values to
- escaped byte encoded strings. Similarly, on output, clients are
- required to unescape strings and convert escaped string encoded
- opaques to binary. The functions SLPEscape() and SLPUnescape() can
- be used for escaping SLP reserved characters, but perform no opaque
- processing.
-
- Opaque values consist of a character buffer containing a UTF-8-
- encoded string, the first characters of which are the nonUTF-8
- encoding '\ff'. Subsequent characters are the escaped values for the
- original bytes in the opaque. The escape convention is relatively
- simple. An escape consists of a backslash followed by the two
- hexadecimal digits encoding the byte. An example is '\2c' for the
- byte 0x2c. Clients handle opaque processing themselves, since the
- algorithm is relatively simple and uniform.
-
- 4.7.3. Client Side Syntax Checking
-
- Client side API implementations may do syntax checking of scope
- names, naming authority names, and service type names, but are not
- required to do so. Since the C API is designed to be a thin layer
- over the protocol, some low memory SA implementations may find
- extensive syntax checking on the client side to be burdensome. If
- syntax checking uncovers an error in a parameter, the
- SLP_PARAMETER_BAD error must be returned. If any parameter is NULL
- and is required to be nonNULL, SLP_PARAMETER_BAD is returned.
-
- 4.7.4. System Properties
-
- The system properties established in the configuration file are
- accessible through the SLPGetProperty() and SLPSetProperty()
- functions. The SLPSetProperty() function only modifies properties in
- the running process, not in the configuration file. Properties are
- global to the process, affecting all threads and all handles created
- with SLPOpen. Errors are checked when the property is used and, as
- with parsing the configuration file, are logged. Program execution
- continues without interruption by substituting the default for the
- erroneous parameter. With the exception of net.slp.locale,
- net.slp.typeHint, and net.slp.maxResults, clients of the API should
- rarely be required to override these properties, since they reflect
- properties of the SLP network that are not of concern to individual
- agents. If changes are required, system administrators should modify
- the configuration file.
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 50]
-
- RFC 2614 Service Location API June 1999
-
-
- 4.7.5. Memory Management
-
- The only API functions returning memory specifically requiring
- deallocation on the part of the client are SLPParseSrvURL(),
- SLPFindScopes(), SLPEscape(), and SLPUnescape(). This memory should
- be freed using SLPFree() when no longer needed. Character strings
- returned via the SLPGetProperty() function should NOT be freed, they
- are owned by the SLP library.
-
- Memory passed to callbacks belongs to the library and MUST NOT be
- retained by the client code. Otherwise, crashes are possible.
- Clients are required to copy data out of the callback parameters. No
- other use of the parameter memory in callback parameters is allowed.
-
- 4.7.6. Asynchronous and Incremental Return Semantics
-
- If a handle parameter to an API function was opened asynchronously,
- API function calls on the handle check the other parameters, open the
- appropriate operation and return immediately. In an error occurs in
- the process of starting the operation, an error code is returned. If
- the handle parameter was opened synchronously, the API function call
- blocks until all results are available, and returns only after the
- results are reported through the callback function. The return code
- indicates whether any errors occurred both starting and during the
- operation.
-
- The callback function is called whenever the API library has results
- to report. The callback code is required to check the error code
- parameter before looking at the other parameters. If the error code
- is not SLP_OK, the other parameters may be invalid. The API library
- has the option of terminating any outstanding operation on which an
- error occurs. The callback code can similarly indicate that the
- operation should be terminated by passing back SLP_FALSE. Callback
- functions are not permitted to recursively call into the API on the
- same SLPHandle. If an attempt is made to recursively call into the
- API, the API function returns SLP_HANDLE_IN_USE. Prohibiting
- recursive callbacks on the same handle simplifies implementation of
- thread safe code, since locks held on the handle will not be in place
- during a second outcall on the handle. On the other hand, it means
- that handle creation should be fairly lightweight so a client program
- can easily support multiple outstanding calls.
-
- The total number of results received can be controlled by setting the
- net.slp.maxResults parameter.
-
- On the last call to a callback, whether asynchronous or synchronous,
- the status code passed to the callback has value SLP_LAST_CALL. There
- are four reasons why the call can terminate:
-
-
-
- Kempf & Guttman Informational [Page 51]
-
- RFC 2614 Service Location API June 1999
-
-
- DA reply received
-
- A reply from a DA has been received and therefore nothing more
- is expected.
-
- Multicast terminated
-
- The multicast convergence time has elapsed and the API library
- multicast code is giving up.
-
- Multicast null results
-
- Nothing new has been received during multicast for a while and
- the API library multicast code is giving up on that (as an
- optimization).
-
- Maximum results
-
- The user has set the net.slp.maxResults property and that
- number of replies has been collected and returned
-
- 4.8. Example
-
- This example illustrates how to discover a mailbox.
-
- A POP3 server registers itself with the SLP framework. The
- attributes it registers are "USER", a list of all users whose mail is
- available through the POP3 server.
-
- The POP3 server code is the following:
-
- SLPHandle slph;
- SLPRegReport errCallback = POPRegErrCallback;
-
- /* Create an English SLPHandle, asynchronous processing. */
-
- SLPError err = SLPOpen("en", SLP_TRUE, &slph);
-
- if( err != SLP_OK ) {
-
- /* Deal with error. */
-
- }
-
- /* Create the service: URL and attribute parameters. */
-
- const char* surl = "service:pop3://mail.netsurf.de"; /* the URL */
-
-
-
-
- Kempf & Guttman Informational [Page 52]
-
- RFC 2614 Service Location API June 1999
-
-
- const char *pcAttrs = "(user=zaphod,trillian,roger,marvin)"
-
- /* Perform the registration. */
-
- err = SLPReg(slph,
- surl,
- SLP_LIFETIME_DEFAULT,
- ppcAttrs,
- errCallback,
- NULL);
-
- if (err != SLP_OK ) {
-
- /*Deal with error.*/
-
- }
-
-
- The errCallback reports any errors:
-
- void
- POPRegErrCallback(SLPHandle hSLP,
- SLPError errCode,
- unsigned short usLifetime,
- void* pvCookie) {
-
- if( errCode != SLP_OK ) {
-
- /* Report error through a dialog, message, etc. */
-
- }
-
- /*Use lifetime interval to update periodically. */
-
- }
-
- The POP3 client locates the server for the user with the following
- code:
-
- /*
- * The client calls SLPOpen(), exactly as above.
- */
-
- const char *pcSrvType = "service:pop3"; /* the service type */
- const char *pcScopeList = "default"; /* the scope */
- const char *pcFilter = "(user=roger)"; /* the search filter */
- SLPSrvURLCallback srvCallback = /* the callback */
- POPSrvURLCallback;
-
-
-
- Kempf & Guttman Informational [Page 53]
-
- RFC 2614 Service Location API June 1999
-
-
- err = SLPFindSrvs(slph,
- pcSrvType, pcScopeList, pcFilter,
- srvCallback, NULL);
-
- if( err != SLP_OK ) {
-
- /* Deal with error. */
-
- }
-
- Within the callback, the client code can use the returned POP
- service:
-
- SLPBoolean
- POPSrvURLCallback(SLPHandle hSLP,
- const char* pcSrvURL,
- unsigned short sLifetime,
- SLPError errCode,
- void* pvCookie) {
-
- if( errCode != SLP_OK ) {
-
- /* Deal with error. */
-
- }
-
- SLPSrvURL* pSrvURL;
-
- errCode = SLPParseSrvURL(pcSrvURL, &pSrvURL);
-
- if (err != SLP_OK ) {
-
- /* Deal with error. */
-
- } else {
-
- /* get the server's address */
-
- struct hostent *phe = gethostbyname(pSrvURL.s_pcHost);
-
- /* use hostname in pSrvURL to connect to the POP3 server
- * . . .
- */
-
- SLPFreeSrvURL((void*)pSrvURL); /* Free the pSrvURL storage */
- }
-
- return SLP_FALSE; /* Done! */
-
-
-
- Kempf & Guttman Informational [Page 54]
-
- RFC 2614 Service Location API June 1999
-
-
- }
-
- A client that wanted to discover all the users receiving mail at the
- server uses with the following query:
-
- /*
- * The client calls SLPOpen(), exactly as above. We assume the
- * service: URL was retrieved into surl.
- */
-
- const char *pcScopeList = "default"; /* the scope */
- const char *pcAttrFilter = "use"; /* the attribute filter */
- SLPAttrCallback attrCallBack = /* the callback */
- POPUsersCallback
-
-
- err =
- SLPFindAttrs(slph,
- surl,
- pcScopeList, pcAttrFilter,
- attrCallBack, NULL);
-
- if( err != SLP_OK ) {
-
- /* Deal with error. */
-
- }
-
- The callback processes the attributes:
-
- SLPBoolean
- POPUsersCallback(const char* pcAttrList,
- SLPError errCode,
- void* pvCookie) {
-
- if( errCode != SLP_OK ) {
-
- /* Deal with error. */
-
- } else {
-
- /* Parse attributes. */
-
- }
-
- return SLP_FALSE; /* Done! */
-
- }
-
-
-
- Kempf & Guttman Informational [Page 55]
-
- RFC 2614 Service Location API June 1999
-
-
- 5. Java Language Binding
-
- 5.1. Introduction
-
- The Java API is designed to model the various SLP entities in classes
- and objects. APIs are provided for SA, UA, and service type template
- access capabilities. The ServiceLocationManager class contains
- methods that return instances of objects implementing SA and UA
- capability. Each of these is modeled in an interface. The Locator
- interface provides UA capability and the Advertiser interface
- provides SA capability. The TemplateRegistry abstract class contains
- methods that return objects for template introspection and attribute
- type checking. The ServiceURL, ServiceType, and
- ServiceLocationAttribute classes model the basic SLP concepts. A
- concrete subclass instance of TemplateRegistry is returned by a class
- method.
-
- All SLP classes and interfaces are located within a single package.
- The package name should begin with the name of the implementation and
- conclude with the suffix "slp". Thus, the name for a hypothetical
- implementation from the University of Michigan would look like:
-
- edu.umich.slp
-
- This follows the Java convention of prepending the top level DNS
- domain name for the organization implementing the package onto the
- organization's name and using that as the package prefix.
-
- 5.2. Exceptions and Errors
-
- Most parameters to API methods are required to be non-null. The API
- description indicates if a null parameter is acceptable, or if other
- restrictions constrain a parameter. When parameters are checked for
- validity (such as not being null) or their syntax is checked, an
- error results in the RuntimeException subclass
- IllegalArgumentException being thrown. Clients of the API are
- reminded that IllegalArgumentException, derived from
- RuntimeException, is unchecked by the compiler. Clients should thus
- be careful to include try/catch blocks for it if the relevant
- parameters could be erroneous.
-
- Standard Java practice is to encode every exceptional condition as a
- separate subclass of Exception. Because of the relatively high cost
- in code size of Exception subclasses, the API contains only a single
- Exception subclass with different conditions being determined by an
- integer error code property. A subset, appropriate to Java, of the
- error codes described in Section 3 are available as constants on the
- ServiceLocationException class. The subset excludes error codes such
-
-
-
- Kempf & Guttman Informational [Page 56]
-
- RFC 2614 Service Location API June 1999
-
-
- as MEMORY_ALLOC_FAILED.
-
- 5.2.1. Class ServiceLocationException
-
- 5.2.1.1. Synopsis
-
-
- public class ServiceLocationException
- extends Exception
-
-
- 5.2.1.2. Description
-
- The ServiceLocationException class is thrown by all methods when
- exceptional conditions occur in the SLP framework. The error code
- property determines the exact nature of the condition, and an
- optional message may provide more information.
-
- 5.2.1.3. Fields
-
-
- public static final short LANGUAGE_NOT_SUPPORTED = 1
- public static final short PARSE_ERROR = 2
- public static final short INVALID_REGISTRATION = 3
- public static final short SCOPE_NOT_SUPPORTED = 4
- public static final short AUTHENTICATION_ABSENT = 6
- public static final short AUTHENTICATION_FAILED = 7
- public static final short INVALID_UPDATE = 13
- public static final short REFRESH_REJECTED = 15
- public static final short NOT_IMPLEMENTED = 16
- public static final short NETWORK_INIT_FAILED 17
- public static final short NETWORK_TIMED_OUT = 18
- public static final short NETWORK_ERROR = 19
- public static final short INTERNAL_SYSTEM_ERROR = 20
- public static final short TYPE_ERROR = 21
- public static final short BUFFER_OVERFLOW = 22
-
-
- 5.2.1.4. Instance Methods
-
-
- public short getErrorCode()
-
-
- Return the error code. The error code takes on one of the static
- field values.
-
-
-
-
-
- Kempf & Guttman Informational [Page 57]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.3. Basic Data Structures
-
- 5.3.1. Interface ServiceLocationEnumeration
-
-
- public interface ServiceLocationEnumeration
- extends Enumeration
-
-
- 5.3.1.1. Description
-
- The ServiceLocationEnumeration class is the return type for all
- Locator SLP operations. The Java API library may implement this
- class to block until results are available from the SLP operation, so
- that the client can achieve asynchronous operation by retrieving
- results from the enumeration in a separate thread. Clients use the
- superclass nextElement() method if they are unconcerned with SLP
- exceptions.
-
- 5.3.1.2. Instance Methods
-
-
- public abstract Object next() throws ServiceLocationException
-
- Return the next value or block until it becomes available.
-
- Throws:
-
- ServiceLocationException
-
- Thrown if the SLP operation encounters an error.
-
- NoSuchElementException
-
- If there are no more elements to return.
-
-
- 5.3.2. Class ServiceLocationAttribute
-
- 5.3.2.1. Synopsis
-
-
- public class ServiceLocationAttribute
- extends Object implements Serializable
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 58]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.3.2.2. Description
-
- The ServiceLocationAttribute class models SLP attributes. Instances
- of this class are returned by Locator.findAttributes() and are
- communicated along with register/deregister requests.
-
- 5.3.2.3. Constructors
-
-
- public ServiceLocationAttribute(String id,Vector values)
-
-
- Construct a service location attribute. Errors in the id or values
- vector result in an IllegalArgumentException.
-
- Parameters:
-
- id
-
- The attribute name. The String can consist of any Unicode
- character.
-
- values
-
- A Vector of one or more attribute values. Vector contents
- must be uniform in type and one of Integer, String, Boolean,
- or byte[]. If the attribute is a keyword attribute, then the
- parameter should be null. String values can consist of any
- Unicode character.
-
-
- 5.3.2.4. Class Methods
-
-
- public static String escapeId(String id)
-
-
- Returns an escaped version of the id parameter, suitable for
- inclusion in a query. Any reserved characters as specified in [7]
- are escaped using UTF-8 encoding. If any characters in the tag are
- illegal, throws IllegalArgumentException.
-
- Parameters:
-
- id
-
- The attribute id to escape. ServiceLocationException is thrown
- if any characters are illegal for an attribute tag.
-
-
-
- Kempf & Guttman Informational [Page 59]
-
- RFC 2614 Service Location API June 1999
-
-
- public static String escapeValue(Object value)
-
-
- Returns a String containing the escaped value parameter as a string,
- suitable for inclusion in a query. If the parameter is a string,
- any reserved characters as specified in [7] are escaped using UTF-8
- encoding. If the parameter is a byte array, then the escaped string
- begins with the nonUTF-8 sequence `\ff` and the rest of the string
- consists of the escaped bytes, which is the encoding for opaques.
- If the value parameter is a Boolean or Integer, then the returned
- string contains the object converted into a string. If the value
- is any type other than String, Integer, Boolean or byte[], an
- IllegalArgumentException is thrown.
-
- Parameters:
-
- value
-
- The attribute value to be converted into a string and escaped.
-
-
- 5.3.2.5. Instance Methods
-
-
- public Vector getValues()
-
-
- Returns a cloned vector of attribute values, or null if the attribute
- is a keyword attribute. If the attribute is single-valued, then the
- vector contains only one object.
-
-
- public String getId()
-
-
- Returns the attribute's name.
-
-
- public boolean equals(Object o)
-
-
- Overrides Object.equals(). Two attributes are equal if their
- identifiers are equal and their value vectors contain the same number
- of equal values as determined by the Object equals() method. Values
- having byte[] type are equal if the contents of all byte arrays in
- both attribute vectors match. Note that the SLP string matching
- algorithm [7] MUST NOT be used for comparing attribute identifiers or
- string values.
-
-
-
- Kempf & Guttman Informational [Page 60]
-
- RFC 2614 Service Location API June 1999
-
-
- public String toString()
-
-
- Overrides Object.toString(). The string returned contains a
- formatted representation of the attribute, giving the attribute's
- id, values, and the Java type of the values. The returned string is
- suitable for debugging purposes, but is not in SLP wire format.
-
-
- public int hashCode()
-
-
- Overrides Object.hashCode(). Hashes on the attribute's identifier.
-
-
- 5.3.3. Class ServiceType
-
- 5.3.3.1. Synopsis
-
-
- public class ServiceType extends Object implements Serializable
-
-
- 5.3.3.2. Description
-
- The ServiceType object models the SLP service type. It parses a
- string based service type specifier into its various components, and
- contains property accessors to return the components. URL schemes,
- protocol service types, and abstract service types are all handled.
-
- 5.3.3.3. Constructors
-
-
- public ServiceType(String type)
-
-
- Construct a service type object from the service type specifier.
- Throws IllegalArgumentException if the type name is syntactically
- incorrect.
-
- Parameters:
-
- type
-
- The service type name as a String. If the service type is from
- a service: URL, the "service:" prefix must be intact.
-
-
-
-
-
- Kempf & Guttman Informational [Page 61]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.3.3.4. Methods
-
-
- public boolean isServiceURL()
-
-
- Returns true if the type name contains the "service:" prefix.
-
-
- public boolean isAbstractType()
-
-
- Returns true if the type name is for an abstract type.
-
-
- public boolean isNADefault()
-
- Returns true if the naming authority is the default, i.e. is the
- empty string.
-
-
- public String getConcreteTypeName()
-
-
- Returns the concrete type name in an abstract type, or the empty
- string if the service type is not abstract. For example, if the type
- name is "service:printing:ipp", the method returns "ipp". If the
- type name is "service:ftp", the method returns "".
-
-
- public String getPrincipleTypeName()
-
-
- Returns the abstract type name for an abstract type, the protocol
- name in a protocol type, or the URL scheme for a generic URL. For
- example, in the abstract type name "service:printing:ipp", the method
- returns "printing". In the protocol type name "service:ftp", the
- method returns "ftp".
-
-
- public String getAbstractTypeName()
-
-
- If the type is an abstract type, returns the fully formatted abstract
- type name including the "service:" and naming authority but without
- the concrete type name or intervening colon. If not an abstract
- type, returns the empty string. For example, in the abstract type
- name "service:printing:ipp", the method returns "service:printing".
-
-
-
- Kempf & Guttman Informational [Page 62]
-
- RFC 2614 Service Location API June 1999
-
-
- public String getNamingAuthority()
-
-
- Return the naming authority name, or the empty string if the naming
- authority is the default.
-
-
- public boolean equals(Object obj)
-
-
- Overrides Object.equals(). The two objects are equal if they are
- both ServiceType objects and the components of both are equal.
-
-
- public String toString()
-
-
- Returns the fully formatted type name, including the "service:" if
- the type was originally from a service: URL.
-
-
- public int hashCode()
-
-
- Overrides Object.hashCode(). Hashes on the string value of the
- "service" prefix, naming authority, if any, abstract and concrete
- type names for abstract types, protocol type name for protocol types,
- and URL scheme for generic URLs.
-
-
- 5.3.4. Class ServiceURL
-
- 5.3.4.1. Synopsis
-
-
- public class ServiceURL extends Object implements Serializable
-
-
- 5.3.4.2. Description
-
- The ServiceURL object models the advertised SLP service URL. It can
- be either a service: URL or a regular URL. These objects are
- returned from service lookup requests, and describe the registered
- services. This class should be a subclass of java.net.URL but can't
- since that class is final.
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 63]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.3.4.3. Class Variables
-
-
- public static final int NO_PORT = 0
-
-
- Indicates that no port information is required or was returned for
- this URL.
-
-
- public static final int LIFETIME_NONE = 0
-
-
- Indicates that the URL has a zero lifetime. This value is never
- returned from the API, but can be used to create a ServiceURL object
- to deregister, delete attributes, or find attributes.
-
-
- public static final int LIFETIME_DEFAULT = 10800
-
-
- The default URL lifetime (3 hours) in seconds.
-
-
- public static final int LIFETIME_MAXIMUM = 65535
-
-
- The maximum URL lifetime (about 18 hours) in seconds.
-
-
- public static final int LIFETIME_PERMANENT = -1
-
-
- Indicates that the API implementation should continuously re-register
- the URL until the application exits.
-
-
- 5.3.4.4. Constructors
-
-
- public ServiceURL(String URL,int lifetime)
-
-
- Construct a service URL object having the specified lifetime.
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 64]
-
- RFC 2614 Service Location API June 1999
-
-
- Parameters:
-
- URL
-
- The URL as a string. Must be either a service: URL or a valid
- generic URL according to RFC 2396 [2].
-
- lifetime
-
- The service advertisement lifetime in seconds. This value may
- be between LIFETIME_NONE and LIFETIME_MAXIMUM.
-
-
- 5.3.4.5. Methods
-
-
- public ServiceType getServiceType()
-
-
- Returns the service type object representing the service type name of
- the URL.
-
-
- public final void setServiceType(ServiceType type)
- throws ServiceLocationException
-
-
- Set the service type name to the object. Ignored if the URL is a
- service: URL.
-
- Parameters:
-
- type
-
- The service type object.
-
-
- public String getTransport()
-
-
- Get the network layer transport identifier. If the transport is IP,
- an empty string, "", is returned.
-
-
- public String getHost()
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 65]
-
- RFC 2614 Service Location API June 1999
-
-
- Returns the host identifier. For IP, this will be the machine name
- or IP address.
-
-
- public int getPort()
-
-
- Returns the port number, if any. For non-IP transports, always
- returns NO_PORT.
-
-
- public String getURLPath()
-
-
- Returns the URL path description, if any.
-
-
- public int getLifetime()
-
-
- Returns the service advertisement lifetime. This will be a positive
- int between LIFETIME_NONE and LIFETIME_MAXIMUM.
-
-
- public boolean equals(Object obj)
-
-
- Compares the object to the ServiceURL and returns true if the two are
- the same. Two ServiceURL objects are equal if their current service
- types match and they have the same host, port, transport, and URL
- path.
-
-
- public String toString()
-
-
- Returns a formatted string with the URL. Overrides Object.toString().
- The returned URL has the original service type or URL scheme, not the
- current service type.
-
-
- public int hashCode()
-
-
- Overrides Object.hashCode(). Hashes on the current service type,
- transport, host, port, and URL part.
-
-
-
-
-
- Kempf & Guttman Informational [Page 66]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.4. SLP Access Interfaces
-
- 5.4.1. Interface Advertiser
-
- 5.4.1.1. Synopsis
-
-
- public interface Advertiser
-
-
- 5.4.1.2. Description
-
- The Advertiser is the SA interface, allowing clients to register new
- service instances with SLP, to change the attributes of existing
- services, and to deregister service instances. New registrations and
- modifications of attributes are made in the language locale with
- which the Advertiser was created, deregistrations of service
- instances are made for all locales.
-
- 5.4.1.3. Instance Methods
-
-
- public abstract Locale getLocale()
-
-
- Return the language locale with which this object was created.
-
-
- public abstract void register(ServiceURL URL,
- Vector attributes)
- throws ServiceLocationException
-
- Register a new service with SLP having the given attributes.
-
- The API library is required to perform the operation in all
- scopes obtained through configuration.
-
-
- Parameters:
-
- URL
-
- The URL for the service.
-
- attributes
-
- A vector of ServiceLocationAttribute objects describing the
- service.
-
-
-
- Kempf & Guttman Informational [Page 67]
-
- RFC 2614 Service Location API June 1999
-
-
- public abstract void deregister(ServiceURL URL)
- throws ServiceLocationException
-
-
- Deregister a service from the SLP framework. This has the effect
- of deregistering the service from every language locale. The API
- library is required to perform the operation in all scopes obtained
- through configuration.
-
- Parameters:
-
- URL
-
- The URL for the service.
-
-
- public abstract void
- addAttributes(ServiceURL URL,
- Vector attributes)
- throws ServiceLocationException
-
-
- Update the registration by adding the given attributes. The API
- library is required to perform the operation in all scopes obtained
- through configuration.
-
- Parameters:
-
- URL
-
- The URL for the service.
-
- attributes
-
- A Vector of ServiceLocationAttribute objects to add to the
- existing registration. Use an empty vector to update the URL
- alone. May not be null.
-
-
- public abstract void
- deleteAttributes(ServiceURL URL,
- Vector attributeIds)
- throws ServiceLocationException
-
-
- Delete the attributes from a URL for the locale with which the
- Advertiser was created. The API library is required to perform the
- operation in all scopes obtained through configuration.
-
-
-
- Kempf & Guttman Informational [Page 68]
-
- RFC 2614 Service Location API June 1999
-
-
- Parameters:
-
- URL
-
- The URL for the service.
-
- attributeIds
-
- A vector of Strings indicating the ids of the attributes
- to remove. The strings may be attribute ids or they
- may be wildcard patterns to match ids. See [7] for the
- syntax of wildcard patterns. The strings may include SLP
- reserved characters, they will be escaped by the API before
- transmission. May not be the empty vector or null.
-
-
- 5.4.2. Interface Locator
-
- 5.4.2.1. Synopsis
-
-
- public interface Locator
-
-
- 5.4.2.2. Description
-
- The Locator is the UA interface, allowing clients to query the SLP
- framework about existing service types, services instances, and about
- the attributes of an existing service instance or service type.
- Queries for services and attributes are made in the locale with which
- the Locator was created, queries for service types are independent of
- locale.
-
- 5.4.2.3. Instance Methods
-
-
- public abstract Locale getLocale()
-
-
- Return the language locale with which this object was created.
-
-
- public abstract ServiceLocationEnumeration
- findServiceTypes(String namingAuthority,
- Vector scopes)
- throws ServiceLocationException
-
-
-
-
-
- Kempf & Guttman Informational [Page 69]
-
- RFC 2614 Service Location API June 1999
-
-
- Returns an enumeration of ServiceType objects giving known service
- types for the given scopes and given naming authority. If no service
- types are found, an empty enumeration is returned.
-
- Parameters:
-
- namingAuthority
-
- The naming authority. Use "" for the default naming authority
- and "*" for all naming authorities.
-
- scopes
-
- A Vector of scope names. The vector should be selected from
- the results of a findScopes() API invocation. Use "DEFAULT"
- for the default scope.
-
-
- public abstract ServiceLocationEnumeration
- findServices(ServiceType type,
- Vector scopes,
- String searchFilter)
- throws ServiceLocationException
-
-
- Returns a vector of ServiceURL objects for services matching the
- query, and having a matching type in the given scopes. If no
- services are found, an empty enumeration is returned.
-
- Parameters:
-
- type
-
- The SLP service type of the service.
-
- scopes
-
- A Vector of scope names. The vector should be selected from
- the results of a findScopes() API invocation. Use "DEFAULT"
- for the default scope.
-
- searchFilter
-
- An LDAPv3 [4] string encoded query. If the filter is empty,
- i.e. "", all services of the requested type in the specified
- scopes are returned. SLP reserved characters must be escaped
- in the query. Use ServiceLocationAttribute.escapeId() and
- ServiceLocationAttribute.escapeValue() to construct the query.
-
-
-
- Kempf & Guttman Informational [Page 70]
-
- RFC 2614 Service Location API June 1999
-
-
- public abstract ServiceLocationEnumeration
- findAttributes(ServiceURL URL,
- Vector scopes,
- Vector attributeIds)
- throws ServiceLocationException
-
-
- For the URL and scope, return a Vector of ServiceLocationAttribute
- objects whose ids match the String patterns in the attributeIds
- Vector. The request is made in the language locale of the Locator.
- If no attributes match, an empty enumeration is returned.
-
- Parameters:
-
- URL
-
- The URL for which the attributes are desired.
-
- scopes
-
- A Vector of scope names. The vector should be selected from
- the results of a findScopes() API invocation. Use "DEFAULT"
- for the default scope.
-
- attributeIds
-
- A Vector of String patterns identifying the desired attributes.
- An empty vector means return all attributes. As described
- in [7], the patterns may include wildcards to match substrings.
- The strings may include SLP reserved characters, they will be
- escaped by the API before transmission.
-
-
- public abstract ServiceLocationEnumeration
- findAttributes(ServiceType type,
- Vector scopes,
- Vector attributeIds)
- throws ServiceLocationException
-
-
- For the type and scope, return a Vector of all ServiceLocationAttribute
- objects whose ids match the String patterns in the attributeIds
- Vector regardless of the Locator's locale. The request is made
- independent of language locale. If no attributes are found, an empty
- vector is returned.
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 71]
-
- RFC 2614 Service Location API June 1999
-
-
- Parameters:
-
- serviceType
-
- The service type.
-
- scopes
-
- A Vector of scope names. The vector should be selected from
- the results of a findScopes() API invocation. Use "DEFAULT"
- for the default scope.
-
- attributeIds
-
- A Vector of String patterns identifying the desired
- attributes. An empty vector means return all attributes.
- As described in [7], the patterns may include wildcards to
- match all prefixes or suffixes. The patterns may include SLP
- reserved characters, they will be escaped by the API before
- transmission.
-
- 5.5. The Service Location Manager
-
- 5.5.1. Class ServiceLocationManager
-
- 5.5.1.1. Synopsis
-
-
- public class ServiceLocationManager
- extends Object
-
-
- 5.5.1.2. Description
-
- The ServiceLocationManager manages access to the service location
- framework. Clients obtain the Locator and Advertiser objects for UA
- and SA, and a Vector of known scope names from the
- ServiceLocationManager.
-
- 5.5.1.3. Class Methods
-
-
- public static int getRefreshInterval()
- throws ServiceLocationException
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 72]
-
- RFC 2614 Service Location API June 1999
-
-
- Returns the maximum across all DAs of the min-refresh-interval
- attribute. This value satisfies the advertised refresh interval
- bounds for all DAs, and, if used by the SA, assures that no
- refresh registration will be rejected. If no DA advertises a
- min-refresh-interval attribute, a value of 0 is returned.
-
-
- public static Vector findScopes()
- throws ServiceLocationException
-
-
- Returns an Vector of strings with all available scope names. The
- list of scopes comes from a variety of sources, see Section 2.1 for
- the scope discovery algorithm. There is always at least one string
- in the Vector, the default scope, "DEFAULT".
-
-
- public static Locator
- getLocator(Locale locale)
- throws ServiceLocationException
-
-
- Return a Locator object for the given language Locale. If the
- implementation does not support UA functionality, returns null.
-
- Parameters:
-
- locale
-
- The language locale of the Locator. The default SLP locale is
- used if null.
-
-
- public static Advertiser
- getAdvertiser(Locale locale)
- throws ServiceLocationException
-
-
- Return an Advertiser object for the given language locale. If the
- implementation does not support SA functionality, returns null.
-
- Parameters:
-
- locale
-
- The language locale of the Advertiser. The default SLP locale
- is used if null.
-
-
-
-
- Kempf & Guttman Informational [Page 73]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.6. Service Template Introspection
-
- 5.6.1. Abstract Class TemplateRegistry
-
- 5.6.1.1. Synopsis
-
-
- public abstract class TemplateRegistry
-
-
- 5.6.1.2. Description
-
- Subclasses of the TemplateRegistry abstract class provide access to
- service location templates [8]. Classes implementing
- TemplateRegistry perform a variety of functions. They manage the
- registration and access of service type template documents. They
- create attribute verifiers from service templates, for verification
- of attributes and introspection on template documents. Note that
- clients of the Advertiser are not required to verify attributes
- before registering (though they may get a TYPE_ERROR if the
- implementation supports type checking and there is a mismatch with
- the template).
-
- 5.6.1.3. Class Methods
-
-
- public static TemplateRegistry getTemplateRegistry();
-
-
- Returns the distinguished TemplateRegistry object for performing
- operations on and with service templates. Returns null if the
- implementation doesn't support TemplateRegistry functionality.
-
- 5.6.1.4. Instance Methods
-
-
- public abstract void
- registerServiceTemplate(ServiceType type,
- String documentURL,
- Locale locale,
- String version)
- throws ServiceLocationException
-
-
- Register the service template with the template registry.
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 74]
-
- RFC 2614 Service Location API June 1999
-
-
- Parameters:
-
- type
-
- The service type.
-
- documentURL
-
- A string containing the URL of the template document. May not
- be the empty string.
-
- locale
-
- A Locale object containing the language locale of the template.
-
- version
-
- The version number identifier of template document.
-
-
- public abstract void
-
-
- deregisterServiceTemplate(ServiceType type,
- Locale locale,
- String version)
- throws ServiceLocationException
-
-
- Deregister the template for the service type.
-
- Parameters:
-
- type
-
- The service type.
-
- locale
-
- A Locale object containing the language locale of the template.
-
- version
-
- A String containing the version number. Use null to indicate
- the latest version.
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 75]
-
- RFC 2614 Service Location API June 1999
-
-
- public abstract
- String findTemplateURL(ServiceType type,
- Locale locale,
- String version)
- throws ServiceLocationException
-
-
- Returns the URL for the template document.
-
- Parameters:
-
- type
-
- The service type.
-
- locale
-
- A Locale object containing the language locale of the template.
-
- version
-
- A String containing the version number. Use null to indicate
- the latest version.
-
-
- public abstract
- ServiceLocationAttributeVerifier
- attributeVerifier(String documentURL)
- throws ServiceLocationException
-
-
- Reads the template document URL and returns an attribute verifier
- for the service type. The attribute verifier can be used for
- verifying that registration attributes match the template, and for
- introspection on the template definition.
-
- Parameters:
-
- documentURL
-
- A String containing the template document's URL. May not be the
- empty string.
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 76]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.6.2. Interface ServiceLocationAttributeVerifier
-
- 5.6.2.1. Synopsis
-
-
- public interface ServiceLocationAttributeVerifier
-
-
- 5.6.2.2. Description
-
- The ServiceLocationAttributeVerifier provides access to service
- templates. Classes implementing this interface parse SLP template
- definitions, provide information on attribute definitions for service
- types, and verify whether a ServiceLocationAttribute object matches a
- template for a particular service type. Clients obtain
- ServiceLocationAttributeVerifier objects for specific SLP service
- types through the TemplateRegistry.
-
- 5.6.2.3. Instance Methods
-
-
- public abstract ServiceType getServiceType()
-
-
- Returns the SLP service type for which this is the verifier.
-
-
- public abstract Locale getLocale()
-
-
- Return the language locale of the template.
-
-
- public abstract String getVersion()
-
-
- Return the template version number identifier.
-
-
- public abstract String getURLSyntax()
-
-
- Return the URL syntax expression for the service: URL.
-
-
- public abstract String getDescription()
-
-
-
-
-
- Kempf & Guttman Informational [Page 77]
-
- RFC 2614 Service Location API June 1999
-
-
- Return the descriptive help text for the template.
-
-
- public abstract ServiceLocationAttributeDescriptor
- getAttributeDescriptor(String attrId)
-
-
- Return the ServiceLocationAttributeDescriptor for the attribute
- having the named id. If no such attribute exists in this template,
- return null. This method is primarily for GUI tools to display
- attribute information. Programmatic verification of attributes
- should use the verifyAttribute() method.
-
-
- public abstract Enumeration
- getAttributeDescriptors()
-
-
- Returns an Enumeration allowing introspection on the attribute
- definition in the service template. The Enumeration returns
- ServiceLocationAttributeDescriptor objects for the attributes.
- This method is primarily for GUI tools to display attribute
- information. Programmatic verification of attributes should use the
- verifyAttribute() method.
-
-
- public abstract void
- verifyAttribute(
- ServiceLocationAttribute attribute)
- throws ServiceLocationException
-
-
- Verify that the attribute matches the template definition. If the
- attribute doesn't match, ServiceLocationException is thrown with the
- error code as ServiceLocationException.PARSE_ERROR.
-
- Parameters:
-
- attribute
-
- The ServiceLocationAttribute object to be verified.
-
-
- public abstract void
- verifyRegistration(
- Vector attributeVector)
- throws ServiceLocationException
-
-
-
-
- Kempf & Guttman Informational [Page 78]
-
- RFC 2614 Service Location API June 1999
-
-
- Verify that the Vector of ServiceLocationAttribute objects matches
- the template for this service type. The vector must contain all the
- required attributes, and all attributes must match their template
- definitions. If the attributes don't match, ServiceLocationException
- is thrown with the error code as ServiceLocationException.PARSE_ERROR
-
- Parameters:
-
- attributeVector
-
- A Vector of ServiceLocationAttribute objects for the
- registration.
-
-
- 5.6.3. Interface ServiceLocationAttributeDescriptor
-
- 5.6.3.1. Synopsis
-
-
- public interface
- ServiceLocationAttributeDescriptor
-
-
- 5.6.3.2. Description
-
- The ServiceLocationAttributeDescriptor interface provides
- introspection on a template attribute definition. Classes
- implementing the ServiceLocationAttributeDescriptor interface return
- information on a particular service location attribute definition
- from the service template. This information is primarily for GUI
- tools. Programmatic attribute verification should be done through
- the ServiceLocationAttributeVerifier.
-
- 5.6.3.3. Instance Methods
-
-
- public abstract String getId()
-
-
- Return a String containing the attribute's id.
-
-
- public abstract String getValueType()
-
-
- Return a String containing the fully package-qualified Java type of
- the attribute. SLP types are translated into Java types as follows:
-
-
-
-
- Kempf & Guttman Informational [Page 79]
-
- RFC 2614 Service Location API June 1999
-
-
- STRING
-
- "java.lang.String"
-
- INTEGER
-
- "java.lang.Integer"
-
- BOOLEAN
-
- "java.lang.Boolean"
-
- OPAQUE
-
- "[B" (i.e. array of byte, byte[])
-
- KEYWORD
-
- empty string, ""
-
-
- public abstract String getDescription()
-
-
- Return a String containing the attribute's help text.
-
-
- public abstract Enumeration
- getAllowedValues()
-
-
- Return an Enumeration of allowed values for the attribute type.
- For keyword attributes returns null. For no allowed values (i.e.
- unrestricted) returns an empty Enumeration.
-
-
- public abstract Enumeration
- getDefaultValues()
-
-
- Return an Enumeration of default values for the attribute type.
- For keyword attributes returns null. For no allowed values (i.e.
- unrestricted) returns an empty Enumeration.
-
-
- public abstract boolean
- getRequiresExplicitMatch()
-
-
-
-
- Kempf & Guttman Informational [Page 80]
-
- RFC 2614 Service Location API June 1999
-
-
- Returns true if the "X"" flag is set, indicating that the attribute
- should be included in an any Locator.findServices() request search
- filter.
-
-
- public abstract boolean getIsMultivalued()
-
-
- Returns true if the "M" flag is set.
-
-
- public abstract boolean getIsOptional()
-
-
- Returns true if the "O"" flag is set.
-
-
- public abstract boolean getIsLiteral()
-
-
- Returns true if the "L" flag is set.
-
-
- public abstract boolean getIsKeyword()
-
-
- Returns true if the attribute is a keyword attribute.
-
-
- 5.7. Implementation Notes
-
- 5.7.1. Refreshing Registrations
-
- A special lifetime constant, ServiceURL.LIFETIME_PERMANENT, is used
- by clients to indicate that the URL should be automatically refreshed
- until the application exits. The API implementation should interpret
- this flag as indicating that the URL lifetime is
- ServiceURL.LIFETIME_MAXIMUM, and MUST arrange for automatic refresh
- to occur.
-
- 5.7.2. Parsing Alternate Transports in ServiceURL
-
- The ServiceURL class is designed to handle multiple transports. The
- standard API performs no additional processing on transports other
- than IP except to separate out the host identifier and the URL path.
- However, implementations are free to subclass ServiceURL and support
- additional methods that provide more detailed parsing of alternate
- transport information. For IP transport, the port number, if any, is
-
-
-
- Kempf & Guttman Informational [Page 81]
-
- RFC 2614 Service Location API June 1999
-
-
- returned from the getPort() method. For non-IP transports, the
- getPort() method returns NO_PORT.
-
- 5.7.3. String Attribute Values
-
- In general, translation between Java types for attribute values and
- the SLP on-the-wire string is straightforward. However, there are
- two corner cases. If the Java attribute value type is String and the
- value of the string has an on-the-wire representation that is
- inferred by SLP as an integer, the registered attribute value may not
- be what the API client intended. A similar problem could result if
- the Java attribute value is the string "true" or "false", in which
- case the on-the-wire representation is inferred to boolean. To
- handle these corner cases, the Java API prepends a space onto the
- string. So, for example, if the string attribute value is "123", the
- Java API transforms the value to "123 ", which will have an on-the-
- wire representation that is inferred by SLP to be string. Since
- appended and prepended spaces have no effect on query handling, this
- procedure should cause no problem with queries. API clients need to
- be aware, however, that the transformation is occurring.
-
- 5.7.4. Client Side Syntax Checking
-
- The syntax of scope names, service type names, naming authority
- names, and URLs is described in [7] and [8]. The various methods and
- classes taking String parameters for these entities SHOULD type check
- the parameters for syntax errors on the client side, and throw an
- IllegalArgumentException if an error occurs. In addition, character
- escaping SHOULD be implemented before network transmission for
- escapable characters in attribute ids and String values. This
- reduces the number of error messages transmitted. The
- ServiceLocationAttribute class provides methods for clients to obtain
- escaped attribute id and value strings to facilitate query
- construction.
-
- 5.7.5. Language Locale Handling
-
- The Locator and Advertiser interfaces are created with a Locale
- parameter. The language locale with which these objects are created
- is used in all SLP requests issued through the object. If the Locale
- parameter is null, the default SLP locale is used. The default SLP
- locale is determined by, first, checking the net.slp.locale System
- property. If that is unset, then the default SLP locale [7] is used,
- namely "en". Note that the default SLP locale may not be the same as
- the default Java locale.
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 82]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.7.6. Setting SLP System Properties
-
- SLP system properties that are originally set in the configuration
- file can be overridden programmatically in API clients by simply
- invoking the System.getProperties() operation to get a copy of the
- system properties, modifying or adding the SLP property in question,
- then using System.setProperties() to set the properties to the
- modified Property object. Program execution continues without
- interruption by substituting the default for the erroneous parameter.
- Errors are checked when the property is used and are logged.
-
- The SLP configuration file cannot be read with the
- java.util.Properties file reader because there are some syntactic
- differences. The SLP configuration file syntax defines a different
- escape convention for non-ASCII characters than the Java syntax.
- However, after the file has been read, the properties are stored and
- retrieved from java.util.Properties objects.
-
- Properties are global for a process, affecting all threads and all
- Locator and Advertiser objects obtained through the
- ServiceLocationManager. With the exception of the net.slp.locale,
- net.slp.typeHint, and net.slp.maxResults properties, clients should
- rarely be required to override these properties, since they reflect
- properties of the SLP network that are not of concern to individual
- agents. If changes are required, system administrators should modify
- the configuration file.
-
- 5.7.7. Multithreading
-
- Thread-safe operation is relatively easy to achieve in Java. By
- simply making each method in the classes implementing the Locator and
- Advertiser interfaces synchronized, and by synchronizing access to
- any shared data structures within the class, the Locator and
- Advertiser interfaces are made safe. Alternatively, finer grained
- synchronization is also possible within the classes implementing
- Advertiser and Locator.
-
- 5.7.8. Modular Implementations
-
- While, at first glance, the API may look rather heavyweight, the
- design has been carefully arranged so that modular implementations
- that provide only SA, only UA, or only service template access
- capability, or any combination of the three, are possible.
-
- Because the objects returned from the
- ServiceLocationManager.getLocator() and
- ServiceLocationManager.getAdvertiser() operations are interfaces, and
- because the objects returned through those interfaces are in the set
-
-
-
- Kempf & Guttman Informational [Page 83]
-
- RFC 2614 Service Location API June 1999
-
-
- of base data structures, an implementation is free to omit either UA
- or SA capability by simply returning null from the instance creation
- operation if the classes implementing the missing function cannot be
- dynamically linked. API clients are encouraged to check for such a
- contingency, and to signal an exception if it occurs. Similarly, the
- TemplateRegistry concrete subclass can simply be omitted from an
- implementation that only supports UA and/or SA clients, and the
- TemplateRegistry.getRegistry() method can return null. In this way,
- the API implementation can be tailored for the particular memory
- requirements at hand.
-
- In addition, if an implementation only supports the minimal subset of
- SLP [7], the unsupported Locator and Advertiser interface operations
- can throw an exception with ServiceLocationException.NOT_IMPLEMENTED
- as the error code. This supports better source portability between
- low and high memory platforms.
-
- 5.7.9. Asynchronous and Incremental Return Semantics
-
- The Java API contains no specific support for asynchronous operation.
- Incremental return is not needed for the Advertiser because service
- registrations can be broken up into pieces when large. Asynchronous
- return is also not needed because clients can always issue the
- Advertiser operation in a separate thread if the calling thread can't
- block.
-
- The Locator can be implemented either synchronously or
- asynchronously. Since the return type for Locator calls is
- ServiceLocationEnumeration, a Java API implementation that supports
- asynchronous semantics can implement ServiceLocationEnumeration to
- dole results out as they come in, blocking when no results are
- available. If the client code needs to support other processing
- while the results are trickling in, the call into the enumeration to
- retrieve the results can be done in a separate thread.
-
- Unlike the C case, collation semantics for return of attributes when
- an attribute request by service type is made require that the API
- collate returned values so that only one attribute having a collation
- of all returned values appear to the API client. In practice, this
- may limit the amount of asynchronous processing possible with the
- findAttributes() method. This requirement is imposed because memory
- management is much easier in Java and so implementing collation as
- part of the API should not be as difficult as in C, and it saves the
- client from having to do the collation.
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 84]
-
- RFC 2614 Service Location API June 1999
-
-
- 5.8. Example
-
- In this example, a printer server advertises its availability to
- clients. Additionally, the server advertises a service template for
- use by client software in validating service requests:
-
-
- //Get the Advertiser and TemplateRegistry.
-
- Advertiser adv = null;
- TemplateRegistry tr = null
-
- try {
-
- adv = ServiceLocationManager.getAdvertiser("en");
-
- tr = TemplateRegistry.getTemplateRegistry();
-
- } catch( ServiceLocationException ex ) { } //Deal with error.
-
- if( adv == null ) {
-
- //Serious error as printer can't be registered
- // if the implementation doesn't support SA
- // functionality.
-
- }
-
- //Get the printer's attributes, from a file or
- // otherwise. We assume that the attributes
- // conform to the template, otherwise, we
- // could register the template here and verify
- // them.
-
- Vector attributes = getPrinterAttributes();
-
- //Create the service: URL for the printer.
-
- ServiceURL printerURL =
- new ServiceURL(
- "service:printer:lpr://printshop/color2",
- ServiceURL.LIFETIME_MAXIMUM);
-
- try {
-
- //Register the printer.
-
- adv.register(printerURL, attributes);
-
-
-
- Kempf & Guttman Informational [Page 85]
-
- RFC 2614 Service Location API June 1999
-
-
- //If the template registry is available,
- // register the printer's template.
-
- if( tr != null ) {
- tr.registerServiceTemplate(
- new ServiceType("service:printer:lpr"),
- "http://shop.arv/printer/printer-lpr.slp",
- new Locale("en",""),
- "1.0");
-
- }
-
- } catch( ServiceLocationException ex ) { } //Deal with error.
-
-
- Suppose a client is looking for color printer. The following code is
- used to issue a request for printer advertisements:
-
-
- Locator loc = null;
- TemplateRegistry tr = null;
-
- try {
-
- loc = ServiceLocationManager.getLocator("en");
-
- } catch( ServiceLocationException ex ) { } //Deal with error.
-
- if( loc == null ) {
-
- //Serious error as client can't be located
- // if the implementation doesn't support
- // UA functionality.
-
- }
-
- //We want a color printer that does CMYK
- // and prints at least 600 dpi.
-
- String query = "(&(marker-type=CMYK)(resolution=600))";
-
- //Get scopes.
-
- Vector scopes = ServiceLocationManager.findScopes();
-
- Enumeration services;
-
- try {
-
-
-
- Kempf & Guttman Informational [Page 86]
-
- RFC 2614 Service Location API June 1999
-
-
- services =
- loc.findServices(new ServiceType("service:printer"),scopes,query);
-
- } catch { } //Deal with error.
-
- if (services.hasMoreElements() ) {
-
- //Printers can now be used.
- ServiceURL surl = (ServiceURL) services.next();
-
- Socket sock = new Socket(surl.getHost, surl.getPort());
-
- // Use the Socket...
-
- }
-
-
- 6. Internationalization Considerations
-
- 6.1. service URL
-
- The service URL itself must be encoded using the rules set forth in
- [2]. The character set encoding is limited to specific ranges within
- the UTF-8 character set [3].
-
- The attribute information associated with the service URL must be
- expressed in UTF-8. See [8] for attribute internationalization
- guidelines.
-
- 6.2. Character Set Encoding
-
- Configuration and serialized registration files are encoded in the
- UTF-8 character set [3]. This is fully compatible with US-ASCII
- character values. C platforms that do not support UTF-8 are required
- to check the top bit of input bytes to determine whether the incoming
- character is multibyte. If it is, the character should be dealt with
- accordingly. This should require no additional implementation
- effort, since the SLP wire protocol requires that strings are encoded
- as UTF-8. C platforms without UTF-8 support need to supply their own
- support, if only in the form of multibyte string handling.
-
- At the API level, the character encoding is specified to be Unicode
- for Java and UTF-8 for C. Unicode is the default in Java. For C, the
- standard US-ASCII 8 bits per character, null terminated C strings are
- a subset of the UTF-8 character set, and so work in the API. Because
- the C API is very simple, the API library needs to do a minimum of
- processing on UTF-8 strings. The strings primarily just need to be
- reflected into the outgoing SLP messages, and reflected out of the
-
-
-
- Kempf & Guttman Informational [Page 87]
-
- RFC 2614 Service Location API June 1999
-
-
- API from incoming SLP messages.
-
- 6.3. Language Tagging
-
- All SLP requests and registrations are tagged to indicate in which
- language the strings included are encoded. This allows multiple
- languages to be supported. It also presents the possibility that
- error conditions result when a request is made in a language that is
- not supported. In this case, an error is only returned when there is
- data available, but not obtainable in the language requested.
-
- The dialect portion of the Language Tag is used on 'best effort'
- basis for matching strings by SLP. Dialects that match are preferred
- over those which don't. Dialects that do not match will not prevent
- string matching or comparisons from occurring.
-
- 7. Security Considerations
-
- Security is handled within the API library and is not exposed to API
- clients except in the form of exceptions. The
- net.slp.securityEnabled, property determines whether an SA client's
- messages are signed, but a UA client should be prepared for an
- authentication exception at any time, because it may contact a DA
- with authenticated advertisements.
-
- An adversary could delete valid service advertisements, provide false
- service information and deny UAs knowledge of existing services
- unless the mechanisms in SLP for authenticating SLP messages are
- used. These mechanisms allow DAAdverts, SAAdverts, Service URLs and
- Service Attributes to be verified using digital cryptography. For
- this reason, all SLP agents should be configured to use SLP SPIs.
- See [7] for a description of how this mechanism works.
-
- 8. Acknowledgements
-
- The authors would like to thank Don Provan for his pioneering work
- during the initial stages of API definition.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 88]
-
- RFC 2614 Service Location API June 1999
-
-
- 9. References
-
- [1] Bradner, S., "Key Words for Use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [2] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform
- Resource Identifiers (URI): Generic Syntax", RFC 2396,
- August 1998.
-
- [3] Yergeau, F., "UTF-8, a transformation format of ISO 10646",
- RFC 2279, January 1998.
-
- [4] Howes, T., "The String Representation of LDAP Search Filters",
- RFC 2254 December 1997.
-
- [5] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", RFC 2234, November 1997.
-
- [6] Alvestrand, H., "Tags for the Identification of Languages",
- RFC 1766, March 1995.
-
- [7] Guttman, E., Perkins, C., Veizades, J. and M. Day, "Service
- Location Protocol, Version 2", RFC 2608, June 1999.
-
- [8] Guttman, E., Perkins, C. and J. Kempf, "Service Templates and
- Service: Schemes", RFC 2609, June 1999.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 89]
-
- RFC 2614 Service Location API June 1999
-
-
- 10. Authors' Addresses
-
- Questions about this memo can be directed to:
-
- James Kempf
- Sun Microsystems
- 901 San Antonio Rd.
- Palo Alto, CA, 94303
- USA
-
- Phone: +1 650 786 5890
- Fax: +1 650 786 6445
- EMail: james.kempf@sun.com
-
-
- Erik Guttman
- Sun Microsystems
- Bahnstr. 2
- 74915 Waibstadt
- Germany
-
- Phone: +49 7263 911 701
- EMail: erik.guttman@sun.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 90]
-
- RFC 2614 Service Location API June 1999
-
-
- 11. Full Copyright Statement
-
- Copyright (C) The Internet Society (1999). All Rights Reserved.
-
- This document and translations of it may be copied and furnished to
- others, and derivative works that comment on or otherwise explain it
- or assist in its implementation may be prepared, copied, published
- and distributed, in whole or in part, without restriction of any
- kind, provided that the above copyright notice and this paragraph are
- included on all such copies and derivative works. However, this
- document itself may not be modified in any way, such as by removing
- the copyright notice or references to the Internet Society or other
- Internet organizations, except as needed for the purpose of
- developing Internet standards in which case the procedures for
- copyrights defined in the Internet Standards process must be
- followed, or as required to translate it into languages other than
- English.
-
- The limited permissions granted above are perpetual and will not be
- revoked by the Internet Society or its successors or assigns.
-
- This document and the information contained herein is provided on an
- "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
- TASK FORCE DISCLAIMS 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."
-
- Acknowledgement
-
- Funding for the RFC Editor function is currently provided by the
- Internet Society.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kempf & Guttman Informational [Page 91]
-
-