Bonjour,

Je voudrais faire un serveur Telnet sur un µControlleur :

Voici ce que j'ai commencé à faire :

ma lib telnet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
#define TELNET_MAXSIZE_BUFF (100) // taille buffer Telnet
 
struct _TELNET_struct{
	TCP_SOCKET socket;					// socket
	char buffer[TELNET_MAXSIZE_BUFF];	// buffer de stockage
	void (*callFunc)(void);				// fonction suivante à lancer
} TELNET_struct telnet;
 
 
// initialisation de l'instance Telnet
void Telnet_Init(void){
	telnet.socket = INVALID_SOCKET; // socket
	telnet.buffer[0]='\0'; // buffer de stockage
	telnet.callFunc= Telnet_openSocket; // prochaine fonction à executer
}
 
// processus Telnet Principal
void TelnetTask(void){
	telnet.callFunc();
}
 
 
//***************************
// ouverture du socket
void Telnet_openSocket(void){
	if(telnet.socket != INVALID_SOCKET){
		telnet.socket = TCPOpen(0, TCP_OPEN_SERVER, TELNET_PORT, TCP_PURPOSE_TELNET);
		if(telnet.socket == INVALID_SOCKET)
			return;
 
		telnet.callFunc = Telnet_promptLoggin;
	}
}
 
//***************************
// récupération du Loggin
void Telnet_promptLoggin(void){
	if(telnet.socket != INVALID_SOCKET){
 
		TELNET_printf("Salut les gas\n");
		TELNET_printf("Bienvenu chez moi\n");
		TELNET_printf("Loggin : ");
 
		TELNET_scanln(); // recupère une ligne (le contenu est mis dans telnet.buffer)
 
		telnet.callFunc = Telnet_promptPassword;
	}
}
 
 
// récupération du Password
void Telnet_promptPassword(void){
...
}
 
 
// écrit chaine de caractère
void TELNET_printf(char *str, ...){
 
	fprintf(telnet.buffer, *str);
 
	// vérifie qu'on peut écrire sur le port
	if(TCPIsPutReady(telnet.socket) < strlen(telnet.buffer))
		return;
 
	TCPPutString(telnet.socket, str);
}
utilisation de ma lib :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Telnet_Init();
while(1){
	TelnetTask();
}
Je ne vois pas comment faire pour gérer ma fonction TELNET_printf() car si la fonction TCPIsPutReady indique que le buffer d'émission n'est pas disponible alors l'envoie est annulé => je ne vois pas comment faire pour relancer la fonction avant de passer au TELNET_printf() suivant.

Vous avez une idée ?

merci d'avance,

Remarque : bien entendu je dois aussi faire la fonction TELNET_scanf()