//
//  CS461 Distributed Computing and Networking
//  Princeton University
//  Tammo Spalink
// 
//  Revision 8
//

#include <stdio.h>
#include <stdlib.h>

#include "interface.h"

#include <sys/types.h>
#include <linux/ip.h>
#include <arpa/inet.h>
#include <sys/uio.h>

#define FOREVER ;;

void
clockHandler(void)
// A simple clock callback
{
    fprintf(stderr, "!");
}

void
recvHandler(void *buf)
// A simple IO callback
{
    struct iphdr *header;
    unsigned int tmp;
    struct iovec iov;

    header = (struct iphdr *)buf;
    tmp = header->daddr;
    header->daddr = header->saddr;
    header->saddr = tmp;

    iov.iov_base = buf;
    iov.iov_len = ntohs(header->tot_len);

    CS461_SendIov(inet_addr("128.112.4.6"), &iov, 1);

    CS461_Free(buf);

    fprintf(stderr, ".");
}

int
main(void)
{
    CS461_Initialize(IPPROTO_ICMP, recvHandler, clockHandler, 200, 0);

    CS461_InterruptToggle(CS461_INTOFF);

    for (FOREVER) {
        CS461_Block();
    }
    
    return 0;
}

