Newsgroup: it.comp.lang.visual-basic
Titolo: [OT]Problema col calcolo degli ottetti

Quando mi collego ad un server di posta tramite il protocollo POP3 con il
telnet, sono in grado di visualizzare il numero totale di messaggi e il
numero totale di ottetti.
Avrei bisogno di convertire il numero di ottetti in byte. Pensavo che con
ottettetto indicassero 8 bit, e quindi la conversione era mmediata, ma non č
cosě.
Qualcuno puň dirmi l'algoritmo di conversione oppure (meglio ancora)
indicarmi il numero dell'RFC ?
Grazie
hyppos
www.teatrolabaracca.com

 writes:
h> Quando mi collego ad un server di posta tramite il protocollo POP3 con il
h> telnet, sono in grado di visualizzare il numero totale di messaggi e il
h> numero totale di ottetti.
Un  ottetto _sono_ otto  bit. Il  termine ottetto  e` usato  nel gergo
delle telecomunicazioni in quanto  il byte ha una lunghezza dipendente
dalla macchina.
h> Avrei bisogno di convertire il numero di ottetti in byte. Pensavo che con
h> ottettetto indicassero 8 bit, e quindi la conversione era mmediata, ma non č
h> cosě.
Vorrei capire perche' hai ottenuto un risultato del genere.
Cosa hai considerato come terminatore di linea ? Hai considerato che
nelle linee che cominciano per . questo carattere viene raddoppiato ?
Ti consiglio di prenderti la RFC1939. 
Ah, il sito comune contiene un esempio di client POP che mi piace poco
in quanto  riporta nel caso  delle chiamate bloccanti per  le funzioni
sui socket con un bel loop idle su una DoEvents. Ne feci uno che deve
essere ancora disponibile in rete all'URL
http://www.gnu.org/software/emacs/windows/faq8.html#mail-biff-pop
e usa un  automa governato dagli eventi. E' stato  un casino farlo, ha
dei memory  leak ed ora lo ho  soppiantato con un programmino  in C la
cui impronta e` TANTO piu` piccola.
-- 
Gian  | main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Uberto|                        David Korn, 1987 ioccc best one liner 
Lauri |-------------------------------------------------------------------
(aka saint) >>Vedere X-Nospam nell'header - See X-Nospam field in Header<<

Innanzitutto grazie per la risposta!
"L'RFC che mi hai suggerito ce l'ho già (e da un bel po'...) ma forse
caprone come sono, non l'ho letto attentamente.
Effettivamente stò cercando di creare un mail reader in VB per determinate
applicazioni.
Riguardo agli ottetti, ho posto la domanda perchè esistono anche standard
diversi in cui con "ottetto" si intendono però 7 bit (come le specifiche PDU
dei cellulari).
Cmq. se in questo caso l'ottetto indica 8 bit., il problema è mio che conto
male.
Un promleba che mi assilla assai di più è trovare un buon algoritmo che
intercetti la fine di un messaggio.
Il protocollo FTP termina la stringa con punto e a capo.
Il problema però è che all'interno della mail di "punti e a capo" ce ne
possono essere infiniti (o quasi...)
Siccome quello che serve a me, sono cmq. solo le intestazioni (che recupero
con TOP n 0), ho fatto un algoritmo di ricerca che verifica prima la
presenza della stringa "subject" (che nelle intestazioni c'è sempre ed è una
sola) e poi del carattere punto e a capo.
Funziona abbstanza bene.
Il problema comunque si ripresenterà qualora volessi scaricare l'intera mail
( e magari anche gli allegati).
Potresti suggerirmi un algoritmo più performante?
Ti ringrazio ancora per l'aiuto.
Cia Cia
hyppos

Scusa ma mi ero scordato di una cosa:
E' possibile quando si legge un messaggio di posta, capire se è già stato
letto?
I server web che offrono la consultazione della posta on-line lo fanno ma
ovviamente loro hanno tutte le mail in un Db, quindi possono impostare un
flag Letto/NonLetto.
Ma il protocollo POP3 non prevede nulla di simile?

 writes:
h> Scusa ma mi ero scordato di una cosa:
Beh rispondo ora...
FTP termina  con un  punto a  capo a inizio  riga ?  Hmm, mi  pare che
chiuda il canale dati...  Forse ti confondi con SMTP.
Con POP  la terminazione e`  un puunto da  solo a inizio riga.  Se nel
messaggio compare  un punto da solo  ad inizio riga  allora tale punto
viene raddoppiato dal server ed il client lo deve scartare.
h> E' possibile quando si legge un messaggio di posta, capire se è già stato
h> letto?
Mi  sembra che la  RFC a  riguardo o  quella che  sostituisce avessero
qualcosa, ma non e` un metodo affidabile se non ricordo male.
h> I server web che offrono la consultazione della posta on-line lo fanno ma
h> ovviamente loro hanno tutte le mail in un Db, quindi possono impostare un
h> flag Letto/NonLetto.
Non credo stiano in un DB ma in vari mailbox (file sul filesystem).
Per il resto scaricati i sorgenti o dal sito comune o da:
http://www.gnu.org/software/emacs/windows/faq8.html#mail-biff-pop



Allora la lascio perdere.
Grazie Ancora
Saluti
hyppos

 writes:
h> Quindi nelle intestazioni basta che io cerchi la posizione di un punto
h> singolo all'interno del buffer di ricezione e poi verifichi che il carattere
h> precedente sia un vbcrlf, e il carattere successivo o non ci sia o se ce,
h> non sia un altro punto
se trovi due punti insieme non e` una terminazione di messaggio / header.
Il modo  migliore e`  ricevere il  blocco di dati  e poi  cominciare a
tirare fuori le righe una per  una. Se ti capita una riga che comincia
per   ..  allora   scarti  il   primo  carattere,   se   invece  trovi
.+chr(13)+chr(10) allora il messaggio e` finito.
