1package Net::Connection::Sort::pid;
2
3use 5.006;
4use strict;
5use warnings;
6
7=head1 NAME
8
9Net::Connection::Sort::pid - Sorts the connections via the PID.
10
11=head1 VERSION
12
13Version 0.0.0
14
15=cut
16
17our $VERSION = '0.0.0';
18
19
20=head1 SYNOPSIS
21
22Please keep in mind that PID is not a requirement and if not specified is set to 0,
23meaning it will show up earlier.
24
25    use Net::Connection::Sort::host_f;
26    use Net::Connection;
27    use Data::Dumper;
28
29     my @objects=(
30                  Net::Connection->new({
31                                        'foreign_host' => '3.3.3.3',
32                                        'local_host' => '4.4.4.4',
33                                        'foreign_port' => '22',
34                                        'local_port' => '11132',
35                                        'sendq' => '1',
36                                        'recvq' => '0',
37                                        'state' => 'ESTABLISHED',
38                                        'proto' => 'tcp4',
39                                        'uid' => 22,
40                                        'pid' => 2,
41                                        }),
42                  Net::Connection->new({
43                                        'foreign_host' => '1.1.1.1',
44                                        'local_host' => '2.2.2.2',
45                                        'foreign_port' => '22',
46                                        'local_port' => '11132',
47                                        'sendq' => '1',
48                                        'recvq' => '0',
49                                        'state' => 'ESTABLISHED',
50                                        'proto' => 'tcp4',
51                                        'uid' => 1000,
52                                        'pid' => 0,
53                                        }),
54                  Net::Connection->new({
55                                        'foreign_host' => '5.5.5.5',
56                                        'local_host' => '6.6.6.6',
57                                        'foreign_port' => '22',
58                                        'local_port' => '11132',
59                                        'sendq' => '1',
60                                        'recvq' => '0',
61                                        'state' => 'ESTABLISHED',
62                                        'proto' => 'tcp4',
63                                        'uid' => 1,
64                                        'pid' => 44,
65                                        }),
66    # as no PID is specified, the value of 0 will just be used instead
67                  Net::Connection->new({
68                                        'foreign_host' => '3.3.3.3',
69                                        'local_host' => '4.4.4.4',
70                                        'foreign_port' => '22',
71                                        'local_port' => '11132',
72                                        'sendq' => '1',
73                                        'recvq' => '0',
74                                        'state' => 'ESTABLISHED',
75                                        'proto' => 'tcp4',
76                                        }),
77                 );
78
79    my $sorter=$sorter=Net::Connection::Sort::uid->new;
80
81    @objects=$sorter->sorter( \@objects );
82
83    print Dumper( \@objects );
84
85=head1 METHODS
86
87=head2 new
88
89This initiates the module.
90
91No arguments are taken and this will always succeed.
92
93    my $sorter=$sorter=Net::Connection::Sort::uid->new;
94
95=cut
96
97sub new{
98	my %args;
99	if(defined($_[1])){
100		%args= %{$_[1]};
101	};
102
103
104	my $self = {
105				};
106    bless $self;
107
108	return $self;
109}
110
111=head2 sort
112
113This sorts the array of Net::Connection objects.
114
115One object is taken and that is a array of objects.
116
117    @objects=$sorter->sorter( \@objects );
118
119    print Dumper( \@objects );
120
121=cut
122
123sub sorter{
124	my $self=$_[0];
125	my @objects;
126	if (
127		defined( $_[1] ) &&
128		( ref($_[1]) eq 'ARRAY' )
129		){
130		@objects=@{ $_[1] };
131	}else{
132		die 'The passed item is either not a array or undefined';
133	}
134
135	# whoops... just realized I forgot to create a method for this in Net::Connection... doing it this way foreign
136	# compatibility with Net::Connection 0.0.0 as of currently
137	@objects=sort  {
138		&helper( $a->{pid} ) <=>  &helper( $b->{pid} )
139	} @objects;
140
141	return @objects;
142}
143
144=head2 helper
145
146This is a internal function.
147
148If no PID is defined, returns 0.
149
150=cut
151
152sub helper{
153        if ( !defined($_[0]) ){
154			return 0;
155        }
156        return $_[0];
157}
158
159=head1 AUTHOR
160
161Zane C. Bowers-Hadley, C<< <vvelox at vvelox.net> >>
162
163=head1 BUGS
164
165Please report any bugs or feature requests to C<bug-net-connection-sort at rt.cpan.org>, or through
166the web interface at L<https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-Connection-Sort>.  I will be notified, and then you'll
167automatically be notified of progress on your bug as I make changes.
168
169
170
171
172=head1 SUPPORT
173
174You can find documentation for this module with the perldoc command.
175
176    perldoc Net::Connection::Sort
177
178
179You can also look for information at:
180
181=over 4
182
183=item * RT: CPAN's request tracker (report bugs here)
184
185L<https://rt.cpan.org/NoAuth/Bugs.html?Dist=Net-Connection-Sort>
186
187=item * AnnoCPAN: Annotated CPAN documentation
188
189L<http://annocpan.org/dist/Net-Connection-Sort>
190
191=item * CPAN Ratings
192
193L<https://cpanratings.perl.org/d/Net-Connection-Sort>
194
195=item * Search CPAN
196
197L<https://metacpan.org/release/Net-Connection-Sort>
198
199=item * Git Repo
200
201L<https://gitea.eesdp.org/vvelox/Net-Connection-Sort>
202
203=back
204
205
206=head1 ACKNOWLEDGEMENTS
207
208
209=head1 LICENSE AND COPYRIGHT
210
211This software is Copyright (c) 2019 by Zane C. Bowers-Hadley.
212
213This is free software, licensed under:
214
215  The Artistic License 2.0 (GPL Compatible)
216
217
218=cut
219
2201; # End of Net::Connection::Sort
221