]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add update_peer function to unistim_rtp_glue, improve other unistim_rtp_glue function...
authorIgor Goncharovskiy <igor.goncharovsky@gmail.com>
Wed, 5 Mar 2014 05:54:11 +0000 (05:54 +0000)
committerIgor Goncharovskiy <igor.goncharovsky@gmail.com>
Wed, 5 Mar 2014 05:54:11 +0000 (05:54 +0000)
........

Merged revisions 409705 from http://svn.asterisk.org/svn/asterisk/branches/1.8

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

channels/chan_unistim.c

index 50388dc3db265c66931be15282c762c734bba18f..a6c6a025f10131fa7d09ee02304eba6fb17e15e8 100644 (file)
@@ -5240,6 +5240,7 @@ static int unistim_indicate(struct ast_channel *ast, int ind, const void *data,
                if (sub->subtype == SUB_REAL) {
                        send_callerid_screen(s, sub);
                }
+       case AST_CONTROL_UPDATE_RTP_PEER:
                break;
        case AST_CONTROL_SRCCHANGE:
                ast_rtp_instance_change_source(sub->rtp);
@@ -6291,6 +6292,13 @@ static struct unistim_device *build_device(const char *cat, const struct ast_var
                }
                ast_mutex_init(&d->lock);
                ast_copy_string(d->name, cat, sizeof(d->name));
+               d->contrast = -1;
+               d->output = OUTPUT_HANDSET;
+               d->previous_output = OUTPUT_HANDSET;
+               d->volume = VOLUME_LOW;
+               d->mute = MUTE_OFF;
+               d->height = DEFAULTHEIGHT;
+               d->selected = -1;
        } else {
                /* Delete existing line information */
                AST_LIST_LOCK(&d->lines);
@@ -6310,14 +6318,7 @@ static struct unistim_device *build_device(const char *cat, const struct ast_var
                memset(d->sline, 0, sizeof(d->sline));
                memset(d->sp, 0, sizeof(d->sp));
        }
-
        ast_copy_string(d->context, DEFAULTCONTEXT, sizeof(d->context));
-       d->contrast = -1;
-       d->output = OUTPUT_HANDSET;
-       d->previous_output = OUTPUT_HANDSET;
-       d->volume = VOLUME_LOW;
-       d->mute = MUTE_OFF;
-       d->height = DEFAULTHEIGHT;
        d->selected = -1;
        d->interdigit_timer = DEFAULT_INTERDIGIT_TIMER;
        linelabel[0] = '\0';
@@ -6849,15 +6850,51 @@ static enum ast_rtp_glue_result unistim_get_rtp_peer(struct ast_channel *chan, s
 {
        struct unistim_subchannel *sub = ast_channel_tech_pvt(chan);
 
+       if (!sub) {
+               return AST_RTP_GLUE_RESULT_FORBID;
+       }
+       if (!sub->rtp) {
+               return AST_RTP_GLUE_RESULT_FORBID;
+       }
+
        ao2_ref(sub->rtp, +1);
        *instance = sub->rtp;
 
        return AST_RTP_GLUE_RESULT_LOCAL;
 }
 
+static int unistim_set_rtp_peer(struct ast_channel *chan, struct ast_rtp_instance *rtp, struct ast_rtp_instance *vrtp, struct ast_rtp_instance *trtp, const struct ast_format_cap *codecs, int nat_active)
+{
+       struct unistim_subchannel *sub;
+       struct sockaddr_in them = { 0, };
+       struct sockaddr_in us = { 0, };
+
+       if (!rtp) {
+               return 0;
+       }
+       
+       sub = ast_channel_tech_pvt(chan);
+       if (!sub) {
+               ast_log(LOG_ERROR, "No Private Structure, this is bad\n");
+               return -1;
+       }
+       {
+               struct ast_sockaddr tmp;
+               ast_rtp_instance_get_remote_address(rtp, &tmp);
+               ast_sockaddr_to_sin(&tmp, &them);
+               ast_rtp_instance_get_local_address(rtp, &tmp);
+               ast_sockaddr_to_sin(&tmp, &us);
+       }
+       
+       /* TODO: Set rtp on phone in case of direct rtp (not implemented) */
+       
+       return 0;
+}
+
 static struct ast_rtp_glue unistim_rtp_glue = {
        .type = channel_type,
        .get_rtp_info = unistim_get_rtp_peer,
+       .update_peer = unistim_set_rtp_peer,
 };
 
 /*--- load_module: PBX load module - initialization ---*/