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 static char buff[2500];
00037 #include "enhanced_io.h"
00038 #include "core/interface/Msg.h"
00039 #include <cstring>
00040
00041 int read_next_token(char * msg, char* bc_msg, int *serial, int * pos, const char * txt) {
00042 int res = io_read_next_sim_data(buff);
00043 if (res > 0) {
00044 wmpFrame * r = (wmpFrame *) (buff + sizeof (simData_Hdr));
00045 if (r->hdr.type == TOKEN) {
00046 #ifdef ENABLE_BC_SUPPORT
00047 if (r->hdr.bc_len > 0) {
00048 if (r->hdr.bc_type == BC_TYPE_PLUS) {
00049 Simple_bc * sbc = (Simple_bc*) wmp_get_frame_tail_pointer(r, io_get_num_of_nodes());
00050 if (strstr(&sbc->data, txt) || strcmp(txt,"")==0) {
00051 *serial = r->hdr.serial;
00052 *pos = io_get_filepos() - 1;
00053 memcpy(bc_msg, &sbc->data, sbc->len);
00054 return 1;
00055 }
00056 }
00057 }else
00058 #endif
00059 {
00060 *serial = r->hdr.serial;
00061 *pos = io_get_filepos() - 1;
00062 sprintf(bc_msg,"%s","");
00063 }
00064 return 1;
00065 } else return 0;
00066 }
00067 return -1;
00068 }
00069
00070
00071
00072
00073 #include <sstream>
00074 int read_next_message2(char * tmp, char * bc_msg, int *serial, int * pos, const char * txt) {
00075 int res = io_read_next_sim_data(buff);
00076 if (res > 0) {
00077 int ret = 0;
00078 return ret;
00079 }
00080 return -1;
00081 }
00082
00083 #include <cstdlib>
00084 int read_next_message(char * tmp, char * bc_msg, int *serial, int * pos,
00085 const char * txt) {
00086 int res = io_read_next_sim_data(buff);
00087 if (res > 0) {
00088 int ret = 0;
00089 wmpFrame * r = (wmpFrame *) (buff + sizeof (simData_Hdr));
00090 if (r->hdr.type == MESSAGE) {
00091 if (atoi(txt) == r->msg.msg_hash || strstr(wmp_get_message_data_pointer(r), txt) || strcmp(txt,"")==0 ) {
00092 *serial = r->hdr.serial;
00093 *pos = io_get_filepos() - 1;
00094 memcpy(tmp, wmp_get_message_data_pointer(r), r->msg.len);
00095 sprintf(bc_msg,"%s","");
00096 ret = 1;
00097 }
00098 #ifdef ENABLE_BC_SUPPORT
00099 if (r->hdr.bc_len > 0) {
00100 if (r->hdr.bc_type == BC_TYPE_PLUS) {
00101 Simple_bc * sbc = (Simple_bc*) wmp_get_frame_tail_pointer(r, io_get_num_of_nodes());
00102 if (strstr(&sbc->data, txt)) {
00103 *serial = r->hdr.serial;
00104 *pos = io_get_filepos() - 1;
00105 memcpy(bc_msg, &sbc->data, sbc->len);
00106 ret = 1;
00107 }
00108 }
00109 }
00110 #endif
00111 }
00112 return ret;
00113 }
00114 return -1;
00115 }
00116
00117 int read_next_bc(char * tmp, char * bc_msg, int *serial, int * pos, const char * txt) {
00118 int res = io_read_next_sim_data(buff);
00119 if (res > 0) {
00120 tmp[0] = 0;
00121 bc_msg[0] = 0;
00122 int ret = 0;
00123 wmpFrame * r = (wmpFrame *) (buff + sizeof(simData_Hdr));
00124 *serial = r->hdr.serial;
00125 *pos = - 1;
00126 int must_return=0;
00127 if (strcmp(txt,"")==0){
00128 must_return=1;
00129 }
00130 #ifdef ENABLE_BC_SUPPORT
00131 if (r->hdr.bc_len > 0 && r->hdr.type != DROP_TOKEN) {
00132 if (r->hdr.bc_type == BC_TYPE_PLUS) {
00133 Simple_bc * sbc = (Simple_bc*) wmp_get_frame_tail_pointer(r,
00134 io_get_num_of_nodes());
00135 if (strstr(&sbc->data, txt) || must_return) {
00136 memcpy(bc_msg, &sbc->data, sbc->len);
00137 ret++;
00138 }
00139 }
00140 } else
00141 #endif
00142 {
00143 sprintf(bc_msg, "%s","");
00144 }
00145 if (r->hdr.type == MESSAGE){
00146 if (strstr(wmp_get_message_data_pointer(r), txt) || must_return) {
00147 memcpy(tmp, wmp_get_message_data_pointer(r), r->msg.len);
00148 ret++;
00149 }
00150 }else{
00151 sprintf(tmp,"%s","");
00152 }
00153 if (must_return || ret>0 ) return 1;
00154 else return 0;
00155 }
00156 return -1;
00157 }
00158
00159 int read_next_drop(char * tmp, char * bc_msg, int *serial, int * pos, const char * txt) {
00160 int res = io_read_next_sim_data(buff);
00161 if (res > 0) {
00162 wmpFrame * r = (wmpFrame *) (buff + sizeof (simData_Hdr));
00163 if (r->hdr.type == DROP_TOKEN) {
00164 *serial = r->hdr.serial;
00165 *pos = io_get_filepos() - 1;
00166 return 1;
00167 } else return 0;
00168 }
00169 return -1;
00170
00171 }
00172
00173 int read_next_authorization(char * tmp, char * bc_msg, int *serial, int * pos, const char * txt) {
00174 int res = io_read_next_sim_data(buff);
00175 if (res > 0) {
00176 wmpFrame * r = (wmpFrame *) (buff + sizeof (simData_Hdr));
00177 if (r->hdr.type == AUTHORIZATION) {
00178 #ifdef ENABLE_BC_SUPPORT
00179 if (r->hdr.bc_len > 0) {
00180 if (r->hdr.bc_type == BC_TYPE_PLUS) {
00181 Simple_bc * sbc = (Simple_bc*) wmp_get_frame_tail_pointer(r, io_get_num_of_nodes());
00182 if (strstr(&sbc->data, txt) || strcmp(txt,"")==0) {
00183 *serial = r->hdr.serial;
00184 *pos = io_get_filepos() - 1;
00185 memcpy(bc_msg, &sbc->data, sbc->len);
00186 return 1;
00187 }
00188 }
00189
00190 }else
00191 #endif
00192 {
00193
00194 *serial = r->hdr.serial;
00195 *pos = io_get_filepos() - 1;
00196 sprintf(bc_msg,"%s","");
00197 }
00198 return 1;
00199 } else return 0;
00200 }
00201 return -1;
00202 }
00203
00204
00205
00206 static FILE * outf[32];
00207 static int nnodes;
00208
00209 void logger_init(int type, int nnodes_){
00210 nnodes = nnodes_;
00211 for (int i=0; i< nnodes ; i++){
00212 outf[i] = 0;
00213 }
00214 if (type == 0){
00215 for (int i=0; i< nnodes ; i++){
00216 outf[i] = stderr;
00217 }
00218 }else{
00219 for (int i=0; i< nnodes ; i++){
00220 char filename[256];
00221 sprintf(filename,"rt-wmp-node-%d.log",i);
00222 outf[i] = fopen(filename,"w+");
00223 }
00224 }
00225 }
00226
00227 void logger_printData(int node_id, wmpFrame *q, unsigned long long ts) {
00228 int i, j;
00229 double evtime;
00230
00231 evtime = (double)ts/1e6;
00232
00233 fprintf(outf[node_id], "%5.5f\t%d\t%d\t%d\t%d\t%d\t%d",evtime,(int) q->hdr.serial, q->hdr.rssi,
00234 q->hdr.retries, q->hdr.from, q->hdr.to, q->hdr.type);
00235
00236 char * lqm = wmp_get_frame_routing_pointer(q,nnodes);
00237 for (i = 0; i < nnodes; i++) {
00238 for (j = 0; j < nnodes; j++) {
00239 if (i != j) {
00240 fprintf(outf[node_id], "\t%d", *lqm);
00241 } else {
00242 fprintf(outf[node_id], "\t%d", 0);
00243 }
00244 lqm ++;
00245 }
00246 }
00247 #ifdef ENABLE_WMP_DEBUG
00248 for (i = 0; i < 32; i++) {
00249 fprintf(outf[node_id], "\t%d", q->hdr.path[i]);
00250 }
00251 fprintf(outf[node_id], "\n");
00252 #endif
00253 }
00254
00255 void logger_close(){
00256 for (int i=0; i< nnodes ; i++){
00257 fclose(outf[i]);
00258 }
00259 }