diff --git a/src/app/cartography/widgets/interface-status.ts b/src/app/cartography/widgets/interface-status.ts index 1fd969cf..e74ed89d 100644 --- a/src/app/cartography/widgets/interface-status.ts +++ b/src/app/cartography/widgets/interface-status.ts @@ -23,12 +23,12 @@ export class InterfaceStatusWidget implements Widget { if (link_path.node().getTotalLength() > 2 * 45 + 10) { statuses = [ - new LinkStatus(start_point.x, start_point.y, l.source.status), - new LinkStatus(end_point.x, end_point.y, l.target.status) + new LinkStatus(start_point.x, start_point.y, (l.capturing && l.suspend) ? 'suspended' : l.source.status), + new LinkStatus(end_point.x, end_point.y, (l.capturing && l.suspend) ? 'suspended' : l.target.status) ]; } } - +///////////////////////////////////////////// const status_started = link_group .selectAll('circle.status_started') .data(statuses.filter((link_status: LinkStatus) => link_status.status === 'started')); @@ -44,7 +44,7 @@ export class InterfaceStatusWidget implements Widget { .attr('fill', '#2ecc71'); status_started.exit().remove(); - +///////////////////////////////////////////// const status_stopped = link_group .selectAll('rect.status_stopped') .data(statuses.filter((link_status: LinkStatus) => link_status.status === 'stopped')); @@ -63,6 +63,22 @@ export class InterfaceStatusWidget implements Widget { .attr('fill', 'red'); status_stopped.exit().remove(); +///////////////////////////////////////////// + const status_suspended = link_group + .selectAll('circle.status_suspended') + .data(statuses.filter((link_status: LinkStatus) => link_status.status === 'suspended')); + + const status_suspended_enter = status_suspended.enter().append('circle'); + + status_suspended + .merge(status_suspended_enter) + .attr('class', 'status_suspended') + .attr('cx', (ls: LinkStatus) => ls.x) + .attr('cy', (ls: LinkStatus) => ls.y) + .attr('r', 6) + .attr('fill', '#FFFF00'); + + status_suspended.exit().remove(); }); } } diff --git a/src/app/cartography/widgets/link.ts b/src/app/cartography/widgets/link.ts index 55d2d60c..6deee822 100644 --- a/src/app/cartography/widgets/link.ts +++ b/src/app/cartography/widgets/link.ts @@ -40,7 +40,7 @@ export class LinkWidget implements Widget { link_body.select('.capture-icon').remove(); link_body - .filter(l => { return l.capturing && !(l.filters.bpf || l.filters.corrupt || l.filters.delay || l.filters.frequency_drop || l.filters.packet_loss)}) + .filter(l => { return l.capturing && !l.suspend && !(l.filters.bpf || l.filters.corrupt || l.filters.delay || l.filters.frequency_drop || l.filters.packet_loss)}) .append('g') .on('contextmenu', (datum: MapLink) => { const evt = event; @@ -56,7 +56,7 @@ export class LinkWidget implements Widget { link_body.select('.filter-capture-icon').remove(); link_body - .filter(l => { return l.capturing && (l.filters.bpf || l.filters.corrupt || l.filters.delay || l.filters.frequency_drop || l.filters.packet_loss)}) + .filter(l => { return l.capturing && !l.suspend && (l.filters.bpf || l.filters.corrupt || l.filters.delay || l.filters.frequency_drop || l.filters.packet_loss)}) .append('g') .on('contextmenu', (datum: MapLink) => { const evt = event; @@ -90,6 +90,22 @@ export class LinkWidget implements Widget { .attr('height', '48px') .attr("xlink:href", "assets/resources/images/filter.svg"); + link_body.select('.pause-icon').remove(); + link_body + .filter(l => { return l.capturing && l.suspend && !(l.filters.bpf || l.filters.corrupt || l.filters.delay || l.filters.frequency_drop || l.filters.packet_loss)}) + .append('g') + .on('contextmenu', (datum: MapLink) => { + const evt = event; + this.onContextMenu.emit(new LinkContextMenu(evt, datum)); + }) + .attr('class', 'pause-icon') + .attr('transform', link => { + return `translate (${(link.source.x + link.target.x)/2 + 24}, ${(link.source.y + link.target.y)/2 + 24}) scale(0.5)` + }) + .attr('viewBox', '0 0 20 20') + .append('image') + .attr("xlink:href", "assets/resources/images/pause.svg"); + this.serialLinkWidget.draw(link_body_merge); this.ethernetLinkWidget.draw(link_body_merge); diff --git a/src/assets/resources/images/pause.svg b/src/assets/resources/images/pause.svg new file mode 100644 index 00000000..3bf46e2b --- /dev/null +++ b/src/assets/resources/images/pause.svg @@ -0,0 +1,752 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Lapo Calamandrei + + + + + + play + media + music + video + player + + + + + Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +