Alfred_Sniff dummy mioche

Inscrit le: 28 Nov 2005 Messages: 2
|
Posté le: Mar Nov 29, 2005 4:31 pm Sujet du message: Erreur Windows |
|
|
Bonjour,
j'ai une appli qui utilise ma dll pour envoyer des données à mon appli J2EE. Les envois se font à la chaîne, mais il est très fréquent qu'elle s'arrête suite à une erreur windows après une quarantaine d'envoi. N'ayant pas d'autres traces de cette erreur je m'en remets à vous pour savori si quelqu'un voit quelquechose qui cloche dans la fonction utilisée dans la dll. Je pense particulièrement aux PACKET_SIZE que je ne maitrise pas, aux libérations de mémoire, et aussi peut être au fait que "buffer" n'est pas initialisé. Voici le code :
Code: | char * appli (char * request_path, char * request_host, char * user, char * password, char * chemin, char * dest) {
char buffer[PACKET_SIZE+1];
char line[PACKET_SIZE];
char param[PACKET_SIZE];
char body[PACKET_SIZE];
char * fic;
long taillefic=0;
int rc;
int i = 0;
int isEntete = 1;
char *finEntete;
FILE upload;
char * Reponse=(char *)calloc(10, sizeof(char));
sprintf(buffer,"Vide\n");
//recuperation des donnees
if ( ( upload = fopen(chemin,"rb")) == NULL ) {
Reponse="03";
}
else{
//calcul de la taille du fichier
fseek(upload, 0, SEEK_END);
taillefic=ftell(upload);
printf("Longueur du fichier %s: %lu\n", chemin, taillefic);
fclose(upload);
fic=(char *)calloc(taillefic, sizeof(char));
upload = fopen(chemin,"rb");
fread(fic, sizeof(char), taillefic, upload);
fclose(upload);
//contruction du corps de la requete
sprintf(param, "-----6G+f\r\n"
"Content-Disposition: form-data;name=\"cPseudo\"\r\n"
"\r\n"
"%s\r\n"
"-----6G+f\r\n"
"Content-Disposition: form-data;name=\"cMotDePasse\"\r\n"
"\r\n"
"%s\r\n"
"-----6G+f\r\n"
"Content-Disposition: form-data;name=\"cDestinataire\"\r\n"
"\r\n"
"%s\r\n"
"-----6G+f\r\n"
"Content-Disposition: form-data; name=\"CheminDoc\"; filename=\"%s\"\r\n"
"Content-type:application/octet-stream\r\n"
"Content-length:%d\r\n"
"\r\n"
, user, password, dest, chemin, taillefic);
sprintf(body, "\r\n"
"-----6G+f--\r\n");
//construction de la requete
sprintf(line,
"POST %s "
"HTTP/1.1\r\n"
"Host: %s\r\n"
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Content-Type: multipart/form-data; boundary=---6G+f\r\n"
"Content-length:%d\r\n\r\n"
,request_path, request_host, taillefic+strlen(param)+15);
//envoi de la requete par morceaux
printf ("%s", line);
send(to_server_socket,line,strlen(line),0);//entete
printf ("%s", param);
send(to_server_socket,param,strlen(param),0);//corps
send(to_server_socket, fic, taillefic, 0);
printf ("%s", body);
send(to_server_socket,body,strlen(body)+1,0);
free(fic);
do {
rc = readn(to_server_socket,buffer,PACKET_SIZE+1);
if ( isEntete == 1 ) {
finEntete = (char *)strstr(buffer,"\r\n\r\n");
if ( finEntete != NULL ) {
*finEntete = 0x00;
strncpy(Reponse, finEntete+4, rc-strlen(buffer)-4);
isEntete = 0;
}
else{ strncat(Reponse, buffer, rc);
}
}
else{
strncat(Reponse, buffer, rc);
}
} while (rc==PACKET_SIZE);//while ( rc != 0 ) ;
}
return Reponse;
} |
Merci à tous pour votre patience et vos réponses |
|