PDEBUG(DEBUG_GSM, "Destroyed GSM BS process(%s).\n", p_name);
}
+static const char *media_type2name(unsigned char media_type) {
+ switch (media_type) {
+ case MEDIA_TYPE_ULAW:
+ return "PCMU";
+ case MEDIA_TYPE_ALAW:
+ return "PCMA";
+ case MEDIA_TYPE_GSM:
+ return "GSM";
+ case MEDIA_TYPE_GSM_HR:
+ return "GSM-HR";
+ case MEDIA_TYPE_GSM_EFR:
+ return "GSM-EFR";
+ case MEDIA_TYPE_AMR:
+ return "AMR";
+ }
+
+ return "UKN";
+}
+
/* PROCEEDING INDICATION (from MS) */
void Pgsm_bs::call_conf_ind(unsigned int msg_type, unsigned int callref, struct gsm_mncc *mncc)
{
send_and_free_mncc(p_g_lcr_gsm, resp->msg_type, resp);
if (p_g_rtp_bridge) {
- class Port *remote = bridge_remote();
-
- if (remote) {
- struct lcr_msg *message;
-
- /* send dtmf information, because we bridge RTP directly */
- message = message_create(0, remote->p_serial, EPOINT_TO_PORT, MESSAGE_DTMF);
- message->param.dtmf = mncc->keypad;
- message_put(message);
+ /* if two members are bridged */
+ if (p_bridge && p_bridge->first && p_bridge->first->next && !p_bridge->first->next->next) {
+ class Port *remote = NULL;
+
+ /* select other member */
+ if (p_bridge->first->port == this)
+ remote = p_bridge->first->next->port;
+ if (p_bridge->first->next->port == this)
+ remote = p_bridge->first->port;
+
+ if (remote) {
+ struct lcr_msg *message;
+
+ /* send dtmf information, because we bridge RTP directly */
+ message = message_create(0, remote->p_serial, EPOINT_TO_PORT, MESSAGE_DTMF);
+ message->param.dtmf = mncc->keypad;
+ message_put(message);
+ }
}
} else {
/* generate DTMF tones, since we do audio forwarding inside LCR */
if ((mncc->fields & MNCC_F_BEARER_CAP)) {
/* select preferred payload type from list */
int i;
+ unsigned char dynamic_type = 96;
add_trace("bearer", "capa", "given by MS");
for (i = 0; mncc->bearer_cap.speech_ver[i] >= 0; i++) {
case 2:
add_trace("speech", "version", "EFR given");
media_type = MEDIA_TYPE_GSM_EFR;
- payload_type = 100 + *payloads;
+ payload_type = dynamic_type++;
break;
case 4:
add_trace("speech", "version", "AMR given");
media_type = MEDIA_TYPE_AMR;
- payload_type = 100 + *payloads;
+ payload_type = dynamic_type++;
break;
case 1:
add_trace("speech", "version", "Half Rate given");
media_type = MEDIA_TYPE_GSM_HR;
- payload_type = 100 + *payloads;
+ payload_type = dynamic_type++;
+ break;
+ case 5:
+ add_trace("speech", "version", "AMR Half Rate given");
+ media_type = MEDIA_TYPE_AMR;
+ payload_type = dynamic_type++;
break;
default:
add_trace("speech", "version", "%d given", mncc->bearer_cap.speech_ver[i]);
}
if (msg_type == GSM_TCHF_FRAME
- || msg_type == GSM_TCHF_BAD_FRAME) {
+ || msg_type == GSM_BAD_FRAME) {
if (port) {
/* inject DTMF, if enabled */
if (pgsm_bs->p_g_dtmf) {