diff --git a/headers/client.h b/headers/client.h
index f06619b20d8807d7c37997ad777cbe055dca3b21..c71edeed6068f3367ef8f7cf4593e98b869c91ed 100644
--- a/headers/client.h
+++ b/headers/client.h
@@ -216,7 +216,7 @@ string client::calc_file_size(string fileName)
     return {};
   }
 
-  int fileSize = buffer.st_size;
+  long long fileSize = buffer.st_size;
   return to_string(fileSize);
 }
 
diff --git a/headers/server.h b/headers/server.h
index 085a75334f38e38269221604ec3b8ce024d972e5..327046df7c4afe484879588e646681282fdba8c1 100644
--- a/headers/server.h
+++ b/headers/server.h
@@ -16,6 +16,7 @@
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <mutex>
+#include <sys/statvfs.h>
 
 #include <arpa/inet.h>
 
@@ -23,6 +24,8 @@
 #include "conexao.h"
 #include "frame.h"
 
+#define FILE_DESTINATION "./received"
+
 using namespace std;
 
 class server {
@@ -40,6 +43,7 @@ private:
   int send_ack(frame *fReceive);
   void send_confirm(frame *fReceive);
   void receive_text(frame *f);
+  void receive_midia(frame *f);
   frame *receive_frame_socket();
   int receive_valid_frame(frame **f);
   void start_receveing_message();
@@ -119,7 +123,36 @@ void server::receive_text(frame *f)
   cout << "Mensagem recebida: " << textoReceive << "\n";
 }
 
-// Recebe o primeiro frame do cliente
+// Verifica o espaco disponivel em disco
+unsigned long server::chk_available_size()
+{
+  struct statvfs st;
+  if ( statvfs(FILE_DESTINATION, &st) == -1 )
+  {
+    cout << "Erro no statvfs, abortado\n";
+    //send_error();
+    return;
+  }
+
+  return st.f_bsize * st.f_bavail;
+}
+
+void server::receive_midia(frame *f)
+{
+  unsigned long availSize = chk_available_size();
+  unsigned long fileSize  = stoi(f->get_dado());
+
+  if ( fileSize > availSize*0.9 ) 
+  {
+    cout << "Tamanho do arquivo muito grande, abortado\n";
+    //send_error();
+    return;
+  }
+
+  cout << "Espaco suficiente em disco\n";
+}
+
+// Recebe um frame do cliente
 frame *server::receive_frame_socket()
 {
   frame *fReceive;
@@ -162,8 +195,9 @@ void server::start_receveing_message()
 {
   int endTransmission = 0;
 
+  frame *f;
   do { 
-    frame *f = receive_frame_socket();
+    if ( !receive_valid_frame(&f) ) { return; }
     if ( !f ) { return; } 
     int frameType = f->get_tipo();
 
@@ -175,6 +209,8 @@ void server::start_receveing_message()
         break;
 
       case MIDIA:
+        receive_midia(f);
+        endTransmission = 1;
         break;
 
       default:
diff --git a/todo.txt b/todo.txt
index f1653f25511af31b9fa71c051f565ea5eb8bf7cd..2242c510feec551c963ab6cdbc898e1356cba81b 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,5 +1,7 @@
 -> Ver se os frames que estao vindo sao arquivos e juntar eles no arquivo
 
+-> Arrumar nome arquivo > 63
+
 -> Testar tamanho antes de enviar o arquivo
 
 -> Arrumar a interface