void proxyhttp(int sockfd){
char sendbuffer[MAX];
char rcvbuffer[MAX];
static richiesta testa; //per gestire la cache uso le liste linkate,questo è il puntatore alla lista delle richieste
static risposta testa1; //puntatore alla lista delle risposte
static int i=1;
static int j=1;
int nread,nwrite;
int pres;
while((nread=read(sockfd,sendbuffer,MAX))>0){
sendbuffer[nread]=0;
printf("SOCKET: %s\n",sendbuffer); // richiesta http,dopo va inserito il cache delle risorse
if((pres=controllorichieste(testa,sendbuffer))==0) { // se la risorsa nn c'è allora apro un socket verso il server web
printf("PRES = %d\n",pres);
printf("TESTA PRIMA INSER= 0x%x\n",testa);
inserimentorichieste(i,&testa,sendbuffer);
printf("TESTA DOPO INSER= 0x%x\n",testa);
// inserisco la richiesta in un file txt ed in una lista
i++;
printf("valore di i: %d\n",i);
int newfd;
struct sockaddr_in newsock;
const char* serverip = "143.225.250.12";
if ( (newfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("Socket creation error\n");
exit(1);
}
memset((void *)&newsock, 0, sizeof(newsock));
newsock.sin_family = AF_INET;
newsock.sin_port = htons(80);
if((inet_pton(AF_INET,serverip,&newsock.sin_addr)) <0){
perror("errore nella conversione dell'indirizzo\n");
exit(1);
}
if(connect(newfd,(struct sockaddr* )&newsock,sizeof(newsock))<0){
printf("Errore nella connessione: %s", strerror(errno));
exit(1);
}
FullWrite(newfd,sendbuffer,strlen(sendbuffer));
FullRead(newfd,rcvbuffer,MAX);
printf("SOCKET di risp: %s\n",rcvbuffer);
inserimentorisposte(j,&testa1,rcvbuffer);
collegamento(testa,testa1); // inserisco la risorsa in un file di testo e nella lista
j++;
FullWrite(sockfd,rcvbuffer,strlen(rcvbuffer));
}
else{ // risorsa presente
int file;
if((file=open("./cache/filetemp.txt",O_RDONLY))<0){
printf("errore nell' apertura del file\n");
}
FullRead(file,rcvbuffer,MAX);
FullWrite(sockfd,rcvbuffer,strlen(rcvbuffer));
}
}
return;
}