Update to Asterisk 1.8.5.0: this is a general bug fix release

The release of Asterisk 1.8.5.0 resolves several issues reported by the
community and would have not been possible without your participation.
Thank you!

The following is a sample of the issues resolved in this release:

* Fix Deadlock with attended transfer of SIP call

* Fixes thread blocking issue in the sip TCP/TLS implementation.

* Be more tolerant of what URI we accept for call completion PUBLISH requests.

* Fix a nasty chanspy bug which was causing a channel leak every time a spied on
  channel made a call.

* This patch fixes a bug with MeetMe behavior where the 'P' option for always
  prompting for a pin is ignored for the first caller.

* Fix issue where Asterisk does not hangup a channel after endpoint hangs up. If
  the call that the dialplan started an AGI script for is hungup while the AGI
  script is in the middle of a command then the AGI script is not notified of
  the hangup.

* Resolve issue where leaving a voicemail, the MWI message is never sent. The
  same thing happens when checking a voicemail and marking it as read.

* Resolve issue where wait for leader with Music On Hold allows crosstalk
  between participants. Parenthesis in the wrong position. Regression from issue
  #14365 when expanding conference flags to use 64 bits.

For a full list of changes in this release, please see the ChangeLog:

http://downloads.asterisk.org/pub/telephony/asterisk/ChangeLog-1.8.5.0

Thank you for your continued support of Asterisk!
This commit is contained in:
jnemeth 2011-07-16 21:35:11 +00:00
parent a2c948d020
commit 68ac57e1c7
6 changed files with 57 additions and 51 deletions

View file

@ -1,9 +1,9 @@
# $NetBSD: Makefile,v 1.10 2011/07/05 08:42:56 jnemeth Exp $
# $NetBSD: Makefile,v 1.11 2011/07/16 21:35:11 jnemeth Exp $
#
# NOTE: when updating this package, there are two places that sound
# tarballs need to be checked
DISTNAME= asterisk-1.8.4.4
DISTNAME= asterisk-1.8.5.0
DIST_SUBDIR= ${PKGNAME_NOREV}
DISTFILES= ${DEFAULT_DISTFILES}
EXTRACT_ONLY= ${DISTNAME}.tar.gz
@ -123,6 +123,7 @@ OWN_DIRS_PERMS+= ${ASTSPOOLDIR} ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
OWN_DIRS_PERMS+= ${ASTSPOOLDIR}/dictate ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
OWN_DIRS_PERMS+= ${ASTSPOOLDIR}/meetme ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
OWN_DIRS_PERMS+= ${ASTSPOOLDIR}/monitor ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
OWN_DIRS_PERMS+= ${ASTSPOOLDIR}/outgoing ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
OWN_DIRS_PERMS+= ${ASTSPOOLDIR}/system ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
OWN_DIRS_PERMS+= ${ASTSPOOLDIR}/tmp ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
OWN_DIRS_PERMS+= ${ASTSPOOLDIR}/voicemail ${ASTERISK_USER} ${ASTERISK_GROUP} 0755
@ -179,7 +180,7 @@ post-patch:
post-install:
# check sounds directory for current versions when upgrading package
${TAR} xzf ${WRKSRC}/sounds/asterisk-core-sounds-en-gsm-1.4.20.tar.gz -C ${DESTDIR}${ASTDATADIR}/sounds/en
${TAR} xzf ${WRKSRC}/sounds/asterisk-core-sounds-en-gsm-1.4.21.tar.gz -C ${DESTDIR}${ASTDATADIR}/sounds/en
${TAR} xzf ${WRKSRC}/sounds/asterisk-moh-opsound-wav-2.03.tar.gz -C ${DESTDIR}${ASTDATADIR}/moh
${TAR} xzf ${DISTDIR}/${DIST_SUBDIR}/asterisk-extra-sounds-en-gsm-1.4.11.tar.gz -C ${DESTDIR}${ASTDATADIR}/sounds/en
${INSTALL_DATA} ${WRKSRC}/BUGS ${DESTDIR}${PREFIX}/share/doc/${PKGBASE}

