18 Kasım 2008 Salı

Implementing new agent in NS--agentBB.cc



#include "agentBB.h"

#define UALIVE 0 //Are you avlive
#define IMALIVE 1 //Yes I am alive

int hdr_BB::offset_;


static class agentBBHeaderClass : public PacketHeaderClass {
public:
agentBBHeaderClass() : PacketHeaderClass("PacketHeader/BBB",
sizeof(hdr_BB)) {
bind_offset(&hdr_BB::offset_);
}
} class_BBBhdr;

static class agentBBClass : public TclClass {
public:
agentBBClass() : TclClass("Agent/agentBB") {}
TclObject* create(int, const char*const*) {
return (new agentBB());
}
} class_agentBB;

agentBB::agentBB() : Agent(PT_BBB)
{
// printf("agentBB Constructor..");
}

agentBB::~agentBB(){
}

int agentBB::command(int argc, const char*const* argv)
{
if (argc == 4)
{
if (strcmp(argv[1], "sendto") == 0)
{
printf("Packet will be sent to Destination : %s with cmd : %d\n",argv[2], atoi(argv[3]));
return (sendto((nsaddr_t)atoi(argv[2]),atoi(argv[3])));
}
}
return (Agent::command(argc, argv));
}

void agentBB::recv(Packet* pkt, Handler*)
{
int cmd;
nsaddr_t senderAddress;

hdr_BB* hdr_BB_gelen = hdr_BB::access(pkt);
hdr_ip* hdr_ip_gelen = hdr_ip::access(pkt);
cmd = hdr_BB_gelen->cmd;
senderAddress = hdr_ip_gelen->saddr();
printf("Packet Received from %d with cmd : %d\n", senderAddress, cmd);
if(cmd==UALIVE){
printf("--Are You Alive Packet-- is Received..\n");
sendto(senderAddress, 1);
}
if(cmd==IMALIVE){
printf("--I am Alive Packet-- is Received..\n");
}
}

int agentBB::sendto(nsaddr_t destination, int cmd)
{
printf("Prepairing to send packet..\n");
dst_.addr_ = destination;

Packet* gonderiPkt = allocpkt();
hdr_BB* hdr_gonderi = hdr_BB::access(gonderiPkt);

if(cmd == UALIVE){
hdr_gonderi->cmd = UALIVE;
}
if(cmd == IMALIVE){
hdr_gonderi->cmd = IMALIVE;
}

send(gonderiPkt, 0);
return (TCL_OK);
}

Hiç yorum yok:

Yorum Gönder