[asterisk-users] SIP Context Confusion

Anthony Plack tony at plack.net
Sat Apr 4 11:26:57 CDT 2009


> It took me a while to understand what you were saying ... more clarity
> to your emails!
>

I was trying to be clear and complete.  So many times if you forget to mention 1 thing or another, or are too long, you get non-helpful comments back.  But I will try harder.  Right now Asterisk is as clear as mud with regards to this issue, so I am trying to insert some clarity into the process.  Your comments do help with my objective, thank you.

> I see where the code says " If we have a context defined, overwrite
> the original context" and after consideration
> I agree with you ... the only problem is that even if you don't define
> the "context=blah" for the user... that user
> inherits the "default" context
>

No, the default is only used if a peer context is not defined.  If a peer is defined, it will use the peer context (if set).  Otherwise if the domain context is used, it overrides everything.

> However since you did find it in the source code I'm sure you can fix
> it for yourself. Just check against the "default_context"
> and do not overwrite the user's context if it's default.
>

Done for my code, but I was not sure if me maintaining a separate version of Asterisk was correct for the community.  I would rather see clarity from the source, but I wished to discuss it on the user channel first to make sure I was not missing something in everyone's configuration.

> Or add another flag to the user's definition for example
> is_context_set that would be NULL if no context keyword is processed
> from the sip.conf etc.
> That is easier to check instead of comparing against default_context
>

Easier would be to say (pseudo code):

	if (sip_pvt->context == null) {
		if (sip_pvt->domain->context == null) {
			if (default_context == null) {
				/* Set the context to whatever is specified in sip.conf */
				sip_pvt->context == default_context;
			} else {
				/* If all else has failed */
				sip_pvt->context = 'default';
			}
		} else {
			/* use the domain */
			sip_pvt->context = sip_pvt->domain->context;
		}
	}  /* assume that the context in the peer definition is correct. */

Hopefully that helps clarify.  I am thinking I should just open a bug issue and post the code, but I didn't want to do that if there was some reason to have this rather odd sequence of default, peer, domain.




More information about the asterisk-users mailing list