ради развлечения написал примитивный NNTP сервер на перле и подключил его
службой под линухом.
Он отдает сообщения и принимает их, но вот дерева не получается, сообщения в
лучшем случае после одного вложенного стоятся в столбик.
Кто знает по каким критериям клиент определяет какое сообщения является ответом
на предыдущее ???
Re: Формирование дерева сообщений в USENET(NNTP) ???
Здравствуйте, ArtDenis, Вы писали: А>>Кто знает по каким критериям клиент определяет какое сообщения является ответом А>>на предыдущее ???
AD>По полю заголовка References: AD>
AD>Клиент сам их же и формирует. К серверу это не имеет никакого отношения.
В том то и проблема, что это поле есть в сообщениях и я про него знаю.
При копировании дерева сообщений из др форума в свою базу оно искажается,
Корневое сообщение оказывается само по себе, над ним в корневым выстраивается первый ответ, под ответом остальные вложенные ответы выстраиваются столбцом.
т.е. как минимум теряется связь корневого и первого ответа.
Пример дерева;
(+)Re:Test
Re2:Test
Re3:Test
Re4:Test
Test
Видимо я какой-то нюанс не учитываю.
Re[3]: Формирование дерева сообщений в USENET(NNTP) ???
Re[4]: Формирование дерева сообщений в USENET(NNTP) ???
От:
Аноним
Дата:
01.02.04 16:45
Оценка:
AD>Это thunderbird так извращается. Угадал?
Непонял о чем вы ?
клиент у иеня Оутглюк.
сервер я сам на перле нарисовал.
к АСП линуху его как службу подключил /etc/xinetd.d в этом каталоге файл nntp создал и описал как надо.
Здравствуйте, <Аноним>, Вы писали:
А>команды не все форматы подерживают у меня, но и оутглюк остальное не использует, загвоздка в дереве основная из-за нее и не продолжаю развивать код.
Re[6]: Формирование дерева сообщений в USENET(NNTP) ???
От:
Аноним
Дата:
01.02.04 17:46
Оценка:
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, <Аноним>, Вы писали:
А>>команды не все форматы подерживают у меня, но и оутглюк остальное не использует, загвоздка в дереве основная из-за нее и не продолжаю развивать код.
AD>Значит 'xover' неправильно делаешь.
я об этом тоже думал, но вроде все вылизал и проверил, но глюк так и не нашел.
Может этот кусок кода вам что-то скажет ?
#==================================
sub s_xover{
my @range=split("-",@_[1]);
my $err=0;
my $i;
my $j;
my @st;
if(length($selgroup)<=0){$err=1;}else{
if(!(($range[0]>0)&($range[1]>0)&($range[0]<=$range[1]))){$err=2;}
if(($range[0]<$tmin)|($range[1] >$tmax)){$err=2;}}
if($err==0){print "224 Overview information follows\r\n";
for($i=$range[0];$i<=$range[1];$i++){
@st=tsthdr($path."/".$selgroup."/".$i.".msg");
if($st[10]==1){
print $i." ";
for($j=0;$j<=7;$j++){print "\x09";if(length($st[$j])>0){print $st[$j];}}#fof j
print " \r\n"}#if
}#for i
print ".\r\n";
}#if err
if($err==1){print "412 No news group current selected\r\n";}
if($err==2){print "420 No article(s) selected\r\n";}
}
#==================================
Re[7]: Формирование дерева сообщений в USENET(NNTP) ???
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, <Аноним>, Вы писали:
А>>Может этот кусок кода вам что-то скажет ? А>>...
AD>А что это за tsthdr? И вообще, сообщи адрес своего сервера, я его протестирую.
блин невнимательный, забыл вложить...
Мне проще выслать исходник, потому как этот сервер находится на линухе который работает под VMWare под WinXP
Если ответишь на какое мыло выслать в течении 15 мин, то я вышлю сегодня иначе завтра.
#==================================
sub tsthdr{
my $FL;
my @in=@_;
my @res;
my $dat;
my @st;
my $sbstr;
$tsthdr[10]=0;
if(open(FL,"<".$in[0])){$tsthdr[10]=1; do{
$dat=readline(*FL);
$dat =~tr/\n/ /;
$dat =~tr/\r/ /;
@res=split(":",$dat); @in=@res;
$sbstr = substr($dat,index($dat,":")+1);
$sbstr =~s/^ +//; $sbstr =~s/ +$//;
if(lc($res[0])eq"subject"){$tsthdr[0]=substr($dat,index($dat,":")+1);}
if(lc($res[0])eq"from"){$tsthdr[1]=substr($dat,index($dat,":")+1);}
if(lc($res[0])eq"date"){$tsthdr[2]=substr($dat,index($dat,":")+1);}
if(lc($res[0])eq"message-id"){$tsthdr[3]=substr($dat,index($dat,":")+1);}
if(lc($res[0])eq"references"){$tsthdr[4]=substr($dat,index($dat,":")+1);}
if(lc($res[0])eq"lines"){$tsthdr[6]=substr($dat,index($dat,":")+1);}
if(lc($res[0])eq"xref"){$tsthdr[7]=$dat;}
#if(lc($res[0])eq"reply-to"){$tsthdr[7]=1;}
}until($#in==0);
@st=stat(FL);
$tsthdr[5]=$st[7];
close(FL);
}#if
@tsthdr;
}
#==================================
Кстати как из оутглюка отвечать в конфу ? а то забываю логин и пароль вписывать.
Re[9]: Формирование дерева сообщений в USENET(NNTP) ???
Здравствуйте, Sergey, Вы писали:
S>Мне проще выслать исходник, потому как этот сервер находится на линухе который работает под VMWare под WinXP S>Если ответишь на какое мыло выслать в течении 15 мин, то я вышлю сегодня иначе завтра.
Сорри, мне некогда разбираться с исходниками. А linux я снёс.