VoIP జూ - ప్రొవిజనింగ్

ఎంట్రీ

ఒకరోజు, మా ఆఫీసులో IP టెలిఫోనీని ప్రవేశపెట్టడానికి ఒక ప్రయోగాన్ని మేనేజ్‌మెంట్ ఆమోదించింది. ఈ రంగంలో నా అనుభవం చాలా తక్కువగా ఉన్నందున, ఈ పని నాలో చాలా ఆసక్తిని రేకెత్తించింది మరియు నేను సమస్య యొక్క వివిధ అంశాలను అధ్యయనం చేయడంలో మునిగిపోయాను. డైవ్ ముగింపులో, నేను సంపాదించిన జ్ఞానం ఎవరికైనా ఉపయోగపడుతుందనే ఆశతో పంచుకోవాలని నిర్ణయించుకున్నాను. కాబట్టి…

మూల డేటా

ఆస్టరిస్క్ ఎంపిక చేయబడింది మరియు IP PBX వలె అమలు చేయబడింది. ఫోన్ ఫ్లీట్‌లో సిస్కో 7906g, పానాసోనిక్ UT-KX123B, Grandstream GXP1400 మరియు Dlink DPH-150S(E)/F3, Yealink T19 మరియు T21 పరికరాలు ఉన్నాయి. ప్రయోగంలో భాగంగా, ధర/నాణ్యత/సౌలభ్యం నిష్పత్తిపై అభిప్రాయాన్ని ఏర్పరచుకోవడానికి ప్రతిదానిలో కొంత భాగాన్ని ప్రయత్నించాలని నిర్ణయించడం వల్ల ఈ వైవిధ్యం ఏర్పడింది.

పని

సాధ్యమైనంతవరకు కొత్త పరికరాలను సెటప్ చేసే ప్రక్రియను సులభతరం చేయండి మరియు ఏకీకృతం చేయండి. అన్ని ఫోన్‌లు తప్పనిసరిగా సమయం సమకాలీకరించబడి ఉండాలి, సర్వర్ నుండి లోడ్ చేయబడిన ఫోన్ పుస్తకాన్ని కలిగి ఉండాలి మరియు నిర్వాహకుని కోసం సెట్టింగ్‌లకు ప్రాప్యతను అందించాలి.

ఈ సమస్యకు పరిష్కారం చాలా సులభం - ఫోన్ల ఆటోమేటిక్ కాన్ఫిగరేషన్‌ను అమలు చేయండి, అని పిలవబడేది. ప్రొవిజనింగ్. అసలైన, ఈ అద్భుతమైన ఫంక్షన్ యొక్క నా అమలు గురించి చర్చించబడుతుంది.

tftpd,dhcpdని కాన్ఫిగర్ చేస్తోంది

ఫోన్‌లకు సెట్టింగ్‌లను పంపిణీ చేయడానికి, నేను tftpని యూనివర్సల్ ఆప్షన్‌గా ఎంచుకున్నాను, అన్ని ప్లాట్‌ఫారమ్‌ల ద్వారా మద్దతు ఉంది, కాన్ఫిగర్ చేయడం మరియు నిర్వహించడం సులభం.

tftp కోసం నిర్దిష్ట కాన్ఫిగరేషన్ అవసరం లేదు. నేను ప్రామాణిక tftpdని ఇన్‌స్టాల్ చేసాను మరియు దాని రూట్ డైరెక్టరీలో అవసరమైన అన్ని ఫైల్‌లను ఉంచాను.
నేను ఫోన్ తయారీదారుకి అనుగుణంగా సెట్టింగుల ఫైల్‌లను డైరెక్టరీలలో ఉంచాను. నిజమే, సిస్కో పరికరం దాని ఫోల్డర్‌లోకి ఎప్పుడూ వెళ్లలేదు, కాబట్టి నేను దానిని దాని రూట్‌లో నిల్వ చేయాల్సి వచ్చింది.

ఫోన్‌లను tftp సర్వర్ స్థానానికి సూచించడానికి, నేను ఎంపిక-66ని ఉపయోగించాను. అదనంగా, అతను వాటిని తయారీదారుచే ప్రత్యేక తరగతులుగా విభజించాడు. ప్రతి తరగతి దాని స్వంత చిరునామా విభాగం మరియు కాన్ఫిగరేషన్ ఫైల్‌ల కోసం వ్యక్తిగత ఫోల్డర్‌ను పొందింది. మార్గం ద్వారా, D-link నుండి పరికరాలు MAC చిరునామాల ద్వారా లెక్కించబడాలి, ఎందుకంటే అవి dhcp అభ్యర్థనలో తయారీదారు గురించి సమాచారాన్ని అందించవు.

ఫ్రాగ్మెంట్ dhcpd.conf

# అవసరమైన ఎంపికల ఎంపికను పేర్కొనండి ఎంపిక-66 కోడ్ 66 = టెక్స్ట్; క్లాస్ "పానాసోనిక్" {మ్యాచ్ ఐఫ్ సబ్‌స్ట్రింగ్ (ఎంపిక విక్రేత-క్లాస్-ఐడెంటిఫైయర్,0,9) = "పానాసోనిక్"; ఎంపిక ఎంపిక-66 "10.1.1.50/పానాసోనిక్/"; } క్లాస్ "సిస్కో" {మ్యాచ్ ఐఫ్ సబ్‌స్ట్రింగ్ (ఎంపిక విక్రేత-క్లాస్-ఐడెంటిఫైయర్,0,36) = "సిస్కో సిస్టమ్స్, ఇంక్. IP ఫోన్ CP-7906"; ఎంపిక ఎంపిక-66 "10.1.1.50/cisco/"; } క్లాస్ "గ్రాండ్‌స్ట్రీమ్" {మ్యాచ్ ఐఫ్ సబ్‌స్ట్రింగ్ (ఎంపిక విక్రేత-క్లాస్-ఐడెంటిఫైయర్,0,11) = "గ్రాండ్‌స్ట్రీమ్"; ఎంపిక ఎంపిక-66 "10.1.1.50/గ్రాండ్‌స్ట్రీమ్/"; } class "dlink" { match if (binary-to-ascii (16,8,":",substring(hardware,1,4)) = "c8:d3:a3:8d") లేదా (binary-to-ascii (16,8,":",సబ్‌స్ట్రింగ్(హార్డ్‌వేర్,1,4)) = "90:94:e4:72"); ఎంపిక ఎంపిక-66 "10.1.1.50/dlink/"; } తరగతి "yealink" {మ్యాచ్ ఐఫ్ సబ్‌స్ట్రింగ్ (ఎంపిక vendor-class-identifier,0,7) = "Yealink"; ఎంపిక ఎంపిక-66 "10.1.1.50/yealink/"; }

