print discovered devices
This commit is contained in:
parent
5795bc1d32
commit
1ec3b6c4f0
6 changed files with 57 additions and 39 deletions
|
|
@ -21,9 +21,11 @@ Program::~Program() {
|
||||||
// TODO Auto-generated destructor stub
|
// TODO Auto-generated destructor stub
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::run() {
|
int Program::list() {
|
||||||
|
|
||||||
|
printf("List:\n");
|
||||||
Device d = Device();
|
Device d = Device();
|
||||||
printf(" %d\n", d.getName());
|
//printf(" %d\n", d.getName());
|
||||||
|
|
||||||
bytes b = { 255, 255, 0, 0 };
|
bytes b = { 255, 255, 0, 0 };
|
||||||
Host h = Host();
|
Host h = Host();
|
||||||
|
|
@ -45,7 +47,3 @@ int Program::run() {
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Program::discover() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,11 @@ class Program {
|
||||||
public:
|
public:
|
||||||
Program();
|
Program();
|
||||||
virtual ~Program();
|
virtual ~Program();
|
||||||
int run();
|
int list();
|
||||||
void setPort(int);
|
void setPort(int);
|
||||||
void setPort();
|
void setPort();
|
||||||
int src_port = 29809;
|
int src_port = 29809;
|
||||||
int dst_port = 29808;
|
int dst_port = 29808;
|
||||||
private:
|
|
||||||
int discover();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* PROGRAM_H_ */
|
#endif /* PROGRAM_H_ */
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
#define TYPES_H_
|
#define TYPES_H_
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::vector<T> operator+(const std::vector<T> &A, const std::vector<T> &B)
|
std::vector<T> operator+(const std::vector<T> &A, const std::vector<T> &B)
|
||||||
|
|
@ -37,6 +38,7 @@ struct dataset{
|
||||||
bytes value;
|
bytes value;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<dataset> datasets;
|
//typedef std::vector<dataset> datasets;
|
||||||
|
typedef std::map<short,dataset> datasets;
|
||||||
|
|
||||||
#endif /* TYPES_H_ */
|
#endif /* TYPES_H_ */
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,8 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
const struct option longopts[] = { { "version", no_argument, 0, 'v' }, {
|
const struct option longopts[] = { { "version", no_argument, 0, 'v' }, {
|
||||||
"help", no_argument, 0, 'h' },
|
"help", no_argument, 0, 'h' },
|
||||||
{ "port", required_argument, 0, 'p' },
|
{ "port", required_argument, 0, 'p' }, { "srcport",
|
||||||
{ "srcport", required_argument, 0, 's' },
|
required_argument, 0, 's' },
|
||||||
{ "dstport", required_argument, 0, 'p' }, { 0, 0, 0, 0 }, };
|
{ "dstport", required_argument, 0, 'p' }, { 0, 0, 0, 0 }, };
|
||||||
|
|
||||||
Program p = Program();
|
Program p = Program();
|
||||||
|
|
@ -75,18 +75,22 @@ int main(int argc, char *argv[]) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (optind < argc) {
|
if (optind < argc) {
|
||||||
if (strcmp(argv[optind], "list") == 0) {
|
if (strcmp(argv[optind], "list") == 0) {
|
||||||
printf("List:\n\tA B C\n");
|
if (p.list())
|
||||||
}else {
|
exit(EXIT_SUCCESS);
|
||||||
printf("->%s\n", argv[optind]);
|
else
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
} else {
|
||||||
|
printf("Unknown Command: %s\n", argv[optind]);
|
||||||
|
while (optind < argc) {
|
||||||
|
printf("->%s\n", argv[optind]);
|
||||||
|
optind++;
|
||||||
|
}
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
optind++;
|
optind++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.run())
|
|
||||||
exit(EXIT_SUCCESS);
|
|
||||||
else
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,9 @@ bytes Packet::getBytes() {
|
||||||
push(head, i, tokenId);
|
push(head, i, tokenId);
|
||||||
push(head, i, checkSum);
|
push(head, i, checkSum);
|
||||||
bytes data = head + body;
|
bytes data = head + body;
|
||||||
utils::printBytes("Send Head:\t",head);
|
//printf("Send Header:\t");
|
||||||
|
//utils::printHex(head);
|
||||||
|
//printf("\n");
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,7 +47,9 @@ void Packet::parse(bytes data) {
|
||||||
memcpy(&head[0], &data[0], HEADER_LEN);
|
memcpy(&head[0], &data[0], HEADER_LEN);
|
||||||
body.resize(data.size() - HEADER_LEN);
|
body.resize(data.size() - HEADER_LEN);
|
||||||
memcpy(&body[0], &data[HEADER_LEN], data.size() - HEADER_LEN);
|
memcpy(&body[0], &data[HEADER_LEN], data.size() - HEADER_LEN);
|
||||||
utils::printBytes("Receive Head:\t",head);
|
//printf("Receive Header:\t");
|
||||||
|
//utils::printHex(head);
|
||||||
|
//printf("\n");
|
||||||
int i = 0;
|
int i = 0;
|
||||||
short checkLen = 0x0;
|
short checkLen = 0x0;
|
||||||
pull(head, i, version);
|
pull(head, i, version);
|
||||||
|
|
@ -59,13 +63,20 @@ void Packet::parse(bytes data) {
|
||||||
pull(head, i, flag);
|
pull(head, i, flag);
|
||||||
pull(head, i, tokenId);
|
pull(head, i, tokenId);
|
||||||
pull(head, i, checkSum);
|
pull(head, i, checkSum);
|
||||||
utils::printBytes("MAC: ", switchMac);
|
if (this->getLength() != checkLen) {
|
||||||
utils::printBytes("MAC: ", hostMac);
|
printf("Packet Length doesn't match: %hd != %hd\n", this->getLength(),
|
||||||
if(this->getLength()!= checkLen){
|
checkLen);
|
||||||
printf("Packet Length doesn't match: %hd != %hd\n", this->getLength(), checkLen);
|
|
||||||
}
|
}
|
||||||
|
i = 0;
|
||||||
dataset d;
|
dataset d;
|
||||||
payload = {};
|
payload = {};
|
||||||
|
while (i < (int) body.size() - 4) {
|
||||||
|
pull(body, i, d.type);
|
||||||
|
pull(body, i, d.len);
|
||||||
|
pull(body, i, d.value, d.len);
|
||||||
|
payload[d.type] = d;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Packet::setBody(bytes data) {
|
void Packet::setBody(bytes data) {
|
||||||
|
|
@ -184,13 +195,13 @@ void Packet::pull(bytes &arr, int &index, byte &ret) {
|
||||||
void Packet::pull(bytes &arr, int &index, bytes &ret, unsigned len) {
|
void Packet::pull(bytes &arr, int &index, bytes &ret, unsigned len) {
|
||||||
ret.resize(len);
|
ret.resize(len);
|
||||||
memcpy(&ret[0], &arr[index], len);
|
memcpy(&ret[0], &arr[index], len);
|
||||||
index+=len;
|
index += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Packet::pull(bytes &arr, int &index, short &ret) {
|
void Packet::pull(bytes &arr, int &index, short &ret) {
|
||||||
ret = (arr[index++] << 8);
|
ret = (arr[index++] << 8);
|
||||||
ret |= arr[index++] & 0xFF;
|
ret |= arr[index++] & 0xFF;
|
||||||
ret &=0xFFFF;
|
ret &= 0xFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Packet::pull(bytes &arr, int &index, int &ret) {
|
void Packet::pull(bytes &arr, int &index, int &ret) {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
#include <asio.hpp>
|
#include <asio.hpp>
|
||||||
#include "Socket.h"
|
#include "Socket.h"
|
||||||
#include "../Types.h"
|
#include "../Types.h"
|
||||||
|
#include "../Utils.h"
|
||||||
#include "../device/Host.h"
|
#include "../device/Host.h"
|
||||||
#include "Packet.h"
|
#include "Packet.h"
|
||||||
|
|
||||||
|
|
@ -65,20 +66,24 @@ void Socket::listen() {
|
||||||
Packet p = Packet(Packet::DISCOVERY);
|
Packet p = Packet(Packet::DISCOVERY);
|
||||||
p.encode(data_);
|
p.encode(data_);
|
||||||
p.parse(data_);
|
p.parse(data_);
|
||||||
|
datasets l = p.getPayload();
|
||||||
|
utils::printSets(l);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
sleep(1);
|
sleep(1);
|
||||||
bytes b = {255, 255, 0, 0};
|
bytes b = {255, 255, 0, 0};
|
||||||
Host h = Host();
|
Host h = Host();
|
||||||
p = Packet(Packet::DISCOVERY);
|
p = Packet(Packet::DISCOVERY);
|
||||||
p.setBody(b);
|
p.setBody(b);
|
||||||
p.setHostMac(h.getMac());
|
p.setHostMac(h.getMac());
|
||||||
bytes a = p.getBytes();
|
bytes a = p.getBytes();
|
||||||
p.encode(a);
|
p.encode(a);
|
||||||
send(a);
|
send(a);
|
||||||
*/
|
*/
|
||||||
|
listen();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
printf("Listen\n");
|
//printf("Listen\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue