[HELP] UAC and UAS for timer refresher header

Hi all,

I have a intriguing issue that the RFC is not really clear about.

Sometimes call hang-up on 45min mark because no-one refresh the call (
far-end hangup)

On both good and bad calls:

1)We initiate an invite
2)200OK is answered as refresher=UAS
3)Send ACK
4) ‘follow-up’ re-invite is received changing refresher to UAC
5) my sip accept with 200OK
6) receive ACK

after 15 minutes on a good call:

  1. we send reinvite continuing the CSeq of initial invite refresher=uac
  2. receive 200OK refresher=uac
    and continues to do so every 15 min

After 15 min for bad call:

  1. we send reinvite continuing the CSeq of initial invite refresher=uac
  2. receive 200OK refresher=uac
  3. receive a reinvite changing refresher=UAS
  4. we 200ok refresher=uas

Call hangup 30 min later (timer is set to 1800s)

The snip of RFC 3261 states that UAS AND UAC changes on each sip
transaction. But what about the timer refresher? Does it use the UAS and
UAC based on who initiated the dialog???

Asterisk seems to think/use whatever was set when dialog was opened,
otherwise it wouldn’t send the first refresh and it wouldnt be kept from
sending.

Whats confusing is that if it uses per transaction then why would it send
the first reinvite if it was changed on the begging?

User Agent Client (UAC): A user agent client is a logical entity
that creates a new request, and then uses the client
transaction state machinery to send it. The role of UAC lasts
only for the duration of that transaction. In other words, if
a piece of software initiates a request, it acts as a UAC for
the duration of that transaction. If it receives a request
later, it assumes the role of a user agent server for the
processing of that transaction.

  UAC Core: The set of processing functions required of a UAC that
     reside above the transaction and transport layers.

  User Agent Server (UAS): A user agent server is a logical entity
     that generates a response to a SIP request.  The response
     accepts, rejects, or redirects the request.  This role lasts
     only for the duration of that transaction.  In other words, if
     a piece of software responds to a request, it acts as a UAS for
     the duration of that transaction.  If it generates a request
     later, it assumes the role of a user agent client for the
     processing of that transaction.

  UAS Core: The set of processing functions required at a UAS that
     resides above the transaction and transport layers.

  User Agent (UA): A logical entity that can act as both a user
     agent client and user agent server.

Right now they are set the following on sip.conf
I’ve tried setting to UAS and same result.
I’ve tried to refuse timer, far-end hang up after 30min

Session Timers: Accept
Session Refresher: uac
Session Expires: 1800 secs
Session Min-SE: 90 secs