void ims_pm_init(str node_name,char* type, char *file_name) { log_prefix.len = 1+strlen(type)+1+node_name.len+1; log_prefix.s = pkg_malloc(log_prefix.len); if (!log_prefix.s) { LOG(L_ERR,"ERR:"M_NAME":ims_pm_init(): Error alocating %d bytes\n",log_prefix.len); log_prefix.len=0; return; } log_prefix.len=0; log_prefix.s[log_prefix.len++]=','; memcpy(log_prefix.s+log_prefix.len,type,strlen(type)); log_prefix.len+=strlen(type); log_prefix.s[log_prefix.len++]=','; memcpy(log_prefix.s+log_prefix.len,node_name.s,node_name.len); log_prefix.len+=node_name.len; log_prefix.s[log_prefix.len++]=','; fd_log = open(file_name,O_WRONLY|O_APPEND|O_CREAT|O_NONBLOCK); if (fd_log<0){ LOG(L_ERR,"ERR:"M_NAME":ims_pm_init(): Error opening fd logger file %s : %s\n",file_name,strerror(errno)); fd_log = 0; return; } f_log = fdopen(fd_log,"a"); if (!f_log){ LOG(L_ERR,"ERR:"M_NAME":ims_pm_init(): Error opening logger file %s : %s\n",file_name,strerror(errno)); close(fd_log); fd_log=0; return; } log_header.len = strlen(log_header.s); if (write(fd_log,log_header.s,log_header.len)<0){ LOG(L_ERR,"ERR:"M_NAME":ims_pm_init(): Error writing to IMS PM log file: %s\n",strerror(errno)); } IMS_PM_LOG(OP_NodeStart); }
void ims_pm_destroy() { IMS_PM_LOG(OP_NodeStop); if (fd_log) close(fd_log); }
int r_send_third_party_reg(r_third_party_registration *r,int expires) { str h={0,0}; str b={0,0}; LOG(L_DBG,"DBG:"M_NAME":r_send_third_party_reg: REGISTER to <%.*s>\n", r->req_uri.len,r->req_uri.s); h.len = event_hdr.len+max_fwds_hdr.len; h.len += expires_s.len + 12 + expires_e.len; h.len += contact_s.len + isc_my_uri_sip.len + contact_e.len; if (r->pvni.len) h.len += p_visited_network_id_s.len + p_visited_network_id_e.len + r->pvni.len; if (r->pani.len) h.len += p_access_network_info_s.len + p_access_network_info_e.len + r->pani.len; if (r->cv.len) h.len += p_charging_vector_s.len + p_charging_vector_e.len + r->cv.len; h.s = pkg_malloc(h.len); if (!h.s){ LOG(L_ERR,"ERR:"M_NAME":r_send_third_party_reg: Error allocating %d bytes\n",h.len); h.len = 0; return 0; } h.len = 0; STR_APPEND(h,event_hdr); STR_APPEND(h,max_fwds_hdr); STR_APPEND(h,expires_s); sprintf(h.s+h.len,"%d",expires); h.len += strlen(h.s+h.len); STR_APPEND(h,expires_e); STR_APPEND(h,contact_s); STR_APPEND(h,isc_my_uri_sip); STR_APPEND(h,contact_e); if (r->pvni.len) { STR_APPEND(h,p_visited_network_id_s); STR_APPEND(h,r->pvni); STR_APPEND(h,p_visited_network_id_e); } if (r->pani.len) { STR_APPEND(h,p_access_network_info_s); STR_APPEND(h,r->pani); STR_APPEND(h,p_access_network_info_e); } if (r->cv.len) { STR_APPEND(h,p_charging_vector_s); STR_APPEND(h,r->cv); STR_APPEND(h,p_charging_vector_e); } LOG(L_CRIT,"SRV INFO:<%.*s>\n",r->service_info.len, r->service_info.s); if (r->service_info.len){ b.len = body_s.len+r->service_info.len+body_e.len; b.s = pkg_malloc(b.len); if (!b.s){ LOG(L_ERR,"ERR:"M_NAME":r_send_third_party_reg: Error allocating %d bytes\n",b.len); b.len = 0; return 0; } b.len = 0; STR_APPEND(b,body_s); STR_APPEND(b,r->service_info); STR_APPEND(b,body_e); } if (isc_tmb.t_request(&method, &(r->req_uri), &(r->to), &(r->from), &h, &b, 0, r_third_party_reg_response, &(r->req_uri))<0) { LOG(L_ERR,"ERR:"M_NAME":r_send_third_party_reg: Error sending in transaction\n"); goto error; } #ifdef WITH_IMS_PM IMS_PM_LOG(UR_Att3rdPartyReg); #endif if (h.s) pkg_free(h.s); return 1; error: if (h.s) pkg_free(h.s); return 0; }