Gambas France BETA


Pas de compte ? Incription

Gambas et NNTP

1
AuteurMessages
Gamuti#1 Posté le 11/8/2010 à 20:23:00
Salut à tous les gambassiens !

Depuis quelques semaines, je développe une application en GB2 permettant de télécharger dans les newsgroups.
Or, je bute sur un problème :
Je ne parviens pas à réaliser une connexion à un serveur NNTP (donc, un serveur de newsgroups) avec identifiant ET mot de passe.
Je comptais sur l'utilisation d'un TELNET ou de SSH pour tester si la connexion est active, refusée ou inexistante.
J'arrive à mes fins avec un serveur sans identifiant mais le problème se pose avec un identifiant ET mot de passe.
Comment faire ?

Exemple de ce que je veux réaliser :

1
telnet news.just4you.net 119 /l identifiant -> problème : comment qu'on fait pour mettre le mot de passe ?telnet news.free.fr 119 -> ici, pas d'identifiant car le serveur identifie l'adresse mac de la freebox


Est-ce possible de réaliser une connexion à un NNTP en pur gambas ?

Merci de vos réponses.
gambix#2 Posté le 11/8/2010 à 20:58:00
Faire simple !oui :)
je l'ai fait avec une connection smtp ... tu peut utiliser openssh pour les connection cryptée..; sinon un simple socket gambas remplace bien telnet
Moins de texte dans une signature c'est agrandir son espace.
gambix#3 Posté le 11/8/2010 à 21:03:00
Faire simple !FMAIN=========================


PUBLIC SUB _new()

END


PUBLIC SUB Button1_Click()

DIM hsmtp AS NEW smtp
hsmtp.Host = "mail.toile-libre.org"
hsmtp.Port = 587

hsmtp.AuthUser = "master@gambasforge.org"
hsmtp.AuthPassword = "gfor..."


hsmtp.From = "<m@gambasforge.org>"
hsmtp.To.Add("<gambas.fr@gmail.com>")
hsmtp.To.Add("<lordheavym@gmail.com>")
hsmtp.Subject = "Un petit test de message"
hsmtp.Message = "Un petit coucou encore :)"

PRINT hsmtp.Send()
END
===============================



smtp.class===========================


' Gambas class file
PRIVATE $aTo AS NEW String[]
PRIVATE $aBcc AS NEW String[]
PRIVATE $sFrom AS String
PRIVATE $iStep AS Integer
PRIVATE $sBase AS String
PRIVATE $sHost AS String
PRIVATE $iPort AS Integer
PRIVATE $sAuthUser AS String
PRIVATE $sAuthPassword AS String
PRIVATE $sMessage AS String
PRIVATE $sSubject AS String

PRIVATE $hProcess AS Process
PRIVATE $ToIndex AS Integer


PROPERTY {To} AS String[]
PROPERTY {From} AS String
PROPERTY Bcc AS String[]
PROPERTY AuthUser AS String
PROPERTY AuthPassword AS String
PROPERTY Message AS String
PROPERTY Host AS String
PROPERTY Port AS Integer
PROPERTY Subject AS String








PRIVATE FUNCTION To_Read() AS String[]

RETURN $aTo

END

PRIVATE SUB To_Write(Value AS String[])

$aTo = Value

END

PRIVATE FUNCTION From_Read() AS String

RETURN $sFrom

END

PRIVATE SUB From_Write(Value AS String)

$sFrom = Value

END


PUBLIC FUNCTION Send() AS Boolean
IF $aTo.Count = 0 THEN RETURN FALSE
IF NOT $sFrom THEN RETURN FALSE
IF NOT $sMessage THEN RETURN FALSE
IF NOT $sAuthUser THEN RETURN FALSE
$iStep = 0
SHELL ("perl -MMIME::Base64 -e 'print encode_base64("\\000" & Replace($sAuthUser, "@", "\\@") & "\\000" & $sAuthPassword & "")'") TO $sBase

$hprocess = EXEC ["openssl", "s_client", "-starttls", "smtp", "-crlf", "-connect", $sHost & ":" & $iPort] FOR READ WRITE AS "MyProcess"

END



PUBLIC SUB MyProcess_Read()

DIM sStr AS String

READ #LAST, sStr, Lof(LAST)

PRINT sStr

IF Right(sStr, 2) = "\r\n" THEN
SELECT CASE Left(sStr, 3)
CASE "250", "235" 'Acquisition des commandes
SELECT CASE $iStep
CASE 0
PRINT #LAST, "AUTH PLAIN " & $sBase
INC $iStep
CASE 1
PRINT #LAST, "mail from: " & $sFrom
INC $iStep
CASE 2
PRINT #LAST, "rcpt to: " & $aTo[$ToIndex]
INC $ToIndex
IF $ToIndex > $aTo.Max THEN INC $iStep

