From ddac76d3f528debac7ffea90b57902eef5d66f99 Mon Sep 17 00:00:00 2001
From: bfsc19 <bfsc19@inf.ufpr.br>
Date: Sun, 26 Feb 2023 05:10:05 -0300
Subject: [PATCH] bugs: tentando adicionar envio e recebimento de arquivos

---
 headers/client.h | 110 +++++++++++++++++++++++++------------------
 headers/server.h | 120 +++++++++++++++++++++++++++++++++++------------
 saida.txt        | Bin 0 -> 29362 bytes
 teste            | Bin 33352 -> 0 bytes
 texto.txt        |  37 +++++++++++++++
 5 files changed, 192 insertions(+), 75 deletions(-)
 create mode 100644 saida.txt
 delete mode 100755 teste
 create mode 100644 texto.txt

diff --git a/headers/client.h b/headers/client.h
index 0c81bf3..3523ef1 100644
--- a/headers/client.h
+++ b/headers/client.h
@@ -51,6 +51,7 @@ private:
   bool verify_ack(frame *received, frame *sent);
   frame *receive_ack(frame *f);
   vector<frame *> create_frames(vector<char> data, int type);
+  vector<frame *> create_frames_midia(vector<char> data);
   int send_frame_socket(frame *f);
   int start_transmission();
   int end_transmission();
@@ -62,7 +63,7 @@ public:
   string userInput;
 
   // ------- Construtores ------ //
-  client(conexao *socketAddr) { socket = socketAddr; };
+  client(conexao *socketAddr) { socket = socketAddr; }
 
   // ---------- Funcoes -------- //
   void run();
@@ -145,6 +146,8 @@ int client::end_transmission() {
  * @return int
  */
 int client::send_frames(vector<frame *> frames) {
+  if (frames.empty()) { return 0; }
+
   if (!start_transmission()) { return 0; }
 
   // Envia um frame por vez
@@ -190,7 +193,16 @@ int client::send_message(vector<char> data, int type) {
 
   int messageSize = data.size();
   vector<frame *> frames;
-  frames = create_frames(data, type);
+
+  switch (type) {
+  case TEXTO:
+    frames = create_frames(data, type);
+    break;
+
+  case MIDIA:
+    frames = create_frames_midia(data);
+    break;
+  }
 
   return send_frames(frames);
 }
@@ -207,15 +219,12 @@ string client::calc_file_size(string fileName) {
 }
 
 vector<char> client::read_file(string fileName) {
-  fstream file;
+  ifstream file;
   file.open(fileName, ios::binary);
 
-  string teste;
   vector<char> fileData;
-  char c;
-  while ((file.get(c), file.eof() == false)) {
-    fileData.push_back(c);
-  }
+  for (char c; (file.read(&c, 1), file.eof()) == false; fileData.push_back(c))
+    ;
 
   file.close();
   return fileData;
@@ -226,49 +235,23 @@ vector<char> client::read_file(string fileName) {
  *
  */
 void client::send_file() {
+  vector<char> fileNameVector;
   string fileName;
+
   do {
-    cout << "Digite o nome do arquivo(maximo de " << TAM_DADOS - 4 << " char):\n";
+    cout << "Digite o nome do arquivo(maximo de " << TAM_DADOS
+         << " char):\n";
     getline(cin, fileName);
-  } while (fileName.size() > TAM_DADOS - 4);
+  } while (fileName.size() > TAM_DADOS);
 
-  // Envia o primeiro frame com o tamanho do arquivo
-  string fileSize = calc_file_size(fileName);
-  if (fileSize.empty()) { return; }
+  fileNameVector.insert(fileNameVector.begin(), fileName.begin(),
+                        fileName.end());
 
-  cout << "Tamanho do arquivo: " << fileSize << "\n";
-  cout << "Enviando tamanho do arquivo\n";
-  if (!send_message(vector<char>(fileSize.begin(), fileSize.end()), MIDIA)) {
-    cout << "Limite de timout, arquivo nao foi enviado\n";
+  if (!send_message(fileNameVector, MIDIA)) {
+    cout << "Falha ao enviar o arquivo\n";
     return;
   }
 
-  // Envia o segundo frame com o nome do arquivo
-  cout << "Enviando nome do arquivo\n";
-  string name = "NAME";
-  vector<char>fileNameVector(name.begin(), name.end());
-  fileNameVector.insert(fileNameVector.end(), fileName.begin(), fileName.end());
-
-  if (!send_message(fileNameVector, MIDIA))
-  {
-    cout << "Limite de timout, arquivo nao foi enviado\n";
-    return;
-  }
-  
-  cout << "Enviando arquivo\n";
-  vector<char> file = read_file(fileName);
-  if ( file.empty() )
-  {
-    cout << "Falha ao abrir o arquivo para leitura. Abortado\n";
-    return;
-  }
-
-  if (!send_message(file, DADOS))
-  {  
-    cout << "Limite de timout, arquivo nao foi enviado\n";
-    return;
-  }
-  
   cout << "Arquivo enviado com sucesso\n";
 }
 
@@ -289,6 +272,43 @@ void client::send_text(string message) {
     cout << "Mensagem enviada com sucesso\n";
 }
 
+vector<frame *> client::create_frames_midia(vector<char> vectorName) {
+  vector<frame *> framesToSend;
+  vector<frame *> framesAux;
+
+  // Cria um vetor com o tamanho do arquivo
+  vector<char> vectorTam;
+  string fileName = string(vectorName.begin(), vectorName.end());
+  string fileSize = calc_file_size(fileName);
+  if (fileSize.empty()) { return vector<frame *>(); }
+  vectorTam.insert(vectorTam.begin(), fileSize.begin(), fileSize.end());
+
+  // Adiciona o tamanho no primeiro frame a ser enviado
+  framesAux = create_frames(vectorTam, MIDIA);
+  framesToSend.insert(framesToSend.end(), framesAux.begin(), framesAux.end());
+
+  // Adiciona o nome no segundo frame a ser enviado
+  framesAux = create_frames(vectorName, MIDIA);
+  framesToSend.insert(framesToSend.end(), framesAux.begin(), framesAux.end());
+
+  // Cria um vetor com os dados do arquivo
+  vector<char> vectorData = read_file(fileName);
+  if (vectorData.empty()) {
+    cout << "Falha ao abrir o arquivo para leitura\n";
+    return vector<frame *>();
+  }
+
+  // Adiciona os dados do arquivo
+  framesAux = create_frames(vectorData, DADOS);
+  framesToSend.insert(framesToSend.end(), framesAux.begin(), framesAux.end());
+
+  // Arruma a sequencia dos frames
+  for (int i = 0; i < framesToSend.size(); i++)
+    framesToSend[i]->set_seq(i%16);
+
+  return framesToSend;
+}
+
 /**
  * @brief Creates a vector with all the frames to be sent
  *
@@ -337,8 +357,8 @@ void client::print_help() {
   cout << "Comandos disponiveis:\n";
   cout << "help ou -h ou h ou HELP ou Help ou H ou ajuda ou Ajuda ou AJUDA\n";
   cout << "exit ou -e ou e ou EXIT ou Exit ou E ou sair ou Sair ou SAIR\n";
-  cout
-      << "send ou -s ou s ou SEND ou Send ou S ou enviar ou Enviar ou ENVIAR\n";
+  cout << "send ou -s ou s ou SEND ou Send ou S ou enviar ou Enviar ou "
+          "ENVIAR\n";
   cout << "para enviar uma mensagem, digite a mensagem e pressione enter\n";
 }
 
diff --git a/headers/server.h b/headers/server.h
index 691cf5f..1316bea 100644
--- a/headers/server.h
+++ b/headers/server.h
@@ -52,6 +52,8 @@ private:
   bool create_received_dir();
   string receive_file_name();
   int receive_file_data(string fileName);
+  bool verify_crc8(frame *f);
+  bool verify_seq(int seq, int lastSeq);
 
 public:
   // ------- Construtores ------ //
@@ -140,12 +142,33 @@ unsigned long server::chk_available_size() {
 
 // Recebe o frame com o tamanho do arquivo
 int server::receive_file_size(frame *f) {
-  if ( !strncmp(f->get_dado(), "NAME", 4)) { return 0; }
+
+  /*
+     > verifica a sequencia do frame e o tipo
+     > se o frame nao for a sequencia esperada, envia um ack(0) e espera receber
+     a sequencia esperada > se o frame for o esperado, verifica o crc8 > se o
+     crc estiver certo, envia um ack e continua > se estiver errado, envia um
+     nack e espera receber o proximo frame
+  */
+  do {
+    while (f->get_seq() != 1 && f->get_tipo() != MIDIA) {
+      f->set_seq(0);
+      send_ack(f);
+      f = receive_frame_socket();
+      if (!f) { return 0; }
+    }
+
+    if (verify_crc8(f)) { break; }
+
+    // Se o ack nao estiver certo, espera receber o proximo frame
+    f = receive_frame_socket();
+    if (!f) { return 0; }
+  } while (true);
 
   unsigned long availSize = chk_available_size();
   if (availSize == -1) { return -1; }
 
-  cout << "frame file size:" << f->get_dado() << "\n";
+  cout << "Frame file size:" << f->get_dado() << "\n";
   int fileSize = stoi(f->get_dado());
 
   if (fileSize > availSize * 0.9) {
@@ -179,32 +202,50 @@ bool server::create_received_dir() {
 
 string server::receive_file_name() {
   frame *fReceive;
-  int lastSeq = -1;
 
   // Aguarda receber um frame do tipo midia com o nome do arquivo
+  // E com a sequencia de numero 2
+  /*
+    > recebe o frame e verifica se o tipo e a sequencia estao corretos
+    > se estiverem, verifica o crc8
+    > se estiver correto, envia um ack e continua
+    > se estiver errado, envia um nack e espera receber o proximo frame
+  */
   do {
-    if (!receive_valid_frame(&fReceive)) { return string {}; }
-    if (fReceive->get_tipo() != MIDIA) { continue; }
-    if (strncmp(fReceive->get_dado(), "NAME", 4)) { continue; }
+    do {
+      fReceive = receive_frame_socket();
+      if (!fReceive) { return string{}; }
+
+      if (fReceive->get_tipo() != MIDIA) { continue; }
+      fReceive->set_seq(1);
+      send_ack(fReceive);
+
+    } while (fReceive->get_seq() != 2);
 
+    if (verify_crc8(fReceive)) { break; }
 
-    if (fReceive->get_seq() == lastSeq) { continue; }
-    lastSeq = fReceive->get_seq();
+    fReceive = receive_frame_socket();
+    if (!fReceive) { return string{}; }
 
-  } while (fReceive->get_tipo() != FIMT);
+  } while (true);
 
-  
   cout << "Nome do arquivo recebido com sucesso\n";
-  cout << "Nome do arquivo: " << fReceive->get_dado()+4 << "\n";
+  cout << "Nome do arquivo: " << fReceive->get_dado() << "\n";
 
-  return string(fReceive->get_dado()+4);
+  return string(fReceive->get_dado());
 }
 
-int server::receive_file_data(string fileName) {
+bool server::verify_seq(int seq, int lastSeq) {
+  if (lastSeq == 15 && seq != 0) { return false; }
+  if (seq != lastSeq + 1) { return false; }
+  return true;
+}
 
+int server::receive_file_data(string fileName) {
+  cout << "\tRecebendo dados arquivo\n";
   // Abre o arquivo para escrita
   ofstream file;
-  file.open(FILE_DESTINATION+"/"+fileName);
+  file.open(fileName, ios::binary);
   if (!file.is_open()) {
     cout << "Falha ao criar o arquivo. Abortado\n";
     return 0;
@@ -212,30 +253,45 @@ int server::receive_file_data(string fileName) {
 
   cout << "Arquivo criado com sucesso\n";
 
-  int lastSeq = -1; 
+  int lastSeq = 2;
   frame *f;
 
   do {
-    if (!receive_valid_frame(&f)) { return 0; }
-    if (f->get_tipo() != DADOS)   { continue; }
-    if (f->get_seq() == lastSeq)  { continue; }
+    // Fica tentando receber um frame
+    f = receive_frame_socket();
+    if (f == NULL) { return 0; }
+
+    if (f->get_tipo() == FIMT) { break; }
+
+    if (f->get_tipo() != DADOS) { continue; }
+
+    // Recebeu um frame com uma sequencia errada
+    if (!verify_seq(f->get_seq(), lastSeq)) {
+      f->set_seq(lastSeq);
+      send_ack(f);
+      continue;
+    }
+
+    if (!verify_crc8(f)) { continue; }
 
     lastSeq = f->get_seq();
     file.write(f->get_dado(), f->get_tam());
-  } while (f->get_tipo() != FIMT);
+
+  } while (true);
 
   cout << "Arquivo recebido com sucesso\n";
+
   file.close();
   return 1;
 }
 
 void server::receive_midia(frame *f) {
   if (!create_received_dir()) { return; }
-  if (!receive_file_size(f))  { return; }
+  if (!receive_file_size(f)) { return; }
 
   string fileName = receive_file_name();
 
-  if (fileName.size() == 0)   { return; }
+  if (fileName.size() == 0) { return; }
 
   receive_file_data(fileName);
 }
@@ -258,23 +314,27 @@ frame *server::receive_frame_socket() {
   return fReceive;
 }
 
+bool server::verify_crc8(frame *f) {
+  int crc8 = f->chk_crc8();
+  if (!crc8) {
+    send_nack(f);
+  }
+  else
+    send_ack(f);
+  return crc8;
+}
+
 int server::receive_valid_frame(frame **f) {
-  int crc8;
 
   do {
     // Se nao conseguir receber o frame, mata a comunicacao
     *f = receive_frame_socket();
     if (*f == NULL) { return 0; }
 
+    cout << "Frame recebido loop\n";
+    (*f)->imprime(HEX);
     // Avisa o cliente se nao conseguiu receber o frame
-    crc8 = (*f)->chk_crc8();
-    if (crc8) {
-      send_ack(*f);
-      break;
-    }
-    send_nack(*f);
-  } while (!crc8);
-
+  } while (!verify_crc8(*f));
   return 1;
 }
 
diff --git a/saida.txt b/saida.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1a56033fe38d2af10a0efb1223f107d4b1601fa8
GIT binary patch
literal 29362
zcmZ=sEz3+!wNl8*=RyZ=MTxno3Pq{OsY#hB`Bq#Co_U#83I-MCu3RCR1^FPRp$nHn
zaB3llX~3lrl9&r(8FINKrhuglpezP1=b~f_kemTmacW+Qf}ydAm4bPyLZX6+g25<M
zFi_xfboN$A%`3}HOv&fsLJfL_oc#QP(cq_LLLn>o9Y+&Cb>f7q&^I)|8~nzwV#p9)
z_&B?amOj`c3?%|wGK*46@{2O_6|xc)QY$ixOH#Sgz;!`dW=^U?ab{Jjl_8gFaY15o
zzCv+nT4r))YF<gILTau;N@j5~3B}iF3{tJ`Ly19R>yOa_j7s58R_MFoEx$(FPDIBI
zO6dFL=cX#8<SQf=6_#d}<-^;r3d#Ao3dN<#sl~<lTxg1{6wsSoSX;ZKM;Ka0#A+((
znQ-7t9c}MpuRlo_MM<-05jxu5Cpzns9`Fzy<OM&r_KFL%k84n2;;LX!VPXg(TtI{=
zsIP3IU{GNOW?8_wZVCn!Mj*xJAX#&W1k@NmM_<>H)QXaPy^@L&c+1tuY_#PHi8yo;
zB_gr4T+#9t)*={dSAt#<ON;|)Q%BIIKBJAPv<U&)m^xZZqUTa_`6#&?Eu)Oql7q9B
z#6Ki#1{;=1gja6H=A)Gx_6$N+@*fR<s^tr^!k_dyWpqjeYmAW<`lPo$Mniuz^s$Bj
z_A;41qGYB0(UONs@i-d#^hxE|Z5a)H?BPNm(b3SSPdH<@Wi<4$hYNi~M?;@J;f&pu
z(a^^pF7y!{4So8AGj>}>Lmzv%&_{GM^yw4M*ligNeeB^vAJNg!r%yOzw`DZ+v4;zN
zL`OrPKH-ermeJ719xn6|9Swc@gfn(qMnfNaxX?#*H1z2c&e&}k4Snq4LLbr5(5Fv0
zW4C2A^s$EveMCn?pFZJ?-ImeN#~v>95giSE`h+ufTSh}4d$`a?bTsto6VBLe84Z2x
z;X)tL(a@()IAgbEH1x5D3w=aKL!Un3jNO*e(8nGw^bs8mefoqmc3Vb6AA7jaM|3pw
z=@ZV_Z5a)H?BPNm(b3SSPdH<@Wi<4$hYNi~M?;@J;f&pu(a^^pF7y!{4So8AGj>}>
zLmzv%&_{GM^yw4M*ligNeeB^vAJNg!r%yOzw`DZ+v4;zNL`OrPKH-ermeJ719xn6|
z9Swc@gfn(qMnfNaxX?#*H1z2c&e&}k4Snq4LLbr5(5Fv0W4C2A^s$EveMCn?pFZJ?
f-ImeN#~v>95giSE`h+ufTSh}4d$`a?6eaWladM+~

literal 0
HcmV?d00001

diff --git a/teste b/teste
deleted file mode 100755
index 8b98f312be08825cee66554aeaa895ef0fff3670..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 33352
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

diff --git a/texto.txt b/texto.txt
new file mode 100644
index 0000000..4ae3093
--- /dev/null
+++ b/texto.txt
@@ -0,0 +1,37 @@
+
+  
+  //string fileSize = calc_file_size(fileName);
+  //if (fileSize.empty()) { return; }
+  //franesFile.insert(framesFile.end(), fileSize.begin(), fileSize.end());
+
+  //cout << "Tamanho do arquivo: " << fileSize << "\n";
+  //cout << "Enviando tamanho do arquivo\n";
+  //if (!send_message(vector<char>(fileSize.begin(), fileSize.end()), MIDIA)) {
+  //  cout << "Limite de timout, arquivo nao foi enviado\n";
+  //  return;
+  //}
+
+  // Envia o segundo frame com o nome do arquivo
+  //cout << "Enviando nome do arquivo\n";
+  //string name = "NAME";
+  //vector<char> fileNameVector(name.begin(), name.end());
+  //fileNameVector.insert(fileNameVector.end(), fileName.begin(), fileName.end());
+
+  //if (!send_message(fileNameVector, MIDIA)) {
+  // cout << "Limite de timout, arquivo nao foi enviado\n";
+  //  return;
+  //}
+
+  //cout << "Enviando arquivo\n";
+  //vector<char> file = read_file(fileName);
+  //if ( file.empty())
+  //{
+  //  cout << "Falha ao abrir o arquivo para leitura\n";
+  //  return;
+  //}
+
+  //if (!send_message(file, DADOS)) {
+  // cout << "Limite de timout, arquivo nao foi enviado\n";
+  // return;
+  //}
+
-- 
GitLab