generate connected line info update from info in h.323 packets
authorAlexandr Anikin <may@telecom-service.ru>
Tue, 16 Feb 2010 22:58:22 +0000 (22:58 +0000)
committerAlexandr Anikin <may@telecom-service.ru>
Tue, 16 Feb 2010 22:58:22 +0000 (22:58 +0000)
Tested by: benngard

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

addons/chan_ooh323.c
addons/ooh323c/src/ooh323.c

index 9c2ce6f..d7a4dfc 100644 (file)
@@ -1503,6 +1503,14 @@ int onAlerting(ooCallData *call)
                return 0;
        }
        c = p->owner;
+
+       if (call->remoteDisplayName) {
+               struct ast_party_connected_line connected;
+               ast_party_connected_line_init(&connected);
+               connected.id.name = (char *) call->remoteDisplayName;
+               connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+               ast_channel_queue_connected_line_update(c, &connected);
+       }
        if (c->_state != AST_STATE_UP)
                ast_setstate(c, AST_STATE_RINGING);
 
@@ -1546,6 +1554,14 @@ int onProgress(ooCallData *call)
                return 0;
        }
        c = p->owner;
+
+       if (call->remoteDisplayName) {
+               struct ast_party_connected_line connected;
+               ast_party_connected_line_init(&connected);
+               connected.id.name = (char *) call->remoteDisplayName;
+               connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+               ast_channel_queue_connected_line_update(c, &connected);
+       }
        if (c->_state != AST_STATE_UP)
                ast_setstate(c, AST_STATE_RINGING);
 
@@ -1927,6 +1943,15 @@ int onCallEstablished(ooCallData *call)
                }
                if (p->owner) {
                        struct ast_channel* c = p->owner;
+
+                       if (call->remoteDisplayName) {
+                               struct ast_party_connected_line connected;
+                               ast_party_connected_line_init(&connected);
+                               connected.id.name = (char *) call->remoteDisplayName;
+                               connected.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
+                               ast_channel_queue_connected_line_update(c, &connected);
+                       }
+
                        ast_queue_control(c, AST_CONTROL_ANSWER);
                        ast_channel_unlock(p->owner);
                        manager_event(EVENT_FLAG_SYSTEM,"ChannelUpdate","Channel: %s\r\nChanneltype: %s\r\n"
index 6cd3d88..02c925b 100644 (file)
@@ -38,6 +38,23 @@ int ooOnReceivedReleaseComplete(OOH323CallData *call, Q931Message *q931Msg);
 int ooOnReceivedCallProceeding(OOH323CallData *call, Q931Message *q931Msg);
 int ooOnReceivedAlerting(OOH323CallData *call, Q931Message *q931Msg);
 int ooOnReceivedProgress(OOH323CallData *call, Q931Message *q931Msg);
+int ooHandleDisplayIE(OOH323CallData *call, Q931Message *q931Msg);
+
+int ooHandleDisplayIE(OOH323CallData *call, Q931Message *q931Msg) {
+   Q931InformationElement* pDisplayIE;
+
+   /* check for display ie */
+   pDisplayIE = ooQ931GetIE(q931Msg, Q931DisplayIE);
+   if(pDisplayIE) {
+      if (call->remoteDisplayName)
+       memFreePtr(call->pctxt, call->remoteDisplayName);
+      call->remoteDisplayName = (char *) memAllocZ(call->pctxt, 
+                                 pDisplayIE->length*sizeof(ASN1OCTET)+1);
+      strncpy(call->remoteDisplayName, (char *)pDisplayIE->data, pDisplayIE->length*sizeof(ASN1OCTET));
+   }
+
+   return OO_OK;
+}
 
 int ooHandleFastStart(OOH323CallData *call, H225Facility_UUIE *facility)
 {
@@ -796,6 +813,7 @@ int ooOnReceivedAlerting(OOH323CallData *call, Q931Message *q931Msg)
    H245H2250LogicalChannelParameters * h2250lcp = NULL;  
    int i=0, ret=0;
 
+   ooHandleDisplayIE(call, q931Msg);
 
    if(!q931Msg->userInfo)
    {
@@ -1019,6 +1037,7 @@ int ooOnReceivedProgress(OOH323CallData *call, Q931Message *q931Msg)
    H245H2250LogicalChannelParameters * h2250lcp = NULL;  
    int i=0, ret=0;
 
+   ooHandleDisplayIE(call, q931Msg);
 
    if(!q931Msg->userInfo)
    {
@@ -1242,6 +1261,8 @@ int ooOnReceivedSignalConnect(OOH323CallData* call, Q931Message *q931Msg)
    ooLogicalChannel * pChannel = NULL;
    H245H2250LogicalChannelParameters * h2250lcp = NULL;  
 
+   ooHandleDisplayIE(call, q931Msg);
+
    if(!q931Msg->userInfo)
    {
       OOTRACEERR3("Error: UUIE not found in received H.225 Connect message"