void SequenceDialog::fillDiagram() { if (!sainfo_ || file_closed_) return; QCustomPlot *sp = ui->sequencePlot; if (sainfo_->type == SEQ_ANALYSIS_VOIP) { seq_diagram_->setData(sainfo_); } else { seq_diagram_->clearData(); sequence_analysis_list_free(sainfo_); sequence_analysis_list_get(cap_file_.capFile(), sainfo_); num_items_ = sequence_analysis_get_nodes(sainfo_); seq_diagram_->setData(sainfo_); } QFontMetrics vfm = QFontMetrics(sp->xAxis2->labelFont()); char* addr_str; node_label_w_ = 0; for (guint i = 0; i < sainfo_->num_nodes; i++) { addr_str = (char*)address_to_display(NULL, &(sainfo_->nodes[i])); int label_w = vfm.width(addr_str); if (node_label_w_ < label_w) { node_label_w_ = label_w; } wmem_free(NULL, addr_str); } node_label_w_ = (node_label_w_ * 3 / 4) + one_em_; mouseMoved(NULL); resetAxes(); // XXX QCustomPlot doesn't seem to draw any sort of focus indicator. sp->setFocus(); }
char *get_conversation_address(wmem_allocator_t *allocator, address *addr, gboolean resolve_names) { if (resolve_names) { return address_to_display(allocator, addr); } else { return address_to_str(allocator, addr); } }
const QString address_to_display_qstring(const _address *address) { QString address_qstr = QString(); if (address) { gchar *address_gchar_p = address_to_display(NULL, address); address_qstr = address_gchar_p; wmem_free(NULL, address_gchar_p); } return address_qstr; }
WSLUA_METAMETHOD Address__tostring(lua_State* L) { Address addr = checkAddress(L,1); const gchar *str = address_to_display(NULL, addr); lua_pushstring(L, str); wmem_free(NULL, (void*) str); WSLUA_RETURN(1); /* The string representing the address. */ }
/* * Write a header to the current output file. * The header consists of an identifying string, followed * by a binary structure. */ void rtp_write_header(rtp_stream_info_t *strinfo, FILE *file) { guint32 start_sec; /* start of recording (GMT) (seconds) */ guint32 start_usec; /* start of recording (GMT) (microseconds)*/ guint32 source; /* network source (multicast address) */ size_t sourcelen; guint16 port; /* UDP port */ guint16 padding; /* 2 padding bytes */ char* addr_str = address_to_display(NULL, &(strinfo->dest_addr)); fprintf(file, "#!rtpplay%s %s/%u\n", RTPFILE_VERSION, addr_str, strinfo->dest_port); wmem_free(NULL, addr_str); start_sec = g_htonl(strinfo->start_fd->abs_ts.secs); start_usec = g_htonl(strinfo->start_fd->abs_ts.nsecs / 1000000); /* rtpdump only accepts guint32 as source, will be fake for IPv6 */ memset(&source, 0, sizeof source); sourcelen = strinfo->src_addr.len; if (sourcelen > sizeof source) sourcelen = sizeof source; memcpy(&source, strinfo->src_addr.data, sourcelen); port = g_htons(strinfo->src_port); padding = 0; if (fwrite(&start_sec, 4, 1, file) == 0) return; if (fwrite(&start_usec, 4, 1, file) == 0) return; if (fwrite(&source, 4, 1, file) == 0) return; if (fwrite(&port, 2, 1, file) == 0) return; if (fwrite(&padding, 2, 1, file) == 0) return; }
void sequence_analysis_dump_to_file(FILE *of, seq_analysis_info_t *sainfo, unsigned int first_node) { guint32 i, display_items, display_nodes; guint32 start_position, end_position, item_width, header_length; seq_analysis_item_t *sai; guint16 first_conv_num = 0; gboolean several_convs = FALSE; gboolean first_packet = TRUE; GString *label_string, *empty_line, *separator_line, *tmp_str, *tmp_str2; const char *empty_header; char src_port[8], dst_port[8]; GList *list = NULL; char *addr_str; display_items = 0; if (sainfo->items != NULL) list = g_queue_peek_nth_link(sainfo->items, 0); while (list) { sai = (seq_analysis_item_t *)list->data; list = g_list_next(list); if (!sai->display) continue; display_items += 1; if (first_packet) { first_conv_num = sai->conv_num; first_packet = FALSE; } else if (sai->conv_num != first_conv_num) { several_convs = TRUE; } } /* if not items to display */ if (display_items == 0) { return; } label_string = g_string_new(""); empty_line = g_string_new(""); separator_line = g_string_new(""); tmp_str = g_string_new(""); tmp_str2 = g_string_new(""); display_nodes = sainfo->num_nodes; /* Write the conv. and time headers */ if (several_convs) { fprintf(of, CONV_TIME_HEADER); empty_header = CONV_TIME_EMPTY_HEADER; header_length = CONV_TIME_HEADER_LENGTH; } else{ fprintf(of, TIME_HEADER); empty_header = TIME_EMPTY_HEADER; header_length = TIME_HEADER_LENGTH; } /* Write the node names on top */ for (i=0; i<display_nodes; i+=2) { /* print the node identifiers */ addr_str = address_to_display(NULL, &(sainfo->nodes[i+first_node])); g_string_printf(label_string, "| %s", addr_str); wmem_free(NULL, addr_str); enlarge_string(label_string, NODE_CHARS_WIDTH*2, ' '); fprintf(of, "%s", label_string->str); g_string_printf(label_string, "| "); enlarge_string(label_string, NODE_CHARS_WIDTH, ' '); g_string_append(empty_line, label_string->str); } fprintf(of, "|\n%s", empty_header); g_string_printf(label_string, "| "); enlarge_string(label_string, NODE_CHARS_WIDTH, ' '); fprintf(of, "%s", label_string->str); /* Write the node names on top */ for (i=1; i<display_nodes; i+=2) { /* print the node identifiers */ addr_str = address_to_display(NULL, &(sainfo->nodes[i+first_node])); g_string_printf(label_string, "| %s", addr_str); wmem_free(NULL, addr_str); if (label_string->len < NODE_CHARS_WIDTH) { enlarge_string(label_string, NODE_CHARS_WIDTH, ' '); g_string_append(label_string, "| "); } enlarge_string(label_string, NODE_CHARS_WIDTH*2, ' '); fprintf(of, "%s", label_string->str); g_string_printf(label_string, "| "); enlarge_string(label_string, NODE_CHARS_WIDTH, ' '); g_string_append(empty_line, label_string->str); } fprintf(of, "\n"); g_string_append_c(empty_line, '|'); enlarge_string(separator_line, (guint32) empty_line->len + header_length, '-'); /* * Draw the items */ list = g_queue_peek_nth_link(sainfo->items, 0); while (list) { sai = (seq_analysis_item_t *)list->data; list = g_list_next(list); if (!sai->display) continue; start_position = (sai->src_node-first_node)*NODE_CHARS_WIDTH+NODE_CHARS_WIDTH/2; end_position = (sai->dst_node-first_node)*NODE_CHARS_WIDTH+NODE_CHARS_WIDTH/2; if (start_position > end_position) { item_width = start_position-end_position; } else if (start_position < end_position) { item_width = end_position-start_position; } else{ /* same origin and destination address */ end_position = start_position+NODE_CHARS_WIDTH; item_width = NODE_CHARS_WIDTH; } /* separator between conversations */ if (sai->conv_num != first_conv_num) { fprintf(of, "%s\n", separator_line->str); first_conv_num = sai->conv_num; } /* write the conversation number */ if (several_convs) { g_string_printf(label_string, "%i", sai->conv_num); enlarge_string(label_string, 5, ' '); fprintf(of, "%s", label_string->str); } if (sai->time_str != NULL) { g_string_printf(label_string, "|%s", sai->time_str); enlarge_string(label_string, 10, ' '); fprintf(of, "%s", label_string->str); } /* write the frame label */ g_string_printf(tmp_str, "%s", empty_line->str); overwrite(tmp_str, sai->frame_label, start_position, end_position ); fprintf(of, "%s", tmp_str->str); /* write the comments */ fprintf(of, "%s\n", sai->comment); /* write the arrow and frame label*/ fprintf(of, "%s", empty_header); g_string_printf(tmp_str, "%s", empty_line->str); g_string_truncate(tmp_str2, 0); if (start_position<end_position) { enlarge_string(tmp_str2, item_width-2, '-'); g_string_append_c(tmp_str2, '>'); } else{ g_string_printf(tmp_str2, "<"); enlarge_string(tmp_str2, item_width-1, '-'); } overwrite(tmp_str, tmp_str2->str, start_position, end_position ); g_snprintf(src_port, sizeof(src_port), "(%i)", sai->port_src); g_snprintf(dst_port, sizeof(dst_port), "(%i)", sai->port_dst); if (start_position<end_position) { overwrite(tmp_str, src_port, start_position-9, start_position-1); overwrite(tmp_str, dst_port, end_position+1, end_position+9); } else{ overwrite(tmp_str, src_port, start_position+1, start_position+9); overwrite(tmp_str, dst_port, end_position-9, end_position+1); } fprintf(of, "%s\n", tmp_str->str); } g_string_free(label_string, TRUE); g_string_free(empty_line, TRUE); g_string_free(separator_line, TRUE); g_string_free(tmp_str, TRUE); g_string_free(tmp_str2, TRUE); }