static switch_status_t mod_logfile_openlogfile(logfile_profile_t *profile, switch_bool_t check) { unsigned int flags = 0; switch_file_t *afd; switch_status_t stat; flags |= SWITCH_FOPEN_CREATE; flags |= SWITCH_FOPEN_READ; flags |= SWITCH_FOPEN_WRITE; flags |= SWITCH_FOPEN_APPEND; stat = switch_file_open(&afd, profile->logfile, flags, SWITCH_FPROT_OS_DEFAULT, module_pool); if (stat != SWITCH_STATUS_SUCCESS) { return SWITCH_STATUS_FALSE; } profile->log_afd = afd; profile->log_size = switch_file_get_size(profile->log_afd); if (check && profile->roll_size && profile->log_size >= profile->roll_size) { mod_logfile_rotate(profile); } return SWITCH_STATUS_SUCCESS; }
/** * Notify completion of record component */ static void complete_record(struct rayo_component *component, const char *reason, const char *reason_namespace) { switch_core_session_t *session = NULL; const char *uuid = component->parent->id; char *uri = switch_mprintf("file://%s", RECORD_COMPONENT(component)->local_file_path); iks *recording; switch_size_t file_size = 0; /* TODO this doesn't work with HTTP */ #if 0 switch_file_t *file; if (switch_file_open(&file, RECORD_COMPONENT(component)->local_file_path, SWITCH_FOPEN_READ, SWITCH_FPROT_UREAD, RAYO_POOL(component)) == SWITCH_STATUS_SUCCESS) { file_size = switch_file_get_size(file); switch_file_close(file); } else { switch_log_printf(SWITCH_CHANNEL_UUID_LOG(uuid), SWITCH_LOG_INFO, "Failed to open %s.\n", RECORD_COMPONENT(component)->local_file_path); } #endif switch_log_printf(SWITCH_CHANNEL_UUID_LOG(uuid), SWITCH_LOG_DEBUG, "Recording %s done.\n", RECORD_COMPONENT(component)->local_file_path); if (RECORD_COMPONENT(component)->stop_beep && (session = switch_core_session_locate(uuid))) { switch_ivr_displace_session(session, RECORD_BEEP, 0, ""); switch_core_session_rwunlock(session); } /* send complete event to client */ recording = iks_new("recording"); iks_insert_attrib(recording, "xmlns", RAYO_RECORD_COMPLETE_NS); iks_insert_attrib(recording, "uri", uri); iks_insert_attrib_printf(recording, "duration", "%i", RECORD_COMPONENT(component)->duration_ms); iks_insert_attrib_printf(recording, "size", "%"SWITCH_SIZE_T_FMT, file_size); rayo_component_send_complete_with_metadata(component, reason, reason_namespace, recording, 1); iks_delete(recording); RAYO_UNLOCK(component); switch_safe_free(uri); }
static switch_status_t do_reopen(cdr_fd_t *fd) { int x = 0; switch_status_t status = SWITCH_STATUS_FALSE; if(fd == NULL || fd->path == NULL){ return SWITCH_STATUS_FALSE; } //if (fd->fd > -1) { do_close(fd); fd->fd = NULL; for (x = 0; x < 10; x++) { //if ((fd->fd = open(fd->path, O_WRONLY | O_CREAT | O_APPEND, S_IRUSR | S_IWUSR)) > -1) { if(do_open(fd) == SWITCH_STATUS_SUCCESS && fd->fd != NULL){ fd->bytes = switch_file_get_size(fd->fd);//fd_size(fd->fd); status = SWITCH_STATUS_SUCCESS; break; } switch_yield(100000); } return status; }