Hello,
I just started using SER. Using SER with the standard ser.cfg was easy,
just configuring SER with rtpproxy isn't.
I'd like to force all clients to use the rtpproxy (clients: Cisco7960,
Kphone 3.11 IPv6, and Kphone 4.0.5.).
The server is a Debian Sarge pc with ser 0.8.14 (debian-packages from
iptel.org) with mysql4, php4, apache2 and the cvs-version of rtpproxy.
I found a good manual here:
http://www.id.ethz.ch/people/allid_list/armin/SIP-IPv4-IPv6.pdf
But the clients are still using P2P (if ipv4 <-> ipv4 or ipv6 <-> ipv6,
ipv4 <-> ipv6 isn't possible).
Using ethereal I can see that ser is still sending the (calling-)client
the ip-address of the (called-)client, instead of the ip-address of the
proxy:
<sip:phil@139.6.16.83;ftag=000d290ab5b300495ac945a4-569189e1;lr=on>
Message body
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): username 0 0 IN IP4
139.6.16.73
Session Name (s): The Funky Flow
Connection Information (c): IN IP4 139.6.16.73
Connection Network Type: IN
Connection Address Type: IP4
Connection Address: 139.6.16.73
Time Description, active time (t): 0 0
Media Description, name and address (m): audio 32778 RTP/AVP
0
Media Attribute (a): rtpmap:0 PCMU/8000
What is wrong in my configuration?
I am starting the proxy with /usr/local/bin/rtpproxy -l /139.6.16.83 -6
3000:0:0:12::30
(we are using faked ipv6-adresses, we are not connected to the
(ipv6-)internet)
My ser.cfg:
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
#debug=3 # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=7
fork=no
log_stderror=yes
*/
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
port=5060
children=2
fifo="/tmp/ser_fifo"
listen=139.6.16.83
listen=3000:0:0:12::30
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
loadmodule "/usr/lib/ser/modules/mysql.so"
loadmodule "/usr/lib/ser/modules/sl.so"
loadmodule "/usr/lib/ser/modules/tm.so"
loadmodule "/usr/lib/ser/modules/rr.so"
loadmodule "/usr/lib/ser/modules/maxfwd.so"
loadmodule "/usr/lib/ser/modules/usrloc.so"
loadmodule "/usr/lib/ser/modules/registrar.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/lib/ser/modules/auth.so"
loadmodule "/usr/lib/ser/modules/auth_db.so"
# NAT-Traversal usw
loadmodule "/usr/lib/ser/modules/nathelper.so"
# ----------------- setting module-specific parameters ---------------
# -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
# -- auth params --
# Uncomment if you are using auth module
#
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this
config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# -------- Parameter des Nathelper - Moduls --------
modparam("nathelper", "rtpproxy_sock", "/var/run/rtpproxy.sock")
# ------------------------- request routing logic -------------------
# me, myself & I:
alias="139.6.16.83"
alias="3000:0:0:12::30"
alias="ipv6sipserv.nt.fh-koeln.de"
alias="ipv6sipserv.ipv6.fh-koeln.de"
alias="ipv6sipserver.ipv6.fh-koeln.de"
alias="sipserver.ipv6.fh-koeln.de"
alias="sipserver"
alias="ipv6sipserv"
# main routing logic
route {
# initial sanity checks -- messages with
# max_forwars == 0, or excessively long requests,
# or those that don't addressed to us
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483", "Too Many Hops");
break;
};
if (msg:len > max_len) {
sl_send_reply("513", "Message too big");
break;
};
# route invitation request to other domains
if (!(uri == myself) && method == "INVITE") {
record_route();
if (!t_relay())
sl_reply_error();
break;
};
if (method == "REGISTER") {
if (af == inet) {
save("location_inet4");
} else if (af == inet6) {
save("location_inet6");
} else {
sl_send_reply("403", "Anmeldung
fehlgeschlagen!");
};
break;
};
if (method == "INVITE") {
################################
### CASE: Anrufer nutzt IPv4 ###
################################
if (lookup("location_inet4")) {
# Comment out three lines below if you want
# RTP for IPv4->IPv4 calls to go directly
# between UAs
######
### CASE: Beide nutzen IPv4
######
if (af == inet)
if (force_rtp_proxy("FAII"))
t_on_reply("1");
# proxy session from a Internal IPv4
# phone to a External IPv6 address
######
### CASE: Anrufer nutzt IPv4, Anzurufender IPv6
######
if (af == inet6)
if (force_rtp_proxy("FAIE"))
t_on_reply("1");
}
################################
### CASE: Anrufer nutzt IPv6 ###
################################
else if (lookup("location_inet6")) {
# proxy session from a External IPv6
# phone to a Internal IPv4 address
######
### CASE: Anrufer nutzt IPv6, Anzurufender IPv4
######
if (af == inet)
if (force_rtp_proxy("FAEI"))
t_on_reply("1");
# Comment out three lines below if you want
# RTP for IPv6->IPv6 calls to go directly
# between UAs
######
### CASE: Beide nutzen IPv6
######
if (af == inet6)
if (force_rtp_proxy("FAEE"))
t_on_reply("1");
}
else {
sl_send_reply("403", "User nicht erreichbar
oder unbekannt!");
break;
};
};
if (method == "BYE" || method == "CANCEL")
unforce_rtp_proxy();
# Do strict routing if pre-loaded route headers present
if (loose_route()) {
t_relay();
break;
};
if (method == "INVITE")
record_route();
if (!t_relay())
sl_reply_error();
}
onreply_route[1] {
if (!(status=~"183" || status=~"200"))
break;
force_rtp_proxy("FA");
}
Sorry for my bad english. Thanks for your help!
--
Achim Marikar <info(a)marikar.com>
just serach the mailinglist, there is a zillion of config\s with it.
just look for alias.
-Atle
* Ashling O'Driscoll <ashling.odriscoll(a)cit.ie> [050126 13:05]:
>
> great!...Thank you so much for the reply...Could you give me any
> pointers as to how my ser.cfg must be modified to support this? i.e.
> links to web pages or maybe a peek at a ser.cfg file??...Thanks again
> for the reply,at least I know its doable.
>
> Aisling.
>
> ---- Original Message ----
> From: clona(a)camaro.no
> To: ashling.odriscoll(a)cit.ie
> Subject: Re: [Serusers] Extension alias for sip url??
> Date: Wed, 26 Jan 2005 13:01:24 +0100
>
> >
> >serctl alias add 1999 sip:aisling@domain_name
> >
> >then the user on messenger would also ahve 1999 as a numeric number,
> >and
> >you could call him that way. Just rember that your config needs to
> >support this.
> >
> >- Atle
> >
> >* Ashling O'Driscoll <ashling.odriscoll(a)cit.ie> [050126 12:37]:
> >> Hi,
> >>
> >> I am wondering what is the usual position with translating between
> >> extension numbers and sip urls....
> >>
> >> I mean I have a grandstream bt100 sip hardphone registered with ser
> >> with an ext no 2001 and I also have a windows messenger sip client
> >> with sip url aisling@domain_name. The windows messenger client can
> >> ring the hardphone by dialing 2001@domain_name.....But is there a
> >way
> >> that the hardphone can ring the sip url....The hardphone only
> >supprts
> >> extension numbers and ip addresses.....
> >>
> >> Is there a way of using an extension alias to ring the ip url or
> >> something...Has anyone else had this problem or what do people
> >> normally do??
> >>
> >> Thanks very much,
> >> Aisling
> >>
> >>
> >> -------------------Legal
> >Disclaimer---------------------------------------
> >>
> >> The above electronic mail transmission is confidential and intended
> >only for the person to whom it is addressed. Its contents may be
> >protected by legal and/or professional privilege. Should it be
> >received by you in error please contact the sender at the above
> >quoted email address. Any unauthorised form of reproduction of this
> >message is strictly prohibited. The Institute does not guarantee the
> >security of any information electronically transmitted and is not
> >liable if the information contained in this communication is not a
> >proper and complete record of the message as transmitted by the
> >sender nor for any delay in its receipt.
> >>
> >> _______________________________________________
> >> Serusers mailing list
> >> serusers(a)lists.iptel.org
> >> http://lists.iptel.org/mailman/listinfo/serusers
> >>
> >
> >-------------------Legal
> >Disclaimer---------------------------------------
> >
> >The above electronic mail transmission is confidential and intended
> >only for the person to whom it is addressed. Its contents may be
> >protected by legal and/or professional privilege. Should it be
> >received by you in error please contact the sender at the above
> >quoted email address. Any unauthorised form of reproduction of this
> >message is strictly prohibited. The Institute does not guarantee the
> >security of any information electronically transmitted and is not
> >liable if the information contained in this communication is not a
> >proper and complete record of the message as transmitted by the
> >sender nor for any delay in its receipt.
> >
>
>
>
> -------------------Legal Disclaimer---------------------------------------
>
> The above electronic mail transmission is confidential and intended only for the person to whom it is addressed. Its contents may be protected by legal and/or professional privilege. Should it be received by you in error please contact the sender at the above quoted email address. Any unauthorised form of reproduction of this message is strictly prohibited. The Institute does not guarantee the security of any information electronically transmitted and is not liable if the information contained in this communication is not a proper and complete record of the message as transmitted by the sender nor for any delay in its receipt.
>
>
Hi,
I am wondering what is the usual position with translating between
extension numbers and sip urls....
I mean I have a grandstream bt100 sip hardphone registered with ser
with an ext no 2001 and I also have a windows messenger sip client
with sip url aisling@domain_name. The windows messenger client can
ring the hardphone by dialing 2001@domain_name.....But is there a way
that the hardphone can ring the sip url....The hardphone only supprts
extension numbers and ip addresses.....
Is there a way of using an extension alias to ring the ip url or
something...Has anyone else had this problem or what do people
normally do??
Thanks very much,
Aisling
-------------------Legal Disclaimer---------------------------------------
The above electronic mail transmission is confidential and intended only for the person to whom it is addressed. Its contents may be protected by legal and/or professional privilege. Should it be received by you in error please contact the sender at the above quoted email address. Any unauthorised form of reproduction of this message is strictly prohibited. The Institute does not guarantee the security of any information electronically transmitted and is not liable if the information contained in this communication is not a proper and complete record of the message as transmitted by the sender nor for any delay in its receipt.
I'm new to ser and installing ser.
Can someone explain the following errors please.
Ser version: 0.8.13-dev-29
http://phonesync.berlios.de/downloads_g.html
System:
Linux version 2.4.27
OS: Debian 3.or1(woody)
(gcc version 2.95.4 20011002 (Debian prerelease))
# sbin/ser -E -c /etc/ser/ser.cfg -ddddd
0(17419) read 496848877 from /dev/random
0(17419) seeding PRNG with 1603288229
0(17419) test random number 1152594766
0(17419) shm_mem_init: success
0(17419) parse error (1,1-2): parse error
0(17419) parse error (9,6-7): unknown config variable
0(17419) parse error (9,7-8):
ERROR: bad config file (3 errors)
0(17419) shm_mem_destroy
0(17419) destroying the shared memory lock
the configfile is unchanged since creation.
http://www.voiping.de/ser.cfg
THX
Hello,
I am using ser+nathelper+rtpproxy on a FC3 system (2.6.9-1.667)
ser version is 0.8.14.
usrloc params is set to 0 (modparam("usrloc", "db_mode", 0))
There are two Windows Messenger clients the one behind NAT, the other not.
"REGISTER" works well for both clients, but "SUBSCRIBE" not.
Ser replies that no user can be found in the usrloc and the "SUBSCRIBE" message fails with "408 Request Timeout"
Users and their contacts have already been added by means of the serctl utility.
SIP/2.0 408 Request Timeout..Via: SIP/2.0/UDP 172.16.60.123:7397;rport=1839
..From: "1000(a)kentauros.rtd.algo.com.gr" <sip:1000@kentauros.rtd.algo.com.g
r>;tag=06f4a48b5efb4ef99362475de6f155af;epid=7ef24ed5a6..To: <sip:1001@kent
auros.rtd.algo.com.gr>;tag=92fb9945638573c26d114962da30e489-3fbd..Call-ID:
23185c1c2a5a46be8b68785bbc12a22e..CSeq: 1 SUBSCRIBE..Server: Sip EXpress ro
uter (0.8.14 (i386/linux))..Content-Length: 0..Warning: 392 193.92.74.49:50
60 "Noisy feedback tells: pid=3985 req_src_ip=172.16.60.123 req_src_port=1
839 in_uri=sip:1001@kentauros.rtd.algo.com.gr out_uri=sip:62.103.218.177:16
213 via_cnt==0"....
.........................
0(3984) SIP Request:
0(3984) method: <SUBSCRIBE>
0(3984) uri: <sip:1001@kentauros.rtd.algo.com.gr>
0(3984) version: <SIP/2.0>
0(3984) parse_headers: flags=1
0(3984) end of header reached, state=5
0(3984) parse_headers: Via found, flags=1
0(3984) parse_headers: this is the first via
0(3984) After parse_msg...
0(3984) preparing to run routing scripts...
0(3984) DEBUG : is_maxfwd_present: searching for max_forwards header
0(3984) parse_headers: flags=128
0(3984) DEBUG: is_maxfwd_present: value = 70
0(3984) check_via_address(172.16.60.123, 172.16.60.123, 0)
0(3984) parse_headers: flags=64
0(3984) end of header reached, state=9
0(3984) DEBUG: get_hdr_field: <To> [38]; uri=[sip:1001@kentauros.rtd.algo.com.g
r]
0(3984) DEBUG: to body [<sip:1001@kentauros.rtd.algo.com.gr>
]
0(3984) get_hdr_field: cseq <CSeq>: <1> <SUBSCRIBE>
0(3984) LOG: Someone trying to register from private IP, rewriting
0(3984) parse_headers: flags=64
0(3984) DEBUG: add_param: tag=15f714ddfaa544dc91e3031e37618560
0(3984) DEBUG: add_param: epid=7ef24ed5a6
0(3984) end of header reached, state=29
0(3984) parse_headers: flags=256
0(3984) DEBUG: get_hdr_body : content_length=0
0(3984) found end of header
0(3984) find_first_route(): No Route headers found
0(3984) loose_route(): There is no Route HF
0(3984) check_self - checking if host==us: 25==12 && [kentauros.rtd.algo.com.g
r] == [193.92.74.49]
0(3984) check_self - checking if port 5060 matches port 5060
0(3984) check_self - checking if host==us: 25==12 && [kentauros.rtd.algo.com.g
r] == [193.92.74.49]
0(3984) check_self - checking if port 5060 matches port 5060
0(3984) lookup(): '1001' Not found in usrloc
0(3984) check_self - checking if host==us: 25==12 && [kentauros.rtd.algo.com.g
r] == [193.92.74.49]
0(3984) check_self - checking if port 5060 matches port 5060
0(3984) rwrite(): Rewriting Request-URI with 'sip:62.103.218.177:16213'
0(3984) parse_headers: flags=-1
0(3984) DEBUG: t_addifnew: msg id=25 , global msg id=24 , T on entrance=0xfffff
fff
0(3984) parse_headers: flags=-1
0(3984) parse_headers: flags=60
0(3984) t_lookup_request: start searching: hash=31903, isACK=0
0(3984) DEBUG: proceeding to pre-RFC3261 transaction matching
0(3984) DEBUG: non-ACK matched
0(3984) DEBUG: t_lookup_request: transaction found (T=0xf0c120)
0(3984) DBG: t_retransmit_reply: nothing to retransmit
0(3984) DEBUG:destroy_avp_list: destroing list (nil)
0(3984) receive_msg: cleaning up
1(3985) DEBUG: timer routine:7,tl=0xf0c248 next=(nil)
1(3985) DEBUG: retransmission_handler : request resending (t=0xf0c120, SUBSCRIB
E ... )
1(3985) DEBUG: add_to_tail_of_timer[7]: 0xf0c248
1(3985) DEBUG: retransmission_handler : done
1(3985) DEBUG: timer routine:7,tl=0xf0c248 next=(nil)
1(3985) DEBUG: retransmission_handler : request resending (t=0xf0c120, SUBSCRIB
E ... )
1(3985) DEBUG: add_to_tail_of_timer[7]: 0xf0c248
1(3985) DEBUG: retransmission_handler : done
Please advice ...
Thank you in advance
Yannis
Hello,
I am using ser+nathelper+rtpproxy on a FC3 system (2.6.9-1.667)
ser version is 0.8.14.
usrloc params is set to 0 (modparam("usrloc", "db_mode", 0))
There are two Windows Messenger clients the one behind NAT, the other not.
"REGISTER" works well for both clients, but "SUBSCRIBE" not.
Ser replies that no user can be found in the usrloc and the "SUBSCRIBE" message fails with "408 Request Timeout"
Users and their contacts have already been added by means of the serctl utility.
SIP/2.0 408 Request Timeout..Via: SIP/2.0/UDP 172.16.60.123:7397;rport=1839
..From: "1000(a)kentauros.rtd.algo.com.gr" <sip:1000@kentauros.rtd.algo.com.g
r>;tag=06f4a48b5efb4ef99362475de6f155af;epid=7ef24ed5a6..To: <sip:1001@kent
auros.rtd.algo.com.gr>;tag=92fb9945638573c26d114962da30e489-3fbd..Call-ID:
23185c1c2a5a46be8b68785bbc12a22e..CSeq: 1 SUBSCRIBE..Server: Sip EXpress ro
uter (0.8.14 (i386/linux))..Content-Length: 0..Warning: 392 193.92.74.49:50
60 "Noisy feedback tells: pid=3985 req_src_ip=172.16.60.123 req_src_port=1
839 in_uri=sip:1001@kentauros.rtd.algo.com.gr out_uri=sip:62.103.218.177:16
213 via_cnt==0"....
.........................
0(3984) SIP Request:
0(3984) method: <SUBSCRIBE>
0(3984) uri: <sip:1001@kentauros.rtd.algo.com.gr>
0(3984) version: <SIP/2.0>
0(3984) parse_headers: flags=1
0(3984) end of header reached, state=5
0(3984) parse_headers: Via found, flags=1
0(3984) parse_headers: this is the first via
0(3984) After parse_msg...
0(3984) preparing to run routing scripts...
0(3984) DEBUG : is_maxfwd_present: searching for max_forwards header
0(3984) parse_headers: flags=128
0(3984) DEBUG: is_maxfwd_present: value = 70
0(3984) check_via_address(172.16.60.123, 172.16.60.123, 0)
0(3984) parse_headers: flags=64
0(3984) end of header reached, state=9
0(3984) DEBUG: get_hdr_field: <To> [38]; uri=[sip:1001@kentauros.rtd.algo.com.g
r]
0(3984) DEBUG: to body [<sip:1001@kentauros.rtd.algo.com.gr>
]
0(3984) get_hdr_field: cseq <CSeq>: <1> <SUBSCRIBE>
0(3984) LOG: Someone trying to register from private IP, rewriting
0(3984) parse_headers: flags=64
0(3984) DEBUG: add_param: tag=15f714ddfaa544dc91e3031e37618560
0(3984) DEBUG: add_param: epid=7ef24ed5a6
0(3984) end of header reached, state=29
0(3984) parse_headers: flags=256
0(3984) DEBUG: get_hdr_body : content_length=0
0(3984) found end of header
0(3984) find_first_route(): No Route headers found
0(3984) loose_route(): There is no Route HF
0(3984) check_self - checking if host==us: 25==12 && [kentauros.rtd.algo.com.g
r] == [193.92.74.49]
0(3984) check_self - checking if port 5060 matches port 5060
0(3984) check_self - checking if host==us: 25==12 && [kentauros.rtd.algo.com.g
r] == [193.92.74.49]
0(3984) check_self - checking if port 5060 matches port 5060
0(3984) lookup(): '1001' Not found in usrloc
0(3984) check_self - checking if host==us: 25==12 && [kentauros.rtd.algo.com.g
r] == [193.92.74.49]
0(3984) check_self - checking if port 5060 matches port 5060
0(3984) rwrite(): Rewriting Request-URI with 'sip:62.103.218.177:16213'
0(3984) parse_headers: flags=-1
0(3984) DEBUG: t_addifnew: msg id=25 , global msg id=24 , T on entrance=0xfffff
fff
0(3984) parse_headers: flags=-1
0(3984) parse_headers: flags=60
0(3984) t_lookup_request: start searching: hash=31903, isACK=0
0(3984) DEBUG: proceeding to pre-RFC3261 transaction matching
0(3984) DEBUG: non-ACK matched
0(3984) DEBUG: t_lookup_request: transaction found (T=0xf0c120)
0(3984) DBG: t_retransmit_reply: nothing to retransmit
0(3984) DEBUG:destroy_avp_list: destroing list (nil)
0(3984) receive_msg: cleaning up
1(3985) DEBUG: timer routine:7,tl=0xf0c248 next=(nil)
1(3985) DEBUG: retransmission_handler : request resending (t=0xf0c120, SUBSCRIB
E ... )
1(3985) DEBUG: add_to_tail_of_timer[7]: 0xf0c248
1(3985) DEBUG: retransmission_handler : done
1(3985) DEBUG: timer routine:7,tl=0xf0c248 next=(nil)
1(3985) DEBUG: retransmission_handler : request resending (t=0xf0c120, SUBSCRIB
E ... )
1(3985) DEBUG: add_to_tail_of_timer[7]: 0xf0c248
1(3985) DEBUG: retransmission_handler : done
Please advice ...
Thank you in advance
Yannis
Hi Everyone,
I want to configure the following cenario:
SIP Server (SER): as a proxy server and Registrar
Asterisk : for the PSTN Gateway/Vocemail/Forward/Conference Server.
I've already configured SER to auth my internal users via mysql which is installed at SER server machine, the database is working fine so as users authentication. I've managed to make 2 sip cpe (SIP UACs) authenticate at my Ser server and talk to each other locally with no delay or noise. My goal is to auth an user at SER, making logic route that sees if this certain user is dialing an international call to a certain number, if that is true, forward the request to Asterisk and Asterisk does the auth using username and password of an account registered at another VoIP server (Go2Call) outside my network (this account is another one from the go2call and not one of my Ser Server). I already know that ser don't act like an UAC in this case, but I know asterisk does forwarding the request with username and password.
For a more detailed view see the graph below.
----------
| Go2Call | > Outside VoIP for International Calls
----------
|
|
| ------------
----- = Asterisk = > UAC (too)/Forward /PSTN/Voicemail
------------
|
|
-------
= SER = > Sip Proxy / Registrar / Mysql DB
-------
|
|
----------------
= VoIP Clients = ==> My VoIP Clients / Sip Phones
----------------
First I would like to know if it is possible, 'cause it is my first time with VoIP Technology and Software, and Second I would like to know if is there somebody that have already configured this cenario to change some ideas. I would also like to know if it's possible to do billing of my clients using cdr module from Asterisk, once my sql is working with SER to authenticate them. Linux is no problem.
What i'm asking is for help and a change of ideas and confs, not for paid solutions. If someone can help me it would be really realy aprecciated.
Sorry for my terrible Brazilian English.
Best Regards.
Felipe Martins
--
Felipe Martins
Linux System Administrator
Tep Solution Provider
Mundivox Communications
Rua Lauro Muller, 116/Sala 505
RJ - Brasil - 22290-906
Tel.: 55 21 3820-8839
Fax.: 55 21 3820-8844
Hi!
I do have a setup where I call setflag(1) and save("location")
afterwards as part of each REGISTER.
I expect the flag to show up in the location table as flags column.
For whatever reason this doesn't work (I do see the username, callid,
... though).
Any hints?
Thanks,
Hendrik
--
freenet Cityline GmbH, Hamburger Chaussee 2-4, 24114 Kiel, Germany
Phone: +49 (0)431 9020552, Fax: +49 (0)431 9020559
Internet: http://www.freenet.de, eMail: hendrik.scholz(a)freenet-ag.de