| 10. Protocols |
| Module Protocols.HTTP |
string Protocols.HTTP.filename_to_type(string filename)
string Protocols.HTTP.extension_to_type(string extension)
Looks up the file extension in a table to return a suitable MIME type. The table is located in the [...]pike/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/extensions.txt file.
string Protocols.HTTP.http_date(int time)
Makes a time notification suitable for the HTTP protocol.
string Protocols.HTTP.http_decode_string(string what)
mapping(string:string|array(string)) Protocols.HTTP.http_decode_urlencoded_query(string query, void|mapping dest)
Decodes an URL-encoded query into a mapping.
object(Protocols.HTTP.Query) Protocols.HTTP.get_url(string|object(Standards.URI) url)
object(Protocols.HTTP.Query) Protocols.HTTP.get_url(string|object(Standards.URI) url, mapping query_variables)
object(Protocols.HTTP.Query) Protocols.HTTP.get_url(string|object(Standards.URI) url, mapping query_variables, mapping request_headers)
object(Protocols.HTTP.Query) Protocols.HTTP.get_url(string|object(Standards.URI) url, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
Sends a HTTP GET request to the server in the URL and returns the created and initialized Protocols.HTTP.Query object. 0 is returned upon failure. If a query object having request_headers->Connection=="Keep-Alive" from a previous request is provided and the already established server connection can be used for the next request, you may gain some performance.
object(Protocols.HTTP.Query) Protocols.HTTP.put_url(string|object(Standards.URI) url)
object(Protocols.HTTP.Query) Protocols.HTTP.put_url(string|object(Standards.URI) url, string file)
object(Protocols.HTTP.Query) Protocols.HTTP.put_url(string|object(Standards.URI) url, string file, mapping query_variables)
object(Protocols.HTTP.Query) Protocols.HTTP.put_url(string|object(Standards.URI) url, string file, mapping query_variables, mapping request_headers)
object(Protocols.HTTP.Query) Protocols.HTTP.put_url(string|object(Standards.URI) url, string file, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
Sends a HTTP PUT request to the server in the URL and returns the created and initialized Protocols.HTTP.Query object. 0 is returned upon failure. If a query object having request_headers->Connection=="Keep-Alive" from a previous request is provided and the already established server connection can be used for the next request, you may gain some performance.
object(Protocols.HTTP.Query) Protocols.HTTP.delete_url(string|object(Standards.URI) url)
object(Protocols.HTTP.Query) Protocols.HTTP.delete_url(string|object(Standards.URI) url, mapping query_variables)
object(Protocols.HTTP.Query) Protocols.HTTP.delete_url(string|object(Standards.URI) url, mapping query_variables, mapping request_headers)
object(Protocols.HTTP.Query) Protocols.HTTP.delete_url(string|object(Standards.URI) url, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
Sends a HTTP DELETE request to the server in the URL and returns the created and initialized Protocols.HTTP.Query object. 0 is returned upon failure. If a query object having request_headers->Connection=="Keep-Alive" from a previous request is provided and the already established server connection can be used for the next request, you may gain some performance.
array(string) Protocols.HTTP.get_url_nice(string|object(Standards.URI) url, mapping query_variables)
array(string) Protocols.HTTP.get_url_nice(string|object(Standards.URI) url, mapping query_variables, mapping request_headers)
array(string) Protocols.HTTP.get_url_nice(string|object(Standards.URI) url, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
string Protocols.HTTP.get_url_data(string|object(Standards.URI) url, mapping query_variables)
string Protocols.HTTP.get_url_data(string|object(Standards.URI) url, mapping query_variables, mapping request_headers)
string Protocols.HTTP.get_url_data(string|object(Standards.URI) url, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
Returns an array of ({content_type,data}) and just the data string respective, after calling the requested server for the information. 0 is returned upon failure.
array(string) Protocols.HTTP.post_url_nice(string|object(Standards.URI) url, mapping query_variables)
array(string) Protocols.HTTP.post_url_nice(string|object(Standards.URI) url, mapping query_variables, mapping request_headers)
array(string) Protocols.HTTP.post_url_nice(string|object(Standards.URI) url, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
string Protocols.HTTP.post_url_data(string|object(Standards.URI) url, mapping query_variables)
string Protocols.HTTP.post_url_data(string|object(Standards.URI) url, mapping query_variables, mapping request_headers)
string Protocols.HTTP.post_url_data(string|object(Standards.URI) url, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
object(Protocols.HTTP.Query) Protocols.HTTP.post_url(string|object(Standards.URI) url, mapping query_variables)
object(Protocols.HTTP.Query) Protocols.HTTP.post_url(string|object(Standards.URI) url, mapping query_variables, mapping request_headers)
object(Protocols.HTTP.Query) Protocols.HTTP.post_url(string|object(Standards.URI) url, mapping query_variables, mapping request_headers, object(Protocols.HTTP.Query) query)
Similar to the Protocols.HTTP.get_url class of functions, except that the query variables is sent as a POST request instead of as a GET.
string Protocols.HTTP.unentity(string s)
Helper function for replacing HTML entities with the corresponding iso-8859-1 characters.
All characters aren't replaced, only those with corresponding iso-8859-1 characters.
string Protocols.HTTP.http_encode_query(mapping(string:int|string) variables)
Encodes a query mapping to a string; this protects odd - in http perspective - characters like '&' and '#' and control characters, and packs the result together in a HTTP query string.
Example:
> Protocols.HTTP.http_encode_query( (["anna":"eva","lilith":"blue"]) );
Result: "lilith=blue&anna=eva"
> Protocols.HTTP.http_encode_query( (["&":"&","'=\"":"\0\0\0"]) );
Result: "%26amp%3b=%26&%27%3d%22=%00%00%00"
string Protocols.HTTP.http_encode_string(string in)
This protects all odd - see Protocols.HTTP.http_encode_query - characters for transfer in HTTP.
Do not use this function to protect URLs, since it will protect URL characters like '/' and '?'.
| CLASS Protocols.HTTP.HeaderParser |
Fast HTTP header parser.
| CLASS Protocols.HTTP.Query |
Open and execute an HTTP query.
int Protocols.HTTP.Query()->errno
Errno copied from the connection.
int Protocols.HTTP.Query()->ok
Tells if the connection is successfull.
mapping Protocols.HTTP.Query()->headers
Headers as a mapping. All header names are in lower case, for convinience.
string Protocols.HTTP.Query()->protocol
Protocol string, ie "HTTP/1.0".
int Protocols.HTTP.Query()->status
string Protocols.HTTP.Query()->status_desc
Status number and description (eg 200 and "ok").
mapping Protocols.HTTP.Query()->hostname_cache
Set this to a global mapping if you want to use a cache, prior of calling *request().
array Protocols.HTTP.Query()->async_dns
Set this to an array of Protocols.DNS.async_clients,
if you wish to limit the number of outstanding DNS
requests. Example:
async_dns = allocate(20, Protocols.DNS.async_client)();
object(Protocols.HTTP.Query) Protocols.HTTP.Query()->set_callbacks(function request_ok, function request_fail, mixed ... extra)
object(Protocols.HTTP.Query) Protocols.HTTP.Query()->async_request(string server, int port, string query)
object(Protocols.HTTP.Query) Protocols.HTTP.Query()->async_request(string server, int port, string query, mapping headers, string|void data)
Setup and run an asynchronous request, otherwise similar to Protocols.HTTP.Query.thread_request.
request_ok(Protocols.HTTP.Query httpquery,...extra args) will be called when connection is complete, and headers are parsed.
request_fail(Protocols.HTTP.Query httpquery,...extra args) is called if the connection fails.
Returns the called object
object(Protocols.HTTP.Query) Protocols.HTTP.Query()->thread_request(string server, int port, string query)
object(Protocols.HTTP.Query) Protocols.HTTP.Query()->thread_request(string server, int port, string query, mapping headers, void|string data)
Create a new query object and begin the query.
The query is executed in a background thread; call Protocols.HTTP.Query.`() in the object to wait for the request to complete.
query is the first line sent to the HTTP server; for instance "GET /index.html HTTP/1.1".
headers will be encoded and sent after the first line, and data will be sent after the headers.
Returns the called object.
int Protocols.HTTP.Query()->`()()
Wait for connection to complete.
Returns 1 on successfull connection, 0 on failure.
string Protocols.HTTP.Query()->data(int|void max_length)
Gives back the data as a string.
int Protocols.HTTP.Query()->downloaded_bytes()
Gives back the number of downloaded bytes.
int Protocols.HTTP.Query()->total_bytes()
Gives back the size of a file if a content-length header is present and parsed at the time of evaluation. Otherwise returns -1.
array Protocols.HTTP.Query()->cast("array")
Gives back ({mapping headers, string data,
string protocol, int status, string status_desc});
mapping Protocols.HTTP.Query()->cast("mapping")
Gives back
headers |
(["protocol":protocol,
"status":status number,
"status_desc":status description,
"data":data]);
string Protocols.HTTP.Query()->cast("string")
Gives back the answer as a string.
object(Protocols.HTTP.Query.PseudoFile) Protocols.HTTP.Query()->file()
object(Protocols.HTTP.Query.PseudoFile) Protocols.HTTP.Query()->file(mapping newheaders, void|mapping removeheaders)
Gives back a pseudo-file object, with the methods read() and close(). This could be used to copy the file to disc at a proper tempo.
newheaders, removeheaders is applied as:
Make sure all new and remove-header indices are lower case.(oldheaders|newheaders))-removeheaders
Protocols.HTTP.Query.datafile
object(Protocols.HTTP.Query.PseudoFile) Protocols.HTTP.Query()->datafile()
Gives back a pseudo-file object, with the methods read() and close(). This could be used to copy the file to disc at a proper tempo.
Protocols.HTTP.Query.datafile doesn't give the complete request, just the data.
Protocols.HTTP.Query.file
void Protocols.HTTP.Query()->async_fetch(function callback, mixed ... extra)
Fetch all data in background.
| Module Protocols.HTTP.Server |
| CLASS Protocols.HTTP.Server.Port |
The simplest server possible. Binds a port and calls a callback with Request objects.
void Protocols.HTTP.Server.Port()->create(function(, object(Request):void) callback)
void Protocols.HTTP.Server.Port()->create(function(, object(Request):void) callback, int portno, void|string interface)
void Protocols.HTTP.Server.Port()->close()
Closes the HTTP port.
| Module SSL |
| CLASS SSL.session |
The most important information in a session object is a choice of encryption algorithms and a "master secret" created by keyexchange with a client. Each connection can either do a full key exchange to established a new session, or reuse a previously established session. That is why we have the session abstraction and the session cache. Each session is used by one or more connections, in sequence or simultaneously.
It is also possible to change to a new session in the middle of a connection.
string SSL.session()->identity
Identifies the session to the server
int SSL.session()->compression_algorithm
Always COMPRESSION_null.
int SSL.session()->cipher_suite
Constant defining a choice of keyexchenge, encryption and mac algorithm.
object SSL.session()->cipher_spec
Information about the encryption method derived from the cipher_suite.
int SSL.session()->ke_method
Key exchange method, also derived from the cipher_suite.
string SSL.session()->master_secret
48 byte secret shared between the client and the server. Used for deriving the actual keys.
void SSL.session()->set_cipher_suite(int suite, int version)
void SSL.session()->set_compression_method(int compr)
array SSL.session()->new_server_states(string client_random, string server_random, array(int) version)
Computes a new set of encryption stetes, derived from the client_random, server_random and master_secret strings.
| ||||||
array SSL.session()->new_client_states(string client_random, string server_random, array(int) version)
Computes a new set of encryption stetes, derived from the client_random, server_random and master_secret strings.
| ||||||
| CLASS SSL.constants |
Protocol constants
| CLASS SSL.handshake |
SSL.handshake keeps the state relevant for SSL handshaking. This includes a pointer to a context object (which doesn't change), various buffers, a pointer to a session object (reuse or created as appropriate), and pending read and write states being negotiated.
Each connection will have two sets or read and write state: The current read and write states used for encryption, and pending read and write states to be taken into use when the current keyexchange handshake is finished.
int SSL.handshake()->auth_level
Policy for client authentication. One of AUTHLEVEL_none, AUTHLEVEL_ask and AUTHLEVEL_require.
array(string) SSL.handshake()->authorities
Array of authorities that are accepted for client certificates. The client will only send certificates that are signed by any of these authorities. The string is the DER-encoded issuer.
string SSL.handshake()->client_random
string SSL.handshake()->server_random
Random cookies, sent and received with the hello-messages.
int(-1..1) SSL.handshake()->handle_handshake(int type, string data, string raw)
Do handshake processing. Type is one of HANDSHAKE_*, data is the contents of the packet, and raw is the raw packet received (needed for supporting SSLv2 hello messages).
This function returns 0 if hadshake is in progress, 1 if handshake is finished, and -1 if a fatal error occured. It uses the send_packet() function to trasnmit packets.
| CLASS SSL.alert |
Alert package.
void SSL.alert()->create(int level, int description, string|void message, mixed|void trace)
| CLASS SSL.connection |
SSL packet layer. SSL.connection inherits SSL.handshake, and in addition to the state in the handshake super class, it contains the current read and write states, packet queues. This object is responsible for receiving and sending packets, processing handshake packets, and providing a clear text packages for some application.
void SSL.connection()->set_alert_callback(function(object:void) callback)
Called with alert object, sequence number of bad packet, and raw data as arguments, if a bad packet is received.
Can be used to support a fallback redirect https->http.
object SSL.connection()->recv_packet(string data)
Low-level recieve handler. Returns a packet, an alert, or zero if more data is needed to get a complete packet.
void SSL.connection()->send_packet(object packet, int|void priority)
Queues a packet for write. Handshake and and change cipher must use the same priority, so must application data and close_notifies.
string|int SSL.connection()->to_write()
Extracts data from the packet queues. Returns a string of data to be written, "" if there are no pending packets, 1 of the connection is being closed politely, and -1 if the connection died unexpectedly.
This function is intended to be called from an i/o write callback.
void SSL.connection()->send_close()
Initiate close.
string|int SSL.connection()->got_data(string|int s)
Main receive handler. Returns a string of received application data, or 1 if a close was received, or -1 if an error occured.
This function is intended to be called from an i/o read callback.
| CLASS SSL.sslfile |
Interface similar to Stdio.File.
| CLASS SSL.context |
Keeps the state that is shared by all SSL-connections for one server (or one port). It includes policy configuration, a server certificate, the server's private key(s), etc. It also includes the session cache.
object SSL.context()->rsa
The server's private key
object SSL.context()->long_rsa
object SSL.context()->short_rsa
Temporary, non-certified, private keys, used with a server_key_exchange message. The rules are as follows:
If the negotiated cipher_suite has the "exportable" property, and short_rsa is not zero, send a server_key_exchange message with the (public part of) the short_rsa key.
If the negotiated cipher_suite does not have the exportable property, and long_rsa is not zero, send a server_key_exchange message with the (public part of) the long_rsa key.
Otherwise, dont send any server_key_exchange message.
function(int:string) SSL.context()->random
Used to generate random cookies for the hello-message. If we use the RSA keyexchange method, and this is a server, this random number generator is not used for generating the master_secret.
array(string) SSL.context()->certificates
The server's certificate, or a chain of X509.v3 certificates, with the server's certificate first and root certificate last.
array(int) SSL.context()->preferred_auth_methods
For client authentication. Used only if auth_level is AUTH_ask or AUTH_require.
array(int) SSL.context()->preferred_suites
Cipher suites we want the server to support, best first.
array(int) SSL.context()->preferred_compressors
Always ({ COMPRESSION_null })
int SSL.context()->use_cache
Non-zero to enable cahing of sessions
int SSL.context()->session_lifetime
Sessions are removed from the cache when they are older than this limit (in seconds). Sessions are also removed from the cache if a connection using the session dies unexpectedly.
object SSL.context()->lookup_session(string id)
Lookup a session identifier in the cache. Returns the corresponding session, or zero if it is not found or caching is disabled.
object SSL.context()->new_session()
Create a new session.
void SSL.context()->record_session(object s)
Add a session to the cache (if caching is enabled).
void SSL.context()->purge_session(object s)
Remove a session from the cache.
| CLASS SSL.packet |
SSL Record Layer. Handle formatting and parsing of packets.
| CLASS SSL.state |
A connection switches from one set of state objects to another, one or more times during its lifetime. Each state object handles a one-way stream of packets, and operates in either decryption or encryption mode.
object SSL.state()->session
Information about the used algorithms.
object SSL.state()->mac
Message Authentication Code
object SSL.state()->crypt
Encryption or decryption object.
object(Gmp.mpz)|int SSL.state()->seq_num
64-bit sequence number.
object SSL.state()->decrypt_packet(object packet, int version)
Destructively decrypts a packet (including inflating and MAC-verification, if needed). On success, returns the decrypted packet. On failure, returns an alert packet. These cases are distinguished by looking at the is_alert attribute of the returned packet.
object SSL.state()->encrypt_packet(object packet, int version)
Encrypts a packet (including deflating and MAC-generation).
| CLASS SSL.sslport |
Interface similar to Stdio.Port.
| CLASS SSL.https |
Dummy HTTPS server
| CLASS SSL.cipher |
Encryption and MAC algorithms used in SSL.
| Module Protocols.LysKOM |
| CLASS Protocols.LysKOM.Session |
object Protocols.LysKOM.Session()->user
This variable contains the Protocols.LysKOM.Session.Person that is logged in.
void Protocols.LysKOM.Session()->create(string server)
void Protocols.LysKOM.Session()->create(string server, mapping options)
Initializes the session object, and opens a connection to that server.
options is a mapping of options:
|
Protocols.LysKOM.Connection
object(Text) Protocols.LysKOM.Session()->text(int no)
Returns the text no.
object(Person) Protocols.LysKOM.Session()->person(int no)
Returns the person no.
object(Conference) Protocols.LysKOM.Session()->conference(int no)
Returns conference number no.
array(object(ProtocolTypes.ConfZInfo)) Protocols.LysKOM.Session()->try_complete_person(string orig)
Runs a LysKOM completion on the given string, returning an array of confzinfos of the match.
object Protocols.LysKOM.Session()->login(int user_no, string password)
object Protocols.LysKOM.Session()->login(int user_no, string password, int invisible)
Performs a login. Throws a lyskom error if unsuccessful.
The session object logged in.
object Protocols.LysKOM.Session()->create_person(string name, string password)
Create a person, which will be logged in. returns the new person object
object Protocols.LysKOM.Session()->logout()
Logouts from the server. returns the called object
object Protocols.LysKOM.Session()->create_text(string subject, string body, mapping options)
object Protocols.LysKOM.Session()->create_text(string subject, string body, mapping options, function callback, mixed ... extra)
Creates a new text.
if callback is given, the function will be called when the text has been created, with the text as first argument. Otherwise, the new text is returned.
options is a mapping that may contain:
|
The items above marked with '*' are only available on protocol 10 servers. A LysKOM error will be thrown if the call fails.
Protocols.LysKOM.Session.Conference.create_text, Protocols.LysKOM.Session.Text.comment, Protocols.LysKOM.Session.Text.footnote
object|void Protocols.LysKOM.Session()->send_message(string textstring, mapping options)
Sends a message.
options is a mapping that may contain:
|
void Protocols.LysKOM.Session()->register_async_message_callback(function(int:void) cb)
| CLASS Protocols.LysKOM.Session.AuxItemInput |
Undocumented
| CLASS Protocols.LysKOM.Session.AuxItems |
Undocumented
| CLASS Protocols.LysKOM.Session.Text |
All variables in this class is read only.
Undocumented
int Protocols.LysKOM.Session.Text()->no
The text number, as spicified to Protocols.LysKOM.Session.Text.create.
object Protocols.LysKOM.Session.Text()->err
Undocumented
void Protocols.LysKOM.Session.Text()->create(string textnumber)
Initializes a Text object.
void Protocols.LysKOM.Session.Text()->mark_as_read()
Undocumented.
mixed Protocols.LysKOM.Session.Text()->prefetch_text
mixed Protocols.LysKOM.Session.Text()->prefetch_stat
mixed Protocols.LysKOM.Session.Text()->lines
mixed Protocols.LysKOM.Session.Text()->characters
mixed Protocols.LysKOM.Session.Text()->clear_stat
mixed Protocols.LysKOM.Session.Text()->aux_items
Undocumented
string Protocols.LysKOM.Session.Text()->text
The actual text (or body if you wish).
string Protocols.LysKOM.Session.Text()->subject
The message subject.
string Protocols.LysKOM.Session.Text()->author
The author of the text.
mixed Protocols.LysKOM.Session.Text()->misc
Misc info, including what conferences the message is posted to.
Needs a more complete description.
int Protocols.LysKOM.Session.Text()->marks
The number of marks on this text.
mixed Protocols.LysKOM.Session.Text()->creation_time
The time the text was created on the server.
| CLASS Protocols.LysKOM.Session.Membership |
All variables in this class is read only.
object Protocols.LysKOM.Session.Membership()->last_time_read
int(0..255) Protocols.LysKOM.Session.Membership()->priority
int Protocols.LysKOM.Session.Membership()->last_text_read
array(int) Protocols.LysKOM.Session.Membership()->read_texts
object Protocols.LysKOM.Session.Membership()->added_at
multiset(string) Protocols.LysKOM.Session.Membership()->type
int Protocols.LysKOM.Session.Membership()->position
object Protocols.LysKOM.Session.Membership()->conf
int Protocols.LysKOM.Session.Membership()->number_unread()
void Protocols.LysKOM.Session.Membership()->query_read_texts()
array(object) Protocols.LysKOM.Session.Membership()->unread_texts()
| CLASS Protocols.LysKOM.Session.Person |
int Protocols.LysKOM.Session.Person()->no
void Protocols.LysKOM.Session.Person()->create(int no)
mixed Protocols.LysKOM.Session.Person()->prefetch_stat
mixed Protocols.LysKOM.Session.Person()->prefetch_conf
mixed Protocols.LysKOM.Session.Person()->prefetch_membership
Undocumented
object Protocols.LysKOM.Session.Person()->error
object(Text) Protocols.LysKOM.Session.Person()->user_area
mixed Protocols.LysKOM.Session.Person()->username
mixed Protocols.LysKOM.Session.Person()->privileges
mixed Protocols.LysKOM.Session.Person()->flags
mixed Protocols.LysKOM.Session.Person()->last_login
mixed Protocols.LysKOM.Session.Person()->total_time_present
mixed Protocols.LysKOM.Session.Person()->sessions
mixed Protocols.LysKOM.Session.Person()->created_lines
mixed Protocols.LysKOM.Session.Person()->created_bytes
mixed Protocols.LysKOM.Session.Person()->read_texts
mixed Protocols.LysKOM.Session.Person()->no_of_text_fetches
mixed Protocols.LysKOM.Session.Person()->created_persons
mixed Protocols.LysKOM.Session.Person()->created_confs
mixed Protocols.LysKOM.Session.Person()->first_created_local_no
mixed Protocols.LysKOM.Session.Person()->no_of_created_texts
mixed Protocols.LysKOM.Session.Person()->no_of_marks
mixed Protocols.LysKOM.Session.Person()->no_of_confs
mixed Protocols.LysKOM.Session.Person()->unread
int(0..0) Protocols.LysKOM.Session.Person()->clear_membership
mixed Protocols.LysKOM.Session.Person()->membership
Undocumented
| CLASS Protocols.LysKOM.Session.Conference |
void Protocols.LysKOM.Session.Conference()->create(int no)
| CLASS Protocols.LysKOM.Connection |
This class contains nice abstraction for calls into the server. They are named "call", "async_call" or "async_cb_call", depending on how you want the call to be done.
mixed Protocols.LysKOM.Connection()->XXX(mixed ... args)
object Protocols.LysKOM.Connection()->async_XXX(mixed ... args)
object Protocols.LysKOM.Connection()->async_cb_XXX(function callback, mixed ... args)
Do a call to the server. This really clones a Protocols.LysKOM.Request object, and initialises it. XXX is to be read as one of the calls in the lyskom protocol. ('-' is replaced with '_'.) (ie, logout, async_login or async_cb_get_conf_stat.)
The first method is a synchronous call. This will send the command, wait for the server to execute it, and then return the result.
The last two are asynchronous calls, returning an initialised Protocols.LysKOM.Request object.
int Protocols.LysKOM.Connection()->protocol_level
string Protocols.LysKOM.Connection()->session_software
string Protocols.LysKOM.Connection()->software_version
Description of the connected server.
void Protocols.LysKOM.Connection()->create(string server)
void Protocols.LysKOM.Connection()->create(string server, mapping options)
The options argument is a mapping with the following members:
|
| Module Protocols.LysKOM.Request |
This module contains nice abstraction for calls into the server. They are named "call", "async_call" or "async_cb_call", depending on how you want the call to be done.
| CLASS Protocols.LysKOM.Request._Request |
This is the main request class. All lyskom request classes inherit this class.
void Protocols.LysKOM.Request._Request()->async(mixed ... args)
mixed Protocols.LysKOM.Request._Request()->sync(mixed ... args)
Initialise an asynchronous or a synchronous call, the latter is also evaluating the result. This calls indata() in itself, to get the correct arguments to the lyskom protocol call.
void Protocols.LysKOM.Request._Request()->_async(int call, mixed_data)
mixed Protocols.LysKOM.Request._Request()->_sync(int call, mixed_data)
Initialise an asynchronous or a synchronous call, the latter is also evaluating the result. These are called by async and sync respectively.
mixed Protocols.LysKOM.Request._Request()->_reply(object|array what)
mixed Protocols.LysKOM.Request._Request()->reply(object|array what)
Protocols.LysKOM.Request._Request._reply is called as callback to evaluate the result, and calls Protocols.LysKOM.Request._Request.reply in itself to do the real work.
mixed Protocols.LysKOM.Request._Request()->`()()
Wait for the call to finish.
int(0..1) Protocols.LysKOM.Request._Request()->ok
Tells if the call has executed ok
object Protocols.LysKOM.Request._Request()->error
How the call failed.
The call has completed if
.(ok||error)
| Module Protocols.DNS |
$Id: DNS.pmod,v 1.62 2002/03/09 18:27:04 nilsson Exp $
| CLASS Protocols.DNS.client |
Synchronous DNS client.
void Protocols.DNS.client()->create()
void Protocols.DNS.client()->create(void|string|array server, void|int|array domain)
array Protocols.DNS.client()->gethostbyname(string hostname)
array Protocols.DNS.client()->gethostbyaddr(string hostip)
Querys the host name or ip from the default or given DNS server. The result is an array with three elements,
| ||||||||
string Protocols.DNS.client()->get_primary_mx(string hostname)
Querys the primary mx for the host.
Returns the hostname of the primary mail exchanger.
| Module Protocols |
| Module Protocols.LDAP |
| CLASS Protocols.LDAP.client |
Contains the client implementation of the LDAP protocol. All of the version 2 protocol features are implemented but only the base parts of the version 3.
mapping Protocols.LDAP.client()->info
Several information about code itself and about active connection too
void Protocols.LDAP.client()->create()
void Protocols.LDAP.client()->create(string url)
void Protocols.LDAP.client()->create(string url, object context)
Create object. The first optional argument can be used later for subsequence operations. The second one can specify TLS context of connection. The default context only allows 128-bit encryption methods, so you may need to provide your own context if your LDAP server supports only export encryption.
LDAP server URL in form "ldap://hostname/basedn?attrlist?scope?ext"
TLS context of connection
LDAP.client.bind, LDAP.client.search
int Protocols.LDAP.client()->bind()
int Protocols.LDAP.client()->bind(string dn, string password)
int Protocols.LDAP.client()->bind(string dn, string password, int version)
Authenticates connection to the direcory.
First form uses default value previously entered in create.
Second form uses value from parameters:
The distinguished name (DN) of an entry aginst which will be made authentication.
Password used for authentication.
Third form allows specify the version of LDAP protocol used by connection to the LDAP server.
Only 2 or 3 can be entered.
Only simple authentication type is implemented. So be warned clear text passwords are sent to the directory server.
int Protocols.LDAP.client()->unbind()
Unbinds from the directory and close the connection.
int Protocols.LDAP.client()->delete(string dn)
Deletes entry from the LDAP server.
The distinguished name of deleted entry.
int Protocols.LDAP.client()->compare(string dn, array(string) aval)
Compares given attribute value with one in the directory.
The distinguished name of compared entry.
The mapping of compared attributes and theirs values.
int Protocols.LDAP.client()->add(string dn, mapping(string:array(string)) attrs)
The Add Operation allows a client to request the addition of an entry into the directory
The Distinguished Name of the entry to be added.
The mapping of attributes and their values that make up the content of the entry being added.
object|int Protocols.LDAP.client()->search(string|void filter, int|void attrsonly, array(string)|void attrs)
search filter
flag
attribute(s) name
string Protocols.LDAP.client()->set_basedn(string base_dn)
base DN for search
int Protocols.LDAP.client()->set_scope(int|string scope)
Sets value of scope for search operation.
Value can be integer or its corresponding string value. 0: base, 1: one, 2: sub
int Protocols.LDAP.client()->set_option(int opttype, int value)
LDAP_OPT_xxx
new value for option
int Protocols.LDAP.client()->get_option(int opttype)
LDAP_OPT_xxx
int Protocols.LDAP.client()->modifydn(string dn, string newrdn, int deleteoldrdn, string|void newsuperior)
The Modify DN Operation allows a client to change the leftmost (least significant) component of the name of an entry in the directory, or to move a subtree of entries to a new location in the directory.
DN of source object
RDN of destination
The parameter controls whether the old RDN attribute values are to be retained as attributes of the entry, or deleted from the entry.
If present, this is the Distinguished Name of the entry which becomes the immediate superior of the existing entry.
int Protocols.LDAP.client()->modify(string dn, mapping(string:array(mixed)) attropval)
The Modify Operation allows a client to request that a modification of an entry be performed on its behalf by a server.
The distinguished name of modified entry.
The mapping of attributes with requested operation and attribute's values.
attropval=([ attribute: ({operation, value1, value2, ...}) ])
where operation is one of the following: 0 (LDAP_OPERATION_ADD) - add values listed to the given attribute, creating the attribute if necessary 1 (LDAP_OPERATION_DELETE) - delete values listed from the given attribute, removing the entire attribute if no values are listed, or if all current values of the attribute are listed for deletion 2 (LDAP_OPERATION_REPLACE) - replace all existing values of the given attribute with the new values listed, creating the attribute if it did not already exist. A replace with no value will delete the entire attribute if it exists, and is ignored if the attribute does not exist
mapping|int Protocols.LDAP.client()->parse_url(string ldapuri)
LDAP URL
| CLASS Protocols.LDAP.client.result |
Contains the result of a LDAP search.
LDAP.client.search, LDAP.client.result.fetch
object|int Protocols.LDAP.client.result()->create(array rawres, int|void stuff)
You can't create instances of this object yourself. The only way to create it is via a search of a LDAP server.
int Protocols.LDAP.client.result()->error_number()
Returns error number of search result.
LDAP.client.result.error_string
string Protocols.LDAP.client.result()->error_string()
Returns error description of search result.
LDAP.client.result.error_number
int Protocols.LDAP.client.result()->num_entries()
Returns the number of entries.
LDAP.client.result.count_entries
int Protocols.LDAP.client.result()->count_entries()
Returns the number of entries from current cursor possition till end of the list.
LDAP.client.result.first, LDAP.client.result.next
int|mapping(string:array(string)) Protocols.LDAP.client.result()->fetch(int|void idx)
Returns a mapping with an entry for each attribute. Each entry is an array of values of the attribute.
Optional argument can be used for direct access to the entry other then currently pointed by cursor.
string Protocols.LDAP.client.result()->get_dn()
Returns distinguished name (DN) of the current entry in the result list. N