Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Caco
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Vytor Calixto
Caco
Commits
16a56139
Commit
16a56139
authored
9 years ago
by
Israel Barreto Sant'Anna
Browse files
Options
Downloads
Patches
Plain Diff
Put command working on server
Signed-off-by:
Israel B. Sant'Anna
<
ibsa14@inf.ufpr.br
>
parent
334b290d
Branches
putServer
Branches containing commit
No related tags found
1 merge request
!1
Lento
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
Protocol.cpp
+20
-49
20 additions, 49 deletions
Protocol.cpp
definitions.h
+1
-1
1 addition, 1 deletion
definitions.h
dirFunctions.cpp
+27
-0
27 additions, 0 deletions
dirFunctions.cpp
dirFunctions.h
+6
-0
6 additions, 0 deletions
dirFunctions.h
server.cpp
+27
-3
27 additions, 3 deletions
server.cpp
with
81 additions
and
53 deletions
Protocol.cpp
+
20
−
49
View file @
16a56139
...
...
@@ -27,7 +27,7 @@ bool Protocol::sendMessages(int socket) {
}
bool
Protocol
::
sendMessage
(
int
socket
,
int
index
)
{
cout
<<
"message: "
<<
messages
[
index
]
<<
endl
;
cout
<<
"message
sent
: "
<<
messages
[
index
]
<<
endl
;
vector
<
BYTE
>
message
=
messages
[
index
].
getMessage
();
unsigned
char
*
msg
=
reinterpret_cast
<
unsigned
char
*>
(
message
.
data
());
int
status
=
send
(
socket
,
msg
,
messages
[
index
].
getMessageSize
(),
0
);
...
...
@@ -88,7 +88,7 @@ int Protocol::setData(vector<BYTE> data, int type){
int
Protocol
::
recvMessage
(
int
sockt
){
BYTE
dataRec
[
MAXSIZE
+
4
];
int
r
=
recv
(
sockt
,
dataRec
,
MAXSIZE
+
4
,
0
);
cout
<<
bitset
<
8
>
(
dataRec
[
0
])
<<
"|"
<<
bitset
<
8
>
(
dataRec
[
1
])
<<
"|"
<<
bitset
<
8
>
(
dataRec
[
2
])
<<
"|"
<<
bitset
<
8
>
(
dataRec
[
3
])
<<
"|
\t
"
;
cout
<<
"begin: "
<<
bitset
<
8
>
(
dataRec
[
0
])
<<
endl
;
cout
<<
"recv response: "
<<
r
<<
endl
;
if
(
dataRec
[
0
]
!=
BEGIN
){
return
NOISE
;
...
...
@@ -99,7 +99,6 @@ int Protocol::recvMessage(int sockt){
int
dataSize
=
size
<
MINSIZE
?
MINSIZE
:
size
;
msg
.
setBitFields
(
dataRec
[
0
],
dataRec
[
1
],
dataRec
[
2
],
dataRec
[
dataSize
+
3
]);
cout
<<
"Sequence:"
<<
msg
.
sequence
.
to_ulong
()
<<
"
\t
"
;
BYTE
msgData
[
size
];
memcpy
(
msgData
,
dataRec
+
3
,
size
);
msg
.
data
.
insert
(
msg
.
data
.
end
(),
msgData
,
msgData
+
size
);
...
...
@@ -107,6 +106,7 @@ int Protocol::recvMessage(int sockt){
messages
.
push_back
(
msg
);
cout
<<
"Tipo:"
<<
(
int
)
msg
.
type
.
to_ulong
()
<<
endl
;
cout
<<
"message received: "
<<
msg
<<
endl
;
if
(
!
msg
.
checkParity
()){
return
INCONSISTENT
;
}
...
...
@@ -155,13 +155,6 @@ void Protocol::transmit(int sockt, int window){
}
}
response
.
reset
();
// }else if(status == OK) {
// frame.erase(frame.begin());
// --messagesLeft;
// } else if(status == OUTPUT || status == ERROR) {
// frame.erase(frame.begin());
// --messagesLeft;
// cout << "Remoto:\n" << ((status == ERROR)?"ERROR: ":"") << getDataAsString() << endl;
}
else
{
//TODO: treat error
}
...
...
@@ -186,58 +179,36 @@ int Protocol::receive(int sockt, int type, int window, bool dataEndable){
}
status
=
recvMessage
(
sockt
);
cout
<<
"receive status:"
<<
status
<<
endl
;
cout
<<
"sequence: "
<<
messages
.
back
().
sequence
.
to_ulong
()
<<
" next: "
<<
nextSequence
<<
endl
;
if
(
status
==
NOISE
){
continue
;
}
else
if
(
status
==
type
)
{
if
(
messages
.
back
().
sequence
.
to_ulong
()
!=
nextSequence
){
if
(
!
messages
.
empty
()
&&
(
messages
.
back
().
sequence
.
to_ulong
()
!=
nextSequence
)){
messages
.
pop_back
();
response
.
reset
();
vector
<
BYTE
>
val
(
1
,(
BYTE
)
nextSequence
);
response
.
setData
(
val
,
NACK
);
shouldSend
=
true
;
}
else
if
(
window
==
WAIT_STOP
||
((
nextSequence
%
SLIDING
)
==
0
))
{
}
else
{
if
(
window
==
WAIT_STOP
||
((
nextSequence
%
SLIDING
)
==
0
))
{
response
.
reset
();
vector
<
BYTE
>
val
(
1
,(
BYTE
)
messages
.
back
().
sequence
.
to_ulong
());
response
.
setData
(
val
,
ACK
);
shouldSend
=
true
;
}
nextSequence
=
(
messages
.
back
().
sequence
.
to_ulong
()
+
1
)
%
(
MAXSIZE
+
1
);
}
else
{
//TODO: treat something?
}
}
else
if
(
status
==
ERROR
)
{
string
str
(
messages
.
back
().
data
.
begin
(),
messages
.
back
().
data
.
end
());
cout
<<
"ERROR: "
<<
getDataAsString
()
<<
endl
;
cout
<<
"ERROR: "
<<
messages
.
back
().
getDataAsString
()
<<
endl
;
return
-
1
;
}
// else if(messages.back().sequence.to_ulong() != nextSequence){
// response.reset();
// vector<BYTE> val(1,(BYTE)nextSequence);
// response.setData(val, NACK);
// shouldSend = true;
// }
// else if(status == OUTPUT) {
// cout << messages.back().getDataAsString();
//
// frame.push_back(messages.size());
//
// response.reset();
// vector<BYTE> val(1,(BYTE)messages.back().sequence.to_ulong());
// response.setData(val, ACK);
// nextSequence = (messages.back().sequence.to_ulong()+1)%(MAXSIZE+1);
// }else if(status == ERROR){
// string str(messages.back().data.begin(), messages.back().data.end());
// cout << "ERROR: " << getDataAsString() << endl;
// break;
// }else if(status == INCONSISTENT){
// response.reset();
// vector<BYTE> val(1,(BYTE)nextSequence);
// response.setData(val, NACK);
// shouldSend = true;
// }else{
// //TODO: treat error
// break;
// }
// shouldSend = shouldSend || (frame.size()%window == 0);
}
while
(
status
!=
end
);
if
(
dataEndable
){
response
.
reset
();
vector
<
BYTE
>
val
(
1
,(
BYTE
)
messages
.
back
().
sequence
.
to_ulong
());
response
.
setData
(
val
,
ACK
);
response
.
sendMessages
(
sockt
);
}
return
0
;
}
...
...
This diff is collapsed.
Click to expand it.
definitions.h
+
1
−
1
View file @
16a56139
...
...
@@ -16,7 +16,7 @@ using namespace std;
//Delimiter indicating beginning of a message
#define BEGIN 0x7E
//Socket device
#define DEVICE "
lo
"
#define DEVICE "
enp8s2
"
//Message types
#define NACK 0
#define ACK 1
...
...
This diff is collapsed.
Click to expand it.
dirFunctions.cpp
+
27
−
0
View file @
16a56139
#include
<iostream>
#include
<fstream>
#include
<errno.h>
#include
<unistd.h>
#include
<string.h>
#include
<vector>
#include
<stdio.h>
//popen
#include
<sys/statvfs.h>
using
namespace
std
;
...
...
@@ -28,3 +30,28 @@ string ls(string args){
pclose
(
lsOut
);
return
output
;
}
string
getWorkingPath
(){
char
temp
[
1024
];
return
(
getcwd
(
temp
,
1024
)
?
string
(
temp
)
:
string
(
""
));
}
bool
hasEnoughSpace
(
int
size
){
struct
statvfs
fsData
;
string
path
=
getWorkingPath
();
statvfs
(
path
.
c_str
(),
&
fsData
);
int
freeSpace
=
fsData
.
f_bsize
*
fsData
.
f_bfree
;
return
(
freeSpace
>
size
);
}
void
writeFile
(
string
path
,
vector
<
BYTE
>
data
){
cout
<<
"path: "
<<
path
<<
endl
;
string
strData
(
data
.
begin
(),
data
.
end
());
ofstream
file
(
path
);
if
(
file
.
is_open
()){
file
<<
strData
;
file
.
close
();
}
else
cout
<<
"Unable to open file"
;
}
This diff is collapsed.
Click to expand it.
dirFunctions.h
+
6
−
0
View file @
16a56139
...
...
@@ -9,4 +9,10 @@ void cd(string path);
string
ls
(
string
path
);
bool
hasEnoughSpace
(
int
size
);
string
getWorkingPath
();
void
writeFile
(
string
path
,
vector
<
BYTE
>
data
);
#endif
\ No newline at end of file
This diff is collapsed.
Click to expand it.
server.cpp
+
27
−
3
View file @
16a56139
...
...
@@ -18,8 +18,7 @@ int main(){
if
(
status
==
CD
){
cout
<<
"Recebeu CD
\n
"
;
cd
(
receiveProtocol
.
getDataAsString
());
vector
<
BYTE
>
val
(
1
,(
BYTE
)
0
);
sendProtocol
.
setData
(
val
,
OK
);
sendProtocol
.
setData
(
vector
<
BYTE
>
(
1
,(
BYTE
)
0
),
OK
);
sendProtocol
.
sendMessage
(
sockt
,
0
);
}
else
if
(
status
==
LS
){
cout
<<
"protocol data: "
<<
receiveProtocol
.
getDataAsString
()
<<
endl
;
...
...
@@ -29,9 +28,34 @@ int main(){
sendProtocol
.
setData
(
vector
<
BYTE
>
(
output
.
begin
(),
output
.
end
()),
OUTPUT
);
sendProtocol
.
transmit
(
sockt
,
WAIT_STOP
);
}
else
if
(
status
==
PUT
){
//TODO
string
fileName
=
receiveProtocol
.
getDataAsString
();
cout
<<
"fileName: "
<<
fileName
<<
endl
;
sendProtocol
.
setData
(
vector
<
BYTE
>
(
1
,(
BYTE
)
0
),
OK
);
sendProtocol
.
sendMessage
(
sockt
,
0
);
receiveProtocol
.
reset
();
receiveProtocol
.
receive
(
sockt
,
SIZE
,
WAIT_STOP
,
false
);
cout
<<
"fileSize: "
<<
receiveProtocol
.
getDataAsString
()
<<
endl
;
int
fileSize
=
stoi
(
receiveProtocol
.
getDataAsString
());
sendProtocol
.
reset
();
if
(
hasEnoughSpace
(
fileSize
)){
sendProtocol
.
setData
(
vector
<
BYTE
>
(
1
,(
BYTE
)
0
),
OK
);
sendProtocol
.
sendMessage
(
sockt
,
0
);
}
else
{
sendProtocol
.
setData
(
vector
<
BYTE
>
(
1
,(
BYTE
)
SPACE_ERR
),
ERROR
);
sendProtocol
.
sendMessage
(
sockt
,
0
);
}
receiveProtocol
.
reset
();
receiveProtocol
.
receive
(
sockt
,
DATA
,
SLIDING
,
true
);
cout
<<
"conteudo: "
<<
receiveProtocol
.
getDataAsString
()
<<
endl
;
writeFile
(
getWorkingPath
()
+
"/"
+
fileName
,
receiveProtocol
.
getData
());
}
else
if
(
status
==
GET
){
//TODO
}
else
if
(
status
==
ENDTX
){
sendProtocol
.
reset
();
vector
<
BYTE
>
val
(
1
,(
BYTE
)
receiveProtocol
.
getMessages
().
back
().
sequence
.
to_ulong
());
sendProtocol
.
setData
(
val
,
ACK
);
sendProtocol
.
sendMessages
(
sockt
);
}
}
catch
(
char
const
*
strException
){
cout
<<
"Erro:"
<<
strException
<<
endl
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment