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:
parent
8dbce3ef3e
commit
ded50e7f02
|
@ -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())
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue