Hi Alejandro,  Please find attached cvs diff -u taken on cvs 
HEAD.Thanks,Manish NemaOn Fri, 19 Jun 2009 10:35:44 +0200 Alejandro Guerrieri  
wrote  Manish,  Please send a diff -u of what you've done and we'll take a look 
at it in context. Also please base it on the latest CVS HEAD.  
Regards,   --Alejandro guerrieriaguerri...@kannel.org    On 19/06/2009, at 
10:03, Manish Nema wrote: Earlier I have posted the requirement for 
dynamic rescan of SMSC configuration at kannel users mail group,      
 Thanks Alejandro for all help.     I thought to write few lines for the 
requirements, here is how I have done that    1) in bb_smscconn.c i have 
created a function int rescan_smsc(), please find the attached bb_smscconn.c    
2) created one global Octstr* gCfgFilename in bearerbox.c and initialize it in 
main   if (argv[cf_index] == NULL)      {     
     gCfgFilename = octstr_create("kannel.conf");  
        filename = 
octstr_create("kannel.conf");      }      else  
    {          gCfgFilename = 
octstr_create(argv[cf_index]);          
filename = octstr_create(argv[cf_index]);      }     This 
is to store configuration file name on bearbox startup     3) added 
following in bb_http.c       a) added         { 
"reload-smsc",httpd_reload_smscs },     in httpd_commands    
 b)  created function httpd_reload_smscs    
          static Octstr 
*httpd_reload_smscs(List *cgivars, int status_type)      {  
            Octstr *reply;  
            if ((reply = 
httpd_check_authorization(cgivars, 0))!= NULL) return reply;  
            if ((reply = 
httpd_check_status())!= NULL) return reply;        
        if (rescan_smsc() == -1)  
                
return octstr_create("Could not re-load SMSC configuration");  
            else  
                
return octstr_create("Successfully rescanned SMSC configuration");      
    }         I am not sure that if the 
implementation of rescan_smsc() is 100% correct/valid/safe, I request all the 
expert/developers  to please give their suggestion/feedback.    It wish if 
this requirement can be implemented in future releases of the kannel.    
Thanks,  Manish Nema             