View file

@ -1,4 +1,4 @@
@comment $NetBSD: PLIST,v 1.5 2011/07/05 08:42:56 jnemeth Exp $
@comment $NetBSD: PLIST,v 1.6 2011/07/16 21:35:11 jnemeth Exp $
include/asterisk.h
include/asterisk/_private.h
include/asterisk/abstract_jb.h
@ -348,13 +348,13 @@ libdata/asterisk/phoneprov/000000000000.cfg
libdata/asterisk/phoneprov/polycom.xml
libdata/asterisk/phoneprov/polycom_line.xml
libdata/asterisk/phoneprov/snom-mac.xml
libdata/asterisk/sounds/.asterisk-core-sounds-en-gsm-1.4.20
libdata/asterisk/sounds/.asterisk-core-sounds-en-gsm-1.4.21
libdata/asterisk/sounds/en/1-for-am-2-for-pm.gsm
libdata/asterisk/sounds/en/1-yes-2-no.gsm
libdata/asterisk/sounds/en/CHANGES-asterisk-core-en-1.4.20
libdata/asterisk/sounds/en/CHANGES-asterisk-core-en-1.4.21
libdata/asterisk/sounds/en/CHANGES-asterisk-extra-en-1.4.11
libdata/asterisk/sounds/en/CREDITS-asterisk-core-en-1.4.20
libdata/asterisk/sounds/en/LICENSE-asterisk-core-en-1.4.20
libdata/asterisk/sounds/en/CREDITS-asterisk-core-en-1.4.21
libdata/asterisk/sounds/en/LICENSE-asterisk-core-en-1.4.21
libdata/asterisk/sounds/en/T-changed-to.gsm
libdata/asterisk/sounds/en/T-is-not-available.gsm
libdata/asterisk/sounds/en/T-to-disable-ancmnt.gsm
@ -595,6 +595,8 @@ libdata/asterisk/sounds/en/conf-userswilljoin.gsm
libdata/asterisk/sounds/en/conf-userwilljoin.gsm
libdata/asterisk/sounds/en/conf-waitforleader.gsm
libdata/asterisk/sounds/en/conf-youareinconfnum.gsm
libdata/asterisk/sounds/en/confbridge-join.gsm
libdata/asterisk/sounds/en/confbridge-leave.gsm
libdata/asterisk/sounds/en/conference-call.gsm
libdata/asterisk/sounds/en/conference-reservations.gsm
libdata/asterisk/sounds/en/conference.gsm
@ -2237,6 +2239,7 @@ share/examples/asterisk/vpb.conf
share/examples/rc.d/asterisk
${PLIST.webvmail}share/httpd/htdocs/_asterisk/animlogo.gif
${PLIST.webvmail}share/httpd/htdocs/_asterisk/play.gif
@pkgdir libdata/asterisk/sounds/ru
@pkgdir libdata/asterisk/sounds/fr
@pkgdir libdata/asterisk/sounds/es
@pkgdir libdata/asterisk/sounds/en_AU

View file

