#include #include #include "structs.h" #include "fmt-util.h" #include "fmt-ext.h" void ctox_ext(FLOW *f, FILE *o) { unsigned char opc; unsigned char x; EXTINFO *ei; opc = get1u(f,0); if (opc < 128) abort(); x = f->conn->ext_opc_tbl[opc-128]; switch (x) { case TBL_UNK: case TBL_NONE: fprintf(o,"Unknown extension request\n"); print_raw_data(o,f); abort_packet_print(); break; } ei = f->conn->ext_opc_vec[x]; (*ei->def->request)(f,o); } void event_ext(FLOW *f, FILE *o) { int tx; unsigned char x; EXTINFO *ei; if ((f->ibuf[0]&0x7f) < 64) abort(); tx = (f->ibuf[0]&0x7f) - 64; while (1) { x = f->conn->ext_ev_tbl[tx]; if (x != TBL_NONE) break; tx --; if (tx < 0) { fprintf(o,"Unknown extension event\n"); print_raw_data(o,f); abort_packet_print(); } } switch (x) { case TBL_UNK: fprintf(o,"Unknown extension event\n"); print_raw_data(o,f); abort_packet_print(); break; } ei = f->conn->ext_ev_vec[x]; (*ei->def->event)(f,o); } void error_ext(FLOW *f, FILE *o) { int tx; unsigned char x; EXTINFO *ei; if (f->ibuf[1] < 128) abort(); tx = f->ibuf[1] - 128; while (1) { x = f->conn->ext_err_tbl[tx]; if (x != TBL_NONE) break; tx --; if (tx < 0) { fprintf(o,"Unknown extension error\n"); print_raw_data(o,f); abort_packet_print(); } } switch (x) { case TBL_UNK: fprintf(o,"Unknown extension error\n"); print_raw_data(o,f); abort_packet_print(); break; } ei = f->conn->ext_err_vec[x]; (*ei->def->error)(f,o); }