Select Git revision
Forked from
Nettle / nettle
Source project has a limited visibility.
-
Niels Möller authored
Rev: src/symmetric/arcfour.c:1.2 Rev: src/symmetric/bf_test.c:1.2 Rev: src/symmetric/desQuick.c:1.3 Rev: src/symmetric/desdata.c:1.3 Rev: src/symmetric/desinfo.h:1.2
Niels Möller authoredRev: src/symmetric/arcfour.c:1.2 Rev: src/symmetric/bf_test.c:1.2 Rev: src/symmetric/desQuick.c:1.3 Rev: src/symmetric/desdata.c:1.3 Rev: src/symmetric/desinfo.h:1.2
Ident.pmod 3.66 KiB
//! An implementation of the IDENT protocol, specified in RFC 931.
#pike __REAL_VERSION__
// #define IDENT_DEBUG
constant lookup_async = AsyncLookup;
//!
class AsyncLookup
{
Stdio.File con;
function(array(string), mixed ...:void) callback;
array cb_args;
string query;
string read_buf = "";
protected void do_callback(array(string) reply)
{
#ifdef IDENT_DEBUG
werror("Protocols.Ident: calling callback\n");
#endif /* IDENT_DEBUG */
mixed err;
if (callback) {
err = catch {
callback(reply, @cb_args);
};
callback = 0;
cb_args = 0;
}
if (con) {
con->close();
destruct(con);
}
query = "";
read_buf = "";
con = 0;
if (err) {
throw(err);
}
}
protected void write_cb()
{
#ifdef IDENT_DEBUG
werror("Protocols.Ident: sending query\n");
#endif /* IDENT_DEBUG */
int i = con->write(query);
if (i >= 0) {
query = query[i..];
if (sizeof(query)) {
return;
}
con->set_write_callback(0);
} else {
do_callback(({ "ERROR", "FAILED TO SEND REQUEST" }));
}
}
protected void read_cb(mixed ignored, string data)
{
#ifdef IDENT_DEBUG
werror("Protocols.Ident: reading data\n");
#endif /* IDENT_DEBUG */
read_buf += data;