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 }