Commit 4d411972 by Oleksandr Barabash

init

parents
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# dotenv
.env
# virtualenv
.venv
venv/
ENV/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
# idea ide
.idea
.DS_Store
**/.DS_Store
#include "Client.h"
ClientType Client::getType() {
return type;
}
#ifndef TRANSCEIVER_CLIENT_H
#define TRANSCEIVER_CLIENT_H
#include <netinet/in.h> // sockaddr_in
#include <iostream> // std::cerr
#include <arpa/inet.h> //atoi
#define BUF_SIZE 65535
#define PACKET_SIZE 188
enum ClientType {
RECEIVER,
SENDER
};
class Client {
protected:
ClientType type = RECEIVER;
char buffer[BUF_SIZE];
// READER
int readSocket;
int readIntPort;
char * readPort;
char * readAddress;
int initReadSocket();
// TODO(s1z): add readInterface;
// SENDER
int sendSocket;
int sendIntPort;
char * sendPort;
char * sendAddress;
int initSendSocket();
// TODO(s1z): add sendInterface;
struct sockaddr_in tcpAddress;
struct sockaddr_in udpAddress;
struct ip_mreqn mcastContext;
public:
ClientType getType();
void start();
};
#endif //TRANSCEIVER_CLIENT_H
#include <iostream>
#include "receiver/Receiver.h"
int main() {
Receiver r = Receiver((char *)"238.1.48.5", (char *)"1234");
return 0;
}
\ No newline at end of file
//
// Created by Alexandr Barabash on 12/5/17.
//
#include "Packet.h"
unsigned int Packet::getId(){
return id;
}
void Packet::addPacketPart(){
}
//
// Created by Alexandr Barabash on 12/5/17.
//
#ifndef TRANSCEIVER_PACKET_H
#define TRANSCEIVER_PACKET_H
class Packet {
private:
unsigned int id;
public:
unsigned int getId();
explicit Packet(unsigned int id):id(id){}
void addPacketPart();
};
#endif //TRANSCEIVER_PACKET_H
//
// Created by Alexandr Barabash on 12/5/17.
//
#include "PacketPart.h"
unsigned long PacketPart::getId(){
return id;
}
unsigned long PacketPart::getPart(){
return part;
}
unsigned long PacketPart::getTotal(){
return total;
}
//
// Created by Alexandr Barabash on 12/5/17.
//
#ifndef TRANSCEIVER_PACKETPART_H
#define TRANSCEIVER_PACKETPART_H
class PacketPart {
private:
unsigned long id;
unsigned long part;
unsigned long total;
unsigned char* body;
public:
explicit PacketPart(
unsigned long id,
unsigned long part, // Part ID of the Packet ID
unsigned long total,
unsigned char* body
): id(id), part(part), total(total), body(body){}
unsigned long getId();
unsigned long getPart();
unsigned long getTotal();
};
#endif //TRANSCEIVER_PACKETPART_H
//
// Created by Alexandr Barabash on 12/5/17.
//
#include "Table.h"
unsigned long Table::getPacketSum(int len){
unsigned long result = 0;
if(len < 0){
len = 0;
}
for(int i=1; i<=len; i++){
result += i;
}
return result;
}
void Table::addPacket(Packet* packet){
unsigned int id = packet->getId();
if (packets.count(id) < 1){
packets[id] = packet;
}
}
//
// Created by Alexandr Barabash on 12/5/17.
//
#ifndef TRANSCEIVER_TABLE_H
#define TRANSCEIVER_TABLE_H
#include <map>
#include <iostream>
#include "Packet.h"
#include "PacketPart.h"
class Table {
private:
std::map <unsigned int, Packet*> packets;
std::map <unsigned int, unsigned int> packetsLen;
unsigned long getPacketSum(int len);
public:
void addPacket(Packet* packet);
};
#endif //TRANSCEIVER_TABLE_H
syntax = "proto2";
package transceiver;
message Packet {
required uint64 id = 1;
required uint64 part = 2;
optional uint64 total = 3;
optional bytes body = 4;
// signature ?
}
#include "Receiver.h"
Receiver::Receiver(char* address, char* port):readAddress(address),
readPort(port),
readIntPort(atoi(port)){
}
int Receiver::Client::initReadSocket() {
}
int Receiver::Client::initSendSocket() {
}
//int Receiver::initTCPSocket(){
/*
tcpSocket = socket(AF_INET, SOCK_STREAM, 0);
if (tcpSocket < 0){
std::cerr << "Error init TCP socket" << std::endl;
return udpSocket;
}
tcpAddress.sin_family = AF_INET;
tcpAddress.sin_addr.s_addr = inet_addr(listenAddress);
tcpAddress.sin_port = htons(listenPort);
setsockopt(tcpSocket, SOL_SOCKET, SO_REUSEADDR, (char *)1, sizeof(1));
return tcpSocket;
*/
//}
/*
int Receiver::initUDPSocket(){
udpSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (udpSocket < 0){
std::cerr << "Error init UDP socket!" << std::endl;
return udpSocket;
}
udpAddress.sin_family = AF_INET;
udpAddress.sin_addr.s_addr = inet_addr(listenAddress); // Do we need to set Mcast address here ?
udpAddress.sin_port = htons(listenPort);
mcastGroup.imr_multiaddr.s_addr = inet_addr(listenAddress);
mcastGroup.imr_address.s_addr = INADDR_ANY; // source address. Do we need it ?
int reuse = 1;
if(setsockopt(udpSocket, SOL_SOCKET, SO_REUSEADDR, (char *)reuse, sizeof(reuse)) < 0){
std::cerr << "Error set UDP socket reuse!" << std::endl;
}
if (bind(udpSocket, (struct sockaddr*)&udpAddress, sizeof(udpAddress)) < 0) {
std::cerr << "Error bind UDP socket!" << std::endl;
return -1;
}
if (setsockopt(udpSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mcastGroup, sizeof(mcastGroup)) < 0){
std::cerr << "Error coonect UDP socket to mcast group!" << std::endl;
return 0;
}
return udpSocket;
}
void Receiver::startReceive() {
int result;
while(true) {
result = recvfrom(
udpSocket,
buffer,
UDP_MAXIMUM_SIZE,
0,
(struct sockaddr *) &udpAddress,
(socklen_t *) sizeof(udpAddress)
);
std::cout << "Received:" << result << std::endl;
}
}
*/
//
// Created by Alexandr Barabash on 11/30/17.
//
#ifndef TRANSCEIVER_TRANSCEIVER_H
#define TRANSCEIVER_TRANSCEIVER_H
#include "../client/Client.h"
#define BUF_SIZE 65535
#define PACKET_SIZE 188
class Receiver : public Client {
private:
int id;
//
char* listenAddress;
int listenPort;
int udpSocket;
struct sockaddr_in udpAddress;
struct ip_mreqn mcastGroup;
//
char buffer[BUF_SIZE];
//int initReadSocket();
//int initSendSocket();
public:
explicit Receiver(char* address, char* port);
void start();
};
#endif //TRANSCEIVER_TRANSCEIVER_H
#include "Sender.h"
Sender::Sender(char* address,
char* rPort,
char* sPort):readAddress(address),
readPort(rPort),
sendPort(sPort),
readIntPort(atoi(rPort)),
readIntPort(atoi(rPort)),
type(SENDER){
resetAddresses();
initReadSocket();
initSendSocket();
}
void Sender::resetAddresses() {
memset((char *) &tcpAddress, 0, sizeof(tcpAddress));
memset((char *) &udpAddress, 0, sizeof(udpAddress));
}
int Sender::Client::initReadSocket() {
/*
* Read socket is the udp mcast socket.
* We listen 238.1.2.3:1234 for example from ANY source IP
*/
this->mcastContext.imr_multiaddr.s_addr = inet_addr(readAddress);
this->mcastContext.imr_address.s_addr = INADDR_ANY;
this->udpAddress.sin_family = AF_INET;
this->udpAddress.sin_port = htons(readIntPort);
this->udpAddress.sin_addr.s_addr = inet_addr(readAddress);
readSocket = socket(AF_INET, SOCK_DGRAM, 0);
return readSocket;
}
int Sender::Client::initSendSocket() {
/*
* We open port an wait for connection.
*/
// TODO(s1z): Add device binding
tcpAddress.sin_family = AF_INET;
tcpAddress.sin_addr.s_addr = htonl(INADDR_ANY);
tcpAddress.sin_port = htons(sendIntPort);
sendSocket = socket(AF_INET, SOCK_STREAM, 0);
return sendSocket;
}
//
// Created by Alexandr Barabash on 5/4/18.
//
#ifndef TRANSCEIVER_SENDER_H
#define TRANSCEIVER_SENDER_H
#include "../client/Client.h"
class Sender : public Client {
private:
void resetAddresses();
void configUdpSocket();
public:
explicit Sender(char* address, char* rPort, char* sPort);
void start();
};
#endif //TRANSCEIVER_SENDER_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment