char secret[80];
char outkey[80]; /* What key we use to talk to this peer */
char context[AST_MAX_EXTENSION]; /* Default context (for transfer really) */
+ char peercontext[AST_MAX_EXTENSION]; /* Context to pass to peer */
char mailbox[AST_MAX_EXTENSION]; /* Mailbox */
struct sockaddr_in addr;
int formats;
}
#endif /* MYSQL_FRIENDS */
-static int create_addr(struct sockaddr_in *sin, int *capability, int *sendani, int *maxtime, char *peer, char *context, int *trunk, int *notransfer, char *secret, int seclen, int *ofound)
+static int create_addr(struct sockaddr_in *sin, int *capability, int *sendani, int *maxtime, char *peer, char *context, int *trunk, int *notransfer, char *secret, int seclen, int *ofound, char *peercontext)
{
struct ast_hostent ahp; struct hostent *hp;
struct iax2_peer *p;
*maxtime = p->maxms; /* Max time they should take */
if (context)
strncpy(context, p->context, AST_MAX_EXTENSION - 1);
+ if (peercontext)
+ strncpy(peercontext, p->peercontext, AST_MAX_EXTENSION - 1);
if (trunk)
*trunk = p->trunk;
if (capability)
struct iax_ie_data ied;
char myrdest [5] = "s";
char context[AST_MAX_EXTENSION] ="";
+ char peercontext[AST_MAX_EXTENSION] ="";
char *portno = NULL;
char *opts = "";
unsigned short callno = PTR_TO_CALLNO(c->pvt->pvt);
strsep(&stringp, ":");
portno = strsep(&stringp, ":");
}
- if (create_addr(&sin, NULL, NULL, NULL, hname, context, NULL, NULL, storedsecret, sizeof(storedsecret) - 1, NULL)) {
+ if (create_addr(&sin, NULL, NULL, NULL, hname, context, NULL, NULL, storedsecret, sizeof(storedsecret) - 1, NULL, peercontext)) {
ast_log(LOG_WARNING, "No address associated with '%s'\n", hname);
return -1;
}
iax_ie_append_str(&ied, IAX_IE_DNID, c->dnid);
if (rcontext)
iax_ie_append_str(&ied, IAX_IE_CALLED_CONTEXT, rcontext);
+ else if (strlen(peercontext))
+ iax_ie_append_str(&ied, IAX_IE_CALLED_CONTEXT, peercontext);
if (username)
iax_ie_append_str(&ied, IAX_IE_USERNAME, username);
if (!secret && !ast_strlen_zero(storedsecret))
}
/* Populate our address from the given */
- if (create_addr(&sin, &capability, &sendani, &maxtime, hostname, NULL, &trunk, ¬ransfer, NULL, 0, &found)) {
+ if (create_addr(&sin, &capability, &sendani, &maxtime, hostname, NULL, &trunk, ¬ransfer, NULL, 0, &found, NULL)) {
return NULL;
}
if (portno) {
} else if (!strcasecmp(v->name, "context")) {
if (ast_strlen_zero(peer->context))
strncpy(peer->context, v->value, sizeof(peer->context) - 1);
+ } else if (!strcasecmp(v->name, "peercontext")) {
+ if (ast_strlen_zero(peer->peercontext))
+ strncpy(peer->peercontext, v->value, sizeof(peer->peercontext) - 1);
} else if (!strcasecmp(v->name, "port")) {
if (peer->dynamic)
peer->defaddr.sin_port = htons(atoi(v->value));
host = st;
}
/* Populate our address from the given */
- if (create_addr(&sin, NULL, NULL, NULL, host, NULL, NULL, NULL, NULL, 0, NULL)) {
+ if (create_addr(&sin, NULL, NULL, NULL, host, NULL, NULL, NULL, NULL, 0, NULL, NULL)) {
return -1;
}
ast_log(LOG_DEBUG, "host: %s, user: %s, password: %s, context: %s\n", host, username, password, context);