Compare commits

...

10 commits

6 changed files with 471 additions and 2 deletions

View file

@ -1,2 +1,3 @@
# Documentation Links :
* [Voip-Info 79x1](https://www.voip-info.org/asterisk-phone-cisco-79x1-xml-configuration-files-for-sip/)
* [Asterisk phone cisco 79×1 xml configuration files for SIP](https://www.voip-info.org/asterisk-phone-cisco-79x1-xml-configuration-files-for-sip/)
* [Configuring A Custom Background Image - Cisco 7911G - IP Phone VoIP Administration Manual](https://www.manualslib.com/manual/375757/Cisco-7911g-Ip-Phone-Voip.html?page=177)

View file

@ -0,0 +1,30 @@
# 7911 - 7906 Series :
## Intro :
You will need an IPv4 Network with :
* DHCP server (tested on tagged Voice-Vlan)
* TFTP server (option 66 configured in DHCP server)
* physical access to the phone
## Factory reset sequence :
When the phone start's up, (either POE or local adapter), dial the `#` until the red headset light starts blinking.
Dial `1 2 3 4 5 6 7 8 9 * 0 #` in that order. The phone will factory reset
## Flashing process :
```<loadInformation>``` is what needs to contain the firmware number.
After factory reset, the phone will look up in the TFTP server for his own config file (`SEP<mac-address>.cnf.xml`)
In the case of flashing to SIP firmware, that file has to contain the fact that it goes to SIP and a firmware version.
All system files must be stored at the root of the TFTP server.
## Startup Sequence :
At every reboot, the phone will look up for the ``SEP<mac-address>.cnf.xml``.
## Common problems:
Phone can start to boot-loop after flashing. Apparently, if it can't connect to the IPPBX, it will reboot.

View file

@ -0,0 +1,178 @@
<device>
<deviceProtocol>SIP</deviceProtocol>
<devicePool>
<dateTimeSetting>
<dateTemplate>D/M/YY</dateTemplate>
<timeZone>W. Europe Standard/Daylight Time</timeZone>
<ntps>
<ntp>
<name><NTP SERVER></name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<members>
<member priority="0">
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName><PBX IP></processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</devicePool>
<sipProfile>
<sipProxies>
<backupProxy></backupProxy>
<backupProxyPort></backupProxyPort>
<emergencyProxy></emergencyProxy>
<emergencyProxyPort></emergencyProxyPort>
<outboundProxy></outboundProxy>
<outboundProxyPort></outboundProxyPort>
<registerWithProxy>true</registerWithProxy>
</sipProxies>
<sipCallFeatures>
<cnfJoinEnabled>true</cnfJoinEnabled>
<callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI>
<callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
<callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
<callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
<meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
<abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
<rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>1</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>0</anonymousCallBlock>
<callerIdBlocking>0</callerIdBlocking>
<retainForwardInformation>false</retainForwardInformation>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
</sipCallFeatures>
<sipStack>
<sipInviteRetx>6</sipInviteRetx>
<sipRetx>10</sipRetx>
<timerInviteExpires>180</timerInviteExpires>
<timerRegisterExpires>3600</timerRegisterExpires>
<timerRegisterDelta>5</timerRegisterDelta>
<timerKeepAliveExpires>120</timerKeepAliveExpires>
<timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
<timerT1>500</timerT1>
<timerT2>4000</timerT2>
<maxRedirects>70</maxRedirects>
<remotePartyID>true</remotePartyID>
<userInfo>Phone</userInfo>
</sipStack>
<autoAnswerTimer>1</autoAnswerTimer>
<autoAnswerAltBehavior>false</autoAnswerAltBehavior>
<autoAnswerOverride>true</autoAnswerOverride>
<transferOnhookEnabled>false</transferOnhookEnabled>
<enableVad>false</enableVad>
<preferredCodec>none</preferredCodec>
<dtmfAvtPayload>101</dtmfAvtPayload>
<dtmfDbLevel>3</dtmfDbLevel>
<dtmfOutofBand>avt</dtmfOutofBand>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<kpml>0</kpml>
<natEnabled>false</natEnabled>
<natAddress></natAddress>
<phoneLabel><phone name></phoneLabel>
<offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer>
<stutterMsgWaiting>0</stutterMsgWaiting>
<callStats>false</callStats>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line button="1">
<offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer>
<featureID>9</featureID>
<featureLabel><Line Name></featureLabel>
<proxy>USECALLMANAGER</proxy>
<port>5060</port>
<name><SIP USER NAME></name>
<displayName>Main</displayName>
<autoAnswer>
<autoAnswerEnabled>0</autoAnswerEnabled>
</autoAnswer>
<callWaiting>1</callWaiting>
<authName><SIP USER NAME></authName>
<authPassword><SIP USER PASSWORD></authPassword>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>1</messageWaitingLampPolicy>
<messagesNumber>*97</messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<contact>cisco7911</contact>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
</line>
</sipLines>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
<phonePassword>cisco</phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<setBackground>
<background>
<image></image>
<icon></icon>
</background>
</setBackground>
<callLogBlfEnabled>1</callLogBlfEnabled>
</commonProfile>
<loadInformation>SIP11.9-4-2SR3-1S</loadInformation>
<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>0</autoSelectLineEnable>
<webAccess>1</webAccess>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>1</loggingDisplay>
<loadServer></loadServer>
</vendorConfig>
<networkLocale></networkLocale>
<networkLocaleInfo>
<name></name>
<version>5.0(2)</version>
</networkLocaleInfo>
<deviceSecurityMode>1</deviceSecurityMode>
<authenticationURL></authenticationURL>
<directoryURL></directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL></servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>2</transportLayerProtocol>
<capfAuthMode>0</capfAuthMode>
<capfList>
<capf>
<phonePort>3804</phonePort>
</capf>
</capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
</device>

View file

@ -0,0 +1,5 @@
<device>
<deviceProtocol>SIP</deviceProtocol>
<loadInformation model="IP Phone 7940">P0S3-8-12-00</loadInformation>
</device>

View file

@ -0,0 +1,72 @@
proxy1_address: "<fqdn/hostname of ippbx>"
line1_name: "<login>"
line1_shortname: "<line_name>"
line1_displayname: "<line_name>"
line1_authname: "<login>"
line1_password: "<password>"
#line2_name: "<login>"
#line2_shortname: "<login_name>"
#line2_displayname: "<login_name>"
#line2_authname: "<login>"
#line2_password: "<password>"
proxy_emergency: ""
proxy_emergency_port: "5060"
proxy_backup: ""
proxy_backup_port: "5060"
outbound_proxy: "<fqdn/hostname of ippbx>"
outbound_proxy_port: "5060"
proxy_register: "1"
timer_register_expires: "120"
preferred_codec: "none"
tos_media: "5"
enable_vad: "0"
dial_template: "dialplan"
network_media_type: "auto"
autocomplete: "1"
telnet_level: "2”
cnf_join_enable: "1"
semi_attended_transfer: "0"
call_waiting: "1"
anonymous_call_block: "0"
callerid_blocking: "0"
dnd_control: "0"
dtmf_inband: "1"
dtmf_outofband: "avt"
dtmf_db_level: "3"
dtmf_avt_payload: "101"
timer_t1: "500"
timer_t2: "4000"
sip_retx: "10"
sip_invite_retx: "6"
timer_invite_expires: "180"
nat_enable: "0"
#voip_control_port: "5060"
#start_media_port: "10000"
#end_media_port: "10100"
nat_received_processing: "0"
phone_label: "<upper_right_label>"
time_zone: CET
time_format_24hr: 3
date_format: D/M/Y
sntp_mode: "directedbroadcast"
sntp_server: "<ntp_server>"
logo_url: "<logurl>"
telnet_level: "2"
phone_prompt: "Cisco79x0”
phone_password: "cisco"
enable_vad: "0"
network_media_type: "auto"
user_info: phone
image_version: "P0S3-8-12-00"

View file

@ -19,6 +19,189 @@ def mac():
return raw_mac
def getntp():
"""
geting the NTP server. Getting FQDN or IP address
:return: the NTP server
"""
while True:
ntpserver = input("NTP server : ")
if ntpserver != "":
return ntpserver
def gettimezone():
"""
Timezone Selection.
Default is GMT. (thank you cisco for making that part very long)
:return: the string of the local timezone
"""
timezone = "GMT"
offset = input("What is your GMT offset? (example for Belgium : +01:00) : ")
if offset == "-12:00":
timezone = "IDL"
elif offset == "-11:00":
timezone = "NT"
elif offset == "-10:00":
timezone = "AHST"
elif offset == "-09:30":
timezone = "IMT"
elif offset == "-09:00":
timezone = "YST"
elif offset == "-08:00":
timezone = "PST"
elif offset == "-07:00":
timezone = "MST"
elif offset == "-06:00":
timezone = "CST"
elif offset == "-05:00":
timezone = "EST"
elif offset == "-04:00":
timezone = "AST"
elif offset == "-03:30":
timezone = "NST"
elif offset == "-03:00":
timezone = "BST"
elif offset == "-02:00":
timezone = "AT"
elif offset == "-01:00":
timezone = "WAT"
elif offset == "00:00" or offset == "+00:00" or offset == "-00:00":
timezone = "GMT"
elif offset == "+01:00":
timezone = "CET"
elif offset == "+02:00":
timezone = "EET"
elif offset == "+03:00":
timezone = "BT"
elif offset == "+03:30":
timezone = "IT"
elif offset == "+04:00":
timezone = "ZP4"
elif offset == "+04:30":
timezone = "AFG"
elif offset == "+05:00":
timezone = "ZP5"
elif offset == "+05:30":
timezone = "IST"
elif offset == "+06:00":
timezone = "ZP6"
elif offset == "+06:30":
timezone = "SUM"
elif offset == "+07:00":
timezone = "WAST"
elif offset == "+08:00":
timezone = "HST"
elif offset == "+09:00":
timezone = "JST"
elif offset == "+09:30":
timezone = "CAST"
elif offset == "+10:00":
timezone = "EAST"
elif offset == "+11:00":
timezone = "EADT"
elif offset == "+12:00":
timezone = "NZST"
else:
print("invalid option")
return timezone
def getsoftwareversion():
"""
getting the software version for the phones. Needed for intial flashing (still need to document)
:return: a string that contains software version.
"""
while True:
software = input("What is the software version : ")
if software != "":
return software
def getphonename():
"""
What name would you like your phone to have (name will be shown in the upper right corner
:return: Phone name
"""
while True:
name = input("What is the phone name? (name will be shown in the upper right corner : ")
if name != "":
return name
def getproxy():
"""
This function takes the address of the PBX
:return: IP address or hostname in a string (MANDATORY)
"""
while True:
proxy = input("Enter the Hostname or IP address of the IP-PBX (proxy) : ")
if proxy != "":
return proxy
def getlineamount():
"""
Function will allow to run in a loop to get the data for all lines
:return:
"""
return int(input("How many phone lines do you have : "))
def getusername():
"""
can run undefined amount of times. Get's username
:return:
"""
return input("What is the line username : ")
def getpassword():
"""
can run undefined amount of times. Get's password
:return:
"""
return input("What is the line password : ")
def getlinename():
"""
can run undefined amount of times. Get's line name
:return:
"""
return input("line name : ")
def getlogourl():
"""
Logo URL for the PNG URL
:return:
"""
return input("Logo URL : ")
def generatefile(ntp_server,timezone,software_version,phonename,proxy,lineamount,logourl):
"""
Takes all the data and generates the final file
:param ntp_server:
:param timezone:
:param software_version:
:param phonename:
:param proxy:
:param lineamount:
:param logourl:
:return:
"""
return True
def main():
username=[]
password=[]
linename=[]
mac_address = mac()
print(mac_address)
ntp_server = getntp()
timezone = gettimezone()
software_version = getsoftwareversion()
phonename = getphonename()
proxy = getproxy()
lineamount = getlineamount()
for i in lineamount:
username[i] = getusername()
password[i] = getpassword()
linename[i] = getlinename()
if input("Do you have a custom logo link? (y/n) : ") == "y":
logourl = getlogourl()
generatefile(ntp_server,timezone,software_version,phonename,proxy,lineamount,logourl)