- allow the usage of @ in shortdial entries to call
other users on other sip networks (patch by Andreas)
This commit is contained in:
parent
3bf774e1f9
commit
80a10c575b
@ -1,5 +1,7 @@
|
|||||||
0.7.2
|
0.7.2
|
||||||
=====
|
=====
|
||||||
|
24-Mar-2009: - allow the usage of @ in shortdial entries to call
|
||||||
|
other users on other sip networks (patch by Andreas)
|
||||||
1-Mar-2009: - building with --enable-static-libosip2 requires
|
1-Mar-2009: - building with --enable-static-libosip2 requires
|
||||||
--disable-shared to be set as well (plugins will
|
--disable-shared to be set as well (plugins will
|
||||||
be statically linked into siproxd)
|
be statically linked into siproxd)
|
||||||
|
|||||||
@ -176,8 +176,10 @@ static int plugin_shortdial_redirect(sip_ticket_t *ticket, int shortcut_no) {
|
|||||||
osip_uri_t *to_url=ticket->sipmsg->to->url;
|
osip_uri_t *to_url=ticket->sipmsg->to->url;
|
||||||
char *to_user=to_url->username;
|
char *to_user=to_url->username;
|
||||||
char *new_to_user=NULL;
|
char *new_to_user=NULL;
|
||||||
|
char *new_to_host=NULL;
|
||||||
int i;
|
int i;
|
||||||
size_t len;
|
size_t username_len;
|
||||||
|
size_t host_len;
|
||||||
osip_contact_t *contact = NULL;
|
osip_contact_t *contact = NULL;
|
||||||
|
|
||||||
new_to_user=plugin_cfg.shortdial_entry.string[shortcut_no-1];
|
new_to_user=plugin_cfg.shortdial_entry.string[shortcut_no-1];
|
||||||
@ -185,7 +187,6 @@ static int plugin_shortdial_redirect(sip_ticket_t *ticket, int shortcut_no) {
|
|||||||
|
|
||||||
DEBUGC(DBCLASS_PLUGIN,"redirect: redirecting [%s]->[%s]",
|
DEBUGC(DBCLASS_PLUGIN,"redirect: redirecting [%s]->[%s]",
|
||||||
to_user, new_to_user);
|
to_user, new_to_user);
|
||||||
len=strlen(new_to_user)+1; /* include trailing "\0" */
|
|
||||||
|
|
||||||
/* use a "302 Moved temporarily" response back to the client */
|
/* use a "302 Moved temporarily" response back to the client */
|
||||||
/* new target is within the Contact Header */
|
/* new target is within the Contact Header */
|
||||||
@ -199,12 +200,43 @@ static int plugin_shortdial_redirect(sip_ticket_t *ticket, int shortcut_no) {
|
|||||||
}
|
}
|
||||||
} /* for i */
|
} /* for i */
|
||||||
|
|
||||||
|
/* get info about new target (user and optional host part) */
|
||||||
|
username_len=strlen(new_to_user); /* excluding \0 */
|
||||||
|
|
||||||
|
/* check if there is an '@' in the shortdial entry */
|
||||||
|
new_to_host = strstr(new_to_user, "@");
|
||||||
|
if (new_to_host) {
|
||||||
|
host_len=strlen(new_to_host)-1; /* don't count '@' */
|
||||||
|
/* only include the username length */
|
||||||
|
username_len = (size_t)(new_to_host-new_to_user);
|
||||||
|
if (host_len == 0) {
|
||||||
|
/* if '@' is the last character, then dont rewrite host */
|
||||||
|
new_to_host = NULL;
|
||||||
|
} else {
|
||||||
|
/* advance one character for the pointer to the host part (skip @) */
|
||||||
|
new_to_host++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* insert one new Contact header containing the new target address */
|
/* insert one new Contact header containing the new target address */
|
||||||
osip_contact_init(&contact);
|
osip_contact_init(&contact);
|
||||||
osip_uri_clone(to_url, &contact->url);
|
osip_uri_clone(to_url, &contact->url);
|
||||||
|
|
||||||
|
/* USER part is always present */
|
||||||
osip_free(contact->url->username);
|
osip_free(contact->url->username);
|
||||||
contact->url->username=osip_malloc(len);
|
contact->url->username=osip_malloc(username_len+1); /* *_len excluding \0 */
|
||||||
strcpy(contact->url->username, new_to_user);
|
|
||||||
|
/* only copy the part that really belongs to the username */
|
||||||
|
strncpy(contact->url->username, new_to_user, username_len);
|
||||||
|
/* strncpy does not terminate - do it manually */
|
||||||
|
contact->url->username[username_len]='\0';
|
||||||
|
|
||||||
|
/* HOST part is optional */
|
||||||
|
if (new_to_host) {
|
||||||
|
osip_free(contact->url->host);
|
||||||
|
contact->url->host=osip_malloc(host_len+1); /* *_len excluding \0 */
|
||||||
|
strcpy(contact->url->host, new_to_host);
|
||||||
|
}
|
||||||
|
|
||||||
osip_list_add(&(ticket->sipmsg->contacts),contact,0);
|
osip_list_add(&(ticket->sipmsg->contacts),contact,0);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user