Change IE_METERING timing information from deciseconds to seconds and milliseconds

This commit is contained in:
Dennis Grunert 2024-01-29 10:46:23 +01:00
parent d825843be5
commit 16cfce2f23
2 changed files with 12 additions and 11 deletions

View File

@ -346,7 +346,7 @@ static void metering_timer_cb(void *data)
/* reschedule timer and send next periodic metering pulse */
LOGP(DTEL, LOGL_DEBUG, "Sending next periodic metering pulse.\n");
osmo_timer_schedule(&pstn_call->metering_timer, pstn_call->metering_unit_period_decisecs / 10, (pstn_call->metering_unit_period_decisecs % 10) * 100000);
osmo_timer_schedule(&pstn_call->metering_timer, pstn_call->metering_unit_period.tv_sec, pstn_call->metering_unit_period.tv_usec);
/* metering using V5 metering signal */
if(pstn_call->pstn->metering) {
@ -385,6 +385,7 @@ static void metering_lr_timer_cb(void *data)
uint8_t ie_ln[3] = { PSTN_V5_IE_STEADY_SIGNAL, 1, 0x80 | PSTN_V5_STEADY_SIGNAL_NORMAL };
v5_sig_req(pstn, ie_ln, sizeof(ie_ln));
}
pstn->metering_units_sent++;
pstn->reversed = 0;
osmo_timer_schedule(&pstn->metering_lr_timer, 0, METERING_LR_NORM_MILLISEC * 1000);
}
@ -396,7 +397,6 @@ static void metering_lr_timer_cb(void *data)
v5_sig_req(pstn, ie_lr, sizeof(ie_lr));
}
pstn->reversed = 1;
pstn->metering_units_sent++;
osmo_timer_schedule(&pstn->metering_lr_timer, 0, METERING_LR_REV_MILLISEC * 1000);
}
}
@ -1194,7 +1194,7 @@ void cc_message(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg)
if (!rc && coding == OSMO_CC_CODING_ITU_T && (progress == 1 || progress == 8))
pstn->audio_path = 1;
/* get metering information */
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period_decisecs));
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period));
/* change call state */
pstn_call_state(pstn_call, CALL_STATE_PROCEEDING_NET);
break;
@ -1225,7 +1225,7 @@ void cc_message(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg)
tone_on(pstn, TONE_RINGING, "ringback");
}
/* get metering information */
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period_decisecs));
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period));
/* change call state */
pstn_call_state(pstn_call, CALL_STATE_ALERTING_NET);
break;
@ -1250,7 +1250,7 @@ void cc_message(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg)
break;
}
/* get metering information */
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period_decisecs));
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period));
LOGP(DTEL, LOGL_INFO, "Sending SETUP-COMP-IND towards Osmo-CC\n");
/* create osmo-cc message */
new_msg = osmo_cc_new_msg(OSMO_CC_MSG_SETUP_COMP_IND);
@ -1275,9 +1275,9 @@ void cc_message(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg)
osmo_timer_schedule(&pstn->metering_lr_timer, 0, 1000);
}
/* start unit timer if a unit period is given */
if(pstn_call->metering_unit_period_decisecs > 0) {
LOGP(DTEL, LOGL_DEBUG, "Scheduling metering pulses every %d deciseconds.\n", pstn_call->metering_unit_period_decisecs);
osmo_timer_schedule(&pstn_call->metering_timer, pstn_call->metering_unit_period_decisecs / 10, (pstn_call->metering_unit_period_decisecs % 10) * 100000);
if(pstn_call->metering_unit_period.tv_sec > 0 || pstn_call->metering_unit_period.tv_usec > 0) {
LOGP(DTEL, LOGL_DEBUG, "Scheduling metering pulses every %d.%03d seconds.\n", (uint16_t)pstn_call->metering_unit_period.tv_sec, (uint32_t)pstn_call->metering_unit_period.tv_usec / 1000);
osmo_timer_schedule(&pstn_call->metering_timer, pstn_call->metering_unit_period.tv_sec, pstn_call->metering_unit_period.tv_usec);
}
}
if(pstn->lr_on_connect && !pstn->lr_metering) {
@ -1297,7 +1297,7 @@ void cc_message(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg)
case OSMO_CC_MSG_PROGRESS_REQ: /* progress */
LOGP(DTEL, LOGL_INFO, "Received PROGRESS-REQ from Osmo-CC.\n");
/* get metering information */
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period_decisecs));
osmo_cc_get_ie_metering(msg, 0, &(pstn_call->metering_connect_units), &(pstn_call->metering_unit_period));
/* stop timer */
timer_off(pstn);
/* negotiate audio */
@ -1542,7 +1542,8 @@ static void setup_ind(pstn_t *pstn, int hold, const char *called, int complete)
pstn->audio_path = 0;
/* set metering stuff to off */
pstn_call->metering_connect_units = 0;
pstn_call->metering_unit_period_decisecs = 0;
pstn_call->metering_unit_period.tv_sec = 0;
pstn_call->metering_unit_period.tv_usec = 0;
osmo_timer_setup(&pstn_call->metering_timer, metering_timer_cb, pstn_call);
}

View File

@ -119,7 +119,7 @@ struct call {
osmo_cc_session_codec_t *codec;
int on_hold; /* track hold/retrieval notification */
uint16_t metering_connect_units;
uint16_t metering_unit_period_decisecs;
struct timeval metering_unit_period;
struct osmo_timer_list metering_timer;
};