? HEAD_diff_kannel.txt
Index: gw/bb_http.c
===================================================================
RCS file: /home/cvs/gateway/gw/bb_http.c,v
retrieving revision 1.53
diff -u -r1.53 bb_http.c
--- gw/bb_http.c        12 Jan 2009 16:46:56 -0000      1.53
+++ gw/bb_http.c        19 Jun 2009 10:10:52 -0000
@@ -1,58 +1,58 @@
-/* ==================================================================== 
- * The Kannel Software License, Version 1.0 
- * 
- * Copyright (c) 2001-2009 Kannel Group  
- * Copyright (c) 1998-2001 WapIT Ltd.   
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
- * are met: 
- * 
- * 1. Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer. 
- * 
- * 2. Redistributions in binary form must reproduce the above copyright 
- *    notice, this list of conditions and the following disclaimer in 
- *    the documentation and/or other materials provided with the 
- *    distribution. 
- * 
- * 3. The end-user documentation included with the redistribution, 
- *    if any, must include the following acknowledgment: 
- *       "This product includes software developed by the 
- *        Kannel Group (http://www.kannel.org/)." 
- *    Alternately, this acknowledgment may appear in the software itself, 
- *    if and wherever such third-party acknowledgments normally appear. 
- * 
- * 4. The names "Kannel" and "Kannel Group" must not be used to 
- *    endorse or promote products derived from this software without 
- *    prior written permission. For written permission, please  
- *    contact o...@kannel.org. 
- * 
- * 5. Products derived from this software may not be called "Kannel", 
- *    nor may "Kannel" appear in their name, without prior written 
- *    permission of the Kannel Group. 
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS 
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,  
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR  
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE  
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- * ==================================================================== 
- * 
- * This software consists of voluntary contributions made by many 
- * individuals on behalf of the Kannel Group.  For more information on  
- * the Kannel Group, please see <http://www.kannel.org/>. 
- * 
- * Portions of this software are based upon software originally written at  
- * WapIT Ltd., Helsinki, Finland for the Kannel project.  
- */ 
+/* ====================================================================
+ * The Kannel Software License, Version 1.0
+ *
+ * Copyright (c) 2001-2009 Kannel Group
+ * Copyright (c) 1998-2001 WapIT Ltd.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Kannel Group (http://www.kannel.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Kannel" and "Kannel Group" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please
+ *    contact o...@kannel.org.
+ *
+ * 5. Products derived from this software may not be called "Kannel",
+ *    nor may "Kannel" appear in their name, without prior written
+ *    permission of the Kannel Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Kannel Group.  For more information on
+ * the Kannel Group, please see <http://www.kannel.org/>.
+ *
+ * Portions of this software are based upon software originally written at
+ * WapIT Ltd., Helsinki, Finland for the Kannel project.
+ */
 
 /*
  * bb_http.c : bearerbox http adminstration commands
@@ -136,7 +136,7 @@
                             "save the sheeps");
     return NULL;
 }
-    
+
 static Octstr *httpd_status(List *cgivars, int status_type)
 {
     Octstr *reply;
@@ -156,10 +156,10 @@
     Octstr *reply;
     Octstr *level;
     int new_loglevel;
-    
+
     if ((reply = httpd_check_authorization(cgivars, 0))!= NULL) return reply;
     if ((reply = httpd_check_status())!= NULL) return reply;
- 
+
     /* check if new loglevel is given */
     level = http_cgi_variable(cgivars, "level");
     if (level) {
@@ -214,7 +214,7 @@
     Octstr *reply;
     if ((reply = httpd_check_authorization(cgivars, 0))!= NULL) return reply;
     if ((reply = httpd_check_status())!= NULL) return reply;
- 
+
     if (bb_resume() == -1)
        return octstr_create("Already running");
     else
@@ -226,7 +226,7 @@
     Octstr *reply;
     if ((reply = httpd_check_authorization(cgivars, 0))!= NULL) return reply;
     if ((reply = httpd_check_status())!= NULL) return reply;
- 
+
     if (bb_status == BB_SHUTDOWN) {
         bb_status = BB_DEAD;
         gwthread_wakeup_all();
@@ -289,13 +289,30 @@
     Octstr *reply;
     if ((reply = httpd_check_authorization(cgivars, 0))!= NULL) return reply;
     if ((reply = httpd_check_status())!= NULL) return reply;
- 
+
     if (bb_reload_lists() == -1)
         return octstr_create("Could not re-load lists");
     else
         return octstr_create("Black/white lists re-loaded");
 }
 
+/*
+ * Manish Nema 18-06-2009, reload of smsc configuration
+ */
+static Octstr *httpd_reload_smscs(List *cgivars, int status_type)
+{
+               Octstr *reply;
+           if ((reply = httpd_check_authorization(cgivars, 0))!= NULL) return 
reply;
+           if ((reply = httpd_check_status())!= NULL) return reply;
+
+           if (rescan_smsc() == -1)
+                       return octstr_create("Could not re-load SMSC 
configuration");
+               else
+                       return octstr_create("Successfully rescanned SMSC 
configuration");
+
+
+}
+
 /* Known httpd commands and their functions */
 static struct httpd_command {
     const char *command;
@@ -313,6 +330,7 @@
     { "stop-smsc", httpd_stop_smsc },
     { "start-smsc", httpd_restart_smsc },
     { "reload-lists", httpd_reload_lists },
+    { "reload-smsc",httpd_reload_smscs }, // Manish Nema : for reloading of 
smsc configuration 18-06-2009
     { NULL , NULL } /* terminate list */
 };
 
@@ -414,7 +432,7 @@
     final_reply = octstr_create(header);
     octstr_append(final_reply, reply);
     octstr_append_cstr(final_reply, footer);
-    
+
     /* debug("bb.http", 0, "Result: '%s'", octstr_get_cstr(final_reply));
      */
     http_destroy_headers(headers);
@@ -441,7 +459,7 @@
     while(bb_status != BB_DEAD) {
        if (bb_status == BB_SHUTDOWN)
            bb_shutdown();
-       client = http_accept_request(ha_port, &ip, &url, &headers, &body, 
+       client = http_accept_request(ha_port, &ip, &url, &headers, &body,
                                     &cgivars);
        if (client == NULL)
            break;
@@ -467,12 +485,12 @@
 int httpadmin_start(Cfg *cfg)
 {
     CfgGroup *grp;
-    int ssl = 0; 
+    int ssl = 0;
 #ifdef HAVE_LIBSSL
     Octstr *ssl_server_cert_file;
     Octstr *ssl_server_key_file;
 #endif /* HAVE_LIBSSL */
-    
+
     if (httpadmin_running) return -1;
 
 
@@ -484,7 +502,7 @@
     ha_password = cfg_get(grp, octstr_imm("admin-password"));
     if (ha_password == NULL)
        panic(0, "You MUST set HTTP admin-password");
-    
+
     ha_status_pw = cfg_get(grp, octstr_imm("status-password"));
 
     ha_allow_ip = cfg_get(grp, octstr_imm("admin-allow-ip"));
@@ -492,19 +510,19 @@
 
 #ifdef HAVE_LIBSSL
     cfg_get_bool(&ssl, grp, octstr_imm("admin-port-ssl"));
-    
+
     /*
      * check if SSL is desired for HTTP servers and then
-     * load SSL client and SSL server public certificates 
+     * load SSL client and SSL server public certificates
      * and private keys
-     */    
+     */
     ssl_server_cert_file = cfg_get(grp, octstr_imm("ssl-server-cert-file"));
     ssl_server_key_file = cfg_get(grp, octstr_imm("ssl-server-key-file"));
     if (ssl_server_cert_file != NULL && ssl_server_key_file != NULL) {
         /* we are fine here, the following call is now in conn_config_ssl(),
          * so there is no reason to do this twice.
 
-        use_global_server_certkey_file(ssl_server_cert_file, 
+        use_global_server_certkey_file(ssl_server_cert_file,
             ssl_server_key_file);
         */
     } else if (ssl) {
@@ -529,7 +547,7 @@
 {
     http_close_all_ports();
     gwthread_join_every(httpadmin_run);
-    octstr_destroy(ha_interface);    
+    octstr_destroy(ha_interface);
     octstr_destroy(ha_password);
     octstr_destroy(ha_status_pw);
     octstr_destroy(ha_allow_ip);
Index: gw/bb_smscconn.c
===================================================================
RCS file: /home/cvs/gateway/gw/bb_smscconn.c,v
retrieving revision 1.101
diff -u -r1.101 bb_smscconn.c
--- gw/bb_smscconn.c    6 May 2009 18:47:34 -0000       1.101
+++ gw/bb_smscconn.c    19 Jun 2009 10:10:52 -0000
@@ -1,58 +1,58 @@
-/* ==================================================================== 
- * The Kannel Software License, Version 1.0 
- * 
- * Copyright (c) 2001-2009 Kannel Group  
- * Copyright (c) 1998-2001 WapIT Ltd.   
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
- * are met: 
- * 
- * 1. Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer. 
- * 
- * 2. Redistributions in binary form must reproduce the above copyright 
- *    notice, this list of conditions and the following disclaimer in 
- *    the documentation and/or other materials provided with the 
- *    distribution. 
- * 
- * 3. The end-user documentation included with the redistribution, 
- *    if any, must include the following acknowledgment: 
- *       "This product includes software developed by the 
- *        Kannel Group (http://www.kannel.org/)." 
- *    Alternately, this acknowledgment may appear in the software itself, 
- *    if and wherever such third-party acknowledgments normally appear. 
- * 
- * 4. The names "Kannel" and "Kannel Group" must not be used to 
- *    endorse or promote products derived from this software without 
- *    prior written permission. For written permission, please  
- *    contact o...@kannel.org. 
- * 
- * 5. Products derived from this software may not be called "Kannel", 
- *    nor may "Kannel" appear in their name, without prior written 
- *    permission of the Kannel Group. 
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS 
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,  
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR  
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE  
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- * ==================================================================== 
- * 
- * This software consists of voluntary contributions made by many 
- * individuals on behalf of the Kannel Group.  For more information on  
- * the Kannel Group, please see <http://www.kannel.org/>. 
- * 
- * Portions of this software are based upon software originally written at  
- * WapIT Ltd., Helsinki, Finland for the Kannel project.  
- */ 
+/* ====================================================================
+ * The Kannel Software License, Version 1.0
+ *
+ * Copyright (c) 2001-2009 Kannel Group
+ * Copyright (c) 1998-2001 WapIT Ltd.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Kannel Group (http://www.kannel.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Kannel" and "Kannel Group" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please
+ *    contact o...@kannel.org.
+ *
+ * 5. Products derived from this software may not be called "Kannel",
+ *    nor may "Kannel" appear in their name, without prior written
+ *    permission of the Kannel Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Kannel Group.  For more information on
+ * the Kannel Group, please see <http://www.kannel.org/>.
+ *
+ * Portions of this software are based upon software originally written at
+ * WapIT Ltd., Helsinki, Finland for the Kannel project.
+ */
 
 /*
  * SMSC Connection interface for Bearerbox.
@@ -65,7 +65,7 @@
  * Kalle Marjola 2000 for project Kannel
  * Alexander Malysh <amalysh at kannel.org> 2003, 2004, 2005
  */
- 
+
 #include "gw-config.h"
 
 #include <errno.h>
@@ -115,6 +115,13 @@
 /* incoming sms queue control */
 extern long max_incoming_sms_qlength;
 
+/**
+ * Global configuration file (initialized in main)
+ * Manish Nema : 18-06-2009
+ */
+extern Octstr * gCfgFilename;
+
+
 /* our own thingies */
 
 static volatile sig_atomic_t smsc_running;
@@ -193,7 +200,7 @@
 static void handle_split(SMSCConn *conn, Msg *msg, long reason)
 {
     struct split_parts *split = msg->sms.split_parts;
-    
+
     /*
      * If temporarely failed, try again immediately but only if connection 
active.
      * Because if connection is not active we will loop for ever here 
consuming 100% CPU
@@ -205,7 +212,7 @@
         msg_destroy(msg);
         return;
     }
-    
+
     /*
      * if the reason is not a success and status is still success
      * then set status of a split to the reason.
@@ -233,7 +240,7 @@
      * we will split it again in smscconn_send(...).
      */
     msg_destroy(msg);
-        
+
     if (counter_decrease(split->parts_left) <= 1) {
         /* all splited parts were processed */
         counter_destroy(split->parts_left);
@@ -257,7 +264,7 @@
         octstr_destroy(reply);
         return;
     }
-    
+
     counter_increase(outgoing_sms_counter);
     load_increase(outgoing_sms_load);
     if (conn) counter_increase(conn->sent);
@@ -294,7 +301,7 @@
         octstr_destroy(reply);
         return;
     }
-    
+
     switch (reason) {
     case SMSCCONN_FAILED_TEMPORARILY:
         /*
@@ -309,7 +316,7 @@
              */
            if (sms_resend_retry >= 0 && sms->sms.resend_try >= 
sms_resend_retry) {
                warning(0, "Maximum retries for message exceeded, discarding 
it!");
-               bb_smscconn_send_failed(NULL, sms, SMSCCONN_FAILED_DISCARDED, 
+               bb_smscconn_send_failed(NULL, sms, SMSCCONN_FAILED_DISCARDED,
                                        octstr_create("Retries Exceeded"));
                break;
            }
@@ -318,7 +325,7 @@
        }
        gwlist_produce(outgoing_sms, sms);
        break;
-       
+
     case SMSCCONN_FAILED_SHUTDOWN:
         gwlist_produce(outgoing_sms, sms);
         break;
@@ -388,7 +395,7 @@
         msg_destroy(sms);
         return SMSCCONN_FAILED_REJECTED;
     }
-    
+
     if (black_list &&
        numhash_find_number(black_list, sms->sms.sender) == 1) {
        info(0, "Number <%s> is in black-list, message discarded",
@@ -439,7 +446,7 @@
                 msg_destroy(sms);
                 return SMSCCONN_SUCCESS;
             case concat_complete:
-                /* Combined sms received! save new one since it is now 
combined. */ 
+                /* Combined sms received! save new one since it is now 
combined. */
                 msg_destroy(sms);
                 /* Change the sms. */
                 sms = msg_duplicate(copy);
@@ -463,7 +470,7 @@
          */
         rc = route_incoming_to_boxc(copy);
     }
-    
+
     if (rc == -1 || (rc != SMSCCONN_SUCCESS && rc != SMSCCONN_QUEUED)) {
         warning(0, "incoming messages queue too long, dropping a message");
         if (sms->sms.sms_type == report_mo)
@@ -597,7 +604,7 @@
 
     /* create split sms counter */
     split_msg_counter = counter_create();
-    
+
     /* create smsc list and rwlock for it */
     smsc_list = gwlist_create();
     gw_rwlock_init_static(&smsc_list_lock);
@@ -610,7 +617,7 @@
     white_list_url = cfg_get(grp, octstr_imm("white-list"));
     if (white_list_url != NULL) {
         if ((white_list = numhash_create(octstr_get_cstr(white_list_url))) == 
NULL)
-            panic(0, "Could not get white-list at URL <%s>", 
+            panic(0, "Could not get white-list at URL <%s>",
                   octstr_get_cstr(white_list_url));
     }
     if ((os = cfg_get(grp, octstr_imm("white-list-regex"))) != NULL) {
@@ -618,11 +625,11 @@
             panic(0, "Could not compile pattern '%s'", octstr_get_cstr(os));
         octstr_destroy(os);
     }
-    
+
     black_list_url = cfg_get(grp, octstr_imm("black-list"));
     if (black_list_url != NULL) {
         if ((black_list = numhash_create(octstr_get_cstr(black_list_url))) == 
NULL)
-            panic(0, "Could not get black-list at URL <%s>", 
+            panic(0, "Could not get black-list at URL <%s>",
                   octstr_get_cstr(black_list_url));
     }
     if ((os = cfg_get(grp, octstr_imm("black-list-regex"))) != NULL) {
@@ -636,7 +643,7 @@
         sms_resend_frequency = 60;
     }
     info(0, "Set SMS resend frequency to %ld seconds.", sms_resend_frequency);
-            
+
     if (cfg_get_integer(&sms_resend_retry, grp, 
octstr_imm("sms-resend-retry")) == -1) {
         sms_resend_retry = -1;
         info(0, "SMS resend retry set to unlimited.");
@@ -659,18 +666,18 @@
 
     smsc_groups = cfg_get_multi_group(cfg, octstr_imm("smsc"));
     gwlist_add_producer(smsc_list);
-    for (i = 0; i < gwlist_len(smsc_groups) && 
+    for (i = 0; i < gwlist_len(smsc_groups) &&
         (grp = gwlist_get(smsc_groups, i)) != NULL; i++) {
-        conn = smscconn_create(grp, 1); 
+        conn = smscconn_create(grp, 1);
         if (conn == NULL)
             panic(0, "Cannot start with SMSC connection failing");
         gwlist_append(smsc_list, conn);
     }
     gwlist_remove_producer(smsc_list);
-    
+
     if ((router_thread = gwthread_create(sms_router, NULL)) == -1)
        panic(0, "Failed to start a new thread for SMS routing");
-    
+
     gwlist_add_producer(incoming_sms);
     smsc_running = 1;
     return 0;
@@ -699,6 +706,83 @@
     return i;
 }
 
+int rescan_smsc(void)
+{
+
+       int i=0;
+
+       CfgGroup *grp = NULL;
+       SMSCConn *conn = NULL;
+
+       Cfg *cfg =  cfg_create(gCfgFilename);
+
+       if (!smsc_running)
+               return -1;
+
+       debug("smscconn", 0, "Rescanning SMSC configuration");
+
+       if (cfg_read(cfg) == -1)
+               panic(0, "Couldn't read configuration from `%s'.", 
octstr_get_cstr(gCfgFilename));
+
+
+
+       gw_rwlock_wrlock(&smsc_list_lock);
+       debug("smscconn", 0, "Write-lock obtained on smsc_list");
+       for (i = 0; i < gwlist_len(smsc_list); i++) {
+
+               conn = gwlist_get(smsc_list, i);
+               if (conn != NULL && smscconn_status(conn) == SMSCCONN_DEAD)
+               {
+                  info(0, "HTTP (rescan smsc): Could not shutdown already dead 
smsc-id `%s'",
+                  octstr_get_cstr(conn->id));
+               } else {
+                  info(0,"HTTP (rescan smsc): Shutting down smsc-id `%s'", 
octstr_get_cstr(conn->id));
+                  smscconn_shutdown(conn, 1);   /* shutdown the smsc */
+               }
+               smscconn_destroy(conn);
+       }
+       gwlist_destroy(smsc_list, NULL);
+       debug("smscconn", 0, "destroyed old smsc_list");
+       smsc_list = NULL;
+       smsc_list = gwlist_create();
+
+
+       /**
+        * Re-read configuration
+        */
+
+       debug("smscconn", 0, "destroyed smsc_groups");
+       gwlist_destroy(smsc_groups, NULL);
+       debug("smscconn", 0, "Rescanning-smsc configuration");
+       smsc_groups = cfg_get_multi_group(cfg, octstr_imm("smsc"));
+
+       gwlist_add_producer(smsc_list);
+       debug("smscconn", 0, "Scanned smsc connections starting them now ... ");
+       for (i = 0; i < gwlist_len(smsc_groups) &&
+               (grp = gwlist_get(smsc_groups, i)) != NULL; i++) {
+               conn = smscconn_create(grp, 1);
+               if (conn == NULL)
+                       panic(0, "Cannot start with SMSC connection failing");
+               gwlist_append(smsc_list, conn);
+       }
+       gwlist_remove_producer(smsc_list);
+
+       debug("smscconn", 0, "finished starting smsc");
+       gw_rwlock_unlock(&smsc_list_lock);
+
+       debug("smscconn", 0, "waking up router thread");
+
+
+       //TODO: check if it is valid
+       /* wake-up the router */
+       if (router_thread >= 0)
+             gwthread_wakeup(router_thread);
+
+       debug("smscconn", 0, "Rescan finished");
+       cfg_destroy(cfg);
+       return 0;
+
+}
 int smsc2_stop_smsc(Octstr *id)
 {
     SMSCConn *conn;
@@ -749,7 +833,7 @@
         /* find the group with equal smsc id */
         hit = 0;
         grp = NULL;
-        for (group_index = 0; group_index < gwlist_len(smsc_groups) && 
+        for (group_index = 0; group_index < gwlist_len(smsc_groups) &&
              (grp = gwlist_get(smsc_groups, group_index)) != NULL; 
group_index++) {
             smscid = cfg_get(grp, octstr_imm("smsc-id"));
             if (smscid != NULL && octstr_compare(smscid, id) == 0) {
@@ -767,7 +851,7 @@
             error(0, "HTTP: Could not find config for smsc-id `%s'", 
octstr_get_cstr(id));
             break;
         }
-        
+
         info(0,"HTTP: Re-starting smsc-id `%s'", octstr_get_cstr(id));
 
         new_conn = smscconn_create(grp, 1);
@@ -775,7 +859,7 @@
             error(0, "Start of SMSC connection failed, smsc-id `%s'", 
octstr_get_cstr(id));
             continue; /* keep old connection on the list */
         }
-        
+
         /* drop old connection from the active smsc list */
         gwlist_delete(smsc_list, i, 1);
         /* destroy the connection */
@@ -785,11 +869,11 @@
         num++;
     }
     gw_rwlock_unlock(&smsc_list_lock);
-    
+
     /* wake-up the router */
     if (router_thread >= 0)
         gwthread_wakeup(router_thread);
-    
+
     return 0;
 }
 
@@ -807,7 +891,7 @@
         smscconn_start(conn);
     }
     gw_rwlock_unlock(&smsc_list_lock);
-    
+
     if (router_thread >= 0)
         gwthread_wakeup(router_thread);
 }
@@ -874,7 +958,7 @@
         return;
 
     debug("smscconn", 0, "final clean-up for SMSCConn");
-    
+
     gw_rwlock_wrlock(&smsc_list_lock);
     for (i = 0; i < gwlist_len(smsc_list); i++) {
         conn = gwlist_get(smsc_list, i);
@@ -884,7 +968,7 @@
     smsc_list = NULL;
     gw_rwlock_unlock(&smsc_list_lock);
     gwlist_destroy(smsc_groups, NULL);
-    octstr_destroy(unified_prefix);    
+    octstr_destroy(unified_prefix);
     numhash_destroy(white_list);
     numhash_destroy(black_list);
     octstr_destroy(white_list_url);
@@ -941,8 +1025,8 @@
         conn = gwlist_get(smsc_list, i);
 
         if ((smscconn_info(conn, &info) == -1)) {
-            /* 
-             * we do not delete SMSCs from the list 
+            /*
+             * we do not delete SMSCs from the list
              * this way we can show in the status which links are dead
              */
             continue;
@@ -966,7 +1050,7 @@
             octstr_append_cstr(tmp, "[");
             octstr_append(tmp, conn_admin_id);
             octstr_append_cstr(tmp, "]    ");
-        } 
+        }
         if (status_type == BBSTATUS_XML) {
             octstr_append_cstr(tmp, "<smsc>\n\t\t<name>");
             octstr_append(tmp, conn_name);
@@ -998,7 +1082,7 @@
             default:
                 sprintf(tmp3, "unknown");
         }
-       
+
         if (status_type == BBSTATUS_XML)
             octstr_format_append(tmp, 
"<status>%s</status>\n\t\t<received>%ld</received>"
                 "\n\t\t<sent>%ld</sent>\n\t\t<failed>%ld</failed>\n\t\t"
@@ -1173,11 +1257,11 @@
 static long route_incoming_to_smsc(SMSCConn *conn, Msg *msg)
 {
     Octstr *smsc;
-    
+
     /* sanity check */
     if (!conn || !msg)
         return -1;
-        
+
     /* check for dlr rerouting */
     if (!conn->reroute_dlr && (msg->sms.sms_type == report_mo || 
msg->sms.sms_type == report_mt))
         return -1;
@@ -1194,7 +1278,7 @@
         /* drop into outbound queue again for routing */
         return smsc2_rout(msg, 0);
     }
-    
+
     if (conn->reroute_to_smsc) {
         /* change message direction */
         store_save_ack(msg, ack_success);
@@ -1205,7 +1289,7 @@
         msg->sms.smsc_id = octstr_duplicate(conn->reroute_to_smsc);
         return smsc2_rout(msg, 0);
     }
-    
+
     if (conn->reroute_by_receiver && msg->sms.receiver &&
                  (smsc = dict_get(conn->reroute_by_receiver, 
msg->sms.receiver))) {
         /* change message direction */
@@ -1219,7 +1303,7 @@
         return smsc2_rout(msg, 0);
     }
 
-    return -1; 
+    return -1;
 }
 
 
@@ -1262,7 +1346,7 @@
 {
     if (incoming_concat_msgs != NULL) /* already initialised? */
         return;
-    incoming_concat_msgs = dict_create(max_incoming_sms_qlength > 0 ? 
max_incoming_sms_qlength : 1024, 
+    incoming_concat_msgs = dict_create(max_incoming_sms_qlength > 0 ? 
max_incoming_sms_qlength : 1024,
                                        destroy_concatMsg);
     concat_lock = mutex_create();
     debug("bb.sms",0,"smsbox MO concatenated message handling enabled");
@@ -1405,9 +1489,9 @@
 
     debug("bb.sms.splits", 0, "Got part %d [ref %d, total parts %d] of message 
from %s. Dump follows:",
           part, refnum,totalparts, octstr_get_cstr(msg->sms.sender));
-     
+
     msg_dump(msg,0);
-     
+
     key = octstr_format("%S %S %S %d", msg->sms.sender, msg->sms.receiver, 
smscid, refnum);
     mutex_lock(concat_lock);
     if ((cmsg = dict_get(incoming_concat_msgs, key)) == NULL) {
@@ -1437,11 +1521,11 @@
     }
 
     /* check if we have seen message part before... */
-    if (cmsg->parts[part - 1] != NULL) {         
+    if (cmsg->parts[part - 1] != NULL) {
         warning(0, "Duplicate message part %d, ref %d, from %s, to %s. 
Discarded!",
                 part, refnum, octstr_get_cstr(msg->sms.sender), 
octstr_get_cstr(msg->sms.receiver));
         store_save_ack(msg, ack_success);
-        msg_destroy(msg); 
+        msg_destroy(msg);
         *pmsg = msg = NULL;
     } else {
         cmsg->parts[part -1] = msg;
@@ -1467,12 +1551,12 @@
         octstr_append(msg->sms.msgdata, cmsg->parts[i]->sms.msgdata);
 
     /* Attempt to save the new one, if that fails, then reply with fail. */
-    if (store_save(msg) == -1) {         
+    if (store_save(msg) == -1) {
         mutex_unlock(concat_lock);
         msg_destroy(msg);
         *pmsg = msg = NULL;
         return concat_error;
-    } else 
+    } else
         *pmsg = msg; /* return the message part. */
 
     /* Delete it from the queue and from the Dict. */
@@ -1506,7 +1590,7 @@
 {
     numhash_destroy(white_list);
     numhash_destroy(black_list);
-    
+
     if (white_list_url != NULL) {
         white_list = numhash_create(octstr_get_cstr(white_list_url));
     }
Index: gw/bearerbox.c
===================================================================
RCS file: /home/cvs/gateway/gw/bearerbox.c,v
retrieving revision 1.169
diff -u -r1.169 bearerbox.c
--- gw/bearerbox.c      12 Jan 2009 16:46:56 -0000      1.169
+++ gw/bearerbox.c      19 Jun 2009 10:10:52 -0000
@@ -1,62 +1,62 @@
-/* ==================================================================== 
- * The Kannel Software License, Version 1.0 
- * 
- * Copyright (c) 2001-2009 Kannel Group  
- * Copyright (c) 1998-2001 WapIT Ltd.   
- * All rights reserved. 
- * 
- * Redistribution and use in source and binary forms, with or without 
- * modification, are permitted provided that the following conditions 
- * are met: 
- * 
- * 1. Redistributions of source code must retain the above copyright 
- *    notice, this list of conditions and the following disclaimer. 
- * 
- * 2. Redistributions in binary form must reproduce the above copyright 
- *    notice, this list of conditions and the following disclaimer in 
- *    the documentation and/or other materials provided with the 
- *    distribution. 
- * 
- * 3. The end-user documentation included with the redistribution, 
- *    if any, must include the following acknowledgment: 
- *       "This product includes software developed by the 
- *        Kannel Group (http://www.kannel.org/)." 
- *    Alternately, this acknowledgment may appear in the software itself, 
- *    if and wherever such third-party acknowledgments normally appear. 
- * 
- * 4. The names "Kannel" and "Kannel Group" must not be used to 
- *    endorse or promote products derived from this software without 
- *    prior written permission. For written permission, please  
- *    contact o...@kannel.org. 
- * 
- * 5. Products derived from this software may not be called "Kannel", 
- *    nor may "Kannel" appear in their name, without prior written 
- *    permission of the Kannel Group. 
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS 
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,  
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  
- * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR  
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,  
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE  
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,  
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- * ==================================================================== 
- * 
- * This software consists of voluntary contributions made by many 
- * individuals on behalf of the Kannel Group.  For more information on  
- * the Kannel Group, please see <http://www.kannel.org/>. 
- * 
- * Portions of this software are based upon software originally written at  
- * WapIT Ltd., Helsinki, Finland for the Kannel project.  
- */ 
+/* ====================================================================
+ * The Kannel Software License, Version 1.0
+ *
+ * Copyright (c) 2001-2009 Kannel Group
+ * Copyright (c) 1998-2001 WapIT Ltd.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ *    if any, must include the following acknowledgment:
+ *       "This product includes software developed by the
+ *        Kannel Group (http://www.kannel.org/)."
+ *    Alternately, this acknowledgment may appear in the software itself,
+ *    if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Kannel" and "Kannel Group" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please
+ *    contact o...@kannel.org.
+ *
+ * 5. Products derived from this software may not be called "Kannel",
+ *    nor may "Kannel" appear in their name, without prior written
+ *    permission of the Kannel Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE KANNEL GROUP OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Kannel Group.  For more information on
+ * the Kannel Group, please see <http://www.kannel.org/>.
+ *
+ * Portions of this software are based upon software originally written at
+ * WapIT Ltd., Helsinki, Finland for the Kannel project.
+ */
 
 /*
  * bearerbox.c
- * 
+ *
  * this is the core module of the bearerbox. It starts everything and
  * listens to HTTP requests and traps signals.
  * All started modules are responsible for the rest.
@@ -122,9 +122,15 @@
  */
 List *isolated;
 
+/**
+ * Manish Nema : 18-06-2009
+ * GlobalConfiguration file reference
+ */
+Octstr *gCfgFilename;
+
 volatile sig_atomic_t bb_status;
 
-/* 
+/*
  * Flags for main thread to check what is to do.
  */
 enum {
@@ -147,7 +153,7 @@
 {
     sig_atomic_t old = bb_status;
     bb_status = BB_SHUTDOWN;
-    
+
     if (old == BB_SUSPENDED)
         gwlist_remove_producer(suspended);
     if (old == BB_SUSPENDED || old == BB_ISOLATED)
@@ -223,7 +229,7 @@
 {
     static int started = 0;
 
-    if (started) 
+    if (started)
         return 0;
 
     smsbox_start(cfg);
@@ -240,14 +246,14 @@
     Msg *msg;
 
     gwlist_add_producer(flow_threads);
-    
+
     while (bb_status != BB_DEAD) {
 
         if ((msg = gwlist_consume(outgoing_wdp)) == NULL)
             break;
 
         gw_assert(msg_type(msg) == wdp_datagram);
-       
+
         /*
         if (msg->list == sms)
             smsc_addwdp(msg);
@@ -267,9 +273,9 @@
 {
     static int started = 0;
 
-    if (started) 
+    if (started)
         return 0;
-    
+
     wapbox_start(cfg);
 
     debug("bb", 0, "starting WDP router");
@@ -285,7 +291,7 @@
 {
     static int started = 0;
 
-    if (started) 
+    if (started)
         return 0;
 
     udp_start(cfg);
@@ -312,8 +318,8 @@
        smsp = -1;
     if (cfg_get_integer(&wapp, grp, octstr_imm("wapbox-port")) == -1)
        wapp = -1;
-    
-#ifndef NO_SMS    
+
+#ifndef NO_SMS
     grp = cfg_get_single_group(cfg, octstr_imm("smsbox"));
     if (smsp != -1 && grp == NULL) {
         error(0, "No 'smsbox' group in configuration, but smsbox-port set");
@@ -322,8 +328,8 @@
 #else
     warning(0, "Kannel was compiled without SMS support");
 #endif
-    
-#ifndef NO_WAP 
+
+#ifndef NO_WAP
     grp = cfg_get_single_group(cfg, octstr_imm("wapbox"));
     if (wapp != -1 && grp == NULL) {
         error(0, "No 'wapbox' group in configuration, but wapbox-port set");
@@ -332,7 +338,7 @@
 #else
     warning(0, "Kannel was compiled without WAP support");
 #endif
-    
+
     return 0;
 }
 
@@ -340,7 +346,7 @@
 /*
  * check our own variables
  */
-static int check_args(int i, int argc, char **argv) 
+static int check_args(int i, int argc, char **argv)
 {
     if (strcmp(argv[i], "-S")==0 || strcmp(argv[i], "--suspended")==0)
         bb_status = BB_SUSPENDED;
@@ -367,7 +373,7 @@
 
     /* defaults: use localtime and markers for access-log */
     lf = m = 1;
-       
+
     grp = cfg_get_single_group(cfg, octstr_imm("core"));
 
     log = cfg_get(grp, octstr_imm("log-file"));
@@ -424,9 +430,9 @@
 
     /*
      * Make sure we have "ssl-server-cert-file" and "ssl-server-key-file" 
specified
-     * in the core group since we need it to run SSL-enabled internal box 
+     * in the core group since we need it to run SSL-enabled internal box
      * connections configured via "smsbox-port-ssl = yes" and "wapbox-port-ssl 
= yes".
-     * Check only these, because for "admin-port-ssl" and "sendsms-port-ssl" 
for the 
+     * Check only these, because for "admin-port-ssl" and "sendsms-port-ssl" 
for the
      * SSL-enabled HTTP servers are probed within 
gw/bb_http.c:httpadmin_start()
      */
 #ifdef HAVE_LIBSSL
@@ -471,7 +477,7 @@
     load_add_interval(incoming_sms_load, -1);
 
     setup_signal_handlers();
-    
+
     /* http-admin is REQUIRED */
     httpadmin_start(cfg);
 
@@ -487,15 +493,15 @@
         cfg_get_integer(&max_incoming_sms_qlength, grp,
                                   octstr_imm("sms-incoming-queue-limit")) == 
-1)
         max_incoming_sms_qlength = -1;
-        
+
     if (cfg_get_integer(&max_outgoing_sms_qlength, grp,
                                   octstr_imm("sms-outgoing-queue-limit")) == 
-1)
         max_outgoing_sms_qlength = -1;
 
-#ifndef NO_SMS    
+#ifndef NO_SMS
     {
         List *list;
-       
+
         list = cfg_get_multi_group(cfg, octstr_imm("smsc"));
         if (list != NULL) {
             start_smsc(cfg);
@@ -503,7 +509,7 @@
         }
     }
 #endif
-    
+
 #ifndef NO_WAP
     grp = cfg_get_single_group(cfg, octstr_imm("core"));
     val = cfg_get(grp, octstr_imm("wdp-interface-name"));
@@ -514,7 +520,7 @@
     if (cfg_get_single_group(cfg, octstr_imm("wapbox")) != NULL)
         start_wap(cfg);
 #endif
-    
+
     return cfg;
 }
 
@@ -532,7 +538,7 @@
          counter_value(incoming_wdp_counter),
          counter_value(outgoing_wdp_counter));
 #endif
-    
+
     while ((msg = gwlist_extract_first(incoming_wdp)) != NULL)
         msg_destroy(msg);
     while ((msg = gwlist_extract_first(outgoing_wdp)) != NULL)
@@ -543,7 +549,7 @@
 
     counter_destroy(incoming_wdp_counter);
     counter_destroy(outgoing_wdp_counter);
-    
+
 #ifndef NO_SMS
     /* XXX we should record these so that they are not forever lost... */
     if (gwlist_len(incoming_sms) > 0 || gwlist_len(outgoing_sms) > 0)
@@ -557,7 +563,7 @@
 
     gwlist_destroy(incoming_sms, msg_destroy_item);
     gwlist_destroy(outgoing_sms, msg_destroy_item);
-    
+
     counter_destroy(incoming_sms_counter);
     counter_destroy(outgoing_sms_counter);
 
@@ -594,7 +600,7 @@
     Octstr *filename;
 
     bb_status = BB_RUNNING;
-    
+
     gwlib_init();
     start_time = time(NULL);
 
@@ -606,22 +612,30 @@
     cf_index = get_and_set_debugs(argc, argv, check_args);
 
     if (argv[cf_index] == NULL)
-        filename = octstr_create("kannel.conf");
+    {
+       gCfgFilename = octstr_create("kannel.conf");
+       filename = octstr_create("kannel.conf");
+    }
     else
-        filename = octstr_create(argv[cf_index]);
-    cfg = cfg_create(filename); 
-    
+    {
+       gCfgFilename = octstr_create(argv[cf_index]);
+       filename = octstr_create(argv[cf_index]);
+    }
+
+
+    cfg = cfg_create(filename);
+
     if (cfg_read(cfg) == -1)
         panic(0, "Couldn't read configuration from `%s'.", 
octstr_get_cstr(filename));
-    
+
     octstr_destroy(filename);
 
     dlr_init(cfg);
-    
+
     report_versions("bearerbox");
 
     flow_threads = gwlist_create();
-    
+
     init_bearerbox(cfg);
 
     info(0, "----------------------------------------");
@@ -631,7 +645,7 @@
 
     if (store_load(dispatch_into_queue) == -1)
         panic(0, "Cannot start with store-file failing");
-    
+
     info(0, "MAIN: Start-up done, entering mainloop");
     if (bb_status == BB_SUSPENDED) {
         info(0, "Gateway is now SUSPENDED by startup arguments");
@@ -640,11 +654,11 @@
         gwlist_remove_producer(suspended);
     } else {
         smsc2_resume();
-        gwlist_remove_producer(suspended);     
+        gwlist_remove_producer(suspended);
         gwlist_remove_producer(isolated);
     }
 
-    while (bb_status != BB_SHUTDOWN && bb_status != BB_DEAD && 
+    while (bb_status != BB_SHUTDOWN && bb_status != BB_DEAD &&
            gwlist_producer_count(flow_threads) > 0) {
         /* debug("bb", 0, "Main Thread: going to sleep."); */
         /*
@@ -718,9 +732,9 @@
 int bb_shutdown(void)
 {
     static int called = 0;
-    
+
     mutex_lock(status_mutex);
-    
+
     if (called) {
         mutex_unlock(status_mutex);
         return -1;
@@ -739,7 +753,7 @@
     debug("bb", 0, "shutting down udp");
     udp_shutdown();
 #endif
-    
+
     return 0;
 }
 
@@ -842,7 +856,7 @@
         return octstr_create("Un-supported format");
 
     t = time(NULL) - start_time;
-    
+
     if (bb_status == BB_RUNNING)
         s = "running";
     else if (bb_status == BB_ISOLATED)
@@ -899,7 +913,7 @@
                "DLR: %ld queued, using %s storage\n\n";
         footer = "";
     }
-    
+
     ret = octstr_format(frmt,
         octstr_get_cstr(version),
         s, t/3600/24, t/3600%24, t/60%60, t%60,
@@ -914,11 +928,11 @@
         dlr_messages(), dlr_type());
 
     octstr_destroy(version);
-    
+
     append_status(ret, str, boxc_status, status_type);
     append_status(ret, str, smsc2_status, status_type);
     octstr_append_cstr(ret, footer);
-    
+
     return ret;
 }
 

Reply via email to