csd 0.1.18 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/ai +22 -1
- data/bin/ttai +47 -0
- data/csd.gemspec +15 -6
- data/lib/csd.rb +75 -16
- data/lib/csd/application/decklink/base.rb +2 -2
- data/lib/csd/application/default.rb +2 -3
- data/lib/csd/application/default/base.rb +5 -2
- data/lib/csd/application/i2conf.rb +28 -0
- data/lib/csd/application/i2conf/about.yml +8 -0
- data/lib/csd/application/i2conf/base.rb +215 -0
- data/lib/csd/application/i2conf/config_example.rb +22 -0
- data/lib/csd/application/i2conf/options/common.rb +11 -0
- data/lib/csd/application/i2conf/options/common_defaults.rb +4 -0
- data/lib/csd/application/i2conf/options/install.rb +10 -0
- data/lib/csd/application/i2conf/options/install_defaults.rb +4 -0
- data/lib/csd/application/minisip.rb +8 -12
- data/lib/csd/application/minisip/about.yml +12 -4
- data/lib/csd/application/minisip/base.rb +40 -1
- data/lib/csd/application/minisip/component.rb +2 -0
- data/lib/csd/application/minisip/component/core.rb +13 -6
- data/lib/csd/application/minisip/component/gnome.rb +1 -0
- data/lib/csd/application/minisip/component/network.rb +95 -0
- data/lib/csd/application/minisip/component/plugins.rb +1 -1
- data/lib/csd/application/minisip/options/{compile.rb → install.rb} +4 -0
- data/lib/csd/application/minisip/options/{compile_defaults.rb → install_defaults.rb} +2 -1
- data/lib/csd/application/minisip/phonebook_example.rb +41 -12
- data/lib/csd/application/minisip/unix.rb +24 -17
- data/lib/csd/application/minisip/unix/linux/debian.rb +13 -5
- data/lib/csd/application/minisip/unix/linux/debian/ubuntu10.rb +3 -2
- data/lib/csd/applications.rb +1 -1
- data/lib/csd/commands.rb +23 -5
- data/lib/csd/extensions/gem/platform.rb +12 -0
- data/lib/csd/options_parser.rb +31 -11
- data/test/application/test_minisip.rb +63 -6
- data/test/functional/test_options.rb +82 -3
- metadata +19 -8
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
module CSD
|
4
|
+
module Application
|
5
|
+
module I2conf
|
6
|
+
|
7
|
+
CONFIG_EXAMPLE = %{
|
8
|
+
<interface>eth0</interface>
|
9
|
+
<use_udp>true</use_udp>
|
10
|
+
<use_tcp>false</use_tcp>
|
11
|
+
<sip_identity>
|
12
|
+
<uri>mcu@carenet-se.se</uri>
|
13
|
+
<local_port>5060</local_port>
|
14
|
+
<register>true</register>
|
15
|
+
<username>mcu</username>
|
16
|
+
<password>YOURPASSWORD</password>
|
17
|
+
<realm>carenet-se.se</realm>
|
18
|
+
</sip_identity>}
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
opts.headline 'WORKING DIRECTORY OPTIONS'.green.bold
|
4
|
+
|
5
|
+
opts.on("--no-temp", "Use a subdirectory in the current directory as working directory and not /tmp.") do |value|
|
6
|
+
self.temp = value
|
7
|
+
end
|
8
|
+
|
9
|
+
opts.on("--work-dir [PATH]", "Defines and/or creates the working directory. This will override the --no-temp option.") do |value|
|
10
|
+
self.work_dir = value
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
# This file gets eval'ed by the global options parser in lib/csd/options_parser
|
3
|
+
|
4
|
+
opts.on("--no-apt-get","Don't run any apt-get commands") do |value|
|
5
|
+
self.apt_get = value
|
6
|
+
end
|
7
|
+
|
8
|
+
opts.on("--no-minisip","Don't install the MiniSIP libraries (needed by i2conf)") do |value|
|
9
|
+
self.minisip = value
|
10
|
+
end
|
@@ -54,19 +54,15 @@ module CSD
|
|
54
54
|
# 32 bit
|
55
55
|
UI.debug "#{self}.instance supports Linux (32 bit)"
|
56
56
|
UI.debug "#{self}.instance analyzes the Linux kernel release #{Gem::Platform.local.kernel_release.to_s.enquote}"
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
# Any other Linux (currently only Debian is supported)
|
66
|
-
UI.debug "#{self}.instance supports Debian"
|
67
|
-
Debian.new
|
57
|
+
if Gem::Platform.local.ubuntu_10?
|
58
|
+
# Ubuntu 10.04
|
59
|
+
UI.debug "#{self}.instance supports Ubuntu 10.04"
|
60
|
+
Ubuntu10.new
|
61
|
+
else
|
62
|
+
# Any other Linux (currently only Debian is supported)
|
63
|
+
UI.debug "#{self}.instance supports Debian"
|
64
|
+
Debian.new
|
68
65
|
end
|
69
|
-
|
70
66
|
else
|
71
67
|
# 64 bit
|
72
68
|
UI.debug "#{self}.instance found the architecture to be other than 'x86', but 64 bit is not supported"
|
@@ -1,14 +1,22 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
1
2
|
human: MiniSIP
|
2
3
|
description: An open-source SIP client for high-definition video conferencing.
|
3
4
|
actions:
|
4
5
|
public:
|
5
6
|
#- show: Shows further information about MiniSIP
|
6
7
|
#- download: Downloads MiniSIP components (e.g. source code, configurations, docs,...)
|
7
|
-
-
|
8
|
-
#- package: Downloads, compiles and packages MiniSIP from scratch
|
8
|
+
- install: Downloads and compiles MiniSIP from scratch
|
9
9
|
#- install: Installs an application
|
10
|
-
#- check: Checks whether the environment dependencies for the application are satisfied
|
11
10
|
developer:
|
11
|
+
- check: Checks whether the environment dependencies for MiniSIP are satisfied
|
12
|
+
- package: Downloads, compiles and packages MiniSIP from scratch
|
12
13
|
#- publish: Submits a compiled package to the CSD package repository
|
13
14
|
scopes:
|
14
|
-
|
15
|
+
install:
|
16
|
+
- core: Install only the Core component of MiniSIP
|
17
|
+
- ffmpeg: Install only the FFmpeg component of MiniSIP
|
18
|
+
- gnome: Install only the GNOME component of MiniSIP
|
19
|
+
- hdviper: Install only the HDVIPER component of MiniSIP
|
20
|
+
- network: Install only the Network component of MiniSIP
|
21
|
+
- plugins: Install only the Plugins component of MiniSIP
|
22
|
+
- x264: Install only the x264 component of MiniSIP
|
@@ -15,6 +15,13 @@ module CSD
|
|
15
15
|
super
|
16
16
|
define_relative_paths
|
17
17
|
end
|
18
|
+
|
19
|
+
# Running the install task.
|
20
|
+
# Currently this corresponds to the compile task.
|
21
|
+
#
|
22
|
+
def install
|
23
|
+
compile
|
24
|
+
end
|
18
25
|
|
19
26
|
# Running the compile task.
|
20
27
|
#
|
@@ -27,6 +34,31 @@ module CSD
|
|
27
34
|
def package
|
28
35
|
UI.error 'Currently not supported for this platform. Sorry.'
|
29
36
|
end
|
37
|
+
|
38
|
+
# Running the check task.
|
39
|
+
#
|
40
|
+
def check
|
41
|
+
UI.error 'Currently not supported for this platform. Sorry.'
|
42
|
+
end
|
43
|
+
|
44
|
+
# Determines which components of MiniSIP should be processed, because the scope parameter might be set
|
45
|
+
# by the user, requesting for only a particular component.
|
46
|
+
#
|
47
|
+
def components
|
48
|
+
Options.scope ? [Options.scope] : Options.scopes_names
|
49
|
+
end
|
50
|
+
|
51
|
+
# Determine whether all components should be processed or not.
|
52
|
+
#
|
53
|
+
def all_components?
|
54
|
+
components == Options.scopes_names
|
55
|
+
end
|
56
|
+
|
57
|
+
# Determines whether a particular component should be processed.
|
58
|
+
#
|
59
|
+
def component?(name)
|
60
|
+
components.include? name
|
61
|
+
end
|
30
62
|
|
31
63
|
# This methods prints general information about this application module.
|
32
64
|
#
|
@@ -50,6 +82,7 @@ module CSD
|
|
50
82
|
# Defines all paths ever needed for the MiniSIP module based on the working directory.
|
51
83
|
#
|
52
84
|
def define_relative_paths
|
85
|
+
UI.debug "#{self.class}#define_relative_paths defines relative MiniSIP paths now"
|
53
86
|
if Options.this_user
|
54
87
|
Path.build = Pathname.new(File.join(Path.work, 'build'))
|
55
88
|
else
|
@@ -68,7 +101,7 @@ module CSD
|
|
68
101
|
Path.build_share_aclocal = Pathname.new(File.join(Path.build_share, 'aclocal'))
|
69
102
|
Path.giomm_header = Pathname.new(File.join('/', 'usr', 'include', 'giomm-2.4', 'giomm.h'))
|
70
103
|
Path.giomm_header_backup = Pathname.new(File.join('/', 'usr', 'include', 'giomm-2.4', 'giomm.h.ai-backup'))
|
71
|
-
Path.repository = Pathname.new(File.join(Path.work, '
|
104
|
+
Path.repository = Pathname.new(File.join(Path.work, 'minisip'))
|
72
105
|
Path.repository_libminisip_rules = Pathname.new(File.join(Path.repository, 'libminisip', 'debian', 'rules'))
|
73
106
|
Path.repository_libminisip_rules_backup = Pathname.new(File.join(Path.repository, 'libminisip', 'debian', 'rules.ai-backup'))
|
74
107
|
Path.repository_grabber = Pathname.new(File.join(Path.repository, 'libminisip', 'source', 'subsystem_media', 'video', 'grabber'))
|
@@ -95,6 +128,12 @@ module CSD
|
|
95
128
|
Path.minisip_gnome_pixmap = Pathname.new(File.join('/', 'usr', 'share', 'pixmaps', 'minisip_gnome.png'))
|
96
129
|
Path.minisip_desktop_entry = Pathname.new(File.join('/', 'usr', 'share', 'applications', 'minisip.desktop'))
|
97
130
|
Path.phonebook = Pathname.new(File.join(ENV['HOME'], '.minisip.addr'))
|
131
|
+
Path.realtek_firmware = Pathname.new(File.join(Path.work, 'realtek'))
|
132
|
+
Path.intel_firmware = Pathname.new(File.join(Path.work, 'intel'))
|
133
|
+
Path.intel_firmware_src = Pathname.new(File.join(Path.intel_firmware, 'src'))
|
134
|
+
Path.sysctl_conf = Pathname.new(File.join('/', 'etc', 'sysctl.conf'))
|
135
|
+
Path.sysctl_conf_backup = Pathname.new(File.join('/', 'etc', 'sysctl.conf.ai-backup'))
|
136
|
+
Path.new_sysctl_conf = Pathname.new(File.join(Path.work, 'sysctl.conf'))
|
98
137
|
end
|
99
138
|
|
100
139
|
end
|
@@ -41,7 +41,7 @@ module CSD
|
|
41
41
|
def remove_ffmpeg
|
42
42
|
ffmpeg_available = Cmd.run('ffmpeg -h', :internal => true, :die_on_failure => false).success?
|
43
43
|
return if Options.ffmpeg_first or !Options.configure or !libraries.include?('libminisip') or !ffmpeg_available
|
44
|
-
UI.debug "
|
44
|
+
UI.debug "MILESTONE_removing_ffmpeg"
|
45
45
|
if Gem::Platform.local.debian?
|
46
46
|
# Note that FFmpeg must have been installed via apt-get or via the AI in order for this to work,
|
47
47
|
# because manual compilations of FFmpeg cannot be removed automatically
|
@@ -50,7 +50,7 @@ module CSD
|
|
50
50
|
Cmd.run "sudo apt-get remove ffmpeg --yes", :announce_pwd => false
|
51
51
|
else
|
52
52
|
# On other linux distributions we don't know how to remove ffmpeg
|
53
|
-
UI.debug "
|
53
|
+
UI.debug "MILESTONE_cannot_remove_ffmpeg"
|
54
54
|
raise Error::Minisip::Core::FFmpegInstalled, "Please remove ffmpeg from your system first, or run the #{CSD.executable} with --no-configure" unless Options.testmode
|
55
55
|
end
|
56
56
|
end
|
@@ -143,10 +143,11 @@ module CSD
|
|
143
143
|
#
|
144
144
|
def compile_libraries
|
145
145
|
create_build_dir
|
146
|
+
UI.debug "MILESTONE_processing_libraries"
|
146
147
|
libraries.each do |library|
|
147
148
|
directory = Pathname.new(File.join(Path.repository, library))
|
148
149
|
if Cmd.cd(directory, :internal => true).success? or Options.reveal
|
149
|
-
UI.debug "
|
150
|
+
UI.debug "MILESTONE_processing_#{library}"
|
150
151
|
UI.info "Processing MiniSIP -> #{library}".green.bold
|
151
152
|
bootstrap
|
152
153
|
configure library
|
@@ -192,14 +193,20 @@ module CSD
|
|
192
193
|
def configure!(name='')
|
193
194
|
individual_options = case name
|
194
195
|
when 'libminisip'
|
195
|
-
%Q{--enable-
|
196
|
+
%Q{--enable-video --enable-opengl --disable-mil --enable-decklink --disable-sdl #{libminisip_cpp_flags} #{libminisip_ld_flags}}
|
196
197
|
when 'minisip'
|
197
|
-
%Q{--enable-
|
198
|
+
%Q{--enable-video --enable-opengl --enable-textui}
|
198
199
|
else
|
199
200
|
''
|
200
201
|
end
|
202
|
+
# The --enable-debug option should only be there if specifically requested
|
203
|
+
debug_options = (Options.enable_debug and (name == 'libminisip' or name == 'minisip')) ? '--enable-debug' : ''
|
204
|
+
# These options are used by all libraries
|
201
205
|
common_options = Options.this_user ? %Q{--prefix="#{Path.build}" PKG_CONFIG_PATH="#{Path.build_lib_pkg_config}" ACLOCAL_FLAGS="#{Path.build_share_aclocal}" LD_LIBRARY_PATH="#{Path.build_lib}"} : ''
|
202
|
-
|
206
|
+
# I2conf needs to compile MiniSIP without any options
|
207
|
+
individual_options = '' if Options.blank_minisip_configuration
|
208
|
+
# Putting it all together
|
209
|
+
Cmd.run ['./configure', common_options, debug_options, individual_options].join(' ')
|
203
210
|
end
|
204
211
|
|
205
212
|
def make
|
@@ -50,6 +50,7 @@ Categories=Application;Internet;Network;Chat;AudioVideo}
|
|
50
50
|
# If this step would not be done, the MiniSIP menu item would disappear after restarting Ubuntu.
|
51
51
|
#
|
52
52
|
def update_gnome_menu_cache
|
53
|
+
return unless Gem::Platform.local.ubuntu_10?
|
53
54
|
Cmd.run %{sudo sh -c "/usr/share/gnome-menus/update-gnome-menus-cache /usr/share/applications/ > /usr/share/applications/desktop.${LANG}.cache"}, :announce_pwd => false
|
54
55
|
end
|
55
56
|
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# -*- encoding: UTF-8 -*-
|
2
|
+
|
3
|
+
module CSD
|
4
|
+
module Application
|
5
|
+
module Minisip
|
6
|
+
module Component
|
7
|
+
module Network
|
8
|
+
class << self
|
9
|
+
|
10
|
+
OPTIMUM_BUFFERS = {
|
11
|
+
'net.core.rmem_max' => '131071',
|
12
|
+
'net.core.wmem_max' => '131071',
|
13
|
+
'net.core.rmem_default' => '114688',
|
14
|
+
'net.core.wmem_default' => '114688',
|
15
|
+
'net.ipv4.udp_mem' => '81120 108160 162240',
|
16
|
+
'net.ipv4.udp_rmem_min' => '4096',
|
17
|
+
'net.ipv4.udp_wmem_min' => '4096'
|
18
|
+
}
|
19
|
+
|
20
|
+
def compile
|
21
|
+
UI.debug "#{self}.compile was called"
|
22
|
+
fix_udp_buffer
|
23
|
+
permanent_udp_buffer
|
24
|
+
lsmod = Cmd.run 'lsmod', :die_on_failure => false, :internal => true
|
25
|
+
lspci = Cmd.run 'lspci -v | grep Ethernet', :die_on_failure => false, :internal => true
|
26
|
+
UI.debug "#{self}.compile had this lsmod output: #{lsmod.output}"
|
27
|
+
UI.debug "#{self}.compile had this lspci output: #{lspci.output}"
|
28
|
+
update_realtek if (lsmod.success? and lsmod.output !~ /r8168/ and lspci.output =~ /RTL8111\/8168B/) or Options.reveal
|
29
|
+
update_intel if (lspci.success? and lspci.output =~ /82572EI/) or Options.reveal
|
30
|
+
end
|
31
|
+
|
32
|
+
def fix_udp_buffer
|
33
|
+
return unless Gem::Platform.local.debian? or Options.reveal
|
34
|
+
UI.info 'Fixing UDP buffer size'.green.bold
|
35
|
+
OPTIMUM_BUFFERS.each do |key, value|
|
36
|
+
Cmd.run %{sudo sysctl -w #{key}="#{value}"}, :announce_pwd => false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def permanent_udp_buffer
|
41
|
+
if Path.sysctl_conf_backup.file? and !Options.reveal
|
42
|
+
UI.warn "The UDP buffer modifications seems to be permanent already. Delete #{Path.sysctl_conf_backup.enquote} to enforce it."
|
43
|
+
else
|
44
|
+
UI.info 'Making the UDP buffer modifications permanent'.green.bold
|
45
|
+
content = Path.sysctl_conf.file? ? File.read(Path.sysctl_conf) : ''
|
46
|
+
Cmd.copy Path.sysctl_conf, Path.new_sysctl_conf
|
47
|
+
UI.info "Adding modifications to #{Path.new_sysctl_conf}".cyan
|
48
|
+
modifications = ['', '# Changes made by the AI'] + OPTIMUM_BUFFERS.map { |key, value| %{#{key} = #{value}} }
|
49
|
+
Cmd.touch_and_replace_content Path.new_sysctl_conf, modifications.join("\n"), :internal => true
|
50
|
+
# We cannot use Cmd.copy here, because Cmd.copy has no superuser privileges.
|
51
|
+
# And since we are for sure on Ubuntu, these commands will work.
|
52
|
+
Cmd.run "sudo cp #{Path.sysctl_conf} #{Path.sysctl_conf_backup}", :announce_pwd => false
|
53
|
+
Cmd.run "sudo cp #{Path.new_sysctl_conf} #{Path.sysctl_conf}", :announce_pwd => false
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def update_realtek
|
58
|
+
checkout_realtek
|
59
|
+
compile_realtek
|
60
|
+
end
|
61
|
+
|
62
|
+
def update_intel
|
63
|
+
checkout_intel
|
64
|
+
compile_intel
|
65
|
+
end
|
66
|
+
|
67
|
+
def checkout_realtek
|
68
|
+
Cmd.git_clone 'Realtek firmware', 'git://github.com/csd/realtek.git', Path.realtek_firmware
|
69
|
+
end
|
70
|
+
|
71
|
+
def checkout_intel
|
72
|
+
Cmd.git_clone 'Intel firmware', 'git://github.com/csd/intel.git', Path.intel_firmware
|
73
|
+
end
|
74
|
+
|
75
|
+
def compile_realtek
|
76
|
+
UI.info 'Compiling Realtek firmware'.green.bold
|
77
|
+
Cmd.cd Path.realtek_firmware, :internal => true
|
78
|
+
Cmd.run 'sudo ./autorun.sh'
|
79
|
+
end
|
80
|
+
|
81
|
+
def compile_intel
|
82
|
+
UI.info 'Compiling Intel firmware'.green.bold
|
83
|
+
Cmd.cd Path.intel_firmware_src, :internal => true
|
84
|
+
Cmd.run 'sudo make install'
|
85
|
+
end
|
86
|
+
|
87
|
+
def introduction
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -27,7 +27,7 @@ module CSD
|
|
27
27
|
# Copies the plugins from the repository to the final destination.
|
28
28
|
#
|
29
29
|
def copy
|
30
|
-
if Path.plugins_destination.directory?
|
30
|
+
if Path.plugins_destination.directory? or Options.reveal
|
31
31
|
UI.info "Installing optional MiniSIP plugins".green.bold
|
32
32
|
UI.info "Copying from `#{Path.plugins_destination}´ to `#{Path.plugins}´".yellow
|
33
33
|
Dir[File.join(Path.plugins, '{md,mg,mvideo}*.{a,la,so}')].each do |plugin|
|
@@ -18,7 +18,7 @@ module CSD
|
|
18
18
|
Client 1
|
19
19
|
</desc>
|
20
20
|
<uri>
|
21
|
-
|
21
|
+
client1@carenet-se.se
|
22
22
|
</uri>
|
23
23
|
</pop>
|
24
24
|
<pop>
|
@@ -26,7 +26,7 @@ module CSD
|
|
26
26
|
Client2
|
27
27
|
</desc>
|
28
28
|
<uri>
|
29
|
-
|
29
|
+
client2@carenet-se.se
|
30
30
|
</uri>
|
31
31
|
</pop>
|
32
32
|
<pop>
|
@@ -34,7 +34,7 @@ module CSD
|
|
34
34
|
Client3
|
35
35
|
</desc>
|
36
36
|
<uri>
|
37
|
-
|
37
|
+
client3@carenet-se.se
|
38
38
|
</uri>
|
39
39
|
</pop>
|
40
40
|
<pop>
|
@@ -42,7 +42,7 @@ module CSD
|
|
42
42
|
Client4
|
43
43
|
</desc>
|
44
44
|
<uri>
|
45
|
-
|
45
|
+
client4@carenet-se.se
|
46
46
|
</uri>
|
47
47
|
</pop>
|
48
48
|
<pop>
|
@@ -50,7 +50,7 @@ module CSD
|
|
50
50
|
Client5
|
51
51
|
</desc>
|
52
52
|
<uri>
|
53
|
-
|
53
|
+
client5@carenet-se.se
|
54
54
|
</uri>
|
55
55
|
</pop>
|
56
56
|
<pop>
|
@@ -58,28 +58,57 @@ module CSD
|
|
58
58
|
Client6
|
59
59
|
</desc>
|
60
60
|
<uri>
|
61
|
-
|
61
|
+
client6@carenet-se.se
|
62
62
|
</uri>
|
63
63
|
</pop>
|
64
64
|
</contact>
|
65
65
|
<contact>
|
66
66
|
<name>
|
67
|
-
|
67
|
+
Virtual Rooms
|
68
68
|
</name>
|
69
69
|
<pop>
|
70
70
|
<desc>
|
71
|
-
|
71
|
+
Carenet-SE MCU
|
72
|
+
</desc>
|
73
|
+
<uri>
|
74
|
+
mcu@carenet-se.se
|
75
|
+
</uri>
|
76
|
+
</pop>
|
77
|
+
<pop>
|
78
|
+
<desc>
|
79
|
+
CESNET MCU
|
80
|
+
</desc>
|
81
|
+
<uri>
|
82
|
+
950087999@cesnet.cz
|
83
|
+
</uri>
|
84
|
+
</pop>
|
85
|
+
<pop>
|
86
|
+
<desc>
|
87
|
+
TTA MCU
|
72
88
|
</desc>
|
73
89
|
<uri>
|
74
|
-
|
90
|
+
ttamcu@carenet-se.se
|
75
91
|
</uri>
|
76
92
|
</pop>
|
93
|
+
</contact>
|
94
|
+
<contact>
|
95
|
+
<name>
|
96
|
+
Carenet-SE
|
97
|
+
</name>
|
77
98
|
<pop>
|
78
99
|
<desc>
|
79
100
|
Carenet Support Hotline
|
80
101
|
</desc>
|
81
102
|
<uri>
|
82
|
-
|
103
|
+
support@carenet-se.se
|
104
|
+
</uri>
|
105
|
+
</pop>
|
106
|
+
<pop>
|
107
|
+
<desc>
|
108
|
+
SIP test account
|
109
|
+
</desc>
|
110
|
+
<uri>
|
111
|
+
test@carenet-se.se
|
83
112
|
</uri>
|
84
113
|
</pop>
|
85
114
|
</contact>
|
@@ -92,7 +121,7 @@ module CSD
|
|
92
121
|
Tandberg Client1
|
93
122
|
</desc>
|
94
123
|
<uri>
|
95
|
-
|
124
|
+
tandberg1@carenet-se.se
|
96
125
|
</uri>
|
97
126
|
</pop>
|
98
127
|
<pop>
|
@@ -100,7 +129,7 @@ module CSD
|
|
100
129
|
Tandberg Client2
|
101
130
|
</desc>
|
102
131
|
<uri>
|
103
|
-
|
132
|
+
tandberg2@carenet-se.se
|
104
133
|
</uri>
|
105
134
|
</pop>
|
106
135
|
</contact>
|