00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #include <stdio.h>
00044 #include <stdlib.h>
00045
00046 #include "iolog.hh"
00047
00048 IOLog::IOLog(int32_t id) : IOHook()
00049 {
00050 node_id_ = id;
00051 DiffPrint(DEBUG_IMPORTANT, "Initializing IOLog...\n");
00052 }
00053
00054 DiffPacket IOLog::recvPacket(int fd)
00055 {
00056 DiffPacket incoming_packet;
00057 struct timeval tv;
00058 struct hdr_diff *dfh;
00059 u_int16_t data_len, packet_len;
00060 int32_t last_hop, next_hop;
00061 int msg_type;
00062 char *msg_name;
00063
00064
00065 incoming_packet = IOHook::recvPacket(fd);
00066
00067 if (incoming_packet){
00068
00069 dfh = HDR_DIFF(incoming_packet);
00070 last_hop = ntohl(LAST_HOP(dfh));
00071 next_hop = ntohl(NEXT_HOP(dfh));
00072 data_len = ntohs(DATA_LEN(dfh));
00073 msg_type = MSG_TYPE(dfh);
00074 packet_len = data_len + sizeof(hdr_diff);
00075
00076 switch (msg_type){
00077 case INTEREST:
00078 msg_name = strdup("Interest");
00079 break;
00080 case DATA:
00081 msg_name = strdup("Data");
00082 break;
00083 case EXPLORATORY_DATA:
00084 msg_name = strdup("Exploratory Data");
00085 break;
00086 case PUSH_EXPLORATORY_DATA:
00087 msg_name = strdup("Push Exploratory Data");
00088 break;
00089 case POSITIVE_REINFORCEMENT:
00090 msg_name = strdup("Positive Reinforcement");
00091 break;
00092 case NEGATIVE_REINFORCEMENT:
00093 msg_name = strdup("Negative Reinforcement");
00094 break;
00095 default:
00096 msg_name = strdup("Unknown");
00097 break;
00098 }
00099
00100 if (last_hop != LOCALHOST_ADDR){
00101 GetTime(&tv);
00102 if (next_hop == BROADCAST_ADDR){
00103 fprintf(stdout,
00104 "Diffusion Log: Time %ld.%06ld Node %d received broadcast %d bytes from node %d message %s\n",
00105 tv.tv_sec, tv.tv_usec, node_id_, packet_len, last_hop, msg_name);
00106 }
00107 else{
00108 fprintf(stdout,
00109 "Diffusion Log: Time %ld.%06ld Node %d received unicast %d bytes from node %d message %s\n",
00110 tv.tv_sec, tv.tv_usec, node_id_, packet_len, last_hop, msg_name);
00111 }
00112 fflush(NULL);
00113 }
00114
00115 free(msg_name);
00116 }
00117
00118 return incoming_packet;
00119 }
00120
00121 void IOLog::sendPacket(DiffPacket pkt, int len, int dst)
00122 {
00123 struct timeval tv;
00124 struct hdr_diff *dfh;
00125 int msg_type;
00126 char *msg_name;
00127
00128
00129 dfh = HDR_DIFF(pkt);
00130 msg_type = MSG_TYPE(dfh);
00131
00132 switch (msg_type){
00133 case INTEREST:
00134 msg_name = strdup("Interest");
00135 break;
00136 case DATA:
00137 msg_name = strdup("Data");
00138 break;
00139 case EXPLORATORY_DATA:
00140 msg_name = strdup("Exploratory Data");
00141 break;
00142 case PUSH_EXPLORATORY_DATA:
00143 msg_name = strdup("Push Exploratory Data");
00144 break;
00145 case POSITIVE_REINFORCEMENT:
00146 msg_name = strdup("Positive Reinforcement");
00147 break;
00148 case NEGATIVE_REINFORCEMENT:
00149 msg_name = strdup("Negative Reinforcement");
00150 break;
00151 default:
00152 msg_name = strdup("Unknown");
00153 break;
00154 }
00155
00156
00157 GetTime(&tv);
00158
00159 if (dst == BROADCAST_ADDR){
00160 fprintf(stdout,
00161 "Diffusion Log: Time %ld.%06ld Node %d sending broadcast %d bytes to node %d message %s\n",
00162 tv.tv_sec, tv.tv_usec, node_id_, len, dst, msg_name);
00163 }
00164 else{
00165 fprintf(stdout,
00166 "Diffusion Log: Time %ld.%06ld Node %d sending unicast %d bytes to node %d message %s\n",
00167 tv.tv_sec, tv.tv_usec, node_id_, len, dst, msg_name);
00168 }
00169
00170 fflush(NULL);
00171
00172 free(msg_name);
00173
00174
00175 IOHook::sendPacket(pkt, len, dst);
00176 }