TCP/IP ou Transmission Control Protocol/Internet Protocol est le principal protocole utilisé pour l'envoi de données sur Internet. Les commandes Internet de bas niveau de 4D permettent d'établir des sessions TCP puis d'envoyer et/ou de recevoir des paquets TCP via ces sessions.
Il existe deux manières d'établir une connexion TCP :
- La première consiste à exécuter la commande TCP_Open. Celle-ci ouvre une connexion avec le domaine et sur le port spécifiés. Elle permet de se connecter à un serveur TCP. La commande TCP_Open permet l'utilisation du protocole SSL (Secured Socket Layer) afin de sécuriser la connexion.
- La seconde consiste à exécuter la commande TCP_Listen. Celle-ci ouvre une connexion avec le domaine et sur le port spécifiés, et écoute les connexions entrantes. La meilleure façon de déterminer si une connexion a été établie consiste à vérifier l'état de la session avec la commande TCP_State, après l'exécution de TCP_Listen. Un code de statut est alors renvoyé, indiquant l'état courant de la session. A partir de là, vous pouvez envoyer et/ou recevoir des paquets TCP comme vous le feriez lors d'une connexion établie avec TCP_Open.
Dans tous les cas, toute connexion TCP ouverte doit être refermée à l'aide de la commande TCP_Close.
Les commandes TCP/IP de bas niveau nécessitent une connaissance approfondie des protocoles de communication. Pour obtenir des informations complémentaires sur les différents numéros de port affectés à TCP/IP, les protocoles de communication, les impératifs d'adressage, etc., veuillez vous reporter aux RFCs.
Les commandes Internet de 4D permettent de passer directement une référence de connexion POP3, IMAP ou FTP aux commandes TCP de bas niveau et inversement.
En effet, d’une part les protocoles évoluent régulièrement, donnant naissance à de nouvelles commandes ; d’autre part, certains progiciels font leur propre interprétation des RFCs — rendant les implémentations normalisées inutilisables. Avec ce principe, le développeur pourra créer lui-même les fonctions de haut niveau dont il a besoin (à la place de fonctions existantes ou pour palier à l’inexistence d’une fonction) à l’aide des commandes bas niveau TCP.
Cette fonctionnalité accroît significativement l’ouverture et les possibilités de développement puisque les développeurs peuvent créer leurs propres commandes de haut niveau sans devoir réécrire toutes les commandes nécessaires à l’exploitation d’un protocole.
Dans cet exemple, la commande IMAP_Capability est remplacée par une fonction équivalente développée à l’aide des commandes TCP_IP.
$ErrorNum:=IMAP_Login(vHost;vUserName;vUserPassword;vImap_ID)
Si($ErrorNum=0)
C_TEXTE(vCapability)
$ErrorNum:=IMAP_Capability(vImap_ID;vCapability)
...
Fin de si
$ErrorNum:=IMAP_Logout(vImap_ID)
- Cette méthode peut être remplacée par :
$ErrorNum:=IMAP_Login(vHost;vUserName;vUserPassword;vImap_ID)
Si($ErrorNum =0)
C_TEXTE(vCapability)
$ErrorNum:=My_IMAP_Capability(vImap_ID)
...
Fin de si
$ErrorNum:=IMAP_Logout(vImap_ID)
- Voici le code de la fonction My_IMAP_Capability :
C_ENTIER LONG($1;$vErrorNum;$0)
C_TEXTE($vTexteEnvoyé;$vTexteReçu;vCapability)
C_TEXTE($2)
$vImap_Id:=$1
$vCmd_Id:="A001"
$MyvtRequestCmd:="CAPABILITY"
$vTexteEnvoyé:=$vCmd_Id+""+$MyvtRequestCmd+Caractere(13)+Caractere(10)
$vTexteReçu:=""
$vErrorNum:=TCP_Send($vImap_Id;$vTexteEnvoyé)
Si($vErrorNum=0)
$vErrorNum:=TCP_Receive($vImap_Id;$vTexteReçu)
Au cas ou
:($vErrorNum#0)
vCapability:=""
:(Position($vCmd_Id+" OK ";$vTexteReçu)#0)
vCapability:=$vTexteReçu
:(Position($vCmd_Id+" BAD ";$vTexteReçu)#0)
vCapability:=""
$vErrorNum:=10096
Fin de cas
Fin de si
$0:=$vErrorNum