@ -1,18 +1,18 @@
$NetBSD: distinfo,v 1.11 2011/07/05 08:42:56 jnemeth Exp $
$NetBSD: distinfo,v 1.12 2011/07/16 21:35:11 jnemeth Exp $
SHA1 (asterisk-1.8.4.4/asterisk-1.8.4.4.tar.gz) = 07d3ae5744e2dd10c5d9564b503690f3f0b84d96
RMD160 (asterisk-1.8.4.4/asterisk-1.8.4.4.tar.gz) = c95cab1b24547f1abd229dcf323cc7ed0b0b36a0
Size (asterisk-1.8.4.4/asterisk-1.8.4.4.tar.gz) = 27326189 bytes
SHA1 (asterisk-1.8.4.4/asterisk-extra-sounds-en-gsm-1.4.11.tar.gz) = 8692fa61423b4769dc8bfa78faf9ed5ef7a259b9
RMD160 (asterisk-1.8.4.4/asterisk-extra-sounds-en-gsm-1.4.11.tar.gz) = 68170c769d739d6b5b35b00f999ad6bbf876f9f6
Size (asterisk-1.8.4.4/asterisk-extra-sounds-en-gsm-1.4.11.tar.gz) = 3349898 bytes
SHA1 (asterisk-1.8.4.4/extract-cfile.awk) = c4f08eee1ab83c041bde1ab91672a4a3c43c28b8
RMD160 (asterisk-1.8.4.4/extract-cfile.awk) = cd59f8e5807732023d5aec95187e2d5572f400a4
Size (asterisk-1.8.4.4/extract-cfile.awk) = 667 bytes
SHA1 (asterisk-1.8.4.4/rfc3951.txt) = 1a6c769be750fb02456d60db2470909254496017
RMD160 (asterisk-1.8.4.4/rfc3951.txt) = 15f7ec61653ec9953172f8f2150e7d8f6f620926
Size (asterisk-1.8.4.4/rfc3951.txt) = 373442 bytes
SHA1 (patch-aa) = cb3a463c51abff717d960ad70f3c13beefe6d5f4
SHA1 (asterisk-1.8.5.0/asterisk-1.8.5.0.tar.gz) = 9e29581deea773c2537f5c01a43823211688412a
RMD160 (asterisk-1.8.5.0/asterisk-1.8.5.0.tar.gz) = c841993f914bd150696b9163a1cc1d1828f45e4a
Size (asterisk-1.8.5.0/asterisk-1.8.5.0.tar.gz) = 27417584 bytes
SHA1 (asterisk-1.8.5.0/asterisk-extra-sounds-en-gsm-1.4.11.tar.gz) = 8692fa61423b4769dc8bfa78faf9ed5ef7a259b9
RMD160 (asterisk-1.8.5.0/asterisk-extra-sounds-en-gsm-1.4.11.tar.gz) = 68170c769d739d6b5b35b00f999ad6bbf876f9f6
Size (asterisk-1.8.5.0/asterisk-extra-sounds-en-gsm-1.4.11.tar.gz) = 3349898 bytes
SHA1 (asterisk-1.8.5.0/extract-cfile.awk) = c4f08eee1ab83c041bde1ab91672a4a3c43c28b8
RMD160 (asterisk-1.8.5.0/extract-cfile.awk) = cd59f8e5807732023d5aec95187e2d5572f400a4
Size (asterisk-1.8.5.0/extract-cfile.awk) = 667 bytes
SHA1 (asterisk-1.8.5.0/rfc3951.txt) = 1a6c769be750fb02456d60db2470909254496017
RMD160 (asterisk-1.8.5.0/rfc3951.txt) = 15f7ec61653ec9953172f8f2150e7d8f6f620926
Size (asterisk-1.8.5.0/rfc3951.txt) = 373442 bytes
SHA1 (patch-aa) = bdaacb8b7b93886399b53cdda8a4ac7f827f50d5
SHA1 (patch-af) = ebad62fcb31b600d30235cc5e93284c93b2c8af9
SHA1 (patch-ag) = c71c61350cefbbe53eefa99245ca7712753f22d5
SHA1 (patch-ai) = e92edab5c1ff323478f41d0b0783102ed527fe39
@ -30,7 +30,7 @@ SHA1 (patch-au) = 3f69f8bcea685f13008430c0fcb91885b6b72c90
SHA1 (patch-av) = 3424013b5bf22624aa664e972e2b495ab3296cbe
SHA1 (patch-aw) = 0534acd67ea5da1eee8cf282035ebf4c559278ab
SHA1 (patch-ax) = 3b41e66a8c926e0afc4f73587e3557370e6c5f6e
SHA1 (patch-ay) = 824fc560f4f2775ecf9272525025d26d8fee4361
SHA1 (patch-ay) = 7c73c7664ea36b4c34cf38cde8a93c95b55a68aa
SHA1 (patch-az) = 64365b12cb47ec0fba358e4326eda172f96068cf
SHA1 (patch-ba) = ffb20f4788f2f253e822fb48c68fec04c31b0619
SHA1 (patch-bb) = bf1a2bb2ba1eb2ba44a9b26fa9ae0468510a1575