సాధారణ పూల్ నుండి ఫోన్‌లను బలవంతంగా మినహాయించవలసి వచ్చింది. లేకపోతే, వారు తమ "పాడిలింగ్ పూల్"కి వెళ్లడానికి ఇష్టపడలేదు.
సబ్‌నెట్ సెట్టింగ్‌ల ఉదాహరణ

సబ్‌నెట్ 10.1.1.0 నెట్‌మాస్క్ 255.255.255.0 {ఆప్షన్ రూటర్లు 10.1.1.1; పూల్ {"cisco" సభ్యులను తిరస్కరించండి; "పానాసోనిక్" సభ్యులను తిరస్కరించండి; "dlink" సభ్యులను తిరస్కరించండి; పరిధి 10.1.1.230 10.1.1.240; } పూల్ {"cisco" సభ్యులను అనుమతించండి; పరిధి 10.1.1.65 10.1.1.69; } పూల్ {"పానాసోనిక్" సభ్యులను అనుమతించండి; పరిధి 10.1.1.60 10.1.1.64; } పూల్ {"dlink" సభ్యులను అనుమతించండి; పరిధి 10.1.1.55 10.1.1.59; } }

ప్రమేయం ఉన్న అన్ని సేవలను పునఃప్రారంభించిన తర్వాత, సెట్టింగ్‌ల కోసం ఫోన్‌లు తమకు కేటాయించిన tftp సర్వర్‌కు నమ్మకంగా వెళ్లాయి. వాటిని అక్కడ ఉంచడమే మిగిలి ఉంది.

సిస్కో 7906

నేను ఈ పరికరాలను వాటి అసలు ప్యాకేజింగ్‌లో పొందాను. నక్షత్రం గుర్తుతో స్నేహం చేయడానికి నేను దానిని మార్చవలసి వచ్చింది. అయితే అది వేరే కథ. ఒక నిర్దిష్ట సందర్భంలో, పరికరాన్ని కాన్ఫిగర్ చేయడానికి, సూచనల ప్రకారం, నేను SEPAABBCCDDEEFF.cnf.xml ఫైల్‌ను tftp సర్వర్ యొక్క రూట్‌లో సృష్టించాను. AABBCCDDEEFF అనేది పరికరం యొక్క MAC చిరునామా.

సిస్కో నుండి ఫోన్‌లను సెటప్ చేయడం గురించి ఇది ఇప్పటికే ఒకటి కంటే ఎక్కువసార్లు వ్రాయబడింది, కాబట్టి నేను సెట్టింగ్‌లతో పని చేసే ఫైల్‌ను వదిలివేస్తాను.
సిస్కో కోసం సెట్టింగ్‌లు

