import pyodbc ## GENERAL CONFIG ## ##YOU HAVE TO MODIFY THIS# hostname='localhost'; username='databaseuser' password='password' database='asterisk' siptable='sippeers' ##we generate a connectionstring #connectionstring='DRIVER={MySQL};SERVER='+hostname+';DATABASE='+database+';UID='+username+';PWD='+password ## or define one yourself connectionstring='DSN=asteriskconnector' ## PJSIP SETTINGS ## qualify_timeout=60; minimum_expiration=90; maximum_expiration=900; remove_existing="no"; transport="default_transport"; max_contacts="1"; ####FOLLOWING FIELDS DON'T GET FILLED FROM CHAN_SIP #### ''' external_media_address` ice_support` identify_by send_diversion 100rel aggregate_mwi` use_avpf` media_encryption named_call_group named_pickup_group t38_udptl` t38_udptl_ec t38_udptl_maxdatagram` t38_udptl_nat` t38_udptl_ipv6 tone_zone` one_touch_recording` record_on_feature` record_off_feature` rtp_engine` sdp_owner` sdp_session` tos_audio` varchar(10) tos_video` varchar(10) sub_min_expiry` mwi_from_user` dtls_verify` dtls_rekey` dtls_cert_file` dtls_private_key` dtls_cipher` dtls_ca_file` dtls_ca_path` dtls_setup srtp_tag_32` media_address` redirect_method` enum('user','uri_core','uri_pjsip') cos_audio` cos_video` message_context` force_avp` media_use_received_transport` media_encryption_optimistic` ''' ##HELPER FUNCTION THAT TURNS A NULL INTO EMPTY STRING def xstr(s): if s is None: return '' return str(s) ## CONNECTING TO THE DATABASE AN LOADING ALL THE PEERS conn=pyodbc.connect(connectionstring) readcursor=conn.cursor() readcursor.execute("select *,`session-minse` as sessionminse,`session-expires` as sessionexpires,`session-timers` as sessiontimers from "+siptable+";") sippeers=readcursor.fetchall() for sippeer in sippeers: print("You are converting "+xstr(sippeer.name)) ##START CONVERTING DIRECT MEDIA## direct_media = [sippeer.directmedia,'no'][sippeer.directmedia is None] disable_direct_media_on_nat = ['no','yes'][sippeer.directmedia is 'nonat'] direct_media_method = ['',sippeer.directmedia][sippeer.directmedia is 'update'] directed_media_glare_mitigation = ['',sippeer.directmedia][sippeer.directmedia is 'outgoing'] ##END CONVERTING DIRECTMEDIA## ##CONVERT CREDENTIALS $OUTBOUND_AUTH IS THE NAME OF THE AUTHSECTION## outbound_auth=''; if (sippeer.secret is not None): password=sippeer.secret; auth_type="userpass"; outbound_auth=sippeer.name; if (sippeer.md5secret is not None): md5_cred=sippeer.md5secret; auth_type="md5cred"; outbound_auth=sippeer.name; ## END CONVERTING CREDENTIALS ## ##CONVERT DTMF-MODE## dtmf_mode=[xstr(sippeer.dtmfmode),'rfc4733'][sippeer.dtmfmode=='rfc2833']; ## END CONVERT DTMF-MODE ## ##CONVERT NAT## nat= sippeer.nat.split("," ); force_rport='no'; rewrite_contact='no'; rtp_symmetric='no'; if 'yes' in nat: rewrite_contact='yes'; rtp_symmetric='yes'; if 'comedia' in nat: rtp_symmetric='yes'; if 'force_rport' in nat: rewrite_contact='yes'; force_rport='yes'; ##START CONVERT MAILBOXES## mailboxesENDPOINT=[sippeer.mailbox,''][sippeer.subscribemwi is not 'yes'] mailboxesAOR=['',sippeer.mailbox][sippeer.subscribemwi is 'yes'] ##END CONVERT MAILBOXES## ##START CONVERSION SEND_RPID## send_rpid='no'; send_pai='no'; send_rpid=['no','yes'][sippeer.sendrpid is 'yes' or sippeer.sendrpid is 'rpid'] send_pai=['no','yes'][sippeer.sendrpid is 'pai' ] ##END CONVERSION SEND_RPID## ##START CONVERSION TIMERS## timers='yes'; sessionminse=sippeer.sessionminse; sessionexpires=sippeer.sessionexpires; if sippeer.sessiontimers is 'originate': timers='always'; if sippeer.sessiontimers is 'accept': timers='required'; if sippeer.sessiontimers is 'never': timers='no'; if sippeer.sessionminse <90: sessionminse=90 if sessionexpires