Uniforms are a superset of URIs, they are byte strings with this general syntax:
uniform = scheme ":" opaque-string scheme = 1*<prinable ascii chars except ":"> opaque-string = 0*VCHAR
To address entities in the PSYC network a new (URI) scheme has been defined: 'psyc' (see below).
PSYC nodes (especially servers) MAY allow routing of packets based on just the scheme name part of the uniform. This allows gateways to use alternate addressing schemes. (For example IRC_URI).
See also Spec:Routing about this.
uniform = "psyc://" hostname [ ":" port [ transport ] ] [ "/" [ object-name ["#" channel ] ] hostname = <hostname, see also 'host' definition in RFC 2396 section 3.2.2.> port = <a port number (should be negative for non connectable ports!)> transport = "c" | "d" | "s" object-name = [ type ] name type = "@" | "~" | "$" name = <see 'opaque_part' in RFC 2396 section 3. (any printable characters except "#")> channel = <see 'opaque_part' in RFC 2396 section 3.>
Port numbers are typically used when connecting to a client process in a peer to peer manner. Servers would use DNS SRV instead, if for some reason they cannot use the canonical port number.
The 'transport' part of the uniform defines what kind of transport is used. The absence of the transport denominator character implies a recommendation to pick an option at discretion of the caller.
See also Circuit.
About the semantics of the channel part of a uniform, see Spec:Entity.