CASE 3
PRINT #LAST, "data"
INC $iStep
CASE 4
PRINT #LAST, "quit"
END SELECT

CASE "354" 'acqisition des données
PRINT #LAST, "From: " & $sFrom
PRINT #LAST, "To: " & $aTo.Join()
PRINT #LAST, "Subject: " & $sSubject
PRINT #LAST, "X-Sender: " & $sFrom
PRINT #LAST, "User-Agent: Gambas simple smtp class"
PRINT #LAST, "Content-Transfer-Encoding: 8 bit"
PRINT #LAST, "Content-Type: text/plain; charset=UTF-8"
PRINT #LAST, ""
PRINT #LAST, $sMessage
PRINT #LAST, "."
CASE "221" 'fin

END SELECT
'INC $iStep
ENDIF
END

PUBLIC SUB MyProcess_Error(sStr AS String)
'PRINT "error"
PRINT sStr


SELECT CASE Left(sStr, 3)

CASE "250"
PRINT #LAST, "ehlo testing"
CASE "161"

END SELECT

END

PRIVATE FUNCTION AuthUser_Read() AS String

RETURN $sAuthUser

END

PRIVATE SUB AuthUser_Write(Value AS String)

$sAuthUser = Value

END

PRIVATE FUNCTION AuthPassword_Read() AS String

RETURN $sAuthPassword

END

PRIVATE SUB AuthPassword_Write(Value AS String)

$sAuthPassword = Value

END

PRIVATE FUNCTION Message_Read() AS String

RETURN $sMessage

END

PRIVATE SUB Message_Write(Value AS String)

$sMessage = Value

END

PRIVATE FUNCTION Bcc_Read() AS String[]

RETURN $aBcc

END

PRIVATE SUB Bcc_Write(Value AS String[])

$aBcc = Value

END

PRIVATE FUNCTION Host_Read() AS String

RETURN $sHost

END

PRIVATE SUB Host_Write(Value AS String)

$sHost = Value

END


PRIVATE FUNCTION Port_Read() AS Integer

RETURN $iPort

END

PRIVATE SUB Port_Write(Value AS Integer)

$iPort = Value

END

PRIVATE FUNCTION Subject_Read() AS String

RETURN $sSubject

END

PRIVATE SUB Subject_Write(Value AS String)

$sSubject = Value

END
===================================


j'espère que ça t'aidera
Moins de texte dans une signature c'est agrandir son espace.
gambix#4 Posté le 11/8/2010 à 21:04:00
Faire simple !c'est ce qui a permis de mettre en place le système d'envois de mail crypté avec authentification de gb.smtp
Moins de texte dans une signature c'est agrandir son espace.
manu#5 Posté le 12/8/2010 à 17:10:00
Avec Gambas ca roule !Rhooo Gambix, ce serais tellement bien ce code dans gambas-forge ! Une petite appli qui marche nous aiderais a mieux comprendre mais bon, mois j'dis ça comme ca.. je sais que le temps te manques ;) :)
Jeanne d'arc, elle a frit, elle a tout compris ! ;)

Config :
Manjaro linux (excellent !)
XFCE 4.1 (simple et efficace)
Gambas 3 dans les dépots (confort total)
Gamuti#6 Posté le 12/8/2010 à 17:58:00
Ouh làla, quelle réactivité !!

Super le code, je n'ai pas encore testé mais dès que j'aurai un moment, je m'y attellerai. Le temps me manque tellement ...
Ceci-dit, c'est un code pour réaliser une connexion en SMTP or moi j'aimerai une connexion NNTP.
Ce n'est pas le même protocole !!

En tout cas, merci de la réponse rapide.
gambix#7 Posté le 12/8/2010 à 20:23:00
Faire simple !ben tu cherche la rfc !!!... ou nmtp dans comment ça marche !
Moins de texte dans une signature c'est agrandir son espace.
Pablodetaix#8 Posté le 3/10/2010 à 12:53:00
Bonjour,

de mon coté en effet j'ai aussi le classique SSh etc etc
mais si tu ouvres en EXEC un socket pour ton proto telnet mais en Read/Write => qd la question Password arrive (read du socket !) => ben tu lui envoies ! par un write .... et le tour est joué !
le probleme majeur c'est que ton appli doit connaitre le PW !

Bons tests,
Pablo
1