config.c

Go to the documentation of this file.
00001 
00054 #include "config.h"
00055 
00059 inline dp_config *new_dp_config()
00060 {
00061     dp_config *x;   
00062     x = shm_malloc(sizeof(dp_config));
00063     if (!x) {
00064         LOG_NO_MEM("shm",sizeof(dp_config));
00065         goto error;
00066     }   
00067     memset(x,0,sizeof(dp_config));
00068     return x;
00069 error:
00070     LOG(L_ERR,"ERROR:%s(): failed to create new dp_config.\n",__FUNCTION__);    
00071     return 0;
00072 }
00073 
00077 inline routing_realm *new_routing_realm()
00078 {
00079     routing_realm *x;   
00080     x = shm_malloc(sizeof(routing_realm));
00081     if (!x) {
00082         LOG_NO_MEM("shm",sizeof(routing_realm));
00083         goto error;
00084     }   
00085     memset(x,0,sizeof(routing_realm));
00086     return x;
00087 error:
00088     LOG(L_ERR,"ERROR:%s(): failed to create new routing_realm.\n",__FUNCTION__);    
00089     return 0;
00090 }
00091 
00095 inline routing_entry *new_routing_entry()
00096 {
00097     routing_entry *x;   
00098     x = shm_malloc(sizeof(routing_entry));
00099     if (!x) {
00100         LOG_NO_MEM("shm",sizeof(routing_entry));
00101         goto error;
00102     }   
00103     memset(x,0,sizeof(routing_entry));
00104     return x;
00105 error:
00106     LOG(L_ERR,"ERROR:%s(): failed to create new routing_entry.\n",__FUNCTION__);    
00107     return 0;
00108 }
00109 
00110 
00114 inline void free_routing_entry(routing_entry *re)
00115 {
00116     if (!re) return;
00117     if (re->fqdn.s) shm_free(re->fqdn.s);
00118     shm_free(re);
00119 }
00120 
00124 inline void free_routing_realm(routing_realm *rr)
00125 {
00126     routing_entry *re,*ren;
00127     if (!rr) return;
00128     if (rr->realm.s) shm_free(rr->realm.s);
00129     for(re=rr->routes;re;re=ren){
00130         ren = re->next;
00131         free_routing_entry(re);
00132     }
00133     shm_free(rr);
00134 }
00135 
00136 
00137 
00138 
00142 inline void free_dp_config(dp_config *x)
00143 {
00144     int i;
00145     if (!x) return;
00146     if (x->fqdn.s) shm_free(x->fqdn.s);
00147     if (x->identity.s) shm_free(x->identity.s);
00148     if (x->realm.s) shm_free(x->realm.s);
00149     if (x->product_name.s) shm_free(x->product_name.s);
00150     if (x->peers) {
00151         for(i=0;i<x->peers_cnt;i++){
00152             if (x->peers[i].fqdn.s) shm_free(x->peers[i].fqdn.s);
00153             if (x->peers[i].realm.s) shm_free(x->peers[i].realm.s);
00154         }
00155         shm_free(x->peers);
00156     }
00157     if (x->acceptors) {
00158         for(i=0;i<x->acceptors_cnt;i++){
00159             if (x->acceptors[i].bind.s) shm_free(x->acceptors[i].bind.s);
00160         }       
00161         shm_free(x->acceptors);
00162     }
00163     if (x->applications) shm_free(x->applications);
00164     
00165     if (x->r_table) {
00166         routing_realm *rr,*rrn;
00167         routing_entry *re,*ren;
00168         for(rr=x->r_table->realms;rr;rr=rrn){
00169             rrn = rr->next;
00170             free_routing_realm(rr);
00171         }
00172         for(re=x->r_table->routes;re;re=ren){
00173             ren = re->next;
00174             free_routing_entry(re);
00175         }
00176         shm_free(x->r_table);
00177     }   
00178     shm_free(x);
00179 }
00180 
00184 inline void log_dp_config(int level,dp_config *x)
00185 {
00186     int i;
00187     LOG(level,"Diameter Peer Config:\n");
00188     LOG(level,"\tFQDN    : %.*s\n",x->fqdn.len,x->fqdn.s);
00189     LOG(level,"\tRealm   : %.*s\n",x->realm.len,x->realm.s);
00190     LOG(level,"\tVendorID: %d\n",x->vendor_id);
00191     LOG(level,"\tProdName: %.*s\n",x->product_name.len,x->product_name.s);
00192     LOG(level,"\tAcceptUn: [%c]\n",x->accept_unknown_peers?'X':' ');
00193     LOG(level,"\tDropUnkn: [%c]\n",x->drop_unknown_peers?'X':' ');
00194     LOG(level,"\tTc      : %d\n",x->tc);
00195     LOG(level,"\tWorkers : %d\n",x->workers);
00196     LOG(level,"\tQueueLen: %d\n",x->queue_length);
00197     LOG(level,"\tPeers : %d\n",x->peers_cnt);
00198     for(i=0;i<x->peers_cnt;i++)
00199         LOG(level,"\t\tFQDN:  %.*s \t Realm: %.*s \t Port: %d\n",
00200             x->peers[i].fqdn.len,x->peers[i].fqdn.s,
00201             x->peers[i].realm.len,x->peers[i].realm.s,
00202             x->peers[i].port);
00203     LOG(level,"\tAcceptors : %d\n",x->acceptors_cnt);
00204     for(i=0;i<x->acceptors_cnt;i++)
00205         LOG(level,"\t\tPort:  %d \t Bind: %.*s \n",
00206             x->acceptors[i].port,
00207             x->acceptors[i].bind.len,x->acceptors[i].bind.s);
00208     LOG(level,"\tApplications : %d\n",x->applications_cnt);
00209     for(i=0;i<x->applications_cnt;i++)
00210         LOG(level,"\t\t%s ID:  %d \t Vendor: %d \n",
00211             (x->applications[i].type==DP_AUTHORIZATION)?"Auth":"Acct",
00212             x->applications[i].id,
00213             x->applications[i].vendor); 
00214     if (x->r_table){
00215         routing_realm *rr;
00216         routing_entry *re;
00217         LOG(level,"\tRouting Table : \n");
00218         for(rr=x->r_table->realms;rr;rr=rr->next){
00219             LOG(level,"\t\tRealm: %.*s\n",
00220                 rr->realm.len,rr->realm.s);
00221             for(re=rr->routes;re;re=re->next)       
00222                 LOG(level,"\t\t\tRoute: [%4d] %.*s\n",
00223                     re->metric,re->fqdn.len,re->fqdn.s);            
00224         }
00225         for(re=x->r_table->routes;re;re=re->next)       
00226             LOG(level,"\t\tDefaultRoute: [%4d] %.*s\n",
00227                 re->metric,re->fqdn.len,re->fqdn.s);            
00228     }
00229     
00230 }

Generated on Sun Oct 12 04:10:21 2008 for Open IMS Core CSCFs by  doxygen 1.5.2