Update of /usr/cvsroot/asterisk/channels/h323
In directory mongoose.digium.com:/tmp/cvs-serv13665

Modified Files:
        ast_h323.cpp chan_h323.h 
Log Message:
Fix memory leak, avoid uncessary abuse of memory and formatting tweaks. Bug 
#4282

Index: ast_h323.cpp
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/h323/ast_h323.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- ast_h323.cpp        11 May 2005 13:39:33 -0000      1.75
+++ ast_h323.cpp        19 May 2005 16:16:47 -0000      1.76
@@ -434,23 +434,8 @@
   */
 void MyH323EndPoint::OnConnectionCleared(H323Connection & connection, const 
PString & clearedCallToken)
 {
-       PString remoteName;
-       call_details_t cd;
-        PIPSocket::Address Ip;
-       WORD sourcePort;
+       PString remoteName = connection.GetRemotePartyName();
 
-       remoteName = connection.GetRemotePartyName();
-       cd.call_reference = connection.GetCallReference();
-       cd.call_token = strdup((const char *)clearedCallToken);
-       cd.call_source_aliases = strdup((const char 
*)connection.GetRemotePartyName());
-       connection.GetSignallingChannel()->GetRemoteAddress().GetIpAndPort(Ip, 
sourcePort);
-       cd.sourceIp = strdup((const char *)Ip.AsString());
-       
-       /* Convert complex strings */
-       char *s;
-       if ((s = strchr(cd.call_source_aliases, ' ')) != NULL) {
-               *s = '\0';
-       }
        switch (connection.GetCallEndReason()) {
                case H323Connection::EndedByCallForwarded:
                        if (h323debug) {
@@ -549,7 +534,7 @@
                }
        }       
        /* Invoke the PBX application registered callback */
-       on_connection_cleared(cd);
+       on_connection_cleared(connection.GetCallReference(), clearedCallToken);
        return;
 }
 
@@ -743,6 +728,7 @@
                *s1 = '\0';
        }
 
+       memset(&cd, 0, sizeof(cd));
        cd.call_reference = GetCallReference();
        cd.call_token = strdup((const char *)GetCallToken());
        cd.call_source_aliases = strdup((const char *)sourceAliases);
@@ -755,7 +741,7 @@
        cd.sourceIp = strdup((const char *)Ip.AsString());
 
        /* Notify Asterisk of the request */
-       call_options_t *res = on_incoming_call(cd); 
+       call_options_t *res = on_incoming_call(&cd);
 
        if (!res) {
                if (h323debug) {
@@ -815,16 +801,16 @@
        if ((s1 = strchr(destAliases, '\t')) != NULL) {
                *s1 = '\0';
        }
+
+       memset(&cd, 0, sizeof(cd));
        cd.call_reference = GetCallReference();
-       Lock();
        cd.call_token = strdup((const char *)GetCallToken());
-       Unlock();
        cd.call_source_aliases = strdup((const char *)sourceAliases);
        cd.call_dest_alias = strdup((const char *)destAliases);
        cd.call_source_e164 = strdup((const char *)sourceE164);
        cd.call_dest_e164 = strdup((const char *)destE164);
 
-       int res = on_outgoing_call(cd);         
+       int res = on_outgoing_call(&cd);
        if (!res) {
                if (h323debug) {
                        cout << "\t-- Call Failed" << endl;

Index: chan_h323.h
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/h323/chan_h323.h,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- chan_h323.h 3 May 2005 15:47:35 -0000       1.40
+++ chan_h323.h 19 May 2005 16:16:47 -0000      1.41
@@ -36,7 +36,7 @@
        int                             noFastStart;
        int                             noH245Tunneling;
        int                             noSilenceSuppression;
-       unsigned int    port;
+/*     unsigned int    port; */
        int                             progress_setup;
        int                             progress_alert;
        int                             progress_audio;
@@ -132,12 +132,12 @@
 
 /* This is a callback prototype function, called upon
    an incoming call happens. */
-typedef call_options_t *(*setup_incoming_cb)(call_details_t);
+typedef call_options_t *(*setup_incoming_cb)(call_details_t *);
 extern setup_incoming_cb on_incoming_call;
 
 /* This is a callback prototype function, called upon
    an outbound call. */
-typedef int (*setup_outbound_cb)(call_details_t);
+typedef int (*setup_outbound_cb)(call_details_t *);
 extern setup_outbound_cb on_outgoing_call; 
 
 /* This is a callback prototype function, called when
@@ -152,7 +152,7 @@
 
 /* This is a callback prototype function, called when
    OnConnectionCleared callback is invoked */
-typedef void (*clear_con_cb)(call_details_t);
+typedef void (*clear_con_cb)(unsigned, const char *);
 extern clear_con_cb on_connection_cleared;
 
 /* This is a callback prototype function, called when
@@ -231,6 +231,3 @@
 #ifdef __cplusplus
 }
 #endif
-
-
-

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to