<?xml version="1.0" encoding="UTF-8"?>
<device xsi_type="axl:XIPPhone" ctiid="94">
<fullConfig>true</fullConfig>
<deviceProtocol>SIP</deviceProtocol>
<sshUserId>root</sshUserId>
<sshPassword>ADMIN_PWD</sshPassword>
<devicePool>
<dateTimeSetting>
<dateTemplate>D-M-Y</dateTemplate>
<timeZone>Central Pacific Standard Time</timeZone>
<ntps>
<ntp>
<name>10.1.1.4</name>
<ntpMode>Unicast</ntpMode>
</ntp>
</ntps>
</dateTimeSetting>
<callManagerGroup>
<members> <member priority="0"> <callManager>
<name>10.1.1.50</name>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<sipPort>5060</sipPort>
<securedSipPort>5061</securedSipPort>
</ports>
<processNodeName>10.1.1.50</processNodeName>
</callManager> </member> </members>
</callManagerGroup>
<srstInfo>
<srstOption>Disable</srstOption>
</srstInfo>
<connectionMonitorDuration>120</connectionMonitorDuration>
</devicePool>
<sipProfile>
<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>2</callHoldRingback>
<localCfwdEnable>true</localCfwdEnable>
<semiAttendedTransfer>true</semiAttendedTransfer>
<anonymousCallBlock>2</anonymousCallBlock>
<callerIdBlocking>2</callerIdBlocking>
<dndControl>0</dndControl>
<remoteCcEnable>true</remoteCcEnable>
<retainForwardInformation>false</retainForwardInformation>
</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>None</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>
<kpml>3</kpml>
<alwaysUsePrimeLine>false</alwaysUsePrimeLine>
<alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
<phoneLabel>Cisco Phone</phoneLabel>
<stutterMsgWaiting>2</stutterMsgWaiting>
<callStats>false</callStats>
<offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer>
<silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
<disableLocalSpeedDialConfig>true</disableLocalSpeedDialConfig>
<poundEndOfDial>false</poundEndOfDial>
<startMediaPort>16384</startMediaPort>
<stopMediaPort>32766</stopMediaPort>
<sipLines>
<line button="1" lineIndex="1">
<featureID>9</featureID>
<proxy>10.1.1.50</proxy>
<port>5060</port>
<autoAnswer> <autoAnswerEnabled>2</autoAnswerEnabled> </autoAnswer>
<callWaiting>3</callWaiting>
<sharedLine>false</sharedLine>
<messageWaitingLampPolicy>3</messageWaitingLampPolicy>
<messagesNumber></messagesNumber>
<ringSettingIdle>4</ringSettingIdle>
<ringSettingActive>5</ringSettingActive>
<forwardCallInfoDisplay>
<callerName>true</callerName>
<callerNumber>true</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</forwardCallInfoDisplay>
<featureLabel></featureLabel>
<displayName>User #103</displayName>
<name>103</name>
<authName>103</authName>
<authPassword>SIP_PWD</authPassword>
</line>
</sipLines>
<externalNumberMask>$num</externalNumberMask>
<voipControlPort>5060</voipControlPort>
<dscpForAudio>184</dscpForAudio>
<ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
<dialTemplate>dialplan.xml</dialTemplate>
</sipProfile>
<commonProfile>
<phonePassword>*0#</phonePassword>
<backgroundImageAccess>true</backgroundImageAccess>
<callLogBlfEnabled>2</callLogBlfEnabled>
</commonProfile>
<loadInformation></loadInformation>
<vendorConfig>
<disableSpeaker>false</disableSpeaker>
<disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
<forwardingDelay>1</forwardingDelay>
<pcPort>0</pcPort>
<settingsAccess>1</settingsAccess>
<garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
<videoCapability>0</videoCapability>
<autoSelectLineEnable>1</autoSelectLineEnable>
<webAccess>0</webAccess>
<daysDisplayNotActive>1,7</daysDisplayNotActive>
<displayOnTime>09:00</displayOnTime>
<displayOnDuration>12:00</displayOnDuration>
<displayIdleTimeout>01:00</displayIdleTimeout>
<spanToPCPort>1</spanToPCPort>
<loggingDisplay>2</loggingDisplay>
<loadServer>10.1.1.50</loadServer>
<recordingTone>0</recordingTone>
<recordingToneLocalVolume>100</recordingToneLocalVolume>
<recordingToneRemoteVolume>50</recordingToneRemoteVolume>
<recordingToneDuration></recordingToneDuration>
<displayOnWhenIncomingCall>0</displayOnWhenIncomingCall>
<rtcp>0</rtcp>
<moreKeyReversionTimer>5</moreKeyReversionTimer>
<autoCallSelect>1</autoCallSelect>
<logServer>10.1.1.50</logServer>
<g722CodecSupport>0</g722CodecSupport>
<headsetWidebandUIControl>0</headsetWidebandUIControl>
<handsetWidebandUIControl>0</handsetWidebandUIControl>
<headsetWidebandEnable>0</headsetWidebandEnable>
<handsetWidebandEnable>0</handsetWidebandEnable>
<peerFirmwareSharing>0</peerFirmwareSharing>
<enableCdpSwPort>1</enableCdpSwPort>
<enableCdpPcPort>1</enableCdpPcPort>
</vendorConfig>
<versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp>
<userLocale>
<name>Russian_Russian_Federation</name>
<langCode>ru_RU</langCode>
<version></version>
<winCharSet>utf-8</winCharSet>
</userLocale>
<networkLocale></networkLocale>
<networkLocaleInfo>
<name></name>
<version></version>
</networkLocaleInfo>
<deviceSecurityMode>1</deviceSecurityMode>
<idleTimeout>0</idleTimeout>
<authenticationURL></authenticationURL>
<directoryURL>http://10.1.1.50/provisioning/cisco-services.xml</directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<proxyServerURL></proxyServerURL>
<servicesURL>http://10.1.1.50/provisioning/cisco-services.xml</servicesURL>
<dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
<dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
<dscpForCm2Dvce>96</dscpForCm2Dvce>
<transportLayerProtocol>2</transportLayerProtocol>
<singleButtonBarge>0</singleButtonBarge>
<capfAuthMode>0</capfAuthMode>
<capfList><capf>
<phonePort>3804</phonePort>
<!-- <processNodeName>10.1.1.50</processNodeName> -->
</capf> </capfList>
<certHash></certHash>
<encrConfig>false</encrConfig>
<advertiseG722Codec>1</advertiseG722Codec>
</device>

D-లింక్ DPH-150S/F3

మీరు ఈ సిరీస్‌లో ఫోన్‌ని కొనుగోలు చేయబోతున్నట్లయితే, జాగ్రత్తగా ఉండండి, 150S/F3 పరికరాలలో మాత్రమే ఆటో-ట్యూనింగ్‌కు మద్దతు ఉంటుంది. నా చేతుల్లోకి వచ్చిన 150S/F2 పరికరంలో, నేను అలాంటి కార్యాచరణను కనుగొనలేదు.

కాన్ఫిగరేషన్ ఫైల్ xml లేదా సాదా టెక్స్ట్ ఫార్మాట్‌లో ఉండవచ్చు. xml కోసం ఒక అవసరం ఉంది: ట్యాగ్ తప్పనిసరిగా లైన్ ప్రారంభంలో ఉండాలి, లేకుంటే పార్సర్ దానిని విస్మరిస్తుంది మరియు సంబంధిత పరామితి యొక్క విలువ మారదు.

ఫోన్‌ను కాన్ఫిగర్ చేయడానికి రెండు ఫైల్‌లు ఉపయోగించబడతాయి. f0D00580000.cfg - అన్ని ఫోన్‌ల కోసం సెట్టింగ్‌లను నిల్వ చేయడానికి మరియు వ్యక్తిగత సెట్టింగ్‌ల కోసం 00112233aabb.cfg (చిన్న అక్షరంలో MAC చిరునామా). వ్యక్తిగత సెట్టింగ్‌లకు సహజంగానే అధిక ప్రాధాన్యత ఉంటుంది.

పూర్తి సెట్టింగుల సెట్లో వెయ్యి కంటే ఎక్కువ లైన్లు ఉన్నాయి, కాబట్టి కథనాన్ని అస్తవ్యస్తం చేయకుండా, నేను కనీస తగినంత సెట్టింగులను వివరిస్తాను.

