Yes it should always decrease the max_forwards, otherwise it wouldn't provide useful loop detection.  This is why the rfc recommends 70 as the default value.

8.1.1.6 Max-Forwards

   The Max-Forwards header field serves to limit the number of hops a
   request can transit on the way to its destination.  It consists of an
   integer that is decremented by one at each hop.  If the Max-Forwards
   value reaches 0 before the request reaches its destination, it will
   be rejected with a 483(Too Many Hops) error response.

   A UAC MUST insert a Max-Forwards header field into each request it
   originates with a value that SHOULD be 70.  This number was chosen to
   be sufficiently large to guarantee that a request would not be
   dropped in any SIP network when there were no loops, but not so large
   as to consume proxy resources when a loop does occur.  Lower values
   should be used with caution and only in networks where topologies are
   known by the UA.


On Apr 28, 2014, at 5:13 PM, Rafael Kaihatu <rafael.kaihatu@8x8.com> wrote:

Hi,

issue description:
inbound call arrives with Max-Forwards set to 9 (or some low value), after the 9th internal transfer (it executes the transfer command, but the call doesnt leave the freeswitch instance), the call is dropped.

I am using a few transfers to "route the call", and then another few to "put the call on hold and play Music on Hold", eventually I need to execute more than 9.

should the switch_ivr_session_transfer function (./src/switch_ivr.c:1716 - v1.2) always decrease the SWITCH_MAX_FORWARDS_VARIABLE channel variable ?
is there a way to disable this ?

Thanks
Rafael