procedure TSearchUser.META_Search_User(NN,FN,LN : string);
var p : PPack;
// промежуточный массив.
// в нем накапливаются данные TLV(1)
b : TByteArray;
i : integer;
begin
if (NN='')and(FN='')and(LN='') then exit;
EndOfSearch := false;
// word(b[0]) - тут будет ненужная длина
// (но ее надо потом корректно заполнить)
i:=2; // а пока переходим к 3-у елементу
// вписываем UIN (только СВОЙ - укажем явно,что из модуля Main.pas)
PLONG(@(b[i]))^ := main.UIN; inc(i,4);
// ТИП запроса
PWORD(@(b[i]))^ := swap($D007); inc(i,2);
// придумаем себе COOKIE
// (можно и по-проще, но в настоящей аське // COOKIE имеет такой вид XX00)
Cookie := random($FF) shl 8;
PWORD(@(b[i]))^ := swap(Cookie); inc(i,2);
// ПОДТИП запроса
PWORD(@(b[i]))^ := swap($1505); inc(i,2);
// добавляем три текстовые строки (First, Last, Nick)
// у AOL новый тип строк наверное :)
// впереди - длина строки, а в конце #0
// (что-то одно из них убрали бы)
// длина строки
PWORD(@(b[i]))^ := length(FN)+1; inc(i,2);
// сама строка FirstName
MOVE(FN[1],b[i],length(FN)); inc(i,Length(FN));
// завершающий #0
PBYTE(@(b[i]))^ := 0; inc(i,1);
// LastName
PWORD(@(b[i]))^ := length(LN)+1; inc(i,2);
MOVE(LN[1],b[i],length(LN)); inc(i,Length(LN));
PBYTE(@(b[i]))^ := 0; inc(i,1);
// NickName
PWORD(@(b[i]))^ := length(NN)+1; inc(i,2);
MOVE(NN[1],b[i],length(NN)); inc(i,Length(NN));
PBYTE(@(b[i]))^ := 0; inc(i,1);
// дозаполним "ненужную" длину в начале массива
PWORD(@(b[0]))^ := i-2;
// создаем FLAP-пакет
P:=CreatePacket(2,SEQ);
// добавляем SNAC(15,2)
SNACAppend(p,$15,$2);
// добавляем TLV(1) с данными из промежуточного массива
TLVAppend(p,1,i,@b);
// шлем запрос
Form1.PacketSend(p);
// пишем в Memo
M(Form1.Memo,'> Search Detail: Nick:'+NN+
' First:'+FN+
' Last:'+LN+' '+
'Cookie:$'+inttohex(Cookie,4));
end;
|