రూట్ నోడ్ అవసరం VOIP_CONFIG_FILE మరియు నోడ్ దానిలో గూడు కట్టుకుంది వెర్షన్. పరికరంలో ప్రస్తుత సెట్టింగ్‌ల కంటే ఫైల్ వెర్షన్ ఎక్కువగా ఉంటే మాత్రమే సెట్టింగ్‌లు వర్తించబడతాయి. మీరు నిర్వహణ విభాగంలో (సిస్టమ్ మేనేజ్‌మెంట్) ఫోన్ యొక్క వెబ్ ఇంటర్‌ఫేస్ ద్వారా ఈ విలువను కనుగొనవచ్చు. ఫ్యాక్టరీ సెట్టింగ్‌లు ఉన్న ఫోన్‌ల కోసం, రెండు సందర్భాల్లో ఇది 2.0002. అదనంగా, వ్యక్తిగత ఫైల్ వెర్షన్ తప్పనిసరిగా షేర్ చేయబడిన ఫైల్ వెర్షన్ కంటే ఎక్కువగా ఉండాలి.

మొదట నేను అన్ని ఫోన్‌లకు సాధారణ కాన్ఫిగరేషన్‌తో ఫైల్‌ను అందిస్తాను. వాస్తవానికి, ఇది అన్ని సెట్టింగ్‌లను నిల్వ చేస్తుంది; వ్యక్తిగత ఫైల్ ఫోన్ నంబర్ మరియు స్క్రీన్‌పై ఉన్న శాసనానికి మాత్రమే బాధ్యత వహిస్తుంది.

దిగువన ఉన్న రెండు బ్లాక్‌లలో, టైమ్ జోన్ మరియు టైమ్ సింక్రొనైజేషన్ పారామితులు సెట్ చేయబడ్డాయి, RTP కోసం ప్రారంభ పోర్ట్ మరియు పరికరం యొక్క WAN మరియు LAN కనెక్టర్‌ల మధ్య నెట్‌వర్క్ వంతెన ప్రారంభించబడింది.

ఫ్రాగ్మెంట్ నం. 1

<GLOBAL_CONFIG_MODULE>
<WAN_Mode>DHCP</WAN_Mode>
<Default_Protocol>2</Default_Protocol>
<Enable_DHCP>1</Enable_DHCP>
<DHCP_Auto_DNS>1</DHCP_Auto_DNS>
<DHCP_Auto_Time>0</DHCP_Auto_Time>
<Host_Name>VOIP</Host_Name>
<RTP_Initial_Port>10000</RTP_Initial_Port>
<RTP_Port_Quantity>200</RTP_Port_Quantity>
<SNTP_Server>10.1.1.4</SNTP_Server>
<Enable_SNTP>1</Enable_SNTP>
<Time_Zone>71</Time_Zone>
<Time_Zone_Name>UCT_011</Time_Zone_Name>
<Enable_DST>0</Enable_DST>
<SNTP_Timeout>60</SNTP_Timeout>
<Default_UI>12</Default_UI>
<MTU_Length>1500</MTU_Length>
</GLOBAL_CONFIG_MODULE>
<LAN_CONFIG_MODULE>
<Enable_Bridge_Mode>1</Enable_Bridge_Mode>
<Enable_Port_Mirror>1</Enable_Port_Mirror>
</LAN_CONFIG_MODULE>

కాన్ఫిగరేషన్ పారామితుల యొక్క అసలు పేర్లు వాటిని వివరంగా వివరించకుండా ఉండటానికి తగినంత వివరణాత్మకంగా ఉంటాయి.
ఒక లైన్ కోసం SIP

<SIP_CONFIG_MODULE>
<SIP__Port>5060</SIP__Port>
<SIP_Line_List>
<SIP_Line_List_Entry>
<ID>SIP1</ID>
<Register_Addr>10.1.1.50</Register_Addr>
<Register_Port>5060</Register_Port>
<Register_TTL>3600</Register_TTL>
<Enable_Reg>1</Enable_Reg>
<Proxy_Addr>10.1.1.50</Proxy_Addr>
<DTMF_Mode>1</DTMF_Mode>
<DTMF_Info_Mode>0</DTMF_Info_Mode>
<VoiceCodecMap>G711A,G711U,G722</VoiceCodecMap>
</SIP_Line_List_Entry>
</SIP_Line_List>
</SIP_CONFIG_MODULE>

రిమోట్ కంట్రోల్ సెట్టింగ్‌లు

<MMI_CONFIG_MODULE>
<Telnet_Port>23</Telnet_Port>
<Web_Port>80</Web_Port>
<Web_Server_Type>0</Web_Server_Type>
<Https_Web_Port>443</Https_Web_Port>
<Remote_Control>1</Remote_Control>
<Enable_MMI_Filter>0</Enable_MMI_Filter>
<Telnet_Prompt></Telnet_Prompt>
<MMI_Filter>
<MMI_Filter_Entry>
<ID>Item1</ID>
<First_IP>10.1.1.152</First_IP>
<End_IP>10.1.1.160</End_IP>
</MMI_Filter_Entry>
</MMI_Filter>
<MMI_Account>
<MMI_Account_Entry>
<ID>Account1</ID>
<Name>admin</Name>
<Password>ADMIN_PWD</Password>
<Level>10</Level>
</MMI_Account_Entry>
<MMI_Account_Entry>
<ID>Account2</ID>
<Name>guest</Name>
<Password>GUEST_PWD</Password>
<Level>5</Level>
</MMI_Account_Entry>
</MMI_Account>
</MMI_CONFIG_MODULE>

ఫోన్ సెట్టింగ్స్

