gsutil-3.1/0000700000000000000000000000000011241036314011343 5ustar rootrootgsutil-3.1/gsutil.spec0000600000000000000000000000633711241035754013550 0ustar rootrootSummary: A utility to save, restore and reboot Grandstream Budgetone phones Name: gsutil Version: 3.1 Release: 1 Group: Applications/Internet Source: http://www.pkts.ca/%{name}-%{version}.tar.gz License: GPL Vendor: Charles Howes URL: http://www.pkts.ca/gsutil.shtml BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root Requires: perl Requires: perl-libwww-perl Provides: gsutil %description A utility to dump and restore the configuration of the Grandstream Budgetone VOIP telephone, up to and including version 1.0.8.23 of the firmware on the BudgeTone and 1.1.0.16 on the GXP2000. %prep %setup -q %build %install rm -rf $RPM_BUILD_ROOT umask 022 mkdir -p $RPM_BUILD_ROOT%{_bindir} cp %{_builddir}/%{name}-%{version}/gsutil $RPM_BUILD_ROOT%{_bindir}/gsutil %clean rm -r $RPM_BUILD_ROOT %files %defattr(0644,root,root,0755) %attr(0755,root,root) %{_bindir}/gsutil %doc README Changelog %changelog * Thu Aug 13 2009 Charles Howes 3.1-1 - Add busy-detect code and -w option If phone is busy, add it to the end of the list, with a 5-second pause * Thu Jul 27 2006 Charles Howes 3.0-1 - Rewrite! It was discovered that a) gsutil no longer worked on BT101's, only GXP-2000's b) my programming style has gotten better since 2.x So, it's rewritten, making it more organized, smaller, and smarter. I never want to see 'if ($version eq "xxx")' again! Note: I *only* have a BT101, so it would seem I should have actually *tested* the previous releases. In fact, I was accepting patches from GXP-2000 people and the BT101 was gathering dust on a shelf. Fixed. * Wed Jul 12 2006 Charles Howes 2.5-1 - Changes from Ken Yap, Hans Martin, Anthony McCarthy, Jerome Warnier, Tom Mealey, Marcus Uy, Shane Steinbeck, Enrique Zanardi, Frank Scholz, and Marcel van der Boom, to deal with the new options provided by new firmware (GXP-2000/1.1.0.16). I should have updated sooner; the various patches had different suggestions for how to spell the options, and so I had to pick the ones that seemed best. Hopefully that doesn't cause anyone too much work. Firmware is at http://grandstream.com/y-firmware.htm - Also fixed a crash when a page isn't found on the phone. * Sat Feb 4 2006 Charles Howes 2.4-1 - Changes from Lukas Ziaja to support GXP-2000 firmware 1.0.2.3 - http://grandstream.com/BETATEST/GXP2000/Release_1.0.2.3_GXP2000.zip * Thu Jan 26 2006 Charles Howes 2.3-1 - Changes from Alan Ferrency to support GXP-2000 firmware b1.0.1.2/P1.0.1.9 * Sat Sep 10 2005 Charles Howes 2.2-1 - Minor tweak from Frank Scholz to support ATA-286 fully * Thu Aug 18 2005 Charles Howes 2.1-1 - Actually check to see if the password was correct... Doh! * Sat Jul 30 2005 Charles Howes 2.0-1 - Made it work for 1.0.6.x firmware phones - Possibly broke the 1.0.5.x firmware code, but maybe not; untested. * Wed Jul 27 2005 Charles Howes 1.2-1 - added version check, print - added GS format * Mon Jul 12 2005 Charles Howes 1.1-1 - check hostname before processing * Sat Jul 9 2005 Charles Howes 1.0-1 - initial build gsutil-3.1/Changelog0000600000000000000000000000447711241036163013175 0ustar rootrootHere is a history of changes to gsutil. 3.1 Add busy-detect code and -w option If a phone is busy, add it to the end of the list, with a 5-second pause added if no pauses remain on the list. 3.0 Rewrite! It was discovered that a) gsutil no longer worked on BT101's, only GXP-2000's b) my programming style has gotten better since 2.x So, it's rewritten, making it more organized, smaller, and smarter. I never want to see 'if ($version eq "xxx")' again! Note: I *only* have a BT101, so it would seem I should have actually *tested* the previous releases. In fact, I was accepting patches from GXP-2000 people and the BT101 was gathering dust on a shelf. Fixed. 2.5 Changes from Ken Yap, Hans Martin, Anthony McCarthy, Jerome Warnier, Tom Mealey, Marcus Uy, Shane Steinbeck, Enrique Zanardi, Frank Scholz, and Marcel van der Boom, to deal with the new options provided by new firmware (GXP-2000/1.1.0.16). I should have updated sooner; the various patches had different suggestions for how to spell the options, and so I had to pick the ones that seemed best. Hopefully that doesn't cause anyone too much work. Firmware is at http://grandstream.com/y-firmware.htm Also fixed a crash when a page isn't found on the phone. 2.4 Changes from Lukas Ziaja to support GXP-2000 firmware 1.0.2.3 http://grandstream.com/BETATEST/GXP2000/Release_1.0.2.3_GXP2000.zip 2.3 - Add changes by Alan Ferrency for the GXP-2000, firmware b1.0.1.2/P1.0.1.9 2.2 - Add a few more configuration options for the GS ATA-286 (P86,P200,P205,P206,P228). Patch provided by Frank Scholz. Thank you Frank! 2.1 - Check to see if the password was accepted. - Check all results more thoroughly. 2.0 - Work with firmware 1.0.6.x - I need to test this with 1.0.5.11 still; I hope I didn't break it, but I accidentally upgraded my second phone and can't test it now. 1.2 - Display version numbers of firmware (-e) - Refuse to run if can't find firmware release, because things have changed radically from version 1.0.5.11 to 1.0.6.7. - Optionally read and write config files in Grandstream ascii format (-o) 1.1 - Check to make sure gethostbyname finds phones before proceeding (give a better error message) 1.0 - Initial release gsutil-3.1/gsutil0000700000000000000000000006077411241035422012615 0ustar rootroot#!/usr/bin/perl -wT # gsutil - GrandStream configuration dump/restore + reboot # Copyright (C) 2009 Charles Howes # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. $main::VERSION="3.1"; # 2009-08-13 use strict; use Getopt::Std; use HTML::Form; use HTTP::Request; use LWP::UserAgent; use Socket; use POSIX qw(strftime); use Data::Dumper; # Backup the command line: my $cmdline=join(" ",@ARGV); # Stuff used by getopts: $Getopt::Std::STANDARD_HELP_VERSION=1; # Get command line options: my %opts; my $r=getopts('bdehnop:rw',\%opts); # If the user is asking for help: if (defined $opts{'h'}) { VERSION_MESSAGE(*STDOUT{IO}); HELP_MESSAGE(*STDOUT{IO}); exit 0; } # Version information, called by getopts if --version or --help given. sub VERSION_MESSAGE { my $fh=$_[0]; # Passed a file handle. print $fh "Version $main::VERSION of GSutil, a GrandStream BudgeTone phone backup, restore\n"; print $fh "and reboot utility. Written by Charles Howes (gsutil\@ch.pkts.ca).\n"; print $fh "http://www.pkts.ca/gsutil.shtml\n"; } # Help information, called by getopts if --help given. sub HELP_MESSAGE { my $fh=$_[0]; # Passed a file handle. print $fh "Usage: $0 -[b|d|e|h|r] [-w] [-n] [-o] [-p password] address..\n"; print $fh " -b : reboot\n"; print $fh " -d : dump to stdout\n"; print $fh " -e : show phone firmware versions\n"; print $fh " -r : restore from stdin\n"; print $fh " -w : wait for device to be free (moves busy devices to end of list)\n"; print $fh " -n : don't wait for reboot to finish\n"; print $fh " -o : don't translate configuration values\n"; print $fh " -p : password (default: admin)\n"; print $fh " -h, --help : print this help\n"; print $fh " --version : print the version of gsutil\n"; # getopts exits after calling HELP_MESSAGE() } if (!defined $opts{'b'} and !defined $opts{'d'} and !defined $opts{'e'} and !defined $opts{'r'}) { print STDERR "No command was given.\n\n"; print STDERR "Choose one of -b, -d, -e, or -r to do something.\n"; print STDERR "Try `$0 --help' for more information.\n"; exit 0; } # Get the password my $password=$opts{'p'}; if (!defined $password) {$password='admin'}; # Default password # The addresses are on the command line: if (!defined $ARGV[0]) { print STDERR "No addresses of phones were given on the command line.\n"; HELP_MESSAGE(*STDOUT{IO}); exit(3); } # Convert and error-check all hosts: my @todo=map {parseaddress($_)} @ARGV; # The configuration variables get translated into english with this table. # The translations themselves are stored in the __DATA__ block at the end. my %translate; my %untranslate; while () { chomp; s/#.*//; # remove comments s/\s+$//; # remove trailing space # if no translation is available, use the key: if (/^\s*(P\d+):\s*(.*)/) { $translate{$1} = $2; $untranslate{uc($2)} = $1; } } # Lines of data from stdin my $linenumber=0; # For each host on the command line: while (@todo) { my $address=shift(@todo); if ($address eq "-pause-") {warn("Pausing for 5 seconds\n");sleep(5);next;} # Set up the user agent: my $ua=LWP::UserAgent->new(timeout=>3); my $url="http://$address/"; # Get the login page: my $req_login=HTTP::Request->new(GET=>$url); my $resp_login; $resp_login=$ua->request($req_login); if ($resp_login->code != 200) { show_error($address,$resp_login); next;} if ($resp_login->content =~ m/The device is busy now/i) { warn("$address is busy\n"); if (defined $opts{'w'}) { warn("$address requeued\n"); if (grep(/-pause-/,@todo)==0) {push @todo,"-pause-";} push @todo,$address; } next; } my $form_login=HTML::Form->parse($resp_login->content,$url); if (!defined $form_login) { warn("$address didn't respond with a form; is it a GS phone?\n"); next; } # See if this is the right form if (grep(/^P2$/,$form_login->param)==0) { warn("$address The form didn't have the expected 'P2' (password) field in it!\n". " Debug output:\n".Dumper($form_login)); next; } # Stuff in the password $form_login->value('P2' => $password); # Log in and get main page my $resp_main = $ua->request($form_login->click); if ($resp_main->code != 200 or $resp_main->content =~ m/Your Login Password is not recognized/) { show_error($address,$resp_main); next;} my $form_main=HTML::Form->parse($resp_main->content,$form_login->action); # Find the cookie: my $cookie=$resp_main->headers->header("set-cookie"); #1.0.5.x:'set-cookie' => 'SessionId=3bf1ca965d26edb9"; Version=1; Path=/' #1.0.6.x:'set-cookie' => 'SessionId="965c22e1bd86fece"; Version=1; Path=/' if (!defined $cookie) { warn("$address No cookie was sent, but the password was accepted?! This may be a new firmware.\n"); next; } if ($cookie!~m/SessionId="?([^"]*)"/) { warn("$address The cookie didn't contain 'SessionId'! This may be a new firmware.\n". " It said: $cookie\n"); next; } my $sessionid=$1; # Get everything: my $domore=0; my $resp_index_htm=$ua->request(HTTP::Request->new(GET=>$url."index.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))); my $resp_config2_htm=$ua->request(HTTP::Request->new(GET=>$url."config2.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))); # Get extended phone configuration if your firmware supports it: my $resp_config_a1_htm=$ua->request(HTTP::Request->new(GET=>$url."config_a1.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))); if ($resp_config_a1_htm->code==200) {$domore=1;} # Do a2-a4 only if a1 was found. my $resp_config_a2_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a2.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef; my $resp_config_a3_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a3.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef; my $resp_config_a4_htm=$domore?$ua->request(HTTP::Request->new(GET=>$url."config_a4.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))):undef; # Do everything: if (defined $opts{'e'}) { show_version($address,$resp_main,$resp_index_htm); } if (defined $opts{'d'}) { dump_data($address,$resp_main,$resp_index_htm,$resp_config2_htm,$resp_config_a1_htm,$resp_config_a2_htm,$resp_config_a3_htm,$resp_config_a4_htm); } if (defined $opts{'r'}) { restore_data($address,$sessionid,$resp_main,$resp_index_htm,$resp_config2_htm,$resp_config_a1_htm,$resp_config_a2_htm,$resp_config_a3_htm,$resp_config_a4_htm); } if (defined $opts{'b'}) { reboot($address,$url,$sessionid,$opts{'n'}); } } # Show the phone's hardware model and version: sub show_version { my ($address,$resp_main,$resp_index_htm)=@_; my $body=$resp_main->content.$resp_index_htm->content; my $model; my $version; if ($body=~m/Product Model:\s*<\/b><\/td>\s*([^<]*)/s) { $model=$1; $model=~s/( |\s+)/ /gs; $model=~s/(^\s+)|(\s+$)//gs; } if ($body=~m/Software Version:\s*<\/b><\/td>\s*([^<]*)/s) { $version=$1; $version=~s/( |\s+)/ /gs; # delete spaces and   $version=~s/(^\s+)|(\s+$)//gs; # delete leading/trailing spaces $version=~s/\s+/ /gs; # delete spaces some more $version=~s/--/:/gs; # turn -- into : } my $head="# $address"; if (defined $model) {print $head." Model ".$model;$head="";} if (defined $version) {print $head." ".$version;$head="";} if ($head eq "") {print "\n";} } # Reboot the phone: sub reboot { my ($address,$url,$sessionid,$opts_n)=@_; my $ua2=LWP::UserAgent->new(timeout=>1); my $resp_rs_htm=$ua2->request(HTTP::Request->new(GET=>$url."rs.htm",HTTP::Headers->new(Cookie=>"SessionID=\"$sessionid\""))); if (!defined $opts_n) { my $req_login=HTTP::Request->new(GET=>$url); my $resp_login; my $now=time(); my $up=1; for (my $n=0;$n<30;$n++) { # Should be done in 21 seconds or so. $resp_login=$ua2->request($req_login); if ($resp_login->code==200 and $up==1) {sleep(1);next;} if ($resp_login->code==500) {$up=0;next;} last; # It's up again after being down (200 -> 500 -> 200) # Note, if pppoe is configured, it could go down again for a bit. } } } # Dump the phone configuration to stdout: sub dump_data { my ($address,@responses)=@_; my $stamp=strftime("%Y-%m-%d %H:%M:%S",localtime()); print "#-- start of phone $address ($stamp)\n"; # Mark the start foreach (@responses) { if (defined $_) {dump_form($address,HTML::Form->parse($_));} } print "#-- end of phone $address ($stamp)\n"; } # Restre the phone configuration from stdin: sub restore_data { my ($address,$sessionid,@responses)=@_; my %val; # Error checking: my %formlines; my %filled; # Read stdinput for the phone's data: while() { chomp; $linenumber++; if (m/^#-- end of phone/) {last;} # End of this phone's configuration if (m/^#/) {next;} # Skip comment lines if (m/^$/) {next;} # Skip blank lines s/\s+#.*//; # Comment deletion (won't cut in the middle of a word) if (m/^([^=]+)=(.*)$/) { # name = value... my $ls=$1; # ls=left side my $rs=$2; # rs=right side # Trim whitespace, uppercase ls: $ls=~s/^\s*(.*?)\s*$/\U$1/; $rs=~s/^\s*(.*?)\s*$/$1/; # Quote removal from rs: $rs=~s/^'(.*)'$/$1/; $rs=~s/^"(.*)"$/$1/; # Stick it into %val: if (defined($translate{$ls})) { $val{$ls}=$rs;next;} # P999 = ... if (defined($untranslate{$ls})) { $val{$untranslate{$ls}}=$rs;next;} # name = ... warn("$address Unknown input variable '$_', from stdin line $linenumber.\n Add it to the translation table at the end of the program.\n"); } warn("$address Unrecognized input line '$_', from stdin line $linenumber\n"); } # Fill in the form(s): my $form; my $ua2=LWP::UserAgent->new(timeout=>3); foreach my $response (@responses) { if (!defined $response) {next;} # No response here (a2-a4?) $form=HTML::Form->parse($response); if (!defined $form) {next;} # No form here (a1?) foreach my $n ($form->param) { $formlines{$n}=1; # These fields were present on the phone if (defined $val{$n}) { $form->param($n,$val{$n}); $filled{$n}=1; # These fields were filled in from stdin } } # Make the request and add a cookie: my $request=$form->make_request; $request->header("Cookie" => "SessionId=\"$sessionid\""); # Send it: my $response=$ua2->request($request); } # Check for missed data: foreach (sort keys %val) { if (!defined $formlines{$_}) { warn("$address The config file had $_ ($translate{$_}), but the phone did not.\n"); } } } # Print out the fields and their values: sub dump_form { my ($address,$form) = @_; if (!defined $form) {return;} # Deal with undefined forms foreach my $n ($form->param) { if ($n =~ m/^(cancel|reboot|gnkey|update|P2|P196)$/) {next;} if (defined $translate{$n} && !defined $opts{'o'}) { print $translate{$n}," = ",$form->param($n),"\n"; } else { if (!defined $opts{'o'}) { warn("$address The parameter $n(=".($form->param($n)).") was not found in the translate table.\n Use -o to skip translation, or manually add it to the translate table\n"); } if (defined $translate{$n}) { print "# $translate{$n}:\n"; } print "$n = ",$form->param($n),"\n"; print "\n"; } } } # Convert addresses given on command line, and check them. sub parseaddress { my $add=$_[0]; if ($add !~ m/^([a-z0-9.-]{1,80})$/) { # Valid characters? warn("$add isn't a valid hostname\n"); return; } my $address=$1; if ($address=~m/[a-z]/) { # If it has a letter, it's a hostname if (!defined gethostbyname($address)) { warn("$address unknown host\n"); return; } } return $address; } # Decode the error message sub show_error { my ($address,$response)=@_; if (!defined $response) { die("$0: show_error called with not enough arguments"); } # Page not found: if ($response->code == 403) { warn("$address page not found, is this a GS phone?\n"); return; } # Bad password: if ($response->content =~ m/Your Login Password is not recognized/) { $cmdline =~ s/\s+-p\s*\S+//; # Cut out old password warn("$address bad password.\n". " Try: $0 -p your-secret-password $cmdline\n"); return; } # Error: if ($response->code == 500) { # Trying to connect to a firewalled, misconfigured or dead phone: if ($response->content =~ m/Can't connect to \S+ \(connect: timeout\)/) { warn("$address was unreachable (either rebooting, firewalled, misconfigured, unplugged, or dead)\n"); return; } # The arp table knows how to get there, but the phone is not answering: if ($response->content =~ m/Can't connect to \S+ \(connect: No route to host\)/) { warn("$address was unreachable (either rebooting or recently unplugged)\n"); return; } # The phone is tired of being queried over and over: if ($response->content =~ m/read timeout/) { warn("$address gave a read timeout after connecting; try again.\n"); return; } } # Some other fatal error: warn("$address gave an unexpected ".($response->code)." error.\n". " Here is a full dump of the response:\n". Dumper($response)."\n". " Send this to the author, gsutil\@ch.pkts.ca\n". " so that it can be added to the program.\n" ); return; } # This is the translate table: __DATA__ P2: admin_password P3: name P8: static_ipaddress_true P9: static_ipaddress_1 P10: static_ipaddress_2 P11: static_ipaddress_3 P12: static_ipaddress_4 P13: static_subnet_1 P14: static_subnet_2 P15: static_subnet_3 P16: static_subnet_4 P17: static_router_1 P18: static_router_2 P19: static_router_3 P20: static_router_4 P21: static_dns1_1 P22: static_dns1_2 P23: static_dns1_3 P24: static_dns1_4 P25: static_dns2_1 P26: static_dns2_2 P27: static_dns2_3 P28: static_dns2_4 P29: early_dial P30: ntp_server P31: sip_registration P32: register_expiration P33: voicemail_userid P34: authenticate_password P35: sip_userid P36: authenticate_id P37: voice_frames_per_tx P38: layer3_QoS P39: local_rtp_port P40: local_sip_port P41: tftp_server_1 P42: tftp_server_2 P43: tftp_server_3 P44: tftp_server_4 P46: vocoder_7 P47: sip_server P48: outbound_proxy P49: G723_rate P50: silence_suppression P51: layer2_QoS_vlan_tag P52: nat_traversal_true P57: vocoder_1 P58: vocoder_2 P59: vocoder_3 P60: vocoder_4 P61: vocoder_5 P62: vocoder_6 P63: userid_is_phone_number P64: time_zone P65: send_anonymous P66: dial_plan_prefix P71: offhook_autodial P72: use_hash_as_dial_key P73: send_dtmf_mode P74: send_flash_event P75: daylight_savings_time P76: nat_traversal_stun_server P78: use_random_port P79: dtmf_payload_type P81: unregister_on_reboot P82: PPPoE_id P83: PPPoE_password P84: keepalive_interval P85: no_key_entry_timeout P86: FXS_impedance P87: layer2_QoS_priority_value P88: lock_keypad_update P90: auto_answer P91: disable_call_waiting P92: dhcp_dns_server_1 P93: dhcp_dns_server_2 P94: dhcp_dns_server_3 P95: dhcp_dns_server_4 P96: iLBC_payload_type P97: iLBC_frame_size P98: vocoder_8 P99: subscribe_for_mwi P101: use_nat_ip P102: date_display_format P103: use_dns_srv P104: default_ring_tone P105: custom_ring_tone_1_caller_id P106: custom_ring_tone_2_caller_id P107: custom_ring_tone_3_caller_id P109: allow_out_call_without_registration # 0 or 1 P110: lan_subnet_mask P111: lan_dhcp_base_ip P112: dhcp_ip_lease_time P113: dmz_ip P115: cloned_wan_mac_addr_1 P116: cloned_wan_mac_addr_2 P117: cloned_wan_mac_addr_3 P118: cloned_wan_mac_addr_4 P119: cloned_wan_mac_addr_5 P120: cloned_wan_mac_addr_6 P122: time_display_format # 0 = 12 hour; 1 = 24 hour P123: display_clock_instead_of_date # 0 or 1 P143: dhcp_option_2_timezone_override P144: dhcp_option_42_timeserver_override P145: dhcp_option_66_bootserver P146: dhcp_option_12_hostname # ppoe_hostname P147: dhcp_option_15_domain # ppoe_domain_name P148: dhcp_option_60_vendor_class_id # ppoe_vendor_class P150: port_fw_port_num_1 P151: port_fw_port_num_2 P152: port_fw_port_num_3 P153: port_fw_port_num_4 P154: port_fw_port_num_5 P155: port_fw_port_num_6 P156: port_fw_port_num_7 P157: port_fw_port_num_8 P158: port_fw_lan_ip_1 P159: port_fw_lan_ip_2 P160: port_fw_lan_ip_3 P161: port_fw_lan_ip_4 P162: port_fw_lan_ip_5 P163: port_fw_lan_ip_6 P164: port_fw_lan_ip_7 P165: port_fw_lan_ip_9 P166: port_fw_lan_port_1 P167: port_fw_lan_port_2 P168: port_fw_lan_port_3 P169: port_fw_lan_port_4 P170: port_fw_lan_port_5 P171: port_fw_lan_port_6 P172: port_fw_lan_port_7 P173: port_fw_lan_port_8 P174: port_fw_lan_proto_1 P175: port_fw_lan_proto_2 P176: port_fw_lan_proto_3 P177: port_fw_lan_proto_4 P178: port_fw_lan_proto_5 P179: port_fw_lan_proto_6 P180: port_fw_lan_proto_7 P181: port_fw_lan_proto_8 P182: disable_missed_calls_1 P184: use_quick_ip_call_mode P189: replay_to_icmp_in_wan # 0 = no # 1 = yes P190: wan_side_http_access # 0 = no # 1 = yes P191: enable_call_features P192: http_upgrade_url P193: automatic_http_upgrade_days P194: automatic_http_upgrade P196: end_user_password P197: proxy_require P198: special_feature_1 # 100 = Standard # 101 = Nortel MCS # 102 = Broadsoft # 103 = Howdy # 104 = Sonus # 105 = 3COM P200: caller_id_scheme P205: polarity_reversal P206: onhook_voltage P207: syslog_server P208: syslog_level P209: sip_t1_timeout # 50 = 0_5_sek # 100 = 1_sek # 200 = 2_sek P212: firmware_upgrade P213: firmware_upgrade_tftp_1 P214: firmware_upgrade_tftp_2 P215: firmware_upgrade_tftp_3 P216: firmware_upgrade_tftp_4 P228: fax_mode P231: device_mode # 0 = switch # 1 = nat_router P232: firmware_file_prefix P233: firmware_file_postfix P234: config_file_prefix P235: config_file_postfix P237: config_server_path P238: always_check_for_new_firmware P239: register_expiration_delay # in seconds, default 1800 P240: auth_config_file # 0 = No # 1 = Yes P241: allow_conf_sip_account_in_basic_settings # 0 or 1 P242: firmware_key # text (in Hexadecimal Representation) P243: allow_from_sip_proxy_only # 0 or 1 P244: override_mtu_size # 0 or 1 P245: onhook_threshold # 0 = Hookflash OFF # 2 = 200 ms # 4 = 400 ms # 6 = 600 ms # 8 = 800 ms (default) # 10 = 1000 ms # 12 = 1200 ms P250: sip_t2_interval P260: session_expiration_1 # in seconds, default 180 P261: min_session_expiration_1 # seconds, minimum 90 P262: caller_request_timer_1 # 0 or 1 P263: callee_request_timer_1 # 0 or 1 P264: force_timer_1 # 0 or 1 P265: force_invite_1 # 0 or 1 P266: uac_specify_refresher_1 # 0=omit, 1=UAC, 2=UAS P267: uas_specify_refresher_1 # 1=UAC, 2=UAS P268: anonymous_method # 0 = Use From Header (default) # 1 = Use Privacy Header P270: account_name_1 P271: account_active_1 # 0 or 1 P272: enable_100rel_1 # 0 or 1 P298: allow_auto_answer_by_call_info P299: turn_off_speaker_on_remote_disconnect P301: speed_dial_1_account # 0, 1, 2, 3 P302: speed_dial_1_name P303: speed_dial_1_userid P304: speed_dial_2_account P305: speed_dial_2_name P306: speed_dial_2_userid P307: speed_dial_3_account P308: speed_dial_3_name P309: speed_dial_3_userid P310: speed_dial_4_account P311: speed_dial_4_name P312: speed_dial_4_userid P313: speed_dial_5_account P314: speed_dial_5_name P315: speed_dial_5_userid P316: speed_dial_6_account P317: speed_dial_6_name P318: speed_dial_6_userid P319: speed_dial_7_account P320: speed_dial_7_name P321: speed_dial_7_userid P322: lcd_backlight_always_on # 0 or 1 P323: multi_purpose_key_1 # 0 = speed_dial # 1 = asterisk_blf P324: multi_purpose_key_2 # 0 = speed_dial # 1 = asterisk_blf P325: multi_purpose_key_3 # 0 = speed_dial # 1 = asterisk_blf P326: multi_purpose_key_4 # 0 = speed_dial # 1 = asterisk_blf P327: multi_purpose_key_5 # 0 = speed_dial # 1 = asterisk_blf P328: multi_purpose_key_6 # 0 = speed_dial # 1 = asterisk_blf P329: multi_purpose_key_7 # 0 = speed_dial # 1 = asterisk_blf P401: account_active_2 # 0 or 1 P402: sip_server_2 P403: outbound_proxy_2 P404: sip_userid_2 P405: authenticate_id_2 P406: authenticate_password_2 P407: name_2 P408: use_dns_srv_2 P409: userid_is_phone_number_2 P410: sip_registration_2 P411: unregister_on_reboot_2 P412: register_expiration_2 P413: local_sip_port_2 P414: nat_traversal_true_2 P415: subscribe_for_mwi_2 P416: send_dtmf_2 # 0=in-audio, 1=RTP (RFC2833), 2=SIP INFO P417: account_name_2 P418: proxy_require_2 P419: dial_plan_prefix_2 P420: enable_call_features_2 P421: send_anonymous_2 P422: early_dial_2 P423: account_ring_tone_2 # 0, 1, 2, 3 P424: special_feature_2 # 100 = Standard # 101 = Nortel MCS # 102 = Broadsoft # 103 = Howdy # 104 = Sonus # 105 = 3COM P425: auto_answer_2 P426: voicemail_userid_2 P427: min_session_expiration_2 P428: caller_request_timer_2 P429: callee_request_timer_2 P430: force_timer_2 P431: force_invite_2 P432: uac_specify_refresher_2 P433: uas_specify_refresher_2 P434: session_expiration_2 P435: enable_100rel_2 P438: allow_auto_answer_by_caller_info P439: turn_off_speaker_on_remote_disconnect P440: sip_t1_imeout P441: sip_t2_interval P442: disable_missed_calls_2 P451: vocoder_1_2 P452: vocoder_2_2 P453: vocoder_3_2 P454: vocoder_4_2 P455: vocoder_5_2 P456: vocoder_6_2 P457: vocoder_7_2 P458: vocoder_8_2 P501: account_active_3 # 0 or 1 P502: sip_server_3 P503: outbound_proxy_3 P504: sip_userid_3 P505: authenticate_id_3 P506: authenticate_password_3 P507: name_3 P508: use_dns_srv_3 P509: userid_is_phone_number_3 P510: sip_registration_3 P511: unregister_on_reboot_3 P512: register_expiration_3 P513: local_sip_port_3 P514: nat_traversal_true_3 P515: subscribe_for_mwi_3 P516: send_dtmf_3 # 0=in-audio, 1=RTP (RFC2833), 2=SIP INFO P517: account_name_3 P518: proxy_require_3 P519: dial_plan_prefix_3 P520: enable_call_features_3 P521: send_anonymous_3 P522: early_dial_3 P523: account_ring_tone_3 # 0, 1, 2, 3 P524: special_feature_3 # 100 = Standard # 101 = Nortel MCS # 102 = Broadsoft # 103 = Howdy # 104 = Sonus # 105 = 3COM P525: auto_answer_3 P526: voicemail_userid_3 P527: min_session_expiration_3 P528: caller_request_timer_3 P529: callee_request_timer_3 P530: force_timer_3 P531: force_invite_3 P532: uac_specify_refresher_3 P533: uas_specify_refresher_3 P534: session_expiration_3 P535: enable_100rel_3 P538: allow_auto_answer_by_caller_info P539: turn_off_speaker_on_remote_disconnect P540: sip_t1_imeout P541: sip_t2_interval P542: disable_missed_calls_3 P551: vocoder_1_3 P552: vocoder_2_3 P553: vocoder_3_3 P554: vocoder_4_3 P555: vocoder_5_3 P556: vocoder_6_3 P557: vocoder_7_3 P558: vocoder_8_3 P601: account_active_4 # 0 or 1 P602: sip_server_4 P603: outbound_proxy_4 P604: sip_userid_4 P605: authenticate_id_4 P606: authenticate_password_4 P607: name_4 P608: use_dns_srv_4 P609: userid_is_phone_number_4 P610: sip_registration_4 P611: unregister_on_reboot_4 P612: register_expiration_4 P613: local_sip_port_4 P614: nat_traversal_true_4 P615: subscribe_for_mwi_4 P616: send_dtmf_4 # 0=in-audio, 1=RTP (RFC2833), 2=SIP INFO P617: account_name_4 P618: proxy_require_4 P619: dial_plan_prefix_4 P620: enable_call_features_4 P621: send_anonymous_4 P622: early_dial_4 P623: account_ring_tone_4 # 0, 1, 2, 3 P624: special_feature_4 # 100 = Standard # 101 = Nortel MCS # 102 = Broadsoft # 103 = Howdy # 104 = Sonus # 105 = 3COM P625: auto_answer_4 P626: voicemail_userid_4 P627: min_session_expiration_4 P628: caller_request_timer_4 P629: callee_request_timer_4 P630: force_timer_4 P631: force_invite_4 P632: uac_specify_refresher_4 P633: uas_specify_refresher_4 P634: session_expiration_4 P635: enable_100rel_4 P638: allow_auto_answer_by_caller_info P639: turn_off_speaker_on_remote_disconnect P640: sip_t1_imeout P641: sip_t2_interval P642: disable_missed_calls_4 P651: vocoder_1_4 P652: vocoder_2_4 P653: vocoder_3_4 P654: vocoder_4_4 P655: vocoder_5_4 P656: vocoder_6_4 P657: vocoder_7_4 P658: vocoder_8_4 # End of the file gsutil-3.1/README0000600000000000000000000000632711241036275012243 0ustar rootrootThe Grandstream BudgeTone 100 VOIP and GX2000 telephones are telephones that do VOIP, from a company called Grandstream. The company's java configuration tool (which creates tftp files) is available at http://www.grandstream.com/y-configurationtool.htm; the company's firmware download page is at http://grandstream.com/y-firmware.htm GsUtil is a short program I wrote to dump and restore the data from these phones. Since a reboot is required to make the configuration change effective, this program does that too. It's written in Perl, tested on Fedora Core 4, and provided as tarball and rpm files. Only perl and perl-libwww-perl were used, and they came with the operating system, so you probably won't have to download any perl modules. Version 1.x was done for the 1.0.5.11 firmware, and Version 2.x is for the current 1.1.0.16 firmware on the GXP2000, and 1.0.8.23 on the BT-101. Version 3.x is for the same firmware, but it's been rewritten almost from scratch: cut-and-paste helped. Help message: Version 3.1 of GSutil, a GrandStream BudgeTone phone backup, restore and reboot utility. Written by Charles Howes (gsutil@ch.pkts.ca). http://www.pkts.ca/gsutil.shtml Usage: gsutil -[b|d|e|h|r] [-w] [-n] [-o] [-p password] address.. -b : reboot -d : dump to stdout -e : show phone firmware versions -r : restore from stdin -w : wait for device to be free (moves busy devices to end of list) -n : don't wait for reboot to finish -o : don't translate configuration values -p : password (default: admin) -h, --help : print this help --version : print the version of gsutil Examples: gsutil -d 10.10.13.5 > phone1.conf - dump configuration gsutil -do 10.10.13.5 > phone1.conf - dump in GS compatible style gsutil -r 10.10.13.5 < phone1.conf - restore configuration gsutil -b 10.10.13.5 - reboot phone and wait for it gsutil -bn 10.10.13.5 - reboot phone and don't wait gsutil -e 10.10.13.5 - show firmware version number gsutil -deboner -p admin 10.10.13.5 < new.conf > old.conf - everything at once gsutil -d 10.10.13.2 10.10.13.3 10.10.13.4 > out.conf - dump phones gsutil -r 10.10.13.2 10.10.13.3 10.10.13.4 < in.conf - restore phones gsutil -bn 10.10.13.2 10.10.13.3 10.10.13.4 - boot phones More than one phone can be specified at once; the configurations are appended when dumping, and separated when restoring. The default password for gsutil is the default password for the phones: 'admin'. Only the settings listed in the input file will be changed on the phone. This allows you to change a single setting on all of your phones at once without having to download, edit and upload each phone's settings. Make a configuration file containing only the parameter to change, and use that as input: gsutil -rbn 10.10.13.2 < input gsutil -rbn 10.10.13.3 < input Note: if restoring multiple phones at once, the command line ip addresses should be in the same order as they were when they were dumped, or else the configurations will go to different phones. This may be desirable, or it might upset your users when their phone number and voicemail get assigned to someone else's phone. You have been warned... :-) Charles Howes -- gsutil@ch.pkts.ca gsutil-3.1/gxp2000.template.txt0000600000000000000000000004520310446166516015042 0ustar rootroot################################################################################################ ## Configuration template for GXP2000, firmware version 1.1.0.13 ################################################################################################ #----------------------------------------------------------------------------- # Network & security Settings #----------------------------------------------------------------------------- # Admin password for web interface P2 = admin # End User Password P196 = 123 # DHCP support. 0 - yes, 1 - no P8 = 0 # PPPoE support. PPPoE user ID P82 = # PPPoE password P83 = # Host name (option 12) P146 = # Domain name (option 15) P147 = # Vendor Class Id (opion 60) P148 = # IP Address. Ignore if DHCP or PPPoE is used P9 = P10 = P11 = P12 = # Subnet mask. Ignore if DHCP or PPPoE is used P13 = 255 P14 = 255 P15 = 255 P16 = 0 # Router. Ignore if DHCP or PPPoE is used P17 = P18 = P19 = P20 = # Use this DNS server. (if specified). P92 = P93 = P94 = P95 = # DNS 1. Ignore if DHCP or PPPoE is used P21 = P22 = P23 = P24 = # DNS 2. Ignore if DHCP or PPPoE is used P25 = 0 P26 = 0 P27 = 0 P28 = 0 # Use NAT IP. This will enable our SIP client to use this IP in the SIP message. Example 64.3.153.50. P101 = # Use Random Port. 0 - no, 1 - yes P78 = 0 # Local RTP port (1024-65535, default 5004) P39 = 5004 #----------------------------------------------------------------------------- # Syslog Server #----------------------------------------------------------------------------- # Syslog Server (name of the server, max length is 64 charactors) P207 = # Syslog Level (Default setting is NONE) # 0 - NONE, 1 - DEBUG, 2 - INFO, 3 - WARNING, 4 - ERROR P208 = #------------------------------------------------------------- # Firmware Upgrade & Configuration #------------------------------------------------------------- # Firmware Upgrade. 0 - TFTP Upgrade, 1 - HTTP Upgrade. P212 = 0 # TFTP Server (for remote software upgrade and configuration) # For firmware version 1.0.5.22 and above) P213 = P214 = P215 = P216 = # Firmware Path P192 = # Config server Path P237 = # Firmware file prefix P232 = # Firmware file postfix P233 = # Config file prefix P234 = # Config file postfix P235 = # DHCP option 66 overrides tftp server 0 - No, 1 - Yes P145 = 1 # Automatic HTTP Upgrade. 0 - No, 1 - Yes (checking every defined days). Default is Yes. P194 = 0 # Check for new firmware every () day, unit is in day, default is 7 days. P193 = # Check for new firmware. 0 - Always, 1 - only when fw pre/postfix changes P238 = 0 # Authenticate conf file. 0 - No, 1 - Yes P240 = 0 #----------------------------------------------------------------------------- # Time settings #----------------------------------------------------------------------------- # NTP Server P30 = # Time Zone. Offset in minutes to GMT plus 720 (0 = -12 hours) P64 = 780 # Allow dhcp option 2 to override timezone. 0 - No, 1 - Yes P143 = 1 # Daylight Savings Time. 0 - no, 1 - yes P75 = 1 #----------------------------------------------------------------------------- # General SIP Registration settings #----------------------------------------------------------------------------- # Keep-alive interval (in seconds. default 20 seconds) P84 = 20 # STUN server P76 = #----------------------------------------------------------------------------- # Coming soon... (sic) #----------------------------------------------------------------------------- # G723 rate. 0 - 6.3kbps encoding rate, 1 - 5.3kbps encoding rate #P49 = 0 # iLBC payload type. Between 96 and 127, default is 97. #P96 = 97 # iLBC Frame Size. 0 - 20ms(default), 1 - 30ms. #P97 = 0 #----------------------------------------------------------------------------- # General codec/voice quality settings #----------------------------------------------------------------------------- # Silence Suppression. 0 - no, 1 - yes P50 = 0 # Voice Frames per TX (up to 10/20/32/64 frames for G711/G726/G723/other codecs respectively) P37 = 2 # IP QoS (IP Diff-Serv or Precedence value for RTP) P38 = 48 # Layer 2 QoS. 802.1Q/VLAN Tag (VLAN classification for RTP) P51 = 0 # Layer 2 QoS. 802.1p priority value (0 - 7) P87 = 0 # DTMF Payload Type P79 = 101 # Send Flash Event (Flash will be sent as a DTMF event if set to Yes). 0 - no, 1 - yes P74 = 0 #----------------------------------------------------------------------------- # Misc settings #----------------------------------------------------------------------------- # Use # as Dial Key (if set to Yes, "#" will function as the "(Re-)Dial" key). 0 - no, 1 - yes P72 = 1 # Offhook Auto-Dial (User ID/extension to dial automatically when offhook) P71 = # Disable Call-Waiting. 0 - No, 1 - Yes. P91 = 0 # Use Quick IP-call mode. 0 - No, 1 - Yes P184 = 0 # No Key Entry Timeout. Default - 4 seconds. P85 = 8 # Lock Keypad Update. (configuration update via keypad is disabled if set to Yes) # 0 - No, 1 - Yes. P88 = 0 # Date Display Format. 0 - Year-Month-Day, 1 - Month-Day-Year, 2 - Day-Month-Year P102 = 2 # Date display format. 0 - 12 hr, 1 - 24 hr P122 = 1 # Display clock instead of date. 0 - No, 1 - Yes P123 = 0 # Use custom ring tone 1 if incoming caller ID is the following: P105 = # Use custom ring tone 2 if incoming caller ID is the following: P106 = # Use custom ring tone 3 if incoming caller ID is the following: P107 = ########################################################### # GXP 2000 Multipurpose keys & other settings ########################################################### # LCD Backlight always on. 0 - No, 1 - Yes P322 = 0 #--- Key 1 ---- # Key Mode. 0 - Speed Dial, 1 - Asterisk BLF P323 = 0 # Account (0..3 --> Line 1..4) P301 = 0 # Name P302 = # User ID P303 = #--- Key 2 ---- # Key Mode. 0 - Speed Dial, 1 - Asterisk BLF P324 = 0 # Account (0..3 --> Line 1..4) P304 = 0 # Name P305 = # User ID P306 = #--- Key 3 ---- # Key Mode. 0 - Speed Dial, 1 - Asterisk BLF P325 = 0 # Account (0..3 --> Line 1..4) P307 = 0 # Name P308 = # User ID P309 = #--- Key 4 ---- # Key Mode. 0 - Speed Dial, 1 - Asterisk BLF P326 = 0 # Account (0..3 --> Line 1..4) P310 = 0 # Name P311 = # User ID P312 = #--- Key 5 ---- # Key Mode. 0 - Speed Dial, 1 - Asterisk BLF P327 = 0 # Account (0..3 --> Line 1..4) P313 = 0 # Name P314 = # User ID P315 = #--- Key 6 ---- # Key Mode. 0 - Speed Dial, 1 - Asterisk BLF P328 = 0 # Account (0..3 --> Line 1..4) P316 = 0 # Name P317 = # User ID P318 = #--- Key 7 ---- # Key Mode. 0 - Speed Dial, 1 - Asterisk BLF P329 = 0 # Account (0..3 --> Line 1..4) P319 = 0 # Name P320 = # User ID P321 = # ------ Settings for router mode --------- # System Device Mode. 0 - Switch, 1 - router P231 = 0 # WAN side http access: 0 - Disabled, 1 - enabled P190 = 0 # ICMP reply on wan port: 0 - Disabled, 1 - enabled P189 = 0 # Cloned WAN MAC Addr (2x6 digit hex format) P115 = P116 = P117 = P118 = P119 = P120 = # LAN subnet mask P110 = # LAN DHCP base IP P111 = # DHCP Lease time P112 = # DMZ IP P113 = # ---------Port forwarding----------- # Row #1 # WAN Port P150 = # LAN IP P158 = # LAN Port P166 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P174 = # Row #2 # WAN Port P151 = # LAN IP P159 = # LAN Port P167 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P175 = # Row #3 # WAN Port P152 = # LAN IP P160 = # LAN Port P168 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P176 = # Row #4 # WAN Port P153 = # LAN IP P161 = # LAN Port P169 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P177 = # Row #5 # WAN Port P154 = # LAN IP P162 = # LAN Port P170 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P178 = # Row #6 # WAN Port P155 = # LAN IP P163 = # LAN Port P171 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P179 = # Row #7 # WAN Port P156 = # LAN IP P164 = # LAN Port P172 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P180 = # Row #8 # WAN Port P157 = # LAN IP P165 = # LAN Port P173 = # Protocol. 0 - UDP, 1 - TCP, 2 - TCP/UDP P181 = ########################################################### # GXP 2000 Line 1 - 4 Settings ########################################################### # ------------------------------ # ----- Line 1 Settings -------- # ------------------------------ # Account active. 0 - No, 1 - Yes P271 = # Account name P270 = # SIP Server P47 = # Outbound Proxy P48 = # SIP User ID P35 = # Authentication ID P36 = # Authentication password P34 = # User Caller Name (John Doe) P3 = # Use DNS SRV. 0 - No, 1 - Yes. P103 = # SIP User ID is phone number. 0 - no, 1 - yes P63 = 0 # SIP Registration. 0 - no, 1 - yes P31 = 1 # Unregister On Reboot. 0 - no, 1 - yes P81 = 1 # Register Expiration (in minutes. default 1 hour, max 45 days) P32 = 60 # Local SIP port (default 5060) P40 = 5060 # SIP T1 Timeout (1/hundreth seconds) P209 = 100 # SIP T2 Interval (1/hundreth seconds) P250 = 400 # NAT Traversal. 0 - yes, 1 - no, 2 - no but send keepalives P52 = 1 # SUBSCRIBE for MWI. Whether or not send SUBSCRIBE for Message Waiting Indication. 0 - No, 1 - Yes. P99 = 1 # Voice Mail UserID (User ID/extension for 3rd party voice mail system) P33 = # Proxy-Require (A SIP extension to enable firewall penetration) P197 = # Send DTMF. 0 - in audio 1 - via RTP(RFC2833) 2 - via SIP INFO P73 = 1 # Early Dial (use "Yes" only if proxy supports 484 response). 0 - no, 1 - yes P29 = 0 # Dial Plan (dial plan prefix string) P66 = # Enable/Disable Call Features, 0 - No, 1 - Yes. P191 = 1 # Disable Missed Call, 0 - No, 1 - Yes. P182 = 0 # Session expiration (in seconds) P260 = 180 # Min-SE (in seconds) P261 = 90 # Caller Request Timer 0 - No, 1 - Yes/request for timer when making outbound calls P262 = 0 # Callee Request Timer 0 - No, 1 - Yes(When caller supports timer but did not request one) P263 = 0 # Force timer 0 - No, 1 - Yes(Use timer even when remote party does not support) P264 = 0 # UAC Specify Refresher, 0 - Omit, 1 - UAC, 2 - UAS P266 = 0 # UAS Specify Refresher, 1 - UAC, 2 - UAS(When UAC did not specify refresher tag) P267 = 1 # Force INVITE, 0 - No, 1 - Yes P265 = 0 # Enable 100rel, 0 - No, 1 - Yes P272 = 0 # Default Ring Tone. 0 - system ring tone, 1..3 --> custom ring tone 1..3 P104 = 0 # Send Anonymous (caller ID will be blocked if set to Yes). 0 - no, 1 - yes P65 = 0 # Auto Answer P90 = 0 # Allow Auto Answer by Call-Info, 0 - No, 1 - Yes (for intercom?) P298 = 1 # Turn off speaker on remote disconnect, 0 - No, 1 - Yes P299 = 1 # Codec preference settings (1..8) # 0 - G711u # 2 - G.726-32 (supported?) # 3 - GSM # 4 - G.723.1 # 8 - G711a # 9 - G.722 (supported?) #15 - G.728 (supported?) #18 - G.729A/B #98 - iLBC (supported?) P57 = 18 P58 = 3 P59 = 8 P60 = 0 P61 = 0 P62 = 0 P46 = 0 P98 = 0 # Special feature # 100 - Standard # 101 - Nortel MCS # 102 - Broadsoft # 108 - CBCOM # 109 - RNK # 110 - Sylantro P198 = 100 # ------------------------------ # ----- Line 2 Settings -------- # ------------------------------ # Account active. 0 - No, 1 - Yes P401 = # Account name P417 = # SIP Server P402 = # Outbound Proxy P403 = # SIP User ID P404 = # Authentication ID P405 = # Authentication password P406 = # User Caller Name (John Doe) P407 = # Use DNS SRV. 0 - No, 1 - Yes. P408 = # SIP User ID is phone number. 0 - no, 1 - yes P409 = 0 # SIP Registration. 0 - no, 1 - yes P410 = 1 # Unregister On Reboot. 0 - no, 1 - yes P411 = 0 # Register Expiration (in minutes. default 1 hour, max 45 days) P412 = 60 # Local SIP port P413 = 5062 # SIP T1 Timeout (1/hundreth seconds) P440 = 100 # SIP T2 Interval (1/hundreth seconds) P441 = 400 # NAT Traversal. 0 - yes, 1 - no, 2 - no but send keepalives P414 = 1 # SUBSCRIBE for MWI. Whether or not send SUBSCRIBE for Message Waiting Indication. 0 - No, 1 - Yes. P415 = 1 # Voice Mail UserID (User ID/extension for 3rd party voice mail system) P426 = # Proxy-Require (A SIP extension to enable firewall penetration) P418 = # Send DTMF. 0 - in audio 1 - via RTP(RFC2833) 2 - via SIP INFO P416 = 1 # Early Dial (use "Yes" only if proxy supports 484 response). 0 - no, 1 - yes P422 = 0 # Dial Plan (dial plan prefix string) P419 = # Enable/Disable Call Features, 0 - No, 1 - Yes. P420 = 1 # Disable Missed Call, 0 - No, 1 - Yes. P442 = 0 # Session expiration (in seconds) P434 = 180 # Min-SE (in seconds) P427 = 90 # Caller Request Timer 0 - No, 1 - Yes/request for timer when making outbound calls P428 = 0 # Callee Request Timer 0 - No, 1 - Yes(When caller supports timer but did not request one) P429 = 0 # Force timer 0 - No, 1 - Yes(Use timer even when remote party does not support) P430 = 0 # UAC Specify Refresher, 0 - Omit, 1 - UAC, 2 - UAS P432 = 0 # UAS Specify Refresher, 1 - UAC, 2 - UAS(When UAC did not specify refresher tag) P433 = 1 # Force INVITE, 0 - No, 1 - Yes P431 = 0 # Enable 100rel, 0 - No, 1 - Yes P435 = 0 # Default Ring Tone. 0 - system ring tone, 1..3 --> custom ring tone 1..3 P423 = 0 # Send Anonymous (caller ID will be blocked if set to Yes). 0 - no, 1 - yes P421 = 0 # Auto Answer P425 = 0 # Allow Auto Answer by Call-Info, 0 - No, 1 - Yes (for intercom?) P438 = 1 # Turn off speaker on remote disconnect, 0 - No, 1 - Yes P439 = 0 # Codec preference settings (1..8) # 0 - G711u # 2 - G.726-32 (supported?) # 3 - GSM # 4 - G.723.1 # 8 - G711a # 9 - G.722 (supported?) #15 - G.728 (supported?) #18 - G.729A/B #98 - iLBC (supported?) P451 = 18 P452 = 3 P453 = 8 P454 = 0 P455 = 0 P456 = 0 P457 = 0 P458 = 0 # Special feature # 100 - Standard # 101 - Nortel MCS # 102 - Broadsoft # 108 - CBCOM # 109 - RNK # 110 - Sylantro P424 = 100 # ------------------------------ # ----- Line 3 Settings -------- # ------------------------------ # Account active. 0 - No, 1 - Yes P501 = # Account name P517 = # SIP Server P502 = # Outbound Proxy P503 = # SIP User ID P504 = # Authentication ID P505 = # Authentication password P506 = # User Caller Name (John Doe) P507 = # Use DNS SRV. 0 - No, 1 - Yes. P508 = # SIP User ID is phone number. 0 - no, 1 - yes P509 = 0 # SIP Registration. 0 - no, 1 - yes P510 = 1 # Unregister On Reboot. 0 - no, 1 - yes P511 = 0 # Register Expiration (in minutes. default 1 hour, max 45 days) P512 = 60 # Local SIP port P513 = 5064 # SIP T1 Timeout (1/hundreth seconds) P540 = 100 # SIP T2 Interval (1/hundreth seconds) P541 = 400 # NAT Traversal. 0 - yes, 1 - no, 2 - no but send keepalives P514 = 1 # SUBSCRIBE for MWI. Whether or not send SUBSCRIBE for Message Waiting Indication. 0 - No, 1 - Yes. P515 = 1 # Voice Mail UserID (User ID/extension for 3rd party voice mail system) P526 = # Proxy-Require (A SIP extension to enable firewall penetration) P518 = # Send DTMF. 0 - in audio 1 - via RTP(RFC2833) 2 - via SIP INFO P516 = 1 # Early Dial (use "Yes" only if proxy supports 484 response). 0 - no, 1 - yes P522 = 0 # Dial Plan (dial plan prefix string) P519 = # Enable/Disable Call Features, 0 - No, 1 - Yes. P520 = 1 # Disable Missed Call, 0 - No, 1 - Yes. P542 = 0 # Session expiration (in seconds) P534 = 180 # Min-SE (in seconds) P527 = 90 # Caller Request Timer 0 - No, 1 - Yes/request for timer when making outbound calls P528 = 0 # Callee Request Timer 0 - No, 1 - Yes(When caller supports timer but did not request one) P529 = 0 # Force timer 0 - No, 1 - Yes(Use timer even when remote party does not support) P530 = 0 # UAC Specify Refresher, 0 - Omit, 1 - UAC, 2 - UAS P532 = 0 # UAS Specify Refresher, 1 - UAC, 2 - UAS(When UAC did not specify refresher tag) P533 = 1 # Force INVITE, 0 - No, 1 - Yes P531 = 0 # Enable 100rel, 0 - No, 1 - Yes P535 = 0 # Default Ring Tone. 0 - system ring tone, 1..3 --> custom ring tone 1..3 P523 = 0 # Send Anonymous (caller ID will be blocked if set to Yes). 0 - no, 1 - yes P521 = 0 # Auto Answer P525 = 0 # Allow Auto Answer by Call-Info, 0 - No, 1 - Yes (for intercom?) P538 = 1 # Turn off speaker on remote disconnect, 0 - No, 1 - Yes P539 = 0 # Codec preference settings (1..8) # 0 - G711u # 2 - G.726-32 (supported?) # 3 - GSM # 4 - G.723.1 # 8 - G711a # 9 - G.722 (supported?) #15 - G.728 (supported?) #18 - G.729A/B #98 - iLBC (supported?) P551 = 18 P552 = 3 P553 = 8 P554 = 0 P555 = 0 P556 = 0 P557 = 0 P558 = 0 # Special feature # 100 - Standard # 101 - Nortel MCS # 102 - Broadsoft # 108 - CBCOM # 109 - RNK # 110 - Sylantro P524 = 100 # ------------------------------ # ----- Line 4 Settings -------- # ------------------------------ # Account active. 0 - No, 1 - Yes P601 = # Account name P617 = # SIP Server P602 = # Outbound Proxy P603 = # SIP User ID P604 = # Authentication ID P605 = # Authentication password P606 = # User Caller Name (John Doe) P607 = # Use DNS SRV. 0 - No, 1 - Yes. P608 = # SIP User ID is phone number. 0 - no, 1 - yes P609 = 0 # SIP Registration. 0 - no, 1 - yes P610 = 1 # Unregister On Reboot. 0 - no, 1 - yes P611 = 0 # Register Expiration (in minutes. default 1 hour, max 45 days) P612 = 60 # Local SIP port P613 = 5066 # SIP T1 Timeout (1/hundreth seconds) P640 = 100 # SIP T2 Interval (1/hundreth seconds) P641 = 400 # NAT Traversal. 0 - yes, 1 - no, 2 - no but send keepalives P614 = 1 # SUBSCRIBE for MWI. Whether or not send SUBSCRIBE for Message Waiting Indication. 0 - No, 1 - Yes. P615 = 1 # Voice Mail UserID (User ID/extension for 3rd party voice mail system) P626 = # Proxy-Require (A SIP extension to enable firewall penetration) P618 = # Send DTMF. 0 - in audio 1 - via RTP(RFC2833) 2 - via SIP INFO P616 = 1 # Early Dial (use "Yes" only if proxy supports 484 response). 0 - no, 1 - yes P622 = 0 # Dial Plan (dial plan prefix string) P619 = # Enable/Disable Call Features, 0 - No, 1 - Yes. P620 = 1 # Disable Missed Call, 0 - No, 1 - Yes. P642 = 0 # Session expiration (in seconds) P634 = 180 # Min-SE (in seconds) P627 = 90 # Caller Request Timer 0 - No, 1 - Yes/request for timer when making outbound calls P628 = 0 # Callee Request Timer 0 - No, 1 - Yes(When caller supports timer but did not request one) P629 = 0 # Force timer 0 - No, 1 - Yes(Use timer even when remote party does not support) P630 = 0 # UAC Specify Refresher, 0 - Omit, 1 - UAC, 2 - UAS P632 = 0 # UAS Specify Refresher, 1 - UAC, 2 - UAS(When UAC did not specify refresher tag) P633 = 1 # Force INVITE, 0 - No, 1 - Yes P631 = 0 # Enable 100rel, 0 - No, 1 - Yes P635 = 0 # Default Ring Tone. 0 - system ring tone, 1..3 --> custom ring tone 1..3 P623 = 0 # Send Anonymous (caller ID will be blocked if set to Yes). 0 - no, 1 - yes P621 = 0 # Auto Answer P625 = 0 # Allow Auto Answer by Call-Info, 0 - No, 1 - Yes (for intercom?) P638 = 1 # Turn off speaker on remote disconnect, 0 - No, 1 - Yes P639 = 0 # Codec preference settings (1..8) # 0 - G711u # 2 - G.726-32 (supported?) # 3 - GSM # 4 - G.723.1 # 8 - G711a # 9 - G.722 (supported?) #15 - G.728 (supported?) #18 - G.729A/B #98 - iLBC (supported?) P651 = 18 P652 = 3 P653 = 8 P654 = 0 P655 = 0 P656 = 0 P657 = 0 P658 = 0 # Special feature # 100 - Standard # 101 - Nortel MCS # 102 - Broadsoft # 108 - CBCOM # 109 - RNK # 110 - Sylantro P624 = 100