View file

@ -1,4 +1,4 @@
# $NetBSD: options.mk,v 1.2 2011/02/06 08:30:17 jnemeth Exp $
# $NetBSD: options.mk,v 1.3 2011/07/16 21:35:11 jnemeth Exp $
PKG_OPTIONS_VAR= PKG_OPTIONS.asterisk
PKG_SUPPORTED_OPTIONS= zaptel x11 unixodbc ilbc webvmail ldap spandsp
@ -18,16 +18,16 @@ PLIST_VARS+= zaptel x11 unixodbc ilbc webvmail ldap spandsp
#MAKE_FLAGS+= WITHOUT_ZAPTEL=1
#.endif
# gtkconsole depends on GTK 1.x
# gtkconsole depends on GTK 2.x
.if !empty(PKG_OPTIONS:Mx11)
. include "../../x11/gtk/buildlink3.mk"
. include "../../x11/gtk2/buildlink3.mk"
. include "../../devel/SDL/buildlink3.mk"
CONFIGURE_ARGS+= --with-sdl
CONFIGURE_ARGS+= --with-gtk
CONFIGURE_ARGS+= --with-gtk2
PLIST.x11= yes
.else
CONFIGURE_ARGS+= --without-sdl
CONFIGURE_ARGS+= --without-gtk
CONFIGURE_ARGS+= --without-gtk2
.endif
.if !empty(PKG_OPTIONS:Munixodbc)
@ -38,7 +38,7 @@ CONFIGURE_ARGS+= --with-unixodbc
PLIST.unixodbc= yes
.else
CONFIGURE_ARGS+= --without-ltdl
CONFIGURE_ARGS+= --without-odbc
CONFIGURE_ARGS+= --without-unixodbc
.endif
.if !empty(PKG_OPTIONS:Milbc)

View file