<PHONE_CONFIG_MODULE>
<Menu_Password>123</Menu_Password>
<KeyLock_Password>123</KeyLock_Password>
<Fast_Keylock_Code></Fast_Keylock_Code>
<Enable_KeyLock>0</Enable_KeyLock>
<Emergency_Call>112</Emergency_Call>
<LCD_Title>Company</LCD_Title>
<LCD_Constrast>5</LCD_Constrast>
<LCD_Luminance>1</LCD_Luminance>
<Backlight_Off_Time>30</Backlight_Off_Time>
<Enable_Power_LED>0</Enable_Power_LED>
<Time_Display_Style>0</Time_Display_Style>
<Enable_TimeDisplay>1</Enable_TimeDisplay>
<Alarm__Clock>0,,1</Alarm__Clock>
<Date_Display_Style>0</Date_Display_Style>
<Date_Separator>0</Date_Separator>
<Enable_Pre-Dial>1</Enable_Pre-Dial>
<Xml_PhoneBook>
<Xml_PhoneBook_Entry>
<ID>XML-PBook1</ID>
<Name>Phonebook</Name>
<Addr>http://10.1.1.50/provisioning/dlink-phonebook.xml</Addr>
<Auth>:</Auth>
<Policy>0</Policy>
<Sipline>0</Sipline>
</Xml_PhoneBook_Entry>
</Xml_PhoneBook>
<Phonebook_Groups>friend,home,work,business,classmate,colleague</Phonebook_Groups>
</PHONE_CONFIG_MODULE>

అన్ని ఇతర సెట్టింగ్‌లు "డిఫాల్ట్"గా ఉంటాయి. ఇప్పుడు నెట్‌వర్క్‌కి కనెక్ట్ చేయబడిన ఏదైనా Dlink ఫోన్ వెంటనే అందరికీ సాధారణ పారామితులను అంగీకరిస్తుంది. పరికరం కోసం వ్యక్తిగత పారామితులను సెట్ చేయడానికి, ప్రత్యేక ఫైల్ అవసరం. దీనిలో మీరు వ్యక్తిగత చందాదారులకు అవసరమైన సెట్టింగులను మాత్రమే పేర్కొనాలి.
చందాదారుల సెట్టింగ్‌లు

<?xml version="1.0" encoding="UTF-8"?>
<VOIP_CONFIG_FILE>
<version>2.0006</version>
<SIP_CONFIG_MODULE>
<SIP_Line_List>
<SIP_Line_List_Entry>
<ID>SIP1</ID>
<Display_Name>User #117</Display_Name>
<Phone_Number>117</Phone_Number>
<Register_Port>5060</Register_Port>
<Register_User>117</Register_User>
<Register_Pswd>SIP_PWD</Register_Pswd>
<Register_TTL>3600</Register_TTL>
<Enable_Reg>1</Enable_Reg>
<Proxy_Port>5060</Proxy_Port>
<Proxy_User>117</Proxy_User>
<Proxy_Pswd>SIP_PWD</Proxy_Pswd>
</SIP_Line_List_Entry>
</SIP_Line_List>
</SIP_CONFIG_MODULE>
</VOIP_CONFIG_FILE>

పానాసోనిక్ UT-KX123B

ఈ పరికరాలు కొద్దిగా భిన్నమైన పథకం ప్రకారం సెట్టింగ్‌లను స్వీకరిస్తాయి. కాన్ఫిగరేషన్ టెక్స్ట్ ఫైల్‌లలో నిల్వ చేయబడుతుంది. గరిష్ట కాన్ఫిగరేషన్ ఫైల్ పరిమాణం 120 KB. ఫైల్‌ల సంఖ్యతో సంబంధం లేకుండా, వాటి మొత్తం పరిమాణం 120 KB మించకూడదు.
కాన్ఫిగరేషన్ ఫైల్ పంక్తుల సమితిని కలిగి ఉంటుంది, ఇవి క్రింది షరతులకు లోబడి ఉంటాయి:

  • కింది వరుస అక్షరాల (44 బైట్లు)తో సహా మొదటి పంక్తి ఎల్లప్పుడూ వ్యాఖ్య పంక్తి:
    # పానాసోనిక్ SIP ఫోన్ స్టాండర్డ్ ఫార్మాట్ ఫైల్ #
    ఈ క్రమం యొక్క హెక్సాడెసిమల్ ప్రాతినిధ్యం:
    23 20 50 61 6E 61 73 6F 6E 69 63 20 53 49 50 20 50 68 6F 6E 65 20 53 74 61 6E 64 61 72 64 20 46 6 సి 72 6 61
    స్థాపించబడిన అక్షరాల క్రమానికి ప్రమాదవశాత్తూ మార్పులను నిరోధించడానికి, లైన్‌తో కాన్ఫిగరేషన్ ఫైల్‌ను ప్రారంభించమని సిఫార్సు చేయబడింది:
    # పానాసోనిక్ SIP ఫోన్ స్టాండర్డ్ ఫార్మాట్ ఫైల్ # ఈ లైన్‌ని మార్చవద్దు!
  • కాన్ఫిగరేషన్ ఫైల్‌లు తప్పనిసరిగా ఖాళీ లైన్‌తో ముగియాలి.
  • ప్రతి పంక్తి క్రమంతో ముగియాలి " ".
  • సీక్వెన్స్‌తో సహా గరిష్ట స్ట్రింగ్ పొడవు 537 బైట్‌లు " "
  • కింది పంక్తులు విస్మరించబడ్డాయి:
    • 537 బైట్ పరిమితిని మించిన పంక్తులు;
    • ఖాళీ పంక్తులు;
    • "#"తో ప్రారంభమయ్యే వ్యాఖ్య పంక్తులు;
  • ప్రతి పరామితి కోసం స్ట్రింగ్ XXX=“yyy” (XXX: పారామీటర్ పేరు, yyy: దాని విలువ) రూపంలో వ్రాయబడుతుంది. విలువ తప్పనిసరిగా డబుల్ కోట్‌లలో జతచేయబడాలి.
  • పరామితి పంక్తిని అనేక పంక్తులుగా విభజించడం అనుమతించబడదు. ఇది కాన్ఫిగరేషన్ ఫైల్‌ను ప్రాసెస్ చేయడంలో లోపం మరియు ఫలితంగా, ప్రారంభ వైఫల్యానికి దారి తీస్తుంది.
  • కొన్ని పారామితుల విలువలు ప్రతి పంక్తికి విడిగా పేర్కొనబడాలి. పేరులోని "_1" ప్రత్యయం ఉన్న పరామితి పంక్తి 1కి పరామితి; "_2"—పంక్తి 2 కోసం, మొదలైనవి.
  • పరామితి పేరు యొక్క గరిష్ట పొడవు 32 అక్షరాలు.
  • పరామితి విలువ యొక్క గరిష్ట పొడవు డబుల్ కోట్ అక్షరాలను మినహాయించి 500 అక్షరాలు.
  • విలువలో స్పేస్ అక్షరం ఉంటే తప్ప స్ట్రింగ్‌లో ఖాళీలు అనుమతించబడవు.
  • పరామితిని ఖాళీ విలువకు సెట్ చేయడానికి కొన్ని పరామితి విలువలను "ఖాళీ"గా పేర్కొనవచ్చు.
  • పారామితులు నిర్దిష్ట క్రమంలో పేర్కొనబడలేదు.
  • కాన్ఫిగరేషన్ ఫైల్‌లో ఒకే పరామితి ఒకటి కంటే ఎక్కువసార్లు పేర్కొనబడితే, ముందుగా పేర్కొన్న విలువ వర్తించబడుతుంది.

