123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*
- * connection_Setup.cc
- *
- * Created on: Feb 7, 2018
- * Author: anay
- */
- /*
- * connection_Setup.cpp
- *
- * Created on: Nov 27, 2017
- * Author: anay
- */
- #include <omnetpp.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include "connection_Setup.h"
- using namespace inet;
- void connection_Setup::initialize(int stage) {
- int port = 1024;
- socket = create_UDPSocket(L3Address(), port);
- }
- void connection_Setup::handleMessage(cMessage *msg) {
- if (PN == 1 && msg->isSelfMessage()) {
- sendClientInitial(0x00000002, "FirstMessage");
- }
- if (PN == 1 && msg->arrivedOn("udpOut")
- && pkt == dynamic_cast<Long_Header*>(msg)) {
- if (pkt->getVersion() == 0x0000001 || pkt->getVersion() == 0x0000002) {
- version = pkt->getVersion();
- if (pkt->getType() == 0x81) {
- receiveVersionNegotiation(pkt);
- }
- if (pkt->getType() == 0x82) {
- receiveClientInitial(pkt);
- }
- if (pkt->getType() == 0x83) {
- receiveServerStatelessRetry(pkt);
- }
- if (pkt->getType() == 0x84) {
- receiveServerCleartext(pkt);
- }
- if (pkt->getType() == 0x85) {
- receiveClientCleartext(pkt);
- }
- if (pkt->getType() == 0x86) {
- receiveRTTProtected(pkt);
- }
- } else {
- sendVersionNegotiation();
- }
- }
- }
- void connection_Setup::sendVersionNegotiation() {
- Version_Negotiation *msg = new Version_Negotiation;
- Long_Header *pkt = new Long_Header();
- msg->setVersions("0x0000001, 0x00000002");
- pkt->setType(0x81);
- pkt->setCID(0x0101010101010101);
- pkt->setPN(PN);
- pkt->setVersion(0x00000002);
- pkt->encapsulate(msg);
- send_packet(pkt, L3AddressResolver().resolve("node2"), 1023, socket);
- }
- void connection_Setup::receiveVersionNegotiation(Long_Header *pkt) {
- Version_Negotiation *vn =
- dynamic_cast<Version_Negotiation*>(pkt->decapsulate());
- std::cout << vn->getVersions() << endl;
- }
- void connection_Setup::sendClientInitial(uint32_t version, const char* stream) {
- Client_Initial *msg = new Client_Initial();
- Long_Header *pkt = new Long_Header();
- Stream *str = new Stream();
- str->setType(0xcb);
- str->setStream_Id(0x00000000);
- str->setStream_Data("FirstCount");
- msg->setStream_0(str);
- pkt->setType(0x82);
- pkt->setCID(0x0101010101010101);
- pkt->setPN(PN);
- pkt->setVersion(0x00000002);
- pkt->encapsulate(msg);
- send_packet(pkt, L3AddressResolver().resolve("node2"), 1023, socket);
- }
- void connection_Setup::receiveClientInitial(Long_Header *pkt) {
- CID = pkt->getCID();
- Client_Initial *ci = dynamic_cast<Client_Initial*>(pkt->decapsulate());
- Stream *str = new Stream();
- str = ci->getStream_0();
- std::cout << str->getStream_Id() << "\t" << str->getStream_Data() << endl;
- sendServerCleartext(version, str->getStream_Data());
- }
- void connection_Setup::receiveClientCleartext(Long_Header *pkt) {
- Client_Cleartext *cc = dynamic_cast<Client_Cleartext*>(pkt->decapsulate());
- Ack* ack = cc->getAck_0();
- Stream* stream = cc->getStream_0();
- Padding* pad = cc->getPadding_0();
- lastAckPn = ack->getLargest_Acknowledged();
- std::cout << stream->getStream_Id() << "\t" << stream->getStream_Data()
- << endl;
- std::cout << strlen(pad->getPad()) << endl;
- sendRTTProtected(pkt->getVersion(), "SendingData");
- }
- void connection_Setup::receiveServerCleartext(Long_Header *pkt) {
- Server_Cleartext *sc = dynamic_cast<Server_Cleartext*>(pkt->decapsulate());
- Ack* ack = sc->getAck_0();
- Stream* stream = sc->getStream_0();
- Padding* pad = sc->getPadding_0();
- lastAckPn = ack->getLargest_Acknowledged();
- std::cout << stream->getStream_Id() << "\t" << stream->getStream_Data()
- << endl;
- std::cout << strlen(pad->getPad()) << endl;
- sendClientCleartext(pkt->getVersion(), stream->getStream_Data());
- }
- void connection_Setup::receiveServerStatelessRetry(Long_Header *pkt) {
- Server_Stateless_Retry *ssr =
- dynamic_cast<Server_Stateless_Retry*>(pkt->decapsulate());
- Stream* stream = ssr->getStream_0();
- std::cout << stream->getStream_Id() << "\t" << stream->getStream_Data()
- << endl;
- }
- void connection_Setup::receiveRTTProtected(Long_Header *pkt) {
- _0_RTT_Protected *rp = dynamic_cast<_0_RTT_Protected*>(pkt->decapsulate());
- Stream* stream = rp->getStream_0();
- std::cout << stream->getStream_Id() << "\t" << stream->getStream_Data()
- << endl;
- sendRTTProtected(pkt->getVersion(), "SendingData2");
- }
- void connection_Setup::sendClientCleartext(uint32_t version,
- const char* stream) {
- Client_Cleartext *cc = new Client_Cleartext();
- Long_Header *pkt = new Long_Header();
- Stream *str = new Stream();
- Ack *ack = new Ack();
- Padding *pad = new Padding();
- str->setType(0xcb);
- str->setStream_Id(0x00000000);
- str->setStream_Data("ClientCleartext");
- ack->setType(0xa8);
- ack->setLargest_Acknowledged(PN);
- ack->setAck_Block_Section(stream);
- pad->setPad("000000000");
- cc->setAck_0(ack);
- cc->setStream_0(str);
- cc->setPadding_0(pad);
- pkt->setType(0x85);
- pkt->setCID(CID);
- pkt->setPN(++PN);
- pkt->setVersion(version);
- pkt->encapsulate(cc);
- send_packet(pkt, L3AddressResolver().resolve("node2"), 1023, socket);
- }
- void connection_Setup::sendServerCleartext(uint32_t version,
- const char* string) {
- Server_Cleartext *sc = new Server_Cleartext();
- Long_Header *pkt = new Long_Header();
- Stream *str = new Stream();
- Ack *ack = new Ack();
- Padding *pad = new Padding();
- str->setType(0xcb);
- str->setStream_Id(0x00000000);
- str->setStream_Data("ServerCleartext");
- ack->setType(0xa8);
- ack->setLargest_Acknowledged(PN);
- ack->setAck_Block_Section(string);
- pad->setPad("000000000");
- sc->setAck_0(ack);
- sc->setStream_0(str);
- sc->setPadding_0(pad);
- pkt->setType(0x84);
- pkt->setCID(CID);
- pkt->setPN(++PN);
- pkt->setVersion(version);
- pkt->encapsulate(sc);
- send_packet(pkt, L3AddressResolver().resolve("node2"), 1023, socket);
- }
- void connection_Setup::sendServerStatelessRetry(uint32_t version,
- const char* string) {
- Server_Stateless_Retry *ssr = new Server_Stateless_Retry();
- Long_Header *pkt = new Long_Header();
- Stream *str = new Stream();
- str->setType(0xcb);
- str->setStream_Id(0x00000000);
- str->setStream_Data("ServerStatelessRetry");
- ssr->setStream_0(str);
- pkt->setType(0x84);
- pkt->setCID(CID);
- pkt->setPN(++PN);
- pkt->setVersion(version);
- pkt->encapsulate(ssr);
- send_packet(pkt, L3AddressResolver().resolve("node2"), 1023, socket);
- }
- void connection_Setup::sendRTTProtected(uint32_t version, const char* string) {
- _0_RTT_Protected *rp = new _0_RTT_Protected();
- Long_Header *pkt = new Long_Header();
- Stream *str = new Stream();
- str->setType(0xcb);
- str->setStream_Id(0x00000000);
- str->setStream_Data("RTTProtected");
- rp->setStream_0(str);
- pkt->setType(0x86);
- pkt->setCID(CID);
- pkt->setPN(++PN);
- pkt->setVersion(version);
- pkt->encapsulate(rp);
- send_packet(pkt, L3AddressResolver().resolve("node2"), 1023, socket);
- }
|