Implement sending attribute request, after processing replies, phase 1 of slp is done
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@11887 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
d93542fc49
commit
1e3fa72a93
@ -46,7 +46,7 @@ sub dodiscover {
|
||||
@srvtypes = split /,/,$args{SrvTypes};
|
||||
}
|
||||
foreach my $srvtype (@srvtypes) {
|
||||
senddiscover_single(%args,SrvType=>$srvtype);
|
||||
send_discover_single(%args,SrvType=>$srvtype);
|
||||
}
|
||||
unless ($args{NoWait}) { #in nowait, caller owns the responsibility..
|
||||
#by default, report all respondants within 3 seconds:
|
||||
@ -63,10 +63,15 @@ sub dodiscover {
|
||||
if ($rethash{$peername}) {
|
||||
next; #got a dupe, discard
|
||||
}
|
||||
process_slp_packet(packet=>$slppacket,sockaddr=>$peer);
|
||||
print $peername."\n";
|
||||
print $scope."\n";
|
||||
if ($args{Callback}) {
|
||||
my $result = process_slp_packet(packet=>$slppacket,sockaddr=>$peer,'socket'=>$args{'socket'});
|
||||
if ($result) {
|
||||
$result->{peername} = $peername;
|
||||
$result->{scopeid} = $scope;
|
||||
$result->{sockaddr} = $peer;
|
||||
$rethash{$peername} = $result;
|
||||
if ($args{Callback}) {
|
||||
$args{Callback}->($result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -76,15 +81,31 @@ sub dodiscover {
|
||||
sub process_slp_packet {
|
||||
my %args = @_;
|
||||
my $sockaddy = $args{sockaddr};
|
||||
my $socket = $args{'socket'};
|
||||
my $packet = $args{packet};
|
||||
my $parsedpacket = removeslpheader($packet);
|
||||
if ($parsedpacket->{FunctionId} == 2) {#Service Reply
|
||||
$parsedpacket->{service_urls} = parse_service_reply($parsedpacket->{payload});
|
||||
delete $parsedpacket->{payload};
|
||||
unless (scalar @{$parsedpacket->{service_urls}}) { return undef; }
|
||||
send_attribute_request('socket'=>$socket,url=>$parsedpacket->{service_urls}->[0],sockaddr=>$sockaddy);
|
||||
return undef;
|
||||
} else {
|
||||
return undef;
|
||||
}
|
||||
use Data::Dumper;
|
||||
print Dumper($parsedpacket);
|
||||
}
|
||||
sub send_attribute_request {
|
||||
my %args = @_;
|
||||
my $packet = pack("C*",0,0); #no prlist
|
||||
my $service = $args{url};
|
||||
$service =~ s!://.*!!;
|
||||
my $length = length($service);
|
||||
$packet .= pack("C*",($length>>8),($length&0xff));
|
||||
$packet .= $service.pack("C*",0,7).'DEFAULT'.pack("C*",0,0,0,0);
|
||||
my $header = genslpheader($packet,FunctionId=>6);
|
||||
$args{'socket'}->send($header.$packet,0,$args{sockaddry});
|
||||
}
|
||||
|
||||
|
||||
sub parse_service_reply {
|
||||
my $packet = shift;
|
||||
@ -113,7 +134,7 @@ sub extract_next_url { #section 4.3 url entries
|
||||
return pack("C*",@url);
|
||||
}
|
||||
|
||||
sub senddiscover_single {
|
||||
sub send_discover_single {
|
||||
my %args = @_;
|
||||
my $packet = gendiscover(%args);
|
||||
my @interfaces = get_interfaces(%args);
|
||||
|
Loading…
Reference in New Issue
Block a user