j_pid = getpid();
j_updatebridge = 0;
j_partyline = 0;
+ j_partyline_jingle = 0;
j_multicause = 0;
j_multilocation = 0;
relation->next->tx_state = notify_state_change(j_serial, relation->next->epoint_id, relation->next->tx_state, relation->rx_state);
} else
/* one member in a join, so we put her on hold */
- if (relations==1 || numconnect==1)
+ if ((relations==1 || numconnect==1)/* && !j_partyline_jingle*/)
{
PDEBUG(DEBUG_JOIN, "join%d 1 member or only 1 connected, put on hold\n");
relation = j_relation;
relation = relation->next;
}
} else
- /* if conference/partyline or (more than two members and more than one is connected), so we set conference state */
+ /* if conference/partyline (or more than two members and more than one is connected), so we set conference state */
{
PDEBUG(DEBUG_JOIN, "join%d %d members, %d connected, signal conference\n", relations, numconnect);
relation = j_relation;
}
/* process party line */
- if (message_type == MESSAGE_SETUP) if (param->setup.partyline)
+ if (message_type == MESSAGE_SETUP) if (param->setup.partyline && !j_partyline)
{
j_partyline = param->setup.partyline;
+ j_partyline_jingle = param->setup.partyline_jingle;
}
if (j_partyline)
{
message->param.connectinfo.ntype = INFO_NTYPE_UNKNOWN;
message_put(message);
j_updatebridge = 1; /* update bridge flag */
+ if (j_partyline_jingle)
+ play_jingle(1);
break;
case MESSAGE_AUDIOPATH:
case MESSAGE_RELEASE:
PDEBUG(DEBUG_JOIN, "releasing from join\n");
release(relation, 0, 0);
+ if (j_relation && j_partyline_jingle)
+ play_jingle(0);
break;
default:
break;
case RELATION_TYPE_CALLING: /* by calling */
+ /* remove us, if we don't have a called releation yet */
+ if (!j_relation->next)
+ {
+ release(j_relation, LOCATION_PRIVATE_LOCAL, CAUSE_NORMAL);
+ return; // must return, because join IS destroyed
+ }
/* remove all relations that are in called */
release_again2:
reltemp = j_relation;
}
+/* send play message to all members to play join/release jingle */
+void JoinPBX::play_jingle(int in)
+{
+ struct join_relation *relation;
+ struct message *message;
+
+ relation = j_relation;
+
+ if (!relation)
+ return;
+ if (!relation->next)
+ return;
+
+ while(relation)
+ {
+ message = message_create(j_serial, relation->epoint_id, JOIN_TO_EPOINT, MESSAGE_TONE);
+ SCPY(message->param.tone.name, (char *)((in)?"left":"joined"));
+ message_put(message);
+ relation = relation->next;
+ }
+}
+
+