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
Harbor Registry
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
9ad40f1c
Commit
9ad40f1c
authored
9 years ago
by
Vytor Calixto
Browse files
Options
Downloads
Patches
Plain Diff
Added dataToInt function
parent
b9cee061
Branches
Branches containing commit
No related tags found
1 merge request
!1
Lento
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
Message.cpp
+4
-21
4 additions, 21 deletions
Message.cpp
Message.h
+1
-1
1 addition, 1 deletion
Message.h
Protocol.cpp
+66
-26
66 additions, 26 deletions
Protocol.cpp
Protocol.h
+4
-2
4 additions, 2 deletions
Protocol.h
client.cpp
+6
-24
6 additions, 24 deletions
client.cpp
server.cpp
+4
-2
4 additions, 2 deletions
server.cpp
with
85 additions
and
76 deletions
Message.cpp
+
4
−
21
View file @
9ad40f1c
...
@@ -67,27 +67,10 @@ int Message::getMessageSize(){
...
@@ -67,27 +67,10 @@ int Message::getMessageSize(){
return
size
.
to_ulong
()
+
4
;
return
size
.
to_ulong
()
+
4
;
}
}
// string Message::getSendData() {
int
Message
::
dataToInt
()
{
// calcParity();
string
str
(
data
.
begin
(),
data
.
end
());
// string s(data.begin(), data.end());
return
stoi
(
str
);
// int size = data.size();
}
// //TODO: quebrar em partes aqui? ou tem que quebrar no protocolo?
// header.i_ctrl.size = size;
// header.i_ctrl.sequence = 1;
// char *fill;
// if(size < 63) {
// fill = (char*) malloc((63-size)*sizeof(char));
// memset(fill, 0, (63-size)*sizeof(char));
// }
// string d;
// d += header.c_ctrl.begin;
// d += header.c_ctrl.sizeSeq;
// d += header.c_ctrl.seqType;
// d += s.c_str();
// d += fill;
// d += header.c_ctrl.parity;
// return d;
// }
ostream
&
operator
<<
(
ostream
&
os
,
const
Message
&
msg
){
ostream
&
operator
<<
(
ostream
&
os
,
const
Message
&
msg
){
os
<<
'|'
<<
msg
.
begin
<<
'|'
<<
msg
.
size
<<
'|'
<<
msg
.
sequence
<<
'|'
<<
msg
.
type
<<
'|'
;
os
<<
'|'
<<
msg
.
begin
<<
'|'
<<
msg
.
size
<<
'|'
<<
msg
.
sequence
<<
'|'
<<
msg
.
type
<<
'|'
;
...
...
This diff is collapsed.
Click to expand it.
Message.h
+
1
−
1
View file @
9ad40f1c
...
@@ -14,12 +14,12 @@ public:
...
@@ -14,12 +14,12 @@ public:
BYTE
calcParity
();
BYTE
calcParity
();
bool
checkParity
();
bool
checkParity
();
// string getSendData();
void
setBitFields
(
BYTE
begin
,
BYTE
sizeSeq
,
BYTE
seqType
,
BYTE
parity
);
void
setBitFields
(
BYTE
begin
,
BYTE
sizeSeq
,
BYTE
seqType
,
BYTE
parity
);
vector
<
BYTE
>
getBitFieldsAsBytes
();
vector
<
BYTE
>
getBitFieldsAsBytes
();
vector
<
BYTE
>
getMessage
();
vector
<
BYTE
>
getMessage
();
char
*
getMessageAsCharPointer
();
char
*
getMessageAsCharPointer
();
int
getMessageSize
();
int
getMessageSize
();
int
dataToInt
();
Message
();
Message
();
};
};
...
...
This diff is collapsed.
Click to expand it.
Protocol.cpp
+
66
−
26
View file @
9ad40f1c
...
@@ -10,19 +10,29 @@ void Protocol::setMessages(vector<Message> messages){
...
@@ -10,19 +10,29 @@ void Protocol::setMessages(vector<Message> messages){
this
->
messages
=
messages
;
this
->
messages
=
messages
;
}
}
bool
Protocol
::
sendMessages
(
int
socket
,
int
window
)
{
bool
Protocol
::
sendMessages
(
int
socket
)
{
bool
success
=
true
;
for
(
int
i
=
0
;
i
<
messages
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
messages
.
size
();
++
i
)
{
// cout << "message: " << messages[i] << endl;
int
status
=
sendMessage
(
socket
,
i
);
vector
<
BYTE
>
message
=
messages
[
i
].
getMessage
();
if
(
status
<
0
)
{
success
=
false
;
cout
<<
"fail"
<<
endl
;
}
}
return
success
;
}
bool
Protocol
::
sendMessage
(
int
socket
,
int
index
)
{
cout
<<
"message: "
<<
messages
[
index
]
<<
endl
;
vector
<
BYTE
>
message
=
messages
[
index
].
getMessage
();
unsigned
char
*
msg
=
reinterpret_cast
<
unsigned
char
*>
(
message
.
data
());
unsigned
char
*
msg
=
reinterpret_cast
<
unsigned
char
*>
(
message
.
data
());
// cout << "char* msg: ";
// cout << "char* msg: ";
// for(int j=0;j<message.size();++j){
// for(int j=0;j<message.size();++j){
// cout << bitset<8>(msg[j]);
// cout << bitset<8>(msg[j]);
// }
// }
// cout <<endl;
// cout <<endl;
send
(
socket
,
msg
,
messages
[
i
].
getMessageSize
(),
0
);
int
status
=
send
(
socket
,
msg
,
messages
[
index
].
getMessageSize
(),
0
);
}
return
(
status
>=
0
);
return
true
;
}
}
vector
<
BYTE
>
Protocol
::
getData
(){
vector
<
BYTE
>
Protocol
::
getData
(){
...
@@ -78,17 +88,17 @@ int Protocol::recvMessage(int sockt){
...
@@ -78,17 +88,17 @@ int Protocol::recvMessage(int sockt){
BYTE
dataRec
[
MAXSIZE
+
4
];
BYTE
dataRec
[
MAXSIZE
+
4
];
int
r
=
recv
(
sockt
,
dataRec
,
MAXSIZE
+
4
,
0
);
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
<<
bitset
<
8
>
(
dataRec
[
0
])
<<
"|"
<<
bitset
<
8
>
(
dataRec
[
1
])
<<
"|"
<<
bitset
<
8
>
(
dataRec
[
2
])
<<
"|"
<<
bitset
<
8
>
(
dataRec
[
3
])
<<
"|
\t
"
;
cout
<<
"recv response: "
<<
r
<<
endl
;
//
cout << "recv response: " << r << endl;
if
(
dataRec
[
0
]
!=
BEGIN
){
if
(
dataRec
[
0
]
!=
BEGIN
){
return
NOISE
;
return
NOISE
;
}
}
Message
msg
=
Message
();
Message
msg
=
Message
();
int
size
=
(
int
)(
dataRec
[
1
]
>>
2
);
int
size
=
(
int
)(
dataRec
[
1
]
>>
2
);
cout
<<
"Tamanho:"
<<
size
<<
"
\t
"
;
//
cout << "Tamanho:" << size << "\t";
msg
.
setBitFields
(
dataRec
[
0
],
dataRec
[
1
],
dataRec
[
2
],
dataRec
[
size
+
3
]);
msg
.
setBitFields
(
dataRec
[
0
],
dataRec
[
1
],
dataRec
[
2
],
dataRec
[
size
+
3
]);
cout
<<
"Sequence:"
<<
msg
.
sequence
.
to_ulong
()
<<
"
\t
"
;
//
cout << "Sequence:" << msg.sequence.to_ulong() << "\t";
if
(
!
m
essages
.
empty
()
&&
if
(
!
receivedM
essages
.
empty
()
&&
(
msg
.
sequence
.
to_ulong
()
!=
((
m
essages
.
back
().
sequence
.
to_ulong
()
+
1
)
%
(
MAXSIZE
+
1
)))){
(
msg
.
sequence
.
to_ulong
()
!=
((
receivedM
essages
.
back
().
sequence
.
to_ulong
()
+
1
)
%
(
MAXSIZE
+
1
)))
&&
(
msg
.
sequence
.
to_ulong
()
!=
receivedMessages
.
back
().
sequence
.
to_ulong
())
){
return
SEQ_MISS
;
return
SEQ_MISS
;
}
}
if
(
!
msg
.
checkParity
()){
if
(
!
msg
.
checkParity
()){
...
@@ -101,22 +111,52 @@ int Protocol::recvMessage(int sockt){
...
@@ -101,22 +111,52 @@ int Protocol::recvMessage(int sockt){
BYTE
msgData
[
size
];
BYTE
msgData
[
size
];
memcpy
(
msgData
,
dataRec
+
3
,
size
);
memcpy
(
msgData
,
dataRec
+
3
,
size
);
msg
.
data
.
insert
(
msg
.
data
.
end
(),
msgData
,
msgData
+
size
);
msg
.
data
.
insert
(
msg
.
data
.
end
(),
msgData
,
msgData
+
size
);
m
essages
.
push_back
(
msg
);
receivedM
essages
.
push_back
(
msg
);
cout
<<
"Tipo:"
<<
(
int
)
msg
.
type
.
to_ulong
()
<<
endl
;
//
cout << "Tipo:" << (int)msg.type.to_ulong() << endl;
return
(
int
)
msg
.
type
.
to_ulong
();
return
(
int
)
msg
.
type
.
to_ulong
();
}
}
void
Protocol
::
transmit
(
int
sockt
,
int
type
,
int
window
){
void
Protocol
::
transmit
(
int
sockt
,
int
window
){
int
status
;
int
status
;
for
(
int
i
=
0
;
i
<
messages
.
size
();
++
i
){
vector
<
int
>
frame
;
//TODO: send part of output back
int
lastFramed
=
0
;
int
messagesLeft
=
messages
.
size
();
bool
shouldSend
=
true
;
while
(
messagesLeft
>
0
){
for
(
int
j
=
0
;
j
<
window
;
++
j
)
{
frame
.
push_back
(
lastFramed
++
);
if
(
shouldSend
)
sendMessage
(
sockt
,
frame
[
j
]);
}
// TODO: timeout
status
=
recvMessage
(
sockt
);
status
=
recvMessage
(
sockt
);
if
(
!
status
){
cout
<<
"transmit status:"
<<
status
<<
endl
;
//TODO: send part of output back again
shouldSend
=
true
;
if
(
status
==
0
){
int
nackIndex
=
stoi
(
getDataAsString
());
for
(
int
j
=
0
;
j
<
window
;
++
j
)
{
if
(
frame
[
j
]
<
nackIndex
)
{
frame
.
erase
(
frame
.
begin
()
+
j
);
--
messagesLeft
;
}
}
}
else
if
(
status
==
1
){
}
else
if
(
status
==
1
){
//TODO: send another part of output back
int
ackIndex
=
stoi
(
getDataAsString
());
for
(
int
j
=
0
;
j
<
window
;
++
j
)
{
if
(
frame
[
j
]
<=
ackIndex
)
{
frame
.
erase
(
frame
.
begin
()
+
j
);
--
messagesLeft
;
}
}
}
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
{
}
else
{
//TODO: send NACK back
//TODO: treat error
shouldSend
=
false
;
}
}
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
Protocol.h
+
4
−
2
View file @
9ad40f1c
...
@@ -7,9 +7,11 @@ class Protocol{
...
@@ -7,9 +7,11 @@ class Protocol{
private:
private:
vector
<
Message
>
messages
;
vector
<
Message
>
messages
;
vector
<
Message
>
receivedMessages
;
int
timeout
;
int
timeout
;
public:
public:
bool
sendMessages
(
int
socket
,
int
window
);
bool
sendMessages
(
int
socket
);
bool
sendMessage
(
int
socket
,
int
index
);
vector
<
Message
>
getMessages
();
vector
<
Message
>
getMessages
();
void
setMessages
(
vector
<
Message
>
messages
);
void
setMessages
(
vector
<
Message
>
messages
);
vector
<
BYTE
>
getData
();
vector
<
BYTE
>
getData
();
...
@@ -17,7 +19,7 @@ public:
...
@@ -17,7 +19,7 @@ public:
string
getDataAsString
();
string
getDataAsString
();
int
recvMessage
(
int
sockt
);
int
recvMessage
(
int
sockt
);
void
addMessage
(
Message
msg
);
void
addMessage
(
Message
msg
);
void
transmit
(
int
sockt
,
int
type
,
int
window
);
void
transmit
(
int
sockt
,
int
window
);
void
receive
(
int
sockt
,
int
type
,
int
window
);
void
receive
(
int
sockt
,
int
type
,
int
window
);
Protocol
();
Protocol
();
...
...
This diff is collapsed.
Click to expand it.
client.cpp
+
6
−
24
View file @
9ad40f1c
...
@@ -31,17 +31,17 @@ int main(){
...
@@ -31,17 +31,17 @@ int main(){
}
else
if
(
command
==
"cdr"
){
}
else
if
(
command
==
"cdr"
){
args
=
line
.
substr
(
pos
+
1
,
line
.
size
());
args
=
line
.
substr
(
pos
+
1
,
line
.
size
());
protocol
.
setData
(
vector
<
BYTE
>
(
args
.
begin
(),
args
.
end
()),
CD
);
protocol
.
setData
(
vector
<
BYTE
>
(
args
.
begin
(),
args
.
end
()),
CD
);
protocol
.
sendMessages
(
sockt
,
WAIT_STOP
);
protocol
.
transmit
(
sockt
,
WAIT_STOP
);
}
else
if
(
command
==
"lsr"
){
}
else
if
(
command
==
"lsr"
){
Message
msg
=
Message
();
line
.
replace
(
line
.
find
(
"lsr"
),
string
(
"lsr"
).
length
(),
"ls"
);
line
.
replace
(
line
.
find
(
"lsr"
),
string
(
"lsr"
).
length
(),
"ls"
);
protocol
.
setData
(
vector
<
BYTE
>
(
line
.
begin
(),
line
.
end
()),
LS
);
protocol
.
setData
(
vector
<
BYTE
>
(
line
.
begin
(),
line
.
end
()),
LS
);
protocol
.
sendMessages
(
sockt
,
WAIT_STOP
);
protocol
.
transmit
(
sockt
,
WAIT_STOP
);
// TODO: imprimir resposta
}
else
if
(
command
==
"put"
){
}
else
if
(
command
==
"put"
){
//TODO
protocol
.
setData
(
vector
<
BYTE
>
(
line
.
begin
(),
line
.
end
()),
PUT
);
protocol
.
transmit
(
sockt
,
WAIT_STOP
);
}
else
if
(
command
==
"get"
){
}
else
if
(
command
==
"get"
){
protocol
.
setData
(
vector
<
BYTE
>
(
line
.
begin
(),
line
.
end
()),
GET
);
protocol
.
transmit
(
sockt
,
WAIT_STOP
);
}
else
if
(
command
==
"help"
){
}
else
if
(
command
==
"help"
){
printCommandsList
();
printCommandsList
();
}
else
{
}
else
{
...
@@ -53,24 +53,6 @@ int main(){
...
@@ -53,24 +53,6 @@ int main(){
}
catch
(
out_of_range
e
){
}
catch
(
out_of_range
e
){
cerr
<<
"Error: Esse comando requer argumentos."
<<
endl
;
cerr
<<
"Error: Esse comando requer argumentos."
<<
endl
;
}
}
// int status = protocol.recvMessage(sockt);
// cout << "Status: " << status << endl;
// if(status > 0){
// if(status == ENDTX){
// protocol = Protocol();
// //TODO: send ACK
// }else if(status == CD){
// cd(protocol.getDataAsString());
// }else if(status == LS){
// string output = ls(protocol.getDataAsString());
// //TODO: send output back
// }else if(status == PUT){
// //TODO
// }else if(status == GET){
// //TODO
// }
// }
}
}
return
0
;
return
0
;
}
}
...
...
This diff is collapsed.
Click to expand it.
server.cpp
+
4
−
2
View file @
9ad40f1c
...
@@ -19,9 +19,11 @@ int main(){
...
@@ -19,9 +19,11 @@ int main(){
cout
<<
"Recebeu CD
\n
"
;
cout
<<
"Recebeu CD
\n
"
;
cd
(
protocol
.
getDataAsString
());
cd
(
protocol
.
getDataAsString
());
}
else
if
(
status
==
LS
){
}
else
if
(
status
==
LS
){
cout
<<
"Recebeu LS
\n
"
;
cout
<<
protocol
.
getDataAsString
()
<<
endl
;
string
output
=
ls
(
protocol
.
getDataAsString
());
string
output
=
ls
(
protocol
.
getDataAsString
());
//TODO: send output back
cout
<<
"LS:"
<<
output
<<
endl
;
protocol
.
setData
(
vector
<
BYTE
>
(
output
.
begin
(),
output
.
end
()),
OUTPUT
);
protocol
.
sendMessages
(
sockt
);
}
else
if
(
status
==
PUT
){
}
else
if
(
status
==
PUT
){
//TODO
//TODO
}
else
if
(
status
==
GET
){
}
else
if
(
status
==
GET
){
...
...
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