Select Git revision
DNS.pmod 12.84 KiB
// Not yet finished -- Fredrik Hubinette
constant NOERROR=0;
constant FORMERR=1;
constant SERVFAIL=2;
constant NXDOMAIN=3;
constant NOTIMPL=4;
constant NXRRSET=8;
constant QUERY=0;
constant C_IN=1;
constant C_ANY=255;
constant T_A=1;
constant T_NS=2;
constant T_MD=3;
constant T_MF=4;
constant T_CNAME=5;
constant T_SOA=6;
constant T_MB=7;
constant T_PTR=12;
constant T_HINFO=13;
constant T_MINFO=14;
constant T_MX=15;
constant T_TXT=16;
constant T_AAAA=28;
class protocol
{
string mklabel(string s)
{
if(strlen(s)>63)
throw(({"Too long component in domain name",backtrace()}));
return sprintf("%c%s",strlen(s),s);
}
string low_mkquery(int id,
string dname,
int cl,
int type)
{
return sprintf("%2c%c%c%2c%2c%2c%2c%s\000%2c%2c",
id,
1,0,
1,
0,
0,
0,
Array.map(dname/".",mklabel)*"",
type,cl);
}
// This will have to be generalized for
// the server part...
string mkquery(string dname,
int cl,
int type)
{
return low_mkquery(random(65536),dname,cl,type);
}
string decode_domain(string msg, int *n)
{
string *domains=({});
int pos=n[0];
int next=-1;