]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Originate: Make setting caller id on outgoing call use either name or number.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 2 Oct 2013 20:30:07 +0000 (20:30 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 2 Oct 2013 20:30:07 +0000 (20:30 +0000)
Previous code was requiring both name and number to be available.

Also restored a comment block on why caller id is also set on an outgoing
call leg in addition to connected line from earlier versions of Asterisk.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@400303 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/pbx.c

index 6b71c54b9c62b0a94147ecbec6b02b0a6cdfe1da..a5ac9100b164d59f86997f3ddd9187c78ade5df5 100644 (file)
@@ -10059,24 +10059,35 @@ static int pbx_outgoing_attempt(const char *type, struct ast_format_cap *cap, co
        }
        ast_set_flag(ast_channel_flags(dialed), AST_FLAG_ORIGINATED);
 
-       if (!ast_strlen_zero(cid_num) && !ast_strlen_zero(cid_name)) {
+       if (!ast_strlen_zero(cid_num) || !ast_strlen_zero(cid_name)) {
                struct ast_party_connected_line connected;
 
-               ast_party_connected_line_set_init(&connected, ast_channel_connected(dialed));
-
+               /*
+                * It seems strange to set the CallerID on an outgoing call leg
+                * to whom we are calling, but this function's callers are doing
+                * various Originate methods.  This call leg goes to the local
+                * user.  Once the called party answers, the dialplan needs to
+                * be able to access the CallerID from the CALLERID function as
+                * if the called party had placed this call.
+                */
                ast_set_callerid(dialed, cid_num, cid_name, cid_num);
-               connected.id.number.valid = 1;
-               connected.id.number.str = (char *) cid_num;
-               connected.id.number.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
-               connected.id.name.valid = 1;
-               connected.id.name.str = (char *) cid_name;
-               connected.id.name.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
 
+               ast_party_connected_line_set_init(&connected, ast_channel_connected(dialed));
+               if (!ast_strlen_zero(cid_num)) {
+                       connected.id.number.valid = 1;
+                       connected.id.number.str = (char *) cid_num;
+                       connected.id.number.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
+               }
+               if (!ast_strlen_zero(cid_name)) {
+                       connected.id.name.valid = 1;
+                       connected.id.name.str = (char *) cid_name;
+                       connected.id.name.presentation = AST_PRES_ALLOWED_USER_NUMBER_NOT_SCREENED;
+               }
                ast_channel_set_connected_line(dialed, &connected, NULL);
        }
 
        if (early_media) {
-               ast_dial_set_state_callback(outgoing->dial, &pbx_outgoing_state_callback);
+               ast_dial_set_state_callback(outgoing->dial, pbx_outgoing_state_callback);
        }
 
        if (channel) {