కాన్ఫిగరేషన్ ఫైల్ కోసం చాలా తీవ్రమైన అవసరాలు, స్పష్టంగా చెప్పాలంటే, నన్ను కలవరపెట్టాయి. నా అభిప్రాయం ప్రకారం, పానాసోనిక్ ఫోన్‌లలో నియంత్రణ సర్వర్‌తో పరస్పర చర్య అమలు చేయడం చాలా అసౌకర్యంగా ఉంది. ఈ పరామితిలో, ఫోన్ ఇతరులకు గణనీయంగా తక్కువగా ఉంటుంది.
మీరు పరికరాన్ని మొదటిసారిగా ఆన్ చేసినప్పుడు (లేదా దానిని ఫ్యాక్టరీ సెట్టింగ్‌లకు రీసెట్ చేసిన తర్వాత), అది ఉత్పత్తి ఫైల్ అని పిలవబడే దాన్ని లోడ్ చేయడానికి ప్రయత్నిస్తుంది (ఈ సందర్భంలో ఇది KX-UT123RU.cfg), ఇది దీనికి మార్గాలను కలిగి ఉండాలి మిగిలిన కాన్ఫిగరేషన్ ఫైళ్లు.
ఉత్పత్తి ఫైల్# పానాసోనిక్ SIP ఫోన్ స్టాండర్డ్ ఫార్మాట్ ఫైల్ # ఈ లైన్‌ని మార్చవద్దు!

CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"

దీని తరువాత, ఫోన్ తయారీని విజయవంతంగా పూర్తి చేయడం గురించి సందేశాన్ని ప్రదర్శిస్తుంది మరియు అది రీబూట్ అయ్యే వరకు వేచి ఉంటుంది. మరియు రీబూట్ చేసిన తర్వాత, దానికి కేటాయించిన కాన్ఫిగరేషన్ ఫైల్‌లను ప్రాసెస్ చేయడం ప్రారంభమవుతుంది.

master.cfg ఫైల్‌లో అన్ని ఫోన్‌ల కోసం సాధారణ సెట్టింగ్‌లను పేర్కొనమని సిఫార్సు చేయబడింది. Dlink మాదిరిగా, నేను కొన్ని పారామితులను మాత్రమే పేర్కొంటాను. మిగిలిన పారామితుల పేర్లు మరియు వాటి విలువలను తయారీదారు వెబ్‌సైట్‌లోని డాక్యుమెంటేషన్‌లో చూడవచ్చు.
master.cfg############################################### ###########
#సిస్టమ్ అమరికలను#
############################################### ###########
## లాగిన్ ఖాతా సెట్టింగ్‌లు
ADMIN_ID="అడ్మిన్"
ADMIN_PASS="ADMIN_PWD"
USER_ID="వినియోగదారు"
USER_PASS="USER_PWD"

## సిస్టమ్ సమయ సెట్టింగ్‌లు
NTP_ADDR="10.1.1.4"
TIME_ZONE="660"
DST_ENABLE="N"
DST_OFFSET="60"
DST_START_MONTH="3"
DST_START_ORDINAL_DAY="2"
DST_START_DAY_OF_WEEK="0"
DST_START_TIME="120"
DST_STOP_MONTH="10"
DST_STOP_ORDINAL_DAY="2"
DST_STOP_DAY_OF_WEEK="0"
DST_STOP_TIME="120"
LOCAL_TIME_ZONE_POSIX=""

## Syslog సెట్టింగ్‌లు
SYSLOG_ADDR="10.1.1.50"
SYSLOG_PORT="514"
SYSLOG_EVENT_SIP="6"
SYSLOG_EVENT_CFG="6"
SYSLOG_EVENT_VOIP="6"
SYSLOG_EVENT_TEL="6"

## ప్రొవిజనింగ్ సెట్టింగ్‌లు
OPTION66_ENABLE="Y"
OPTION66_REBOOT="N"
PROVISION_ENABLE="Y"
CFG_STANDARD_FILE_PATH="tftp://10.1.1.50/panasonic/{mac}.cfg"
CFG_PRODUCT_FILE_PATH="tftp://10.1.1.50/panasonic/KX-UT123RU.cfg"
CFG_MASTER_FILE_PATH="tftp://10.1.1.50/panasonic/master.cfg"

############################################### ###########
#నెట్వర్క్ అమరికలు#
############################################### ###########
## IP సెట్టింగ్‌లు
CONNECTION_TYPE="1"
HOST_NAME="UT123"
DHCP_DNS_ENABLE="Y"
STATIC_IP_ADDRESS=""
STATIC_SUBNET=""
STATIC_GATEWAY=""
USER_DNS1_ADDR=""
USER_DNS2_ADDR=""

## DNS సెట్టింగ్‌లు
DNS_QRY_PRLL="Y"
DNS_PRIORITY="N"
DNS1_ADDR="10.1.1.1"
DNS2_ADDR=""

## HTTP సెట్టింగ్‌లు
HTTPD_PORTOPEN_AUTO="Y"
HTTP_VER="1"
HTTP_USER_AGENT="Panasonic_{MODEL}/{fwver} ({mac})"
HTTP_SSL_VERIFY="0"
CFG_ROOT_CERTIFICATE_PATH=""

## XML అప్లికేషన్ సెట్టింగ్‌లు
XML_HTTPD_PORT="6666"
XMLAPP_ENABLE="Y"
XMLAPP_USERID=""
XMLAPP_USERPASS=""
XMLAPP_START_URL=""
XMLAPP_INITIAL_URL=" "
XMLAPP_INCOMING_URL=""
XMLAPP_TALKING_URL=""
XMLAPP_MAKECALL_URL=""
XMLAPP_CALLLOG_URL=""
XMLAPP_IDLING_URL=""
XMLAPP_LDAP_URL="10.1.1.50/provisioning/panasonic-phonebook.xml»
XMLAPP_LDAP_USERID=""
XMLAPP_LDAP_USERPASS=""

సాంప్రదాయకంగా, వ్యక్తిగత పరికర కాన్ఫిగరేషన్ ఫైల్‌లో చందాదారుల సెట్టింగ్‌లు మాత్రమే ఉంటాయి.
aabbccddeeff.cfgDISPLAY_NAME_1="వినియోగదారు #168"

PHONE_NUMBER_1="168"
SIP_URI_1="168"
LINE_ENABLE_1="ప్రారంభించబడింది"
PROFILE_ENABLE_1="ప్రారంభించబడింది"
SIP_AUTHID_1="168"
SIP_PASS_1="SIP_PWD"

గ్రాండ్‌స్ట్రీమ్ GXP-1400

ఈ ఫోన్‌ల పారామీటర్‌లు cfg{mac}.xml పేరుతో ఒక xml ఫైల్‌లో నిల్వ చేయబడతాయి. లేదా cfg{mac} పేరుతో సాదా వచనంలో. ఈ ఫోన్ వ్యక్తిగత కాన్ఫిగరేషన్ ఫైల్‌ను మాత్రమే అభ్యర్థిస్తుంది, కాబట్టి సెట్టింగ్‌లను సాధారణ ఫైల్‌కి తరలించడం ద్వారా వాటిని ఆప్టిమైజ్ చేయడం పని చేయదు. గ్రాండ్‌స్ట్రీమ్‌లను సెటప్ చేయడంలో మరొక లక్షణం పారామితుల పేరు. అవి అన్ని సంఖ్యలు మరియు P### గా నియమించబడ్డాయి. ఉదాహరణకి:

P1650 – ఫోన్ నిర్వహణ కోసం వెబ్ ఇంటర్‌ఫేస్‌కు బాధ్యత వహిస్తుంది (0 – HTTPS, 1 – HTTP)
P47 – కనెక్షన్ కోసం SIP సర్వర్ చిరునామా.

కాన్ఫిగరేషన్ టెక్స్ట్ ఫైల్‌లో నిల్వ చేయబడితే, పారామీటర్‌లకు ఎటువంటి గ్రూపింగ్ అవసరం లేదు మరియు ఏ క్రమంలో ఉంటాయి. #తో ప్రారంభమయ్యే పంక్తులు కామెంట్‌లుగా పరిగణించబడతాయి.

సెట్టింగులు xml ఆకృతిలో ప్రదర్శించబడితే, అవి తప్పనిసరిగా నోడ్‌లో గూడు కట్టబడి ఉండాలి , ఇది తప్పనిసరిగా గూడులో ఉండాలి . అన్ని పారామితులు లోపల పరామితి విలువతో సంబంధిత ట్యాగ్‌ల రూపంలో వ్రాయబడతాయి.
ఉదాహరణ సెట్ చేయడం

1.0 8 1 1 SIP_PWD వినియోగదారు # 271 1 271 270 109 ADMIN_PWD USER_PWD రు 270 35/గ్రాండ్ స్ట్రీమ్ 109 TZc-35 36 109 http://36/provisioning/grandstream ముప్పై

Yealink T19 మరియు T21

ఈ నమూనాల పరికరాలు పరికరాల కోసం వ్యక్తిగత కాన్ఫిగరేషన్ ఫైల్‌లకు మరియు మోడల్‌ల కోసం సాధారణమైన వాటికి మద్దతు ఇస్తాయి. నా విషయంలో, నేను సాధారణ పారామితులను వరుసగా y000000000031.cfg మరియు y000000000034.cfg ఫైల్‌లలో ఉంచాలి. వ్యక్తిగత కాన్ఫిగరేషన్ ఫైల్‌లు MAC చిరునామా ప్రకారం పేరు పెట్టబడ్డాయి: 00112233aabb.cfg.

Yealinks కోసం సెట్టింగ్‌లు టెక్స్ట్ ఫార్మాట్‌లో నిల్వ చేయబడతాయి. మొదటి పంక్తిలో #!వెర్షన్:1.0.0.1 ఫార్మాట్‌లో ఫైల్ వెర్షన్ ఉండటం మాత్రమే తప్పనిసరి అవసరాలు.

అన్ని పారామితులు పారామీటర్ = విలువ రూపంలో వ్రాయబడ్డాయి. వ్యాఖ్యలు తప్పనిసరిగా "#" అక్షరంతో ప్రారంభం కావాలి. పారామితుల పేర్లు మరియు వాటి విలువలను తయారీదారు వెబ్‌సైట్‌లోని డాక్యుమెంటేషన్‌లో చూడవచ్చు.
సాధారణ సెట్టింగులు#!వెర్షన్:1.0.0.1
#WAN పోర్ట్ రకాన్ని కాన్ఫిగర్ చేయండి; 0-DHCP (డిఫాల్ట్), 1-PPPoE, 2-స్టాటిక్ IP చిరునామా;
network.internet_port.type = 0
#PC పోర్ట్ రకాన్ని కాన్ఫిగర్ చేయండి; 0-రూటర్, 1-బ్రిడ్జ్ (డిఫాల్ట్);
network.bridge_mode = 1
#వెబ్ సర్వర్ యాక్సెస్ రకాన్ని కాన్ఫిగర్ చేయండి; 0-డిసేబుల్, 1-HTTP & HTTPS(డిఫాల్ట్), 2-HTTP మాత్రమే, 3-HTTPS మాత్రమే;
network.web_server_type = 3
#గరిష్ట స్థానిక RTP పోర్ట్‌ను కాన్ఫిగర్ చేయండి. ఇది 0 నుండి 65535 వరకు ఉంటుంది, డిఫాల్ట్ విలువ 11800.
network.port.max_rtpport = 10100
#కనీస స్థానిక RTP పోర్ట్‌ను కాన్ఫిగర్ చేయండి. ఇది 0 నుండి 65535 వరకు ఉంటుంది, డిఫాల్ట్ విలువ 11780.
network.port.min_rtpport = 10000
security.user_name.admin = రూట్
security.user_password = రూట్:ADMIN_PWD
security.user_name.user = వినియోగదారు
security.user_password = వినియోగదారు:USER_PWD
#వెబ్ భాషని పేర్కొనండి, చెల్లుబాటు అయ్యే విలువలు: ఇంగ్లీష్, చైనీస్_S, టర్కిష్, పోర్చుగీస్, స్పానిష్, ఇటాలియన్, ఫ్రెంచ్, రష్యన్, డ్యూచ్ మరియు చెక్.
lang.wui = రష్యన్
#LCD భాషను పేర్కొనండి, చెల్లుబాటు అయ్యే విలువలు: ఇంగ్లీష్ (డిఫాల్ట్), చైనీస్_S, చైనీస్_T, జర్మన్, ఫ్రెంచ్, టర్కిష్, ఇటాలియన్, పోలిష్, స్పానిష్ మరియు పోర్చుగీస్.
lang.gui = రష్యన్
#టైమ్ జోన్ మరియు టైమ్ జోన్ పేరును కాన్ఫిగర్ చేయండి. సమయ క్షేత్రం -11 నుండి +12 వరకు ఉంటుంది, డిఫాల్ట్ విలువ +8.
#డిఫాల్ట్ టైమ్ జోన్ పేరు చైనా (బీజింగ్).
#మరిన్ని అందుబాటులో ఉన్న టైమ్ జోన్‌లు మరియు టైమ్ జోన్ పేర్ల కోసం Yealink IP ఫోన్‌ల యూజర్ గైడ్‌ని చూడండి.
local_time.time_zone = +11
local_time.time_zone_name = వ్లాడివోస్టాక్
#NTP సర్వర్ యొక్క డొమైన్ పేరు లేదా IP చిరునామాను కాన్ఫిగర్ చేయండి. డిఫాల్ట్ విలువ cn.pool.ntp.org.
local_time.ntp_server1 = 10.1.1.4
#LCD స్క్రీన్ యొక్క లోగో మోడ్‌ను కాన్ఫిగర్ చేయండి; 0-డిసేబుల్ (డిఫాల్ట్), 1-సిస్టమ్ లోగో, 2-కస్టమ్ లోగో;
phone_setting.lcd_logo.mode = 1
#రిమోట్ ఫోన్‌బుక్ యొక్క యాక్సెస్ URL మరియు డిస్పాలీ పేరును కాన్ఫిగర్ చేయండి. X 1 నుండి 5 వరకు ఉంటుంది.
remote_phonebook.data.1.url = 10.1.1.50/provisioning/yealink-phonebook.xml
remote_phonebook.data.1.name = ఫోన్‌బుక్
features.remote_phonebook.flash_time = 3600

వ్యక్తిగత సెట్టింగులు#!వెర్షన్:1.0.0.1
#ఖాతా1, 0-డిసేబుల్ (డిఫాల్ట్), 1-ప్రారంభించబడినది ప్రారంభించండి లేదా నిలిపివేయండి;
account.1.enable = 1
ఖాతా1 కోసం LCD స్క్రీన్‌పై ప్రదర్శించబడే లేబుల్‌ను #కాన్ఫిగర్ చేయండి.
account.1.label = టెస్ట్ ఫోన్
#ఖాతా1 యొక్క ప్రదర్శన పేరును కాన్ఫిగర్ చేయండి.
account.1.display_name = వినియోగదారు 998
#రిజిస్టర్ ప్రామాణీకరణ కోసం వినియోగదారు పేరు మరియు పాస్‌వర్డ్‌ను కాన్ఫిగర్ చేయండి.
account.1.auth_name = 998
account.1.password = 998
#రిజిస్టర్ యూజర్ పేరును కాన్ఫిగర్ చేయండి.
account.1.user_name = 998
#SIP సర్వర్ చిరునామాను కాన్ఫిగర్ చేయండి.
account.1.sip_server_host = 10.1.1.50
#SIP సర్వర్ కోసం పోర్ట్‌ను పేర్కొనండి. డిఫాల్ట్ విలువ 5060.
account.1.sip_server_port = 5060

ఫలితంగా, నేను పేర్కొన్న ఫోన్‌లలో అందించిన అద్భుతమైన ఆటో-ప్రొవిజన్ ఫంక్షన్‌కు ధన్యవాదాలు, కొత్త పరికరాలను నెట్‌వర్క్‌కు కనెక్ట్ చేయడంలో సమస్యలు లేవు. ఫోన్ యొక్క MAC చిరునామాను కనుగొనడం మరియు టెంప్లేట్‌ని ఉపయోగించి కాన్ఫిగరేషన్ ఫైల్‌ను రూపొందించడం వరకు ఇవన్నీ వచ్చాయి.

మీరు చివరి వరకు చదివారని మరియు మీరు చదివిన దాని నుండి ప్రయోజనం పొందారని నేను ఆశిస్తున్నాను.

మీ దృష్టిని ధన్యవాదాలు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి