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, 'sipserver_server') |
||
22 | |||
23 | def pj_log(level, msg, length): |
||
0 ignored issues
–
show
Unused Code
introduced
by
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 |