Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- use warnings;
- use feature 'say';
- use bytes;
- local $/ = "\r\n";
- my $fh = \*STDIN;
- my $frag = {};
- sub D { return; say "DEBUG: ", @_ }
- while (my $fragment_header = <$fh>) {
- chomp $fragment_header;
- my ($length, $timestamp, $direction, $uuid, $count) =
- split /\s+/, $fragment_header;
- $length = int eval "0x$length";
- $count = int eval "0x$count";
- if ($count == 0) { # first fragment
- my $payload; # response headers, actually
- read $fh, $payload, $length;
- warn $! if $!;
- $frag->{$uuid}[0] = $payload;
- D "init fragment of [$uuid]";
- D "payload len [", length($payload), "] data [$payload]";
- my $empty_line = <$fh>;
- next;
- }
- if ($length == 0) { # last fragment
- # no payload
- if (1) {
- shift @{ $frag->{$uuid} };
- if (scalar @{ $frag->{$uuid} }) {
- open my $frag_fh, ">$uuid.json" or warn $!;
- print $frag_fh join '', @{ $frag->{$uuid} };
- close $frag_fh;
- }
- }
- delete $frag->{$uuid};
- D "last fragment of [$uuid]";
- next;
- }
- my $payload;
- read $fh, $payload, $length;
- warn $! if $!;
- D "mid fragment of [$uuid]";
- D "payload len [", length($payload), "] data [$payload]";
- my $empty_line = <$fh>;
- push @{ $frag->{$uuid} }, $payload;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement