]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
These might be useful for someone...
authorBrian West <brian@freeswitch.org>
Fri, 8 Jan 2010 18:14:07 +0000 (18:14 +0000)
committerBrian West <brian@freeswitch.org>
Fri, 8 Jan 2010 18:14:07 +0000 (18:14 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16215 d0543943-73ff-0310-b7d9-9358b9ac24b2

scripts/perl/dhcp-inform.pl [new file with mode: 0644]
scripts/perl/snom-pnpd.pl [new file with mode: 0755]

diff --git a/scripts/perl/dhcp-inform.pl b/scripts/perl/dhcp-inform.pl
new file mode 100644 (file)
index 0000000..b3d39ec
--- /dev/null
@@ -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())
+  }
+}
diff --git a/scripts/perl/snom-pnpd.pl b/scripts/perl/snom-pnpd.pl
new file mode 100755 (executable)
index 0000000..821e1f7
--- /dev/null
@@ -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);
+}