static struct ast_parked_call_payload *parked_call_payload_from_failure(struct ast_channel *chan) { RAII_VAR(struct ast_parked_call_payload *, payload, NULL, ao2_cleanup); RAII_VAR(struct ast_channel_snapshot *, parkee_snapshot, NULL, ao2_cleanup); parkee_snapshot = ast_channel_snapshot_create(chan); if (!parkee_snapshot) { return NULL; } return ast_parked_call_payload_create(PARKED_CALL_FAILED, parkee_snapshot, NULL, NULL, NULL, 0, 0, 0); }
static struct ast_parked_call_payload *parked_call_payload_from_parked_user(struct parked_user *pu, enum ast_parked_call_event_type event_type) { RAII_VAR(struct ast_channel_snapshot *, parkee_snapshot, NULL, ao2_cleanup); long int timeout; long int duration; struct timeval now = ast_tvnow(); const char *lot_name = pu->lot->name; ast_channel_lock(pu->chan); parkee_snapshot = ast_channel_snapshot_create(pu->chan); ast_channel_unlock(pu->chan); if (!parkee_snapshot) { return NULL; } timeout = pu->start.tv_sec + (long) pu->time_limit - now.tv_sec; duration = now.tv_sec - pu->start.tv_sec; return ast_parked_call_payload_create(event_type, parkee_snapshot, pu->parker_dial_string, pu->retriever, lot_name, pu->parking_space, timeout, duration); }