Resolve coding errors previously introduced.
This commit is contained in:
1 parent
613a36f009
commit
b37652a347
4 files changed
+74
-82
No files matched your search
@@ -1,5 +1,5 @@
|
|||||||
#ifndef DNS_HPP
|
#ifndef DNS_HPP
|
||||||
#define DNS_HPP
|
#define DNS_HPP
|
||||||
#include "Record.hpp"
|
#include "ResourceRecord.hpp"
|
||||||
#include "Zone.hpp"
|
#include "Zone.hpp"
|
||||||
#endif
|
#endif
|
||||||
+41
-39
@@ -7,50 +7,52 @@ namespace Resolver {
|
|||||||
|
|
||||||
|
|
||||||
Message::Message() {
|
Message::Message() {
|
||||||
_id = 0;
|
_header._id = 0;
|
||||||
_qr = 0;
|
_header._qr = 0;
|
||||||
_opCode = 0;
|
_header._opCode = 0;
|
||||||
_aa = 0;
|
_header._aa = 0;
|
||||||
_tc = 0;
|
_header._tc = 0;
|
||||||
_rd = 0;
|
_header._rd = 0;
|
||||||
_ra = 0;
|
_header._ra = 0;
|
||||||
_rCode = 0;
|
_header._rCode = 0;
|
||||||
_qdCount = 0;
|
_header._qdCount = 0;
|
||||||
_anCount = 0;
|
_header._anCount = 0;
|
||||||
_nsCount = 0;
|
_header._nsCount = 0;
|
||||||
_arCount = 0;
|
_header._arCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Message::Message(const Buffer& buffer) { decodeMessage(buffer); }
|
Message::Message(const Buffer& buffer) { decode(buffer); }
|
||||||
|
|
||||||
unsigned Message::id() const { return _id; }
|
unsigned Message::id() const { return _header._id; }
|
||||||
unsigned Message::rCode() const { return _rCode; }
|
unsigned Message::rCode() const { return _header._rCode; }
|
||||||
unsigned Message::qdCount() const { return _qdCount; }
|
unsigned Message::qdCount() const { return _header._qdCount; }
|
||||||
unsigned Message::anCount() const { return _anCount; }
|
unsigned Message::anCount() const { return _header._anCount; }
|
||||||
unsigned Message::nsCount() const { return _nsCount; }
|
unsigned Message::nsCount() const { return _header._nsCount; }
|
||||||
unsigned Message::arCount() const { return _arCount; }
|
unsigned Message::arCount() const { return _header._arCount; }
|
||||||
unsigned Message::opCode() const { return _opCode; }
|
unsigned Message::opCode() const { return _header._opCode; }
|
||||||
bool Message::rd() const { return _rd; }
|
bool Message::rd() const { return _header._rd; }
|
||||||
bool Message::aa() const { return _aa; }
|
bool Message::aa() const { return _header._aa; }
|
||||||
bool Message::tc() const { return _tc; }
|
bool Message::tc() const { return _header._tc; }
|
||||||
bool Message::ra() const { return _ra; }
|
bool Message::ra() const { return _header._ra; }
|
||||||
bool Message::qr() const { return _qr; }
|
bool Message::qr() const { return _header._qr; }
|
||||||
|
unsigned Message::encodedSize() const { return _buffer._size; }
|
||||||
|
|
||||||
void Message::id (unsigned value) { _id = value; }
|
void Message::id (unsigned value) { _header._id = value; }
|
||||||
void Message::rCode (unsigned value) { _rCode = value; }
|
void Message::rCode (unsigned value) { _header._rCode = value; }
|
||||||
void Message::qdCount(unsigned value) { _qdCount = value; }
|
void Message::qdCount(unsigned value) { _header._qdCount = value; }
|
||||||
void Message::anCount(unsigned value) { _anCount = value; }
|
void Message::anCount(unsigned value) { _header._anCount = value; }
|
||||||
void Message::nsCount(unsigned value) { _nsCount = value; }
|
void Message::nsCount(unsigned value) { _header._nsCount = value; }
|
||||||
void Message::arCount(unsigned value) { _arCount = value; }
|
void Message::arCount(unsigned value) { _header._arCount = value; }
|
||||||
void Message::opCode (unsigned value) { _opCode = value; }
|
void Message::opCode (unsigned value) { _header._opCode = value; }
|
||||||
void Message::rd (RD::FLAG flag) { _rd = flag; }
|
void Message::rd (RD::FLAG flag) { _header._rd = flag; }
|
||||||
void Message::aa (AA::FLAG flag) { _aa = flag; }
|
void Message::aa (AA::FLAG flag) { _header._aa = flag; }
|
||||||
void Message::tc (TC::FLAG flag) { _tc = flag; }
|
void Message::tc (TC::FLAG flag) { _header._tc = flag; }
|
||||||
void Message::ra (RA::FLAG flag) { _ra = flag; }
|
void Message::ra (RA::FLAG flag) { _header._ra = flag; }
|
||||||
void Message::qr (QR::FLAG flag) { _qr = flag; }
|
void Message::qr (QR::FLAG flag) { _header._qr = flag; }
|
||||||
|
|
||||||
unique_ptr<Buffer> Message::encodeMessage() const; {
|
void* Message::encode() const {
|
||||||
//Encode message
|
//Encode message. Not yet done
|
||||||
|
return _buffer._data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Message::decode(const Buffer& buffer) {
|
void Message::decode(const Buffer& buffer) {
|
||||||
|
|||||||
+18
-18
@@ -29,7 +29,7 @@ Server::Server(Logger& logger, EventBus& eventBus)
|
|||||||
_logger.debug.ln ("Starting Resolver...");
|
_logger.debug.ln ("Starting Resolver...");
|
||||||
|
|
||||||
_logger.warn << "Testing some stuff..." << Logger::commit;
|
_logger.warn << "Testing some stuff..." << Logger::commit;
|
||||||
_logger.warn << "Message::Header class overall size: " << sizeof(Message::Header) << Logger::commit;
|
//_logger.warn << "Message class overall size: " << sizeof(Message) << Logger::commit;
|
||||||
//_logger.debug << "Message::QR:RESPONSE Enum:" << Message::QR::RESPONSE << endl;
|
//_logger.debug << "Message::QR:RESPONSE Enum:" << Message::QR::RESPONSE << endl;
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ Server::Server(Logger& logger, EventBus& eventBus)
|
|||||||
myfile.seekg (0, std::ios::beg);
|
myfile.seekg (0, std::ios::beg);
|
||||||
beg = myfile.tellg();
|
beg = myfile.tellg();
|
||||||
const unsigned long size = end-beg;
|
const unsigned long size = end-beg;
|
||||||
Message::Header* header = new Message::Header;
|
Message* message = new Message;
|
||||||
myfile.read ((char*)header, sizeof(Message));
|
myfile.read ((char*)header, sizeof(Message));
|
||||||
_logger.debug << "size is: " << size << " bytes." << Logger::commit;
|
_logger.debug << "size is: " << size << " bytes." << Logger::commit;
|
||||||
|
|
||||||
@@ -128,27 +128,27 @@ void Server::run() {
|
|||||||
Message* message = (Message*) &buffer;
|
Message* message = (Message*) &buffer;
|
||||||
|
|
||||||
//Spit out some header values for debugging.
|
//Spit out some header values for debugging.
|
||||||
_logger.warn << "ID: " << message->header.id();
|
_logger.warn << "ID: " << message->id();
|
||||||
_logger.warn << " QR: " << message->header.qr();
|
_logger.warn << " QR: " << message->qr();
|
||||||
_logger.warn << " OPCode: " << message->header.opCode();
|
_logger.warn << " OPCode: " << message->opCode();
|
||||||
_logger.warn << " AA: " << message->header.aa();
|
_logger.warn << " AA: " << message->aa();
|
||||||
_logger.warn << " TC: " << message->header.tc();
|
_logger.warn << " TC: " << message->tc();
|
||||||
_logger.warn << " RD: " << message->header.rd();
|
_logger.warn << " RD: " << message->rd();
|
||||||
_logger.warn << " RA: " << message->header.ra();
|
_logger.warn << " RA: " << message->ra();
|
||||||
_logger.warn << " RCode: " << message->header.rCode();
|
_logger.warn << " RCode: " << message->rCode();
|
||||||
_logger.warn << " QDCount: " << message->header.qdCount();
|
_logger.warn << " QDCount: " << message->qdCount();
|
||||||
_logger.warn << " ANCount: " << message->header.anCount();
|
_logger.warn << " ANCount: " << message->anCount();
|
||||||
_logger.warn << " NSCount: " << message->header.nsCount();
|
_logger.warn << " NSCount: " << message->nsCount();
|
||||||
_logger.warn << " ARCount: " << message->header.arCount();
|
_logger.warn << " ARCount: " << message->arCount();
|
||||||
_logger.warn << Logger::commit;
|
_logger.warn << Logger::commit;
|
||||||
|
|
||||||
// Change message to response type and send back for testing
|
// Change message to response type and send back for testing
|
||||||
message->header.qr(Message::Header::QR::RESPONSE);
|
message->qr(Message::QR::RESPONSE);
|
||||||
//message->header.aa(Message::Header::AA::AUTHORATATIVE);
|
//message->aa(Message::AA::AUTHORATATIVE);
|
||||||
//message->header.ra(Message::Header::RA::AVAILABLE);
|
//message->ra(Message::RA::AVAILABLE);
|
||||||
|
|
||||||
//if ( sendto(udpServerSocket, msg, strlen(msg), 0, (struct sockaddr*)&clientAddress, clientAddressLength) < 0 ) {
|
//if ( sendto(udpServerSocket, msg, strlen(msg), 0, (struct sockaddr*)&clientAddress, clientAddressLength) < 0 ) {
|
||||||
if ( sendto(udpServerSocket, message, message->size(), 0, (struct sockaddr*)&clientAddress, clientAddressLength) < 0 ) {
|
if ( sendto(udpServerSocket, message->encode(), message->encodedSize(), 0, (struct sockaddr*)&clientAddress, clientAddressLength) < 0 ) {
|
||||||
close(udpServerSocket);
|
close(udpServerSocket);
|
||||||
_logger.warn.ln("sending error...");
|
_logger.warn.ln("sending error...");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,12 +2,15 @@
|
|||||||
#define MESSAGE_HPP
|
#define MESSAGE_HPP
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <vector>
|
||||||
|
#include "ResourceRecord.hpp"
|
||||||
|
|
||||||
namespace Plains {
|
namespace Plains {
|
||||||
namespace Resolver {
|
namespace Resolver {
|
||||||
|
|
||||||
using std::size_t;
|
using std::size_t;
|
||||||
using std::unique_ptr;
|
using std::unique_ptr;
|
||||||
|
using Core::DNS::ResourceRecord;
|
||||||
|
|
||||||
class Message
|
class Message
|
||||||
{
|
{
|
||||||
@@ -38,9 +41,9 @@ class Message
|
|||||||
struct RA { enum FLAG { NOT_AVAILABLE, AVAILABLE }; };
|
struct RA { enum FLAG { NOT_AVAILABLE, AVAILABLE }; };
|
||||||
|
|
||||||
struct Buffer {
|
struct Buffer {
|
||||||
size_t size;
|
size_t _size;
|
||||||
void* data;
|
void* _data;
|
||||||
};
|
} _buffer;
|
||||||
|
|
||||||
Message();
|
Message();
|
||||||
Message(const Buffer& buffer);
|
Message(const Buffer& buffer);
|
||||||
@@ -52,12 +55,13 @@ class Message
|
|||||||
unsigned nsCount() const; // Authority Record Count
|
unsigned nsCount() const; // Authority Record Count
|
||||||
unsigned arCount() const; // Additional Record Count
|
unsigned arCount() const; // Additional Record Count
|
||||||
unsigned opCode() const; // Operation Code
|
unsigned opCode() const; // Operation Code
|
||||||
|
unsigned encodedSize() const; // Message size in Bytes
|
||||||
bool qr() const; // Query/Respose Flag
|
bool qr() const; // Query/Respose Flag
|
||||||
bool aa() const; // Authoratative Answer Flag
|
bool aa() const; // Authoratative Answer Flag
|
||||||
bool tc() const; // Truncation Flag
|
bool tc() const; // Truncation Flag
|
||||||
bool rd() const; // Recursion Desired Flag
|
bool rd() const; // Recursion Desired Flag
|
||||||
bool ra() const; // Recursion Available Flag
|
bool ra() const; // Recursion Available Flag
|
||||||
unique_ptr<Buffer> encodeMessage() const; // Creates network byte-orderd message to be sent
|
void* encode() const; // Creates network byte-orderd message to be sent
|
||||||
|
|
||||||
void id (unsigned value);
|
void id (unsigned value);
|
||||||
void rCode (unsigned value);
|
void rCode (unsigned value);
|
||||||
@@ -71,11 +75,10 @@ class Message
|
|||||||
void tc(TC::FLAG flag);
|
void tc(TC::FLAG flag);
|
||||||
void rd(RD::FLAG flag);
|
void rd(RD::FLAG flag);
|
||||||
void ra(RA::FLAG flag);
|
void ra(RA::FLAG flag);
|
||||||
void decodeMessage(const Buffer& buffer);
|
void decode(const Buffer& buffer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Header {
|
struct Header {
|
||||||
private:
|
|
||||||
unsigned _id : 16; //Identifier: A 16-bit identification field generated by the device that creates the DNS query. It is copied by the server into the response, so it can be used by that device to match that query to the corresponding reply received from a DNS server. This is used in a manner similar to how the Identifier field is used in many of the ICMP message types.
|
unsigned _id : 16; //Identifier: A 16-bit identification field generated by the device that creates the DNS query. It is copied by the server into the response, so it can be used by that device to match that query to the corresponding reply received from a DNS server. This is used in a manner similar to how the Identifier field is used in many of the ICMP message types.
|
||||||
bool _qr : 1; //Query/Response Flag: Differentiates between queries and responses. Set to 0 when the query is generated; changed to 1 when that query is changed to a response by a replying server.
|
bool _qr : 1; //Query/Response Flag: Differentiates between queries and responses. Set to 0 when the query is generated; changed to 1 when that query is changed to a response by a replying server.
|
||||||
unsigned _opCode : 4;
|
unsigned _opCode : 4;
|
||||||
@@ -89,25 +92,12 @@ class Message
|
|||||||
unsigned _anCount : 16; //Answer Record Count: Specifies the number of resource records in the Answer section of the message.
|
unsigned _anCount : 16; //Answer Record Count: Specifies the number of resource records in the Answer section of the message.
|
||||||
unsigned _nsCount : 16; //Authority Record Count: Specifies the number of resource records in the Authority section of the message. (“NS” stands for “name server”, of course. J)
|
unsigned _nsCount : 16; //Authority Record Count: Specifies the number of resource records in the Authority section of the message. (“NS” stands for “name server”, of course. J)
|
||||||
unsigned _arCount : 16; //Additional Record Count: Specifies the number of resource records in the Additional section of the message.
|
unsigned _arCount : 16; //Additional Record Count: Specifies the number of resource records in the Additional section of the message.
|
||||||
};
|
} _header;
|
||||||
|
|
||||||
unsigned _id;
|
std::vector<ResourceRecord> _question;
|
||||||
bool _qr;
|
std::vector<ResourceRecord> _answer;
|
||||||
unsigned _opCode;
|
std::vector<ResourceRecord> _authority;
|
||||||
bool _aa;
|
std::vector<ResourceRecord> _additional;
|
||||||
bool _tc;
|
|
||||||
bool _rd;
|
|
||||||
bool _ra;
|
|
||||||
unsigned _rCode;
|
|
||||||
unsigned _qdCount;
|
|
||||||
unsigned _anCount;
|
|
||||||
unsigned _nsCount;
|
|
||||||
unsigned _arCount;
|
|
||||||
|
|
||||||
vector<ResourceRecord> _question;
|
|
||||||
vector<ResourceRecord> _answer;
|
|
||||||
vector<ResourceRecord> _authority;
|
|
||||||
vector<ResourceRecord> _additional;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user