@ -1,6 +1,6 @@
$NetBSD: patch-aa,v 1.2 2011/06/09 09:17:27 jnemeth Exp $
$NetBSD: patch-aa,v 1.3 2011/07/16 21:35:11 jnemeth Exp $
--- Makefile.orig 2011-02-01 18:02:06.000000000 +0000
--- Makefile.orig 2011-06-16 15:58:22.000000000 +0000
+++ Makefile
@@ -126,7 +126,7 @@ DEBUG=-g3
@ -48,18 +48,16 @@ $NetBSD: patch-aa,v 1.2 2011/06/09 09:17:27 jnemeth Exp $
$(INSTALL) -d "$(DESTDIR)$(ASTVARRUNDIR)"
$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)"
$(INSTALL) -d "$(DESTDIR)$(ASTSPOOLDIR)/dictate"
@@ -544,8 +539,9 @@ installdirs:
$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http"
$(INSTALL) -d "$(DESTDIR)$(ASTMANDIR)/man8"
@@ -545,7 +540,7 @@ installdirs:
$(INSTALL) -d "$(DESTDIR)$(AGI_DIR)"
+ $(INSTALL) -d "$(DESTDIR)$(ASTDBDIR)"
$(INSTALL) -d "$(DESTDIR)$(ASTDBDIR)"
-bininstall: _all installdirs $(SUBDIRS_INSTALL)
+bininstall: installdirs $(SUBDIRS_INSTALL)
$(INSTALL) -m 755 main/asterisk $(DESTDIR)$(ASTSBINDIR)/
$(LN) -sf asterisk $(DESTDIR)$(ASTSBINDIR)/rasterisk
$(INSTALL) -m 755 contrib/scripts/astgenkey $(DESTDIR)$(ASTSBINDIR)/
@@ -637,21 +633,21 @@ upgrade: bininstall
@@ -637,21 +632,21 @@ upgrade: bininstall
# XXX why *.adsi is installed first ?
adsi:
@echo Installing adsi config files...
@ -85,7 +83,7 @@ $NetBSD: patch-aa,v 1.2 2011/06/09 09:17:27 jnemeth Exp $
if [ -f $${dst} ]; then \
if [ "$(OVERWRITE)" = "y" ]; then \
if cmp -s $${dst} $$x ; then \
@@ -679,9 +675,9 @@ samples: adsi
@@ -679,9 +674,9 @@ samples: adsi
-e 's|^astspooldir.*$$|astspooldir => $(ASTSPOOLDIR)|' \
-e 's|^astrundir.*$$|astrundir => $(ASTVARRUNDIR)|' \
-e 's|^astlogdir.*$$|astlogdir => $(ASTLOGDIR)|' \
@ -98,7 +96,7 @@ $NetBSD: patch-aa,v 1.2 2011/06/09 09:17:27 jnemeth Exp $
fi ; \
$(INSTALL) -d $(DESTDIR)$(ASTSPOOLDIR)/voicemail/default/1234/INBOX
build_tools/make_sample_voicemail "$(DESTDIR)$(ASTDATADIR)" "$(DESTDIR)$(ASTSPOOLDIR)"
@@ -707,7 +703,7 @@ samples: adsi
@@ -707,7 +702,7 @@ samples: adsi
webvmail:
@[ -d $(DESTDIR)$(HTTP_DOCSDIR)/ ] || ( printf "http docs directory not found.\nUpdate assignment of variable HTTP_DOCSDIR in Makefile!\n" && exit 1 )
@[ -d $(DESTDIR)$(HTTP_CGIDIR) ] || ( printf "cgi-bin directory not found.\nUpdate assignment of variable HTTP_CGIDIR in Makefile!\n" && exit 1 )
@ -107,7 +105,7 @@ $NetBSD: patch-aa,v 1.2 2011/06/09 09:17:27 jnemeth Exp $
$(INSTALL) -d $(DESTDIR)$(HTTP_DOCSDIR)/_asterisk
for x in images/*.gif; do \
$(INSTALL) -m 644 $$x "$(DESTDIR)$(HTTP_DOCSDIR)/_asterisk/"; \
@@ -860,7 +856,7 @@ uninstall-all: _uninstall
@@ -860,7 +855,7 @@ uninstall-all: _uninstall
rm -rf "$(DESTDIR)$(ASTVARLIBDIR)"
rm -rf "$(DESTDIR)$(ASTDATADIR)"
rm -rf "$(DESTDIR)$(ASTSPOOLDIR)"
@ -116,7 +114,7 @@ $NetBSD: patch-aa,v 1.2 2011/06/09 09:17:27 jnemeth Exp $
rm -rf "$(DESTDIR)$(ASTLOGDIR)"
menuconfig: menuselect
@@ -929,6 +925,7 @@ menuselect-tree: $(foreach dir,$(filter-
@@ -929,6 +924,7 @@ menuselect-tree: $(foreach dir,$(filter-
@echo "</menu>" >> $@
.PHONY: menuselect

View file

@ -1,8 +1,8 @@
$NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
$NetBSD: patch-ay,v 1.2 2011/07/16 21:35:11 jnemeth Exp $
--- main/features.c.orig 2010-09-29 21:12:43.000000000 +0000
--- main/features.c.orig 2011-06-23 18:23:21.000000000 +0000
+++ main/features.c
@@ -1005,12 +1005,12 @@ static int park_call_full(struct ast_cha
@@ -1154,14 +1154,14 @@ static int park_call_full(struct ast_cha
"Channel: %s\r\n"
"Parkinglot: %s\r\n"
"From: %s\r\n"
@ -10,14 +10,16 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
+ "Timeout: %jd\r\n"
"CallerIDNum: %s\r\n"
"CallerIDName: %s\r\n"
"ConnectedLineNum: %s\r\n"
"ConnectedLineName: %s\r\n"
"Uniqueid: %s\r\n",
pu->parkingexten, pu->chan->name, pu->parkinglot->name, event_from ? event_from : "",
- (long)pu->start.tv_sec + (long)(pu->parkingtime/1000) - (long)time(NULL),
+ (intmax_t)pu->start.tv_sec + (intmax_t)(pu->parkingtime/1000) - (intmax_t)time(NULL),
S_COR(pu->chan->caller.id.number.valid, pu->chan->caller.id.number.str, "<unknown>"),
S_COR(pu->chan->caller.id.name.valid, pu->chan->caller.id.name.str, "<unknown>"),
pu->chan->uniqueid
@@ -1473,7 +1473,7 @@ static int builtin_automonitor(struct as
S_COR(pu->chan->connected.id.number.valid, pu->chan->connected.id.number.str, "<unknown>"),
@@ -1627,7 +1627,7 @@ static int builtin_automonitor(struct as
len = strlen(touch_monitor) + 50;
args = alloca(len);
touch_filename = alloca(len);
@ -26,7 +28,7 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
snprintf(args, len, "%s,%s,m", S_OR(touch_format, "wav"), touch_filename);
} else {
caller_chan_id = ast_strdupa(S_COR(caller_chan->caller.id.number.valid,
@@ -1483,7 +1483,7 @@ static int builtin_automonitor(struct as
@@ -1637,7 +1637,7 @@ static int builtin_automonitor(struct as
len = strlen(caller_chan_id) + strlen(callee_chan_id) + 50;
args = alloca(len);
touch_filename = alloca(len);
@ -35,7 +37,7 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
snprintf(args, len, "%s,%s,m", S_OR(touch_format, "wav"), touch_filename);
}
@@ -1589,7 +1589,7 @@ static int builtin_automixmonitor(struct
@@ -1743,7 +1743,7 @@ static int builtin_automixmonitor(struct
len = strlen(touch_monitor) + 50;
args = alloca(len);
touch_filename = alloca(len);
@ -44,7 +46,7 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
snprintf(args, len, "%s.%s,b", touch_filename, (touch_format) ? touch_format : "wav");
} else {
caller_chan_id = ast_strdupa(S_COR(caller_chan->caller.id.number.valid,
@@ -1599,7 +1599,7 @@ static int builtin_automixmonitor(struct
@@ -1753,7 +1753,7 @@ static int builtin_automixmonitor(struct
len = strlen(caller_chan_id) + strlen(callee_chan_id) + 50;
args = alloca(len);
touch_filename = alloca(len);
@ -53,7 +55,7 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
snprintf(args, len, "%s.%s,b", touch_filename, S_OR(touch_format, "wav"));
}
@@ -5089,10 +5089,10 @@ static char *handle_parkedcalls(struct a
@@ -5552,10 +5552,10 @@ static char *handle_parkedcalls(struct a
AST_LIST_LOCK(&curlot->parkings);
AST_LIST_TRAVERSE(&curlot->parkings, cur, list) {
@ -66,7 +68,7 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
numparked++;
numparked += lotparked;
}
@@ -5144,13 +5144,13 @@ static int manager_parking_status(struct
@@ -5607,7 +5607,7 @@ static int manager_parking_status(struct
"Exten: %d\r\n"
"Channel: %s\r\n"
"From: %s\r\n"
@ -74,6 +76,8 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
+ "Timeout: %jd\r\n"
"CallerIDNum: %s\r\n"
"CallerIDName: %s\r\n"
"ConnectedLineNum: %s\r\n"
@@ -5615,7 +5615,7 @@ static int manager_parking_status(struct
"%s"
"\r\n",
cur->parkingnum, cur->chan->name, cur->peername,
@ -81,4 +85,4 @@ $NetBSD: patch-ay,v 1.1.1.1 2010/12/15 03:22:45 jnemeth Exp $
+ (intmax_t) cur->start.tv_sec + (intmax_t) (cur->parkingtime / 1000) - (intmax_t) time(NULL),
S_COR(cur->chan->caller.id.number.valid, cur->chan->caller.id.number.str, ""), /* XXX in other places it is <unknown> */
S_COR(cur->chan->caller.id.name.valid, cur->chan->caller.id.name.str, ""),
idText);
S_COR(cur->chan->connected.id.number.valid, cur->chan->connected.id.number.str, ""), /* XXX in other places it is <unknown> */