Commit Graph

803 Commits

Author SHA1 Message Date
Russell Bryant 2f6cbc76ec Improve some broken cookie parsing code. Previously, manager login over HTTP
would only work if the mansession_id cookie was first.  Now, the code builds
a list of all of the cookies in the Cookie header.  This fixes a problem
observed by users of the Asterisk GUI.
(closes AST-20)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114600 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-23 22:18:12 +00:00
Russell Bryant 74694c686d Fix an issue that caused getting the correct next channel to not always work.
Also, remove setting the amount of time to wait for a digit from 5 seconds back
down to 1/10 of a second.  I believe this was so the beep didn't get played over
and over really fast, but a while back I put in another fix for that issue.

(closes issue #12498)
Reported by: jsmith
Patches:
      app_chanspy_channel_walk.trunk.patch uploaded by jsmith (license 15)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114597 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-23 20:49:18 +00:00
Russell Bryant f8848a7fe8 Store the manager session ID explicitly as 4 byte ID instead of a ulong. The
mansession_id cookie is coded to be limited to 8 characters of hex, and this
could break logins from 64-bit machines in some cases.
(inspired by AST-20)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114591 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-23 17:55:31 +00:00
Joshua Colp d4ebf1dff1 Instead of stopping dialplan execution when SayNumber attempts to say a large number that it can not print out a message informing the user and continue on.
(closes issue #12502)
Reported by: bcnit


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114579 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-23 14:54:11 +00:00
Russell Bryant b3a211bdc3 I thought I was going to be able to leave 1.4 alone, but that was not the case.
I ran into some problems with G.722 in 1.4, so I have merged in all of the fixes
in this area that I have made in trunk/1.6.0, and things are happy again.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114550 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-22 21:14:55 +00:00
Russell Bryant c8c2c33550 Don't destroy a manager session if poll() returns an error of EAGAIN.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114284 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-18 21:48:06 +00:00
Mark Michelson f32e7af11a Clearing up error messages so they make a bit more sense. Also removing a redundant error
message.

Issue AST-15



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114257 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-18 17:44:29 +00:00
Russell Bryant 46c685af6c Remove redundant safety net. The check for the autoservice channel list state
accomplishes the same goal in a better way.

(issue #12470)
Reported By: atis


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114230 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-17 22:15:43 +00:00
Mark Michelson 171a6a24bb Add prototype for ast_dsp_frame_freed. I'm not sure how this was
compiling before...



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114211 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-17 16:50:46 +00:00
Mark Michelson 71b704ef78 It was possible for a reference to a frame which was part of a freed DSP to still be
referenced, leading to memory corruption and eventual crashes. This code change ensures
that the dsp is freed when we are finished with the frame. This change is very similar
to a change Russell made with translators back a month or so ago.

(closes issue #11999)
Reported by: destiny6628
Patches:
      11999.patch uploaded by putnopvut (license 60)
Tested by: destiny6628, victoryure



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114207 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-17 16:28:03 +00:00
Mark Michelson 524efc5cd5 Increase the retry count when attempting to show channels. This apparently
cleared an issue someone was seeing when attempting to show channels when
the load was high.

(closes issue #11667)
Reported by: falves11
Patches:
      11677.txt uploaded by russell (license 2)
Tested by: falves11



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114117 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-14 17:41:03 +00:00
Mark Michelson f689fffa71 Save a local copy of the generate callback prior to unlocking the channel in
case the generate callback goes NULL on us after the channel is unlocked. Thanks
to Russell for pointing this need out to me.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114106 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-14 14:58:02 +00:00
Joshua Colp 19b8841503 Don't change the SSRC when a new source comes into play, this might happen quite often and depending on the remote side... they might not like this.
(closes issue #12353)
Reported by: dimas


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114100 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-14 13:52:49 +00:00
Jason Parker 6007dc7814 It's possible that a channel can have an async goto on the successful execution of an application as well.
Closes issue #12172.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114072 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-11 21:35:16 +00:00
Mark Michelson 1a9b7dc5c5 Fix 1.4 build when LOW_MEMORY is enabled.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114051 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-10 20:59:49 +00:00
Jason Parker 6d08d42e0e Only try to prefix language if we are not using an absolute path (suffix it otherwise).
en/var/lib/asterisk/sounds/blah.gsm is a very silly path.

(closes issue #12379)
Reported by: kuj
Patches:
      12379-absolutepath.diff uploaded by qwell (license 4)
Tested by: kuj, qwell


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@114035 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-10 17:26:10 +00:00
Jason Parker 6ba9909eda Work around some silliness caused by sys/capability.h - this should fix compile errors a number of users have been experiencing.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@113402 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-08 16:56:52 +00:00
Joshua Colp 8c03119ce5 If audio suddenly gets fed into one side of a channel after a lapse of frames flush the other factory so that old audio does not remain in the factory causing the sync code to not execute.
(closes issue #12296)
Reported by: jvandal


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@113296 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-08 15:03:43 +00:00
Mark Michelson 7892ddd9f5 This fix prevents a deadlock that was experienced in chan_local. There was
deadlock prevention in place in chan_local, but it would not work in a specific
case because the channel was recursively locked. By unlocking the channel prior
to calling the generator's generate callback in ast_read_generator_actions(), we
prevent the recursive locking, and therefore the deadlock.

(closes issue #12307)
Reported by: callguy
Patches:
      12307.patch uploaded by putnopvut (license 60)
Tested by: callguy



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@113065 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-07 16:08:45 +00:00
Joshua Colp 2cfae0a8f3 Pass in the path to Zaptel for systems that install Zaptel headers in a separate location.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@112711 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-04 00:52:36 +00:00
Joshua Colp 27da06a930 One thing at a time... let's get 1.4 building.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@112709 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-04 00:48:01 +00:00
Dwayne M. Hubbard 0f7c06dc26 add a Zaptel timer check to verify the timer is responding when Zaptel support is compiled into Asterisk and Zaptel drivers are loaded. This will help people not waste their valuable time debugging side effects.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@112689 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-03 23:57:44 +00:00
Mark Michelson b4cf033072 Fix a race condition in the manager. It is possible that a new manager event
could be appended during a brief time when the manager is not waiting for input.
If an event comes during this period, we need to set an indicator that there is an
event pending so that the manager doesn't attempt to wait forever for an event that
already happened.

(closes issue #12354)
Reported by: bamby
Patches:
      manager_race_condition.diff uploaded by bamby (license 430)
	  (comments added by me)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@112468 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-02 17:36:04 +00:00
Joshua Colp 65767b4290 Disable Packet2Packet bridging when we need to feed DTMF frames into the core. Some implementations do not like how we switch between things.
(closes issue #12212)
Reported by: bamby


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@112209 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-01 18:02:43 +00:00
Mark Michelson f4c389df5c Initialize the __res_state structure used for dns purposes
to all 0's prior to using it. This is due to valgrind's complaints
on issue #12284 as well as an excerpt found in "Description" portion
of the online man page found here:

http://www.iti.cs.tu-bs.de/cgi-bin/UNIXhelp/man-cgi?res_nquery+3RESOLV

(pertains to issue #12284 but does not necessarily close it)



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@112138 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-01 17:21:21 +00:00
Joshua Colp 214973a574 Ensure that we do not exceed the hold's maximum size with a single frame.
(closes issue #12047)
Reported by: fabianoheringer
Tested by: fabianoheringer


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@112125 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-04-01 16:45:14 +00:00
Tilghman Lesher cb67f98a5a For FreeBSD, at least, the ifa_addr element could be NULL.
(closes issue #12300)
 Reported by: festr
 Patches: 
       acl.c.patch uploaded by festr (license 443)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@111442 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-27 19:23:12 +00:00
Steve Murphy 8a02ac6f79 These small documentation updates made in response to a query in
asterisk-users, where a user was using Playback, but needed the
features of Background, and had no idea that Background existed,
or that it might provide the features he needed. I thought the
best way to avert these kinds of queries was to provide "See Also"
references in all three of "Background", "Playback", "WaitExten".
Perhaps a project to do this with all related apps is in order.



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@111391 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-27 13:03:28 +00:00
Jason Parker 7fbcd155c1 Put this flag back so we don't change the API.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@111280 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-27 00:25:13 +00:00
Jason Parker 22078d33d4 Remove excessive smoother optimization that was causing audio glitches (small "pops")
after (about 200ms later) an "incorrectly" sized frame was received.

While it would be very nice to keep this as optimized as possible, it makes no sense
 for the smoother to be dropping random bits of audio like this.  Isn't that the
 whole point of a smoother?

Closes issue #12093.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@111245 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-26 23:26:33 +00:00
Joshua Colp be84adc952 Add an option (transmit_silence) which transmits silence during both Record() and DTMF generation. The reason this is an option is that in order to transmit silence we have to setup a translation path. This may not be needed/wanted in all cases.
(closes issue #10058)
Reported by: tracinet


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@110628 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-25 14:37:35 +00:00
Russell Bryant 478de3ebb9 Shorten the ast_waitfor() timeout from 500 ms to 50 ms in the autoservice thread.
This really should not make a difference except in very rare cases.  That case would
be that all of the channels in autoservice are not generating any frames.  In that
case, this change reduces the potential amount of time that a thread waits in
ast_autoservice_stop() for the autoservice thread to wrap back around to the beginning
of its loop.

(closes issue #12266, reported by dimas)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@110395 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-20 23:13:56 +00:00
Joshua Colp 996d3a1c2e Make sure that the mark bit does not incorrectly cause video frame timestamps to be calculated as if they are audio frames.
(closes issue #11429)
Reported by: sperreault
Patches:
      11429-frametype.diff uploaded by qwell (license 4)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@110019 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-19 18:20:28 +00:00
Steve Murphy 88b0da7c6c (closes issue #11442)
Reported by: tzafrir
Patches:
      11442.patch uploaded by murf (license 17)
Tested by: murf

I didn't give tzafrir very much time to test this, but if he does 
still have remaining issues, he is welcome to 
re-open this bug, and we'll do what is called for.

I reproduced the problem, and tested the fix, so I hope I
am not jumping by just going ahead and committing the fix.

The problem was with what file_save does with templates; 
firstly, it tended to print out multiple options:

[my_category](!)(templateref)

instead of 

[my_category](!,templateref)

which is fixed by this patch.


Nextly, the code to suppress output of duplicate declarations
that would occur because the reader copies inherited declarations
down the hierarchy, was not working. Thus:


 [master-template](!)
 mastervar = bar


 [template](!,master-template)
 tvar = value


 [cat](template)
 catvar = val


would be rewritten as:

 ;!
 ;! Automatically generated configuration file
 ;! Filename: experiment.conf (/etc/asterisk/experiment.conf)
 ;! Generator: Manager
 ;! Creation Date: Tue Mar 18 23:17:46 2008
 ;!
 
 [master-template](!)
 mastervar = bar

 
 [template](!,master-template)
 mastervar = bar
 tvar = value

 
 [cat](template)
 mastervar = bar
 tvar = value
 catvar = val

This has been fixed. Since the config reader 'explodes' inherited
vars into the category, users may, in certain circumstances, see
output different from what they originally entered, but it should
be both correct and equivalent.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@109908 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-19 15:41:13 +00:00
Russell Bryant 1dae97f2aa Tweak spacing in a recent change because I'm very picky.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@109838 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-19 04:06:05 +00:00
Joshua Colp 5fda7910c6 Put a maximum limit on the number of payloads accepted, and also make sure a given payload does not exceed our maximum value.
(AST-2008-002)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@109386 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-18 14:58:39 +00:00
Mark Michelson 29a32cf040 Fix a logic flaw in the code that stores lock info which is displayed
via the "core show locks" command. The idea behind this section of code was
to remove the previous lock from the list if it was a trylock that had failed.
Unfortunately, instead of checking the status of the previous lock, we were referencing
the index immediately following the previous lock in the lock_info->locks array. 
The result of this problem, under the right circumstances, was that the lock which 
we currently in the process of attempting to acquire could "overwrite" the previous lock 
which was acquired. While this does not in any way affect typical operation, it *could*
lead to misleading "core show locks" output.




git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@109226 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-17 22:05:49 +00:00
Jason Parker 4501c61d73 Backport revision 106439 from trunk. I didn't realize this was broken in 1.4 as well.
Closes issue #12222.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@109057 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-17 15:15:56 +00:00
Michiel van Baak c16da7c25b add missing break to case AST_CONTROL_SRCUPDATE
(closes issue #12228)
Reported by: andrew
Patches:
      SRC.patch uploaded by andrew (license 240)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@108961 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-16 21:47:10 +00:00
Russell Bryant efa3b46cdf Fix another issue that was causing crashes in chanspy. This introduces a new
datastore callback, called chan_fixup().  The concept is exactly like the
fixup callback that is used in the channel technology interface.  This callback
gets called when the owning channel changes due to a masquerade.  Before this
was introduced, if a masquerade happened on a channel being spyed on, the
channel pointer in the datastore became invalid.

(closes issue #12187)
(reported by, and lots of testing from atis)
(props to file for the help with ideas)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@108583 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-13 21:38:16 +00:00
Russell Bryant a169524ff6 (closes issue #12187, reported by atis, fixed by me after some brainstorming
on the issue with mmichelson)

- Update copyright info on app_chanspy.

- Fix a race condition that caused app_chanspy to crash.  The issue was that
  the chanspy datastore magic that was used to ensure that spyee channels did
  not disappear out from under the code did not completely solve the problem.
  It was actually possible for chanspy to acquire a channel reference out of
  its datastore to a channel that was in the middle of being destroyed.  That
  was because datastore destruction in ast_channel_free() was done near the
  end.  So, this left the code in app_chanspy accessing a channel that was
  partially, or completely invalid because it was in the process of being free'd
  by another thread.  The following sort of shows the code path where the race 
  occurred:

  =============================================================================
  Thread 1 (PBX thread for spyee chan)  ||   Thread 2 (chanspy)
  --------------------------------------||-------------------------------------
  ast_channel_free()                    ||
    - remove channel from channel list  ||
    - lock/unlock the channel to ensure ||
      that no references retrieved from ||
      the channel list exist.           ||
  --------------------------------------||-------------------------------------
                                        || channel_spy()
    - destroy some channel data         ||  - Lock chanspy datastore
                                        ||  - Retrieve reference to channel
                                        ||  - lock channel
                                        ||  - Unlock chanspy datastore
  --------------------------------------||-------------------------------------
     - destroy channel datastores       ||
        - call chanspy datastore d'tor  ||  
          which NULL's out the ds'      ||  - Operate on the channel ...
          reference to the channel      ||     
                                        ||
    - free the channel                  || 
                                        ||
                                        ||  - unlock the channel
  --------------------------------------||-------------------------------------
  =============================================================================



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@108135 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-12 19:57:42 +00:00
Joshua Colp 4a8d87fe98 Add a trigger mode that triggers on both read and write. The actual function that returns the combined audio frame though will wait until both sides have fed in audio, or until one side stops (such as the case when you call Wait).
(closes issue #11945)
Reported by: xheliox


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@108083 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-12 18:26:37 +00:00
Russell Bryant 2016f5ba10 Destroy the channel lock after the channel datastores.
(inspired by issue #12187)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@108031 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-12 16:59:07 +00:00
Kevin P. Fleming 9f2d2cea4b check for compiler support for -fno-strict-overflow before using it (tested with Debian's gcc 4.3, 4.1 and 3.4)
(closes issue #12179)
Reported by: Netview


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107408 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-11 14:07:59 +00:00
Kevin P. Fleming 553070456b fix up various compiler warnings found with gcc-4.3:
- the output of flex includes a static function called 'input' that is not used, so for the moment we'll stop having the compiler tell us about unused variables in the flex source files (a better fix would be to improve our flex post-processing to remove the unused function)

- main/stdtime/localtime.c makes assumptions about signed integer overflow, and gcc-4.3's improved optimizer tries to take advantage of handling potential overflow conditions at compile time; for now, suppress these optimizations until we can fiure out if the code needs improvement

- main/udptl.c has some references to uninitialized variables; in one case there was no bug, but in the other it was certainly possibly for unexpected behavior to occur

- main/editline/readline.c had an unused variable



git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107352 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-11 11:04:29 +00:00
Tilghman Lesher e1bccfc3fe Use non-global storage for eswitch
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107230 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-10 21:32:24 +00:00
Russell Bryant 42caaed426 Fix another bug specifically related to asynchronous call origination. Once the
PBX is started on the channel using ast_pbx_start(), then the ownership of the
channel has been passed on to another thread.  We can no longer access it in this
code.  If the channel gets hung up very quickly, it is possible that we could
access a channel that has been free'd.

(inspired by BE-386)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107161 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-10 20:17:11 +00:00
Russell Bryant 0a4fc5b8c6 Fix some bugs related to originating calls. If the code failed to start a PBX
on the channel (such as if you set a call limit based on the system's load
average), then there were cases where a channel that has already been free'd
using ast_hangup() got accessed.  This caused weird memory corruption and
crashes to occur.

(fixes issue BE-386)
(much debugging credit goes to twilson, final patch written by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-10 20:04:27 +00:00
Russell Bryant 7a47679898 Resolve a compiler warning.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107102 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-10 17:13:17 +00:00
Russell Bryant 72e4729ad5 Fix a race condition where the generator can go away
(closes issue #12175, reported by edantie, patched by me)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@107099 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2008-03-10 16:58:57 +00:00