summaryrefslogtreecommitdiff
path: root/addons/chan_ooh323.c
diff options
context:
space:
mode:
Diffstat (limited to 'addons/chan_ooh323.c')
-rw-r--r--addons/chan_ooh323.c74
1 files changed, 45 insertions, 29 deletions
diff --git a/addons/chan_ooh323.c b/addons/chan_ooh323.c
index 6b8596c5e..0375a13f1 100644
--- a/addons/chan_ooh323.c
+++ b/addons/chan_ooh323.c
@@ -922,24 +922,23 @@ static int ooh323_call(struct ast_channel *ast, char *dest, int timeout)
}
ast_mutex_lock(&p->lock);
ast_set_flag(p, H323_OUTGOING);
- if (ast->connected.id.number) {
- if(p->callerid_num) free(p->callerid_num);
- p->callerid_num = strdup(ast->connected.id.number);
- }
-
- if (ast->connected.id.name) {
- if(p->callerid_name)
- free(p->callerid_name);
- p->callerid_name = strdup(ast->connected.id.name);
- } else if (ast->connected.id.number) {
- if(p->callerid_name)
- free(p->callerid_name);
- p->callerid_name = strdup(ast->connected.id.number);
+ if (ast->connected.id.number.valid && ast->connected.id.number.str) {
+ free(p->callerid_num);
+ p->callerid_num = strdup(ast->connected.id.number.str);
+ }
+
+ if (ast->connected.id.name.valid && ast->connected.id.name.str) {
+ free(p->callerid_name);
+ p->callerid_name = strdup(ast->connected.id.name.str);
+ } else if (ast->connected.id.number.valid && ast->connected.id.number.str) {
+ free(p->callerid_name);
+ p->callerid_name = strdup(ast->connected.id.number.str);
} else {
- ast->connected.id.name = strdup(gCallerID);
- if(p->callerid_name)
- free(p->callerid_name);
- p->callerid_name = strdup(ast->connected.id.name);
+ ast->connected.id.name.valid = 1;
+ free(ast->connected.id.name.str);
+ ast->connected.id.name.str = strdup(gCallerID);
+ free(p->callerid_name);
+ p->callerid_name = strdup(ast->connected.id.name.str);
}
/* Retrieve vars */
@@ -1241,13 +1240,15 @@ static int ooh323_indicate(struct ast_channel *ast, int condition, const void *d
case AST_CONTROL_SRCCHANGE:
ast_rtp_instance_change_source(p->rtp);
break;
- case AST_CONTROL_CONNECTED_LINE:
- if (!ast_strlen_zero(ast->connected.id.name)) {
- if (gH323Debug)
- ast_log(LOG_DEBUG, "Sending connected line info for %s (%s)\n",
- callToken, ast->connected.id.name);
- ooSetANI(callToken, ast->connected.id.name);
+ case AST_CONTROL_CONNECTED_LINE:
+ if (!ast->connected.id.name.valid
+ || ast_strlen_zero(ast->connected.id.name.str)) {
+ break;
}
+ if (gH323Debug)
+ ast_log(LOG_DEBUG, "Sending connected line info for %s (%s)\n",
+ callToken, ast->connected.id.name.str);
+ ooSetANI(callToken, ast->connected.id.name.str);
break;
case AST_CONTROL_T38_PARAMETERS:
@@ -1539,10 +1540,15 @@ int onAlerting(ooCallData *call)
if (call->remoteDisplayName) {
struct ast_party_connected_line connected;
+ struct ast_set_party_connected_line update_connected;
+
+ memset(&update_connected, 0, sizeof(update_connected));
+ update_connected.id.name = 1;
ast_party_connected_line_init(&connected);
- connected.id.name = (char *) call->remoteDisplayName;
+ connected.id.name.valid = 1;
+ connected.id.name.str = (char *) call->remoteDisplayName;
connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
- ast_channel_queue_connected_line_update(c, &connected);
+ ast_channel_queue_connected_line_update(c, &connected, &update_connected);
}
if (c->_state != AST_STATE_UP)
ast_setstate(c, AST_STATE_RINGING);
@@ -1590,10 +1596,15 @@ int onProgress(ooCallData *call)
if (call->remoteDisplayName) {
struct ast_party_connected_line connected;
+ struct ast_set_party_connected_line update_connected;
+
+ memset(&update_connected, 0, sizeof(update_connected));
+ update_connected.id.name = 1;
ast_party_connected_line_init(&connected);
- connected.id.name = (char *) call->remoteDisplayName;
+ connected.id.name.valid = 1;
+ connected.id.name.str = (char *) call->remoteDisplayName;
connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
- ast_channel_queue_connected_line_update(c, &connected);
+ ast_channel_queue_connected_line_update(c, &connected, &update_connected);
}
if (c->_state != AST_STATE_UP)
ast_setstate(c, AST_STATE_RINGING);
@@ -1983,10 +1994,15 @@ int onCallEstablished(ooCallData *call)
if (call->remoteDisplayName) {
struct ast_party_connected_line connected;
+ struct ast_set_party_connected_line update_connected;
+
+ memset(&update_connected, 0, sizeof(update_connected));
+ update_connected.id.name = 1;
ast_party_connected_line_init(&connected);
- connected.id.name = (char *) call->remoteDisplayName;
+ connected.id.name.valid = 1;
+ connected.id.name.str = (char *) call->remoteDisplayName;
connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
- ast_channel_queue_connected_line_update(c, &connected);
+ ast_channel_queue_connected_line_update(c, &connected, &update_connected);
}
ast_queue_control(c, AST_CONTROL_ANSWER);