Commit Graph

195 Commits

Author SHA1 Message Date
Jason Parker
ede010d0d0 Fix some odd formatting I missed..
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@84437 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-02 19:01:59 +00:00
Jason Parker
01480eb1fb Finish up on transferee channel before return on failure.
Issue 10821, patch by Ivan


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@84410 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-10-02 18:52:55 +00:00
Russell Bryant
db99815a6a Handle the case where there are multiple dynamic features with the same digit
mapping, but won't always match the activated on/by access controls.  In that
case, the code needs to keep trying features for a match.
(reported by Atis on the asterisk-dev list, patched by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@82594 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-09-17 16:46:59 +00:00
Mark Michelson
2a3b64bf70 Fixes a memory leak
(closes issue #10658, reported and patched by Ivan)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@81682 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-09-06 15:20:36 +00:00
Russell Bryant
aa3b7e22f5 Fix an issue that can occur when you do an attended transfer to parking. If
you complete the transfer before the announcement of the parking spot finishes,
then the channel being parked will hear the remainder of the announcement.
These changes make it so that will not happen anymore.

Basically, res_features sets a flag on the channel is playing the announcement
to so that the file streaming core knows that it needs to watch out for a
channel masquerade, and if it occurs, to abort the announcement.

(closes BE-182)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@81599 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-09-05 20:53:41 +00:00
Joshua Colp
85bf0ee987 (closes issue #10618)
Reported by: dimas
Don't pass through the stopped sounds frame.... just drop it.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@81403 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-31 14:38:59 +00:00
Joshua Colp
279d96a974 (closes issue #10009)
Reported by: dimas
Don't output a bridge failed warning message if it failed because one of the channels was part of the masquerade process. That is perfectly normal.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@81401 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-30 23:53:41 +00:00
Joshua Colp
a47dcc167c (issue #10599)
Reported by: dimas
Handle the -1 control subclass during feature dialing (it indicates to stop sounds).


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@81369 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-30 14:23:40 +00:00
Russell Bryant
ed6d4ec72c When executing a dynamic feature, don't look it up a second time by digit pattern
after we already looked it up by name.  This causes broken behavior if there is
more than one feature defined with the same digit pattern.
(closes issue #10539, reported by bungalow, patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@80573 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-23 20:16:41 +00:00
Joshua Colp
784d5f32c0 (closes issue #10415)
Reported by: atis
Revert fix for #10327 as it causes more issues then it solves.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@79397 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-08-14 15:27:13 +00:00
Joshua Colp
cd53ad9161 (closes issue #10327)
Reported by: kkiely
Instead of directly mucking with the extension/context/priority of the channel we are transferring when it has a PBX simply call ast_async_goto on it. This will ensure that the channel gets handled properly and sent to the right place.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@77778 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-30 17:11:02 +00:00
Russell Bryant
6a2ab6b475 Pass HOLD and UNHOLD frames to the other channel when they are returned from a
native bridge function.  This fixes a problem where when two zap channels are
natively bridged and one does a flash hook, the other channel did not receive
music on hold.  (Reported to me directly by Doug Bailey at Digium)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@73512 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-07-05 20:50:08 +00:00
Tilghman Lesher
f02d20405b Issue 10044 - chan->cdr is NULL here, so peer->cdr is what we really wanted to use
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@71291 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-24 17:50:24 +00:00
Steve Murphy
6f6ffbb5c5 This patch is meant to fix 8433; where clid and src are lost via bridging.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@71230 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-23 03:29:48 +00:00
Joshua Colp
bba22a6876 Merged revisions 69846 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r69846 | file | 2007-06-19 08:57:55 -0400 (Tue, 19 Jun 2007) | 2 lines

Add parked call extension AFTER the parking slot has been announced, otherwise two threads will try to handle the same channel and it will go kaboom. (issue #9191 reported by japple)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@69847 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-19 13:00:57 +00:00
Russell Bryant
1f9898d8bd Fix a silly deadlock in res_features that I found while debugging on one of
blitzrage's test machines.  It was one of the situations where he was seeing
hung channels, and may be the cause of some of the reports from other people.
(related to issue #9235)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@69579 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-15 20:18:58 +00:00
Joshua Colp
26038a4b77 Returning a value that indicates the parking of a call was a success when it really wasn't (because the parking slot selected was in use) is the wrong thing to do. (issue #9723 reported by mdu113)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@67064 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-06-04 17:41:59 +00:00
Russell Bryant
69cd2cb213 Properly fix a problem that occurs when you set PARKINGEXTEN to an exten where
a call is already parked.  (issue #9723, patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@64426 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-15 19:52:18 +00:00
Russell Bryant
39ebbfe69d When someone requests a specific parking space using the PARKINGEXTEN variable,
ensure that no other caller is already there.
(issue #9723, reported by mdu113, patch by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@64353 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-14 21:16:39 +00:00
Joshua Colp
438335c9a7 Make the PARKINGEXTEN feature of parking actually work. (issue #9708 reported by mdu113)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@63872 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-11 15:43:14 +00:00
Russell Bryant
1fb11df91a I mixed up the use of the find_feature() function, so I renamed it
find_dynamic_feature, and changed the code to use the correct lock when
using it.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@63448 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 16:53:09 +00:00
Russell Bryant
fd993ffd7d Use a read/write lock when accessing the built-in features.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@63445 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-08 16:30:43 +00:00
Russell Bryant
6e13855338 Merged revisions 62547 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r62547 | russell | 2007-05-01 16:55:19 -0500 (Tue, 01 May 2007) | 4 lines

Remove an unnecessary check that makes it so if you hang up after doing an
attended transfer before the target extension answers the channel, the transfer
is not successful.  (issue #9338, patch by svanlund)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@62548 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-05-01 21:57:10 +00:00
Steve Murphy
18ad368048 Finished up a previous fix to overcome a compiler warning; the app NoCDR() has been updated to mark the channel CDR as POST_DISABLED instead of destroying the CDR; this way its flags are propagated thru a bridge and the CDR is actually dropped. The cases where only one channel in a bridge has a CDR was cleaned up.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@61136 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-10 05:18:26 +00:00
Kevin P. Fleming
bf4969f66e fix up some warnings found using --enable-dev-mode
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@61070 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 19:55:14 +00:00
Steve Murphy
7d5a79a0b9 This is a big improvement over the current CDR fixes. It may still need refinement, but this won't have as many folks bothered.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@60989 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-04-09 18:32:07 +00:00
Steve Murphy
798039b4d8 several changes via kpflemings review
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@59522 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-30 17:51:17 +00:00
Steve Murphy
9c69e34f62 These mods fix CDR issues from 8221, 8593, 8680, 8743, and perhaps others. Mainly with CDRs generated from transfer situations.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@59486 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-03-30 14:11:59 +00:00
Russell Bryant
2986791f67 Clean up a few coding guidelines issues - spaces to tabs, use sizeof() to pass
the size of a static buffer, add spaces ...


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@54888 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-02-16 17:40:38 +00:00
Steve Murphy
be0c0cd6dd this mod from 8593 (dstchannel in cdr is empty when transfer call).
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@51716 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-23 20:32:54 +00:00
Joshua Colp
2db51f4608 Merged revisions 51145 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r51145 | file | 2007-01-16 12:36:50 -0500 (Tue, 16 Jan 2007) | 2 lines

Return previous behavior. ParkedCalls will be able to do DTMF based transfers again. trunk however will get an option to allow this to be set on/off. (issue #8804 reported by nortex)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@51148 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-16 17:39:50 +00:00
Jason Parker
9e621e99a5 Save 1 whopping byte of allocated memory!
This looks like it may have been a chicken/egg scenario..

You had to call a cleanup func, because everything was allocated.
Then since you had to call a cleanup func, you were forced to allocate - ie; strdup("").


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@49742 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-06 00:24:38 +00:00
Kevin P. Fleming
444adcb477 reduce stack consumption for AMI and AMI/HTTP requests by nearly 20K in most cases
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@49676 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2007-01-05 22:16:33 +00:00
Joshua Colp
0bed57a7f1 Merged revisions 48154 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r48154 | file | 2006-11-30 14:04:11 -0500 (Thu, 30 Nov 2006) | 2 lines

Do not listen for DTMF on the bridge that comes into existence when ParkedCall is executed. This means native bridging can now occur for this. (issue #8406 reported by kebl0155)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@48155 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-30 19:05:14 +00:00
Steve Murphy
517978fd5f These mods are to solve the problem in bug 7506. It's a lot of rework to solve a fairly small problem... such is life.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@47303 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-07 23:46:41 +00:00
Tilghman Lesher
e05a2752e8 Reverse change of "show" to "list" and make several other commands more consistent with "category verb arguments"
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@47051 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-11-02 23:00:20 +00:00
Russell Bryant
439f15bdb9 Merged revisions 43778 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r43778 | russell | 2006-09-27 12:54:30 -0400 (Wed, 27 Sep 2006) | 42 lines

Fix a problem that occurred if a user entered a digit that matched a bridge
feature that was configured using multiple digits, and the digit that was
pressed timed out in the feature digit timeout period.  For example, if blind
transfer is configured as '##', and a user presses just '#'.  In this situation,
the call would lock up and no longer pass any frames.
(issue #7977 reported by festr, and issue #7982 reported by michaels and
 valuable input provided by mneuhauser and kuj.  Fixed by me, with testing help
 and peer review from Joshua Colp).

There are a couple of issues involved in this fix:

1) When ast_generic_bridge determines that there has been a timeout, it returned
   AST_BRIDGE_RETRY.  Then, when ast_channel_bridge gets this result, it calls
   ast_generic_bridge over again with the same timestamp for the next event.
   This results in an endless loop of nothing until the call is terminated.
   This is resolved by simply changing ast_generic_bridge to return 
   AST_BRIDGE_COMPLETE when it sees a timeout.

2) I also changed ast_channel_bridge such that if in the process of calculating
   the time until the next event, it knows a timeout has already occured, to
   immediately return AST_BRIDGE_COMPLETE instead of attempting to bridge the
   channels anyway.

3) In the process of testing the previous two changes, I ran into a problem in
   res_features where ast_channel_bridge would return because it determined
   that there was a timeout.  However, ast_bridge_call in res_features would
   then determine by its own calculation that there was still 1 ms before the
   timeout really occurs.  It would then proceed, and since the bridge broke
   out and did *not* return a frame, it interpreted this as the call was over
   and hung up the channels.

   The reason for this was because ast_bridge_call in res_features and
   ast_channel_bridge in channel.c were using different times for their
   calculations.  channel.c uses the start_time on the bridge config, which
   is the time that the feature digit was recieved.  However, res_features
   had another time, 'start', which was set right before calling 
   ast_channel_bridge.  'start' will always be slightly after start_time in the
   bridge config, and sometimes enough to round up to one ms.

   This is fixed by making ast_bridge_call use the same time as 
   ast_channel_bridge for the timeout calculation.

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@43779 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-27 16:55:49 +00:00
Kevin P. Fleming
41d3e99e28 move ADSI functionality into ast_ namespace
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@43309 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-20 04:34:51 +00:00
Kevin P. Fleming
fcb999c01c merge qwell's CLI verbification work
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@43212 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-09-18 19:54:18 +00:00
Matt O'Gorman
05a695af72 everything that loads a config that needs a config file to run
now reports AST_MODULE_LOAD_DECLINE when loading if config file
is not there, also fixed an error in res_config_pgsql where it 
had a non static function when it should.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@41633 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-31 21:00:20 +00:00
Joshua Colp
c6977b9983 Merge in VLDTMF support with Zaptel/Core done by the ever great Darumkilla Russell Bryant and the RTP portion done by myself, Muffinlicious Joshua Colp. This has gone through so many discussions/revisions it's not funny but we finally have it!
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@41507 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-31 01:59:02 +00:00
Kevin P. Fleming
ece7018515 add one remaining bit of functionality to the features.conf applicationmap (from Matt Nicholson in Digium Express Services)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@41281 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-29 21:20:43 +00:00
Kevin P. Fleming
0a27d8bfe5 merge new_loader_completion branch, including (at least):
- restructured build tree and makefiles to eliminate recursion problems
  - support for embedded modules
  - support for static builds
  - simpler cross-compilation support
  - simpler module/loader interface (no exported symbols)



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@40722 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-21 02:11:39 +00:00
Joshua Colp
d5152177f3 Properly check to see if parkingnum is a number (issue #7762 reported by robf)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@40599 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-20 04:25:28 +00:00
Russell Bryant
92bd7f19f7 Merge team/russell/ast_verbose_threadstorage
- instead of defining a free() wrapper in a bunch of files, define it as
  ast_free() in utils.h and remove the copies from all the files.

- centralize and abstract the code used for doing thread storage. The code
  lives in threadstorage.h, with one function being implemented in utils.c.
  This new API includes generic thread storage as well as special functions
  for handling thread local dynamic length string buffers.

- update ast_inet_ntoa() to use the new threadstorage API
- update ast_state2str() to use the new threadstorage API
- update ast_cli() to use the new threadstorage API

- Modify manager_event() to use thread storage. Instead of using a buffer of
  4096 characters as the workspace for building the manager event, use a thread
  local dynamic string.  Now there is no length limitation on the length of the
  body of a manager event.

- Significantly simplify the handling of ast_verbose() ...
  - Instead of using a static char buffer and a lock to make sure only one
    thread can be using ast_verbose() at a time, use a thread local dynamic
    string as the workspace for preparing the verbose message. Instead of
    locking around the entire function, the only locking done now is when the
    message has been built and is being deliviered to the list of registered
    verbose message handlers.
  - This function was doing a strdup() on every message passed to it and
    keeping a queue of the last 200 messages in memory. This has been
    completely removed. The only place this was used was that if there were
    any messages in the verbose queue when a verbose handler was registered,
    all of the messages in the queue would be fed to it.  So, I just made sure
    that the console verbose handler and the network verbose handler (for
    remote asterisk consoles) were registered before any verbose messages.
    pbx_gtkconsole and pbx_kdeconsole will now lose a few verbose messages at
    startup, but I didn't feel the performance hit of this message queue was
    worth saving the initial verbose output for these very rarely used modules.
  - I have removed the last three arguments to the verbose handlers, leaving
    only the string itself because they aren't needed anymore. For example,
    ast_verbose had some logic for telling the verbose handler to add
    a newline if the buffer was completely full. Now that the buffer can grow
    as needed, this doesn't matter anymore.
  - remove unused function, ast_verbose_dmesg() which was to dispatch the
    message queue
  - Convert the list of verbose handlers to use the linked list macros.

- add missing newline characters to a few ast_verbose() calls

- convert the list of log channels to use the linked list macros in logger.c

- fix close_logger() to close all of the files it opened for logging

- update ast_log() to use a thread local dynamic string for its workspace
  for preparing log messages instead of a buffer of size BUFSIZ (8kB on my
  system) allocated on the stack.  The dynamic string in this case is limited
  to only growing to a maximum size of BUFSIZ.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@39272 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-08 06:32:04 +00:00
Russell Bryant
4d7c67fc72 Merge my applicationmap_fixup branch to address the issues described in this
post to the asterisk-dev mailing list:
  http://lists.digium.com/pipermail/asterisk-dev/2006-August/022174.html

This implements full control over both which channel(s) can activate a dynamic
feature, as well as which channel to run the application on.  I also updated
the documentation on the applicationmap in features.conf.sample in hopes that
the configuration is more clear.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@39109 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-07 04:15:52 +00:00
Kevin P. Fleming
652d06f998 Merged revisions 38686 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r38686 | kpfleming | 2006-08-01 18:07:06 -0500 (Tue, 01 Aug 2006) | 2 lines

ensure that the 'feature digit timeout' value is taken into account when deciding how long the bridge should run (this fixes a problem report where a digit press that did not invoke a feature is never passed across the bridge)

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@38687 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-08-01 23:09:28 +00:00
Russell Bryant
03356c2a4d fix seg fault when the parked call that timed out was the last one in the list
of parked calls (fixes issue #7565)


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@38330 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-27 04:44:49 +00:00
Kevin P. Fleming
6d0742fc16 merge Russell's 'hold_handling' branch, finally implementing music-on-hold handling the way it was decided at AstriDevCon Europe 2006 (and the way people really want it to be)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@37988 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-07-19 20:44:39 +00:00
Olle Johansson
f8311adcda METERMAIDS:
-----------
- Adding devicestate providers, a new architecture to add non-channel related
  device state information, like parking lots, queues, meetmes, vending machines
  and Windows 98 reboots (lots of blinking on those lights)
- Adding provider for parking lots, so you can subscribe to the status of a
  parking lot
- Adding provider for meetme, so you can have a blinking lamp for a meetme
  ( Example: exten => edvina,hint,meetme:1234 )
- Adding support for directed parking - set the PARKINGEXTEN before you manually
  call Park() and you will be parked on that space. If it's occupied, dialplan
  execution will continue.

This work was sponsored by Voop A/S - www.voop.com


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@36055 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2006-06-26 16:43:21 +00:00