| 12
 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
 
 |  
fileStream.open(file.c_str(), ios_base::in | ios_base::binary); //file est un string recuperee dans un autre endroit du code
cerr << "opened ? " << fileStream.is_open() << endl; // affiche 1
cerr << "good ? " << fileStream.good() << endl; // affiche 1
request.append("\r\nContent-Length: ");
fileStream.seekg(0, ios_base::end);
size = fileStream.tellg();
oss << size;
request.append(oss.str());
request += "\r\n";
request.append("Accept-Ranges: bytes\r\n");
request.append("Connection: keep-alive\r\n\r\n"); // Separation du header et du body par une paire de "\r\n"
if (*idx > 0){ //*idx est un pointeur sur un int qui permet de reprendre la lecture la ou on l'avait laissee...
	cerr << "clearing request\n";
	request.clear(); // si on passe ici, on a pas besoin de header (en theorie)
	fileStream.seekg(*idx);
}
else
	fileStream.seekg(0, ios_base::beg);
long pos = (long)fileStream.tellg() - *idx; // Je souhaitais pouvoir me placer dans mon tmp pour mettre le '\0', mais tellg me renvoit toujours -1 :(
cerr << "opened ? " << fileStream.is_open() << endl; // renvoi 1
cerr << "good ? " << fileStream.good() << endl; // renvoi 1
fileStream.read(tmp, 4095); // char tmp[4096]... 1 octet pour mettre le '\0' (habitude unix... bonne ou pas ?)
cerr << "tellg: " << (long)fileStream.tellg() << endl; // renvoi -1
cerr << "idx: " << *idx << endl; // renvoi 0
cerr << "pos: " << pos << endl; // renvoi -1
//tmp[pos] = '\0'; // donc logiquement ca pete ici
*idx = (long)fileStream.tellg(); // je garde en memoire la valeur de lecture pour reprendre plus tard
if (*idx == size){ // si le fichier est complet, on met idx a -1 pour que la fonction appellante close la socket.
	cerr << "Reseting *idx to -1";
	*idx = -1;
	request.append(tmp);
	request += "\r\n";
}
else
	request.append(tmp); | 
Partager