Формирование дерева сообщений в USENET(NNTP) ???
От: Аноним  
Дата: 01.02.04 14:06
Оценка:
ради развлечения написал примитивный NNTP сервер на перле и подключил его
службой под линухом.
Он отдает сообщения и принимает их, но вот дерева не получается, сообщения в
лучшем случае после одного вложенного стоятся в столбик.
Кто знает по каким критериям клиент определяет какое сообщения является ответом
на предыдущее ???
Re: Формирование дерева сообщений в USENET(NNTP) ???
От: ArtDenis Россия  
Дата: 01.02.04 15:31
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Кто знает по каким критериям клиент определяет какое сообщения является ответом

А>на предыдущее ???

По полю заголовка References:
References: <525652@news.rsdn.ru> <525660@news.rsdn.ru> <525756@news.rsdn.ru>


Клиент сам их же и формирует. К серверу это не имеет никакого отношения.
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Формирование дерева сообщений в USENET(NNTP) ???
От: Sergey Россия  
Дата: 01.02.04 16:18
Оценка:
Здравствуйте, ArtDenis, Вы писали:
А>>Кто знает по каким критериям клиент определяет какое сообщения является ответом
А>>на предыдущее ???

AD>По полю заголовка References:

AD>
AD>References: <525652@news.rsdn.ru> <525660@news.rsdn.ru> <525756@news.rsdn.ru>
AD>


AD>Клиент сам их же и формирует. К серверу это не имеет никакого отношения.


В том то и проблема, что это поле есть в сообщениях и я про него знаю.
При копировании дерева сообщений из др форума в свою базу оно искажается,
Корневое сообщение оказывается само по себе, над ним в корневым выстраивается первый ответ, под ответом остальные вложенные ответы выстраиваются столбцом.
т.е. как минимум теряется связь корневого и первого ответа.
Пример дерева;

(+)Re:Test
Re2:Test
Re3:Test
Re4:Test
Test

Видимо я какой-то нюанс не учитываю.
Re[3]: Формирование дерева сообщений в USENET(NNTP) ???
От: ArtDenis Россия  
Дата: 01.02.04 16:32
Оценка:
Здравствуйте, Sergey, Вы писали:

S>(+)Re:Test

S> Re2:Test
S> Re3:Test
S> Re4:Test
S>Test

S>Видимо я какой-то нюанс не учитываю.


Это thunderbird так извращается. Угадал?
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Формирование дерева сообщений в USENET(NNTP) ???
От: Аноним  
Дата: 01.02.04 16:45
Оценка:
AD>Это thunderbird так извращается. Угадал?

Непонял о чем вы ?
клиент у иеня Оутглюк.
сервер я сам на перле нарисовал.
к АСП линуху его как службу подключил /etc/xinetd.d в этом каталоге файл nntp создал и описал как надо.

вот кусок кода:

print "200 NNTP Server\r\n";
do{
$strin = <STDIN>; #Read input string
open(LOGF, '>>'.$flog) or die ("No Open File\r\n");
print LOGF $IP."->".$strin;
close(LOGF);
if(0 == split(' ',$strin)){@_[0]=" ";}
@strm=@_;
$en=1;
@strm[0]= lc(@strm[0]);
if(@strm[0] eq "list"){s_list(@strm);$en=0;}
if(@strm[0] eq "group"){s_group(@strm);$en=0;}
if(@strm[0] eq "mode"){s_mode(@strm);$en=0;}
if(@strm[0] eq "xover"){s_xover(@strm);$en=0;}
if(@strm[0] eq "xhdr"){s_xhdr(@strm);$en=0;}
if(@strm[0] eq "article"){s_article(@strm);$en=0;}
if(@strm[0] eq "post"){s_post(@strm);$en=0;}
if(@strm[0] eq "authinfo"){s_auth(@strm);$en=0;}
if(@strm[0] eq "quit"){$en=0;}
if($en==1){print "500 Command Not Recongnized\r\n";}
}until(@strm[0] eq "quit");
print "205 closing connection — goodbye!\r\n";
#==================================

команды не все форматы подерживают у меня, но и оутглюк остальное не использует, загвоздка в дереве основная из-за нее и не продолжаю развивать код.
Re[5]: Формирование дерева сообщений в USENET(NNTP) ???
От: ArtDenis Россия  
Дата: 01.02.04 17:35
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>команды не все форматы подерживают у меня, но и оутглюк остальное не использует, загвоздка в дереве основная из-за нее и не продолжаю развивать код.


Значит 'xover' неправильно делаешь.
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
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 Россия  
Дата: 01.02.04 18:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Может этот кусок кода вам что-то скажет ?

А>...

А что это за tsthdr? И вообще, сообщи адрес своего сервера, я его протестирую.
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[8]: Формирование дерева сообщений в USENET(NNTP) ???
От: Sergey Россия  
Дата: 01.02.04 18:28
Оценка:
Здравствуйте, 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) ???
От: ArtDenis Россия  
Дата: 01.02.04 18:40
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Мне проще выслать исходник, потому как этот сервер находится на линухе который работает под VMWare под WinXP

S>Если ответишь на какое мыло выслать в течении 15 мин, то я вышлю сегодня иначе завтра.

Сорри, мне некогда разбираться с исходниками. А linux я снёс.
... << RSDN@Home 1.1.2 stable >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[10]: Формирование дерева сообщений в USENET(NNTP) ???
От: Sergey Россия  
Дата: 02.02.04 07:23
Оценка:
AD>Сорри, мне некогда разбираться с исходниками. А linux я снёс.

а у меня сейчас нет возможности этот сервер повесить на внешний IP, админ у нас ленивый и вредный.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.