Skip to content
Snippets Groups Projects
Commit 610f58ac authored by Victor Perszel's avatar Victor Perszel :top:
Browse files

Começando a testar cd

parent f148ed31
Branches
No related tags found
No related merge requests found
......@@ -8,8 +8,8 @@ SRC=./src
OBJ=./obj
FLAGS = -w
main: connectionRawSocket messages submessages
$(CC) $(SRC)/main.cpp $(OBJ)/connectionRawSocket.o $(OBJ)/messages.o $(OBJ)/submessages.o $(FLAGS) -I$(INCLUDE) -L$(LIB) -o connection
main: connectionRawSocket messages miniShell submessages
$(CC) $(SRC)/main.cpp $(OBJ)/connectionRawSocket.o $(OBJ)/messages.o $(OBJ)/miniShell.o $(OBJ)/submessages.o $(FLAGS) -I$(INCLUDE) -L$(LIB) -o connection
connectionRawSocket:
$(CC) -c $(SRC)/connectionRawSocket.cpp $(FLAGS) -I$(INCLUDE) -o $(OBJ)/connectionRawSocket.o
......@@ -19,6 +19,10 @@ messages:
$(CC) -c $(SRC)/messages.cpp $(FLAGS) -I$(INCLUDE) -o $(OBJ)/messages.o
ar -cru $(LIB)/messages.a $(OBJ)/messages.o
miniShell:
$(CC) -c $(SRC)/miniShell.cpp $(FLAGS) -I$(INCLUDE) -o $(OBJ)/miniShell.o
ar -cru $(LIB)/miniShell.a $(OBJ)/miniShell.o
submessages:
$(CC) -c $(SRC)/submessages.cpp $(FLAGS) -I$(INCLUDE) -o $(OBJ)/submessages.o
ar -cru $(LIB)/submessages.a $(OBJ)/submessages.o
......
......@@ -27,6 +27,8 @@
#include <unistd.h>
#include <sys/stat.h>
#include <sys/statvfs.h>
#include <cmath>
#include <vector>
using namespace std;
......
// Implementado por: Eduardo Machado e Victor Perszel
// 2015
#include "connectionRawSocket.h"
using namespace std;
int lsParameter(string parameter);
int lsMini(string parameter, char* currentPath);
int cdMini(string intendedDirectory);
/* Programa criado apenas para fazer testes da biblioteca miniShell */
#include "miniShell.cpp"
int main(int argc, char const *argv[]) {
char *buff, *currentPath;
long size;
string command, parameter;
while(1){
/* Escreve onde você está. */
size = pathconf(".", _PC_PATH_MAX);
if ((buff = (char *)malloc((size_t)size)) != NULL)
currentPath = getcwd(buff, (size_t)size);
printf("%s $ ", currentPath);
/* Executa o comando escolhido. */
cin >> command;
if(command == "ls"){
parameter = "";
cin >> parameter;
lsMini(parameter, currentPath);
}
else if(command == "cd"){
cin >> parameter;
cdMini(parameter);
}
}
return 0;
}
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/ethernet.h>
#include <arpa/inet.h>
#include <linux/if_packet.h>
#include <linux/if.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "connectionRawSocket.h"
int openRawSocket(char *device)
{
......
......@@ -3,83 +3,83 @@
#include "connectionRawSocket.h"
#include "messages.h"
#include "miniShell.h"
using namespace std;
int soquete;
int main(int argc, char *argv[])
{
unsigned char dados[64] = "mensagem de teste";
unsigned char *saida;
SubMessage mesg;
int i;
int main(int argc, char *argv[]) {
Message mainMessage;
SubMessage serverReceive, resposta;
string service, message, command, parameter;
char *buff, *currentPath, *receiptMessage = (char*)malloc(sizeof(char*)*68);
int socket, sendSize, receiptSize;
long size;
//42 = 101010 / 21 = 010101 / 6 = 0110
mesg.setData(dados, 21, 6);
saida = mesg.objToString();
for(i=0;i<22;i++){
std::bitset<8> x(saida[i]);
std::cout << x << " - " << saida[i] << endl;
if(argc != 2){ // Testa o número de parâmetros de estrada do programa.
cout << "Erro na entrada de parametros." << endl; // Caso houver mais ou menos parâmetros
return 0; // o programa não continua a execução.
}
return 0;
}
// int main(int argc, char *argv[]) {
// string service, message;
// char *receiptMessage = (char*)malloc(sizeof(char*)*64);
// int socket, sendSize, receiptSize;
// if(argc != 2){ // Testa o número de parâmetros de estrada do programa.
// cout << "Erro na entrada de parametros." << endl; // Caso houver mais ou menos parâmetros
// return 0; // o programa não continua a execução.
// }
service = argv[1];
// service = argv[1];
// Estabelece a conexão
socket = openRawSocket("eth0");
// Verifica se a conexão socket deu certo
if(socket == -1){
cout << "Problemas com o Socket." << endl;
return 0;
}
// // Estabelece a conexão
// socket = openRawSocket("eth0");
// // Verifica se a conexão socket deu certo
// if(socket == -1){
// cout << "Problemas com o Socket." << endl;
// return 0;
// }
if(service == "client"){
cout << "Execução em modo cliente iniciada." << endl;
cout << "==================================" << endl;
while(1){
/* Escreve onde você está. */
size = pathconf(".", _PC_PATH_MAX);
if ((buff = (char *)malloc((size_t)size)) != NULL)
currentPath = getcwd(buff, (size_t)size);
printf("%s (C) ", currentPath);
// if(service == "client"){
// cout << "Execução em modo cliente iniciada." << endl;
// cout << "==================================" << endl;
// while(1){
// cin.clear();
// cin >> message;
// // Envia a mensagem.
// sendSize = send(socket, (char*)message.c_str(), message.length()+1, 0);
// // Verifica se há algum problema com o socket.
// if(sendSize == -1){
// cout << "Problemas com o envio da mensagem: \n" << message << endl;
// }else{
// cout << "Mensagem: " << message << endl;
// cout << "Tamanho: " << sendSize << endl;
// cout << "Enviado." << endl;
// }
// }
// }else if(service == "server"){
// cout << "Execução em modo servidor iniciada." << endl;
// cout << "===================================" << endl;
// while(1){
// // Recebe a mensagem.
// receiptSize = recv(socket, receiptMessage, 64*sizeof(char), 0);
// // Passa o valor do *char para uma string.
// message = receiptMessage;
// if (receiptSize == -1){
// cout << "Problemas com o recebimento da mensagem." << endl;
// }
// else{
// cout << "Mensagem: " << message << endl;
// cout << "Tamanho: " << receiptSize << endl;
// cout << "Recebido." << endl;
// }
// }
// }
// return 0;
// }
/* Executa o comando escolhido. */
cin >> command;
if(command == "ls"){
parameter = "";
cin >> parameter;
lsMini(parameter, currentPath);
}
else if(command == "cd"){
cin >> parameter;
cdMini(parameter);
} else if(command == "rcd"){
cin >> parameter;
mainMessage.sendCD((unsigned char*)(parameter.c_str()));
}
}
}else if(service == "server"){
cout << "Execução em modo servidor iniciada." << endl;
cout << "===================================" << endl;
while(1){
recv(soquete, receiptMessage, 68*sizeof(char), 0);
serverReceive.stringToObj((unsigned char*)receiptMessage);
// Lê começo da mensagem e vê se tem o delimitador de início
if(serverReceive.getStartMessage() == 0x7E){ // 0x7E = 01111110
if(serverReceive.getType() == 3){
if(serverReceive.checkParity()){ // Se a paridade estiver errada
resposta.setData((unsigned char*)'0',0,0); // Manda um Nack
send(soquete,resposta.objToString(),resposta.getSize()+4, 0);
} else {
mainMessage.receiveCD(serverReceive.getData());
/* Escreve onde você está. */
size = pathconf(".", _PC_PATH_MAX);
if ((buff = (char *)malloc((size_t)size)) != NULL)
currentPath = getcwd(buff, (size_t)size);
printf("%s (S) ", currentPath);
}
}
}
}
}
return 0;
}
......@@ -7,7 +7,7 @@
int Message::sendCD(unsigned char* dirName){
int error, success = 0, garbage, rv;
char *receiptMessage = (char*)malloc(sizeof(char*)*64);
char *receiptMessage = (char*)malloc(sizeof(char*)*68);
struct pollfd ufds[1]; // usado para timeout em recv
SubMessage changeDir, answer;
......@@ -67,7 +67,7 @@ int Message::sendCD(unsigned char* dirName){
int Message::sendLS(unsigned char* options){
int error, success = 0, garbage, rv;
char *receiptMessage = (char*)malloc(sizeof(char*)*64);
char *receiptMessage = (char*)malloc(sizeof(char*)*68);
struct pollfd ufds[1]; // usado para timeout em recv
char* listagem;
SubMessage listDir, answer, ack, nack;
......@@ -158,7 +158,7 @@ int Message::sendLS(unsigned char* options){
int Message::sendPUT(unsigned char* fileName){
int error, success = 0, garbage, rv;
char *receiptMessage = (char*)malloc(sizeof(char*)*64);
char *receiptMessage = (char*)malloc(sizeof(char*)*68);
string temp, fileData;
struct pollfd ufds[1]; // usado para timeout em recv
SubMessage put, answer, size;
......@@ -248,7 +248,7 @@ int Message::sendPUT(unsigned char* fileName){
int Message::sendGET(unsigned char* fileName, char* currentPath){
int error, success = 0, garbage, rv, size, availableSize;
char *receiptMessage = (char*)malloc(sizeof(char*)*64);
char *receiptMessage = (char*)malloc(sizeof(char*)*68);
string temp, fileData;
struct pollfd ufds[1]; // usado para timeout em recv
SubMessage get, answer, ack, nack, err, ok;
......@@ -334,7 +334,7 @@ int Message::sendData(unsigned char* stringMessage){
int numberOfMessages, sizeLastMessage, size=0;
int i, j, k, garbage, error, rv, success = 0;
unsigned char* subData; // a parte da mensagem que vai em cada sequencia
char *receiptMessage = (char*)malloc(sizeof(char*)*64);
char *receiptMessage = (char*)malloc(sizeof(char*)*68);
char *erro1, *erro2, *sucesso, *buffer;
struct pollfd ufds[1]; // usado para timeout em recv
SubMessage answer, end;
......@@ -669,7 +669,7 @@ int Message::receiveGET(unsigned char* fileName){
int Message::receivePUT(unsigned char* fileName, char* currentPath){
int success = 0, rv, size, availableSize;
char *receiptMessage = (char*)malloc(sizeof(char*)*64);
char *receiptMessage = (char*)malloc(sizeof(char*)*68);
SubMessage resposta, answer;
struct statvfs *buff;
struct pollfd ufds[1];
......@@ -729,7 +729,7 @@ int Message::receiveData(unsigned char* fileName, int size, int save){
int numberOfMessages, messagesCounter = 0, seqCounter;
int i, garbage, error, rv, success = 0, greaterSeq = 0;
unsigned char *subData;
char *receiptMessage = (char*)malloc(sizeof(char*)*64);
char *receiptMessage = (char*)malloc(sizeof(char*)*68);
struct pollfd ufds[1];
SubMessage nack, ack, answer;
ofstream fileOut;
......
/* Implementado por: Eduardo Machado e Victor Perszel */
/* 2015 */
#include "miniShell.h"
int lsParameter(string parameter){
if(parameter == ".") return 1;
else if(parameter == "-a") return 2;
else if(parameter == "-l") return 3;
else if(parameter == "-la") return 4;
else return -1;
}
int lsMini(string parameter, char* currentPath){
string mostra, temp, path, lsAux, fileName;
ifstream lsFile;
path = currentPath;
/* Para dar um ls apenas, é necessário escrever "ls ." */
/* Precisamos pensar em um jeito de concertar isso. */
switch(lsParameter(parameter)){
case 1:
lsAux = "ls > " + path + "/ls.txt";
system(lsAux.c_str());
break;
case 2:
lsAux = "ls -a > " + path + "/ls.txt";
system(lsAux.c_str());
break;
case 3:
lsAux = "ls -l > " + path + "/ls.txt";
system(lsAux.c_str());
break;
case 4:
lsAux = "ls -la > " + path + "/ls.txt";
system(lsAux.c_str());
break;
case -1:
puts("Parâmetro de ls inválido.");
return -1;
break;
}
printf("\n");
// Abertura do arquivo de entrada.
fileName = path + "/ls.txt";
lsFile.open(fileName.c_str(), ios::in);
lsFile.seekg (0);
// Leitura do arquivo.
while(getline(lsFile, temp)) {
mostra += temp + "\n";
}
// Remove arquivo ls.txt
remove(fileName.c_str());
cout << "mostra:" << mostra << endl;
return 0;
}
int cdMini(string intendedDirectory){
int errorTest;
errorTest = chdir(intendedDirectory.c_str());
return errorTest;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment