codice:
/* Programma per comunicare con un servere Pop3.
* 24/01/2009
*//* Variables and costants definition */
int nmail;
gchar *addr, *user, *pass;
/* Main program begin */
void *checkm()
{
/* Local variables definition */
#define MAXLINE 256
int sock_fd;
struct sockaddr_in serv_add;
char recvbuff[MAXLINE+1], sendbuff1[MAXLINE+1] = "user ", sendbuff2[MAXLINE+1] = "pass ", sendbuff3[MAXLINE+1] = "stat\r\n";
int nread, nwrite;
strcat(sendbuff1, user);
strcat(sendbuff1, "\r\n");
strcat(sendbuff2, pass);
strcat(sendbuff2, "\r\n");
/* create socket */
if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("Socket creation error");
}
/* initialize address */
memset((void *) &serv_add, 0, sizeof(serv_add)); /* clear server address */
serv_add.sin_family = AF_INET; /* address type is INET */
serv_add.sin_port = htons(110); /* 110 da pop3 protocol */
/* build address using inet_pton */
if ( (inet_pton(AF_INET, addr, &serv_add.sin_addr)) <= 0) { /* ottengo l'indirizzo del server, che viene fornito come argomento */
perror("Address creation error"); /* Il server deve essere in formato dotted decimal */
}
/* extablish connection */
if (connect(sock_fd, (struct sockaddr *)&serv_add, sizeof(serv_add)) < 0) {
perror("Connection error");
}
/* avvia funzione di comunicazione con il server */
/* Ricevo il saluto dal server */
nread = read(sock_fd, recvbuff, sizeof(recvbuff)); //sizeof: per leggere fino alla fine
recvbuff[nread] = 0;
fputs(recvbuff, stdout);
/* Comunico al server il comando per il log-in/utente (es. "user domenan")*/
nwrite = send(sock_fd, sendbuff1, strlen(sendbuff1), 0);
/* Ricevo la risposta del server */
nread= recv(sock_fd, recvbuff, sizeof(recvbuff), 0);
recvbuff[nread] = 0;
fputs(recvbuff, stdout);
/* Comunico al server il comando per il log-in/pass (es. "pass domenan")*/
nwrite = send(sock_fd, sendbuff2, strlen(sendbuff2), 0);
/* Ricevo la risposta del server */
nread= recv(sock_fd, recvbuff, sizeof(recvbuff), 0);
recvbuff[nread] = 0;
fputs(recvbuff, stdout);
/* Comunico al server il comando per vedere quanti messaggi sono presenti (es. "stat")*/
nwrite = send(sock_fd, sendbuff3, strlen(sendbuff3), 0);
/* Ricevo la risposta del server */
nread= recv(sock_fd, recvbuff, sizeof(recvbuff), 0);
recvbuff[nread] = 0;
fputs(recvbuff, stdout);
/* Estraggo il numero che indentifica la quantità di e-mail*/
sscanf (recvbuff, "+OK %d", &nmail);
printf("%d\n", nmail);
/* Visualizzo il numero delle mail sulla label1win */
smail = g_strdup_printf ("%d",nmail);
gtk_label_set_text(GTK_LABEL(label1win), smail);
/* Chiuso la connessione*/
close(sock_fd);
return(0);
}
Ecco il comando presente nel codice main.c che avvia la funzione precedentemente postata: