Completed
Push — master ( 0bc61b...16fc24 )
by Thomas
8s
created

doorpi/sipphone/pjsua_lib/Config.py (1 issue)

1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3
4
import logging
5
logger = logging.getLogger(__name__)
6
logger.debug("%s loaded", __name__)
7
8
import doorpi
9
import pjsua as pj
10
11
SIPPHONE_SECTION = 'SIP-Phone'
12
conf = doorpi.DoorPi().config
13
14
def call_timeout():
15
    return conf.get_int(SIPPHONE_SECTION, 'call_timeout', 30)
16
17
def max_call_time():
18
    return conf.get_int(SIPPHONE_SECTION, 'max_call_time', 120)
19
20
def sipphone_server():
21
    return conf.get(SIPPHONE_SECTION, 'server')
22
23
def pj_log(level, msg, length):
0 ignored issues
show
The argument length seems to be unused.
Loading history...
24
    # beautify output - remove date / time an line break
25
    length_date_and_time = len('15:22:35.695 ')
26
    length_linebreak = len('\n')
27
    msg = str(msg[length_date_and_time:-length_linebreak])
28
    # now it's a beautiful msg
29
    if level == 4: logger.trace("PJ: %s",msg)
30
    if level == 3: logger.debug("PJ: %s",msg)
31
    if level == 2: logger.info("PJ: %s",msg)
32
    if level == 1: logger.warning("PJ: %s",msg)
33
    if level == 0: logger.error("PJ: %s",msg)
34
35
def create_UAConfig():
36
    logger.debug("create_UAConfig")
37
    # Doc: http://www.pjsip.org/python/pjsua.htm#UAConfig
38
    UAConfig = pj.UAConfig()
39
    UAConfig.max_calls = conf.get_int(SIPPHONE_SECTION, 'ua.max_calls', 1)
40
    UAConfig.nameserver = conf.get_list(SIPPHONE_SECTION, 'ua.nameserver', [])
41
    UAConfig.stun_domain = conf.get(SIPPHONE_SECTION, 'ua.stun_domain', '')
42
    UAConfig.stun_host = conf.get(SIPPHONE_SECTION, 'ua.stun_host', '')
43
    UAConfig.user_agent = 'DoorPi'
44
    return UAConfig
45
46
def create_MediaConfig():
47
    logger.debug("create_MediaConfig")
48
    # Doc: http://www.pjsip.org/python/pjsua.htm#MediaConfig
49
    MediaConfig = pj.MediaConfig()
50
    MediaConfig.audio_frame_ptime = conf.get_int(SIPPHONE_SECTION, 'media.audio_frame_ptime', 20)
51
    MediaConfig.channel_count = conf.get_int(SIPPHONE_SECTION, 'media.channel_count', 1)
52
    MediaConfig.clock_rate = conf.get_int(SIPPHONE_SECTION, 'media.clock_rate', 8000)
53
    MediaConfig.ec_options = conf.get_int(SIPPHONE_SECTION, 'media.ec_options', 0)
54
    MediaConfig.ec_tail_len = conf.get_int(SIPPHONE_SECTION, 'media.ec_tail_len', 1024)
55
    MediaConfig.enable_ice = conf.get_bool(SIPPHONE_SECTION, 'media.enable_ice', True)
56
    MediaConfig.enable_turn = conf.get_bool(SIPPHONE_SECTION, 'media.enable_turn', False)
57
    MediaConfig.ilbc_mode = conf.get_int(SIPPHONE_SECTION, 'media.ilbc_mode', 30)
58
    MediaConfig.jb_max = conf.get_int(SIPPHONE_SECTION, 'media.jb_max', -1)
59
    MediaConfig.jb_min = conf.get_int(SIPPHONE_SECTION, 'media.jb_min', -1)
60
    MediaConfig.max_media_ports = conf.get_int(SIPPHONE_SECTION, 'media.max_media_ports', 32)
61
    MediaConfig.no_vad = conf.get_bool(SIPPHONE_SECTION, 'media.no_vad', False)
62
    MediaConfig.ptime = conf.get_int(SIPPHONE_SECTION, 'media.ptime', 0)
63
    MediaConfig.quality = conf.get_int(SIPPHONE_SECTION, 'media.quality', 10)
64
    MediaConfig.rx_drop_pct = conf.get_int(SIPPHONE_SECTION, 'media.rx_drop_pct', 0)
65
    MediaConfig.snd_auto_close_time = conf.get_int(SIPPHONE_SECTION, 'media.snd_auto_close_time', 5)
66
    MediaConfig.snd_clock_rate = conf.get_int(SIPPHONE_SECTION, 'media.snd_clock_rate', 0)
67
    MediaConfig.turn_conn_type = conf.get_int(SIPPHONE_SECTION, 'media.turn_conn_type', 17)
68
    #TODO: string to http://www.pjsip.org/python/pjsua.htm#AuthCred
69
    MediaConfig.turn_cred = None
70
    MediaConfig.turn_server = conf.get(SIPPHONE_SECTION, 'media.turn_server', '')
71
    MediaConfig.tx_drop_pct = conf.get_int(SIPPHONE_SECTION, 'media.tx_drop_pct', 0)
72
    return MediaConfig
73
74
def create_LogConfig():
75
    logger.debug("create_LogConfig")
76
    # Doc: http://www.pjsip.org/python/pjsua.htm#LogConfig
77
    LogConfig = pj.LogConfig(
78
        callback = pj_log,
79
        level = conf.get_int(SIPPHONE_SECTION, 'log.level', 1),
80
        console_level = conf.get_int(SIPPHONE_SECTION, 'log.console_level', 1)
81
    )
82
    return LogConfig
83
84
def create_AccountConfig():
85
    logger.debug("create_AccountConfig")
86
    # Doc: http://www.pjsip.org/python/pjsua.htm#AccountConfig
87
    server = conf.get(SIPPHONE_SECTION, "sipserver_server")
88
    username = conf.get(SIPPHONE_SECTION, "sipserver_username")
89
    password = conf.get(SIPPHONE_SECTION, "sipserver_password")
90
    realm = conf.get(SIPPHONE_SECTION, "sipserver_realm")
91
92
    AccountConfig = pj.AccountConfig()
93
    AccountConfig.id = "sip:" + username + "@" + server
94
    AccountConfig.reg_uri = "sip:" + server
95
    AccountConfig.auth_cred = [ pj.AuthCred(realm, username, password) ]
96
    AccountConfig.allow_contact_rewrite = conf.get_bool(SIPPHONE_SECTION, 'account.allow_contact_rewrite', 0)
97
    AccountConfig.reg_timeout = conf.get_int(SIPPHONE_SECTION, 'account.reg_timeout', 10)
98
99
    return AccountConfig
100
101
def create_TransportConfig():
102
    logger.debug("create_TransportConfig")
103
    # Doc: http://www.pjsip.org/python/pjsua.htm#TransportConfig
104
    TransportConfig = pj.TransportConfig(
105
        port = conf.get_int(SIPPHONE_SECTION, 'transport.port', 0),
106
        bound_addr = conf.get(SIPPHONE_SECTION, 'transport.bound_addr', ''),
107
        public_addr = conf.get(SIPPHONE_SECTION, 'transport.public_addr', '')
108
    )
109
    return TransportConfig
110