These might be useful for someone...

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16215 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Brian West 2010-01-08 18:14:07 +00:00
parent 8dbce3ef3e
commit ded50e7f02
2 changed files with 162 additions and 0 deletions

View File

@ -0,0 +1,72 @@
#!/usr/bin/perl
#
# Send DHCPACK when you receive a DHCPINFORM from a polycom
# so we can provide the provisioning URL to the phone
#
# Authors: (and wish lists)
#
# Brian West <brian@freeswitch.org> http://www.amazon.com/gp/registry/wishlist/1BWDJUX5LYQE0
# Raymond Chandler <intralanman@freeswitch.org> http://www.amazon.com/gp/registry/wishlist/1BWDJUX5LYQE0
#
#
use IO::Socket::INET;
use Net::DHCP::Packet;
use Net::DHCP::Constants;
use Getopt::Std;
getopt("du");
$| = 1;
if (!$opt_u) {
print "Usage: $0 -u <url> [-d 1]\n";
exit;
}
$sock = IO::Socket::INET->new(
LocalPort => '67',
Proto => 'udp',
Broadcast => 1,
ReuseAddr => 1,
) or die "socket: $@";
while ($sock->recv($newmsg, 1024)) {
my $dhcpreq = Net::DHCP::Packet->new($newmsg);
if ($opt_d) {
print $dhcpreq->toString();
print "\n---------------------------------------------------------------------\n";
}
$tmp = $dhcpreq->chaddr();
print "--$tmp--\n";
if ($dhcpreq->getOptionValue(DHO_DHCP_MESSAGE_TYPE()) == 8 && $dhcpreq->chaddr() =~ /^0004f2/) {
my $dhcpresp = new Net::DHCP::Packet(
Op => BOOTREPLY(),
Hops => $dhcpreq->hops(),
Xid => $dhcpreq->xid(),
Htype => $dhcpreq->htype(),
Ciaddr => $dhcpreq->ciaddr(),
Chaddr => $dhcpreq->chaddr(),
DHO_DHCP_MESSAGE_TYPE() => DHCPACK(),
DHO_DHCP_SERVER_IDENTIFIER() => $sock->sockhost,
DHO_TFTP_SERVER() => "$opt_u",
);
if ($opt_d) {
print $dhcpresp->toString();
print "\n---------------------------------------------------------------------\n";
}
print "Sending option 66 as $opt_u\n";
$handle = IO::Socket::INET->new(Proto => 'udp',
PeerPort => '68',
LocalPort => '67',
ReuseAddr => 1,
PeerAddr => $dhcpreq->ciaddr(),
) or die "socket: $@";
$handle->send($dhcpresp->serialize())
}
}

90
scripts/perl/snom-pnpd.pl Executable file
View File

@ -0,0 +1,90 @@
#!/usr/bin/perl
#
# Snom PNP Daemon that can provide URL for provisioning.
#
# Authors: (and wish lists)
#
# Brian West <brian@freeswitch.org> http://www.amazon.com/gp/registry/wishlist/1BWDJUX5LYQE0
# Raymond Chandler <intralanman@freeswitch.org> http://www.amazon.com/gp/registry/wishlist/1BWDJUX5LYQE0
#
#
use Data::Dumper;
use Net::SIP;
use IO::Socket::Multicast;
use Getopt::Std;
my $count = 0;
getopt("dui");
$| = 1;
if (!$opt_u && !$opt_i) {
print "Usage: $0 -i <ipaddress> -u <url> [-d 1]\n";
exit;
}
my $local_addr = $opt_i;
my $local_port = '8160';
sub reply($;) {
my ($body) = shift;
if($opt_d) {
print Dumper $body;
}
if($body =~ m/^SUBSCRIBE/i) {
my $pkt = Net::SIP::Request->new( $body );
my $resp = $pkt->create_response(200, "OK");
my $contact = $pkt->get_header('contact');
$contact =~ s/<sip:(.*)>/$1/i;
my $leg = Net::SIP::Leg->new(
addr => $local_addr,
port => $local_port,
);
$leg->deliver( $resp, "$contact" );
my $hash = {};
my @version = split(";", $pkt->get_header('event'));
foreach my $blah (@version) {
if($blah =~ /=/) {
my($var,$val) = split(/=/,$blah);
$val =~ s/\"//g;
$hash->{$var} = $val;
}
}
my $prov_url = "$opt_u/{mac}.xml";
print "Sending pnp provisioning URL as $opt_u/{mac}.xml\n";
$notify = Net::SIP::Request->new('NOTIFY', $contact, {});
$notify->set_header('From' => $pkt->get_header('to'));
$notify->set_header('To' => $pkt->get_header('to'));
$notify->set_header('User-Agent' => 'test');
$notify->set_header('Event' => $pkt->get_header('event'));
$notify->set_header('Contact' => "<sip:$local_host:$local_port>");
$notify->set_header('Call-ID' => rand());
$notify->set_header('CSeq' => '1 NOTIFY');
$notify->set_body("$prov_url");
$leg->deliver($notify, $contact);
}
}
my $socket = IO::Socket::Multicast->new(
LocalPort => '5060',
LocalAddr => '224.0.1.75',
Proto => 'udp',
ReuseAddr => 1
);
$socket->mcast_add('224.0.1.75');
while($socket->recv($data,8192)) {
&reply($data);
}