mirror of
https://github.com/servalproject/serval-dna.git
synced 2025-02-20 17:33:08 +00:00
Added initial work towards a call status monitoring commandline
option.
This commit is contained in:
parent
2a24f3e137
commit
76a1bec84e
@ -899,6 +899,8 @@ command_line_option command_line_options[]={
|
||||
"Set the DID for the specified SID. Optionally supply PIN to unlock the SID record in the keyring."},
|
||||
{app_vomp_status,{"vomp","status",NULL},0,
|
||||
"Display status of any VoMP calls"},
|
||||
{app_vomp_monitor,{"vomp","monitor",NULL},0,
|
||||
"Monitor state and audio-flow of VoMP calls"},
|
||||
{app_vomp_pickup,{"vomp","pickup","<call>",NULL},0,
|
||||
"Accept specified call (use vomp status to get list of calls)"},
|
||||
{app_vomp_hangup,{"vomp","hangup","<call>",NULL},0,
|
||||
|
1
serval.h
1
serval.h
@ -1309,3 +1309,4 @@ int app_vomp_status(int argc, char **argv, struct command_line_option *o);
|
||||
int app_vomp_dial(int argc, char **argv, struct command_line_option *o);
|
||||
int app_vomp_pickup(int argc, char **argv, struct command_line_option *o);
|
||||
int app_vomp_hangup(int argc, char **argv, struct command_line_option *o);
|
||||
int app_vomp_monitor(int argc, char **argv, struct command_line_option *o);
|
||||
|
57
vomp.c
57
vomp.c
@ -319,6 +319,7 @@ int vomp_mdp_event(overlay_mdp_frame *mdp,
|
||||
switch(mdp->vompevent.flags)
|
||||
{
|
||||
case VOMPEVENT_REGISTERINTEREST:
|
||||
WHY("Request to register interest");
|
||||
/* put unix domain socket on record to send call state event and audio to. */
|
||||
{
|
||||
int i;
|
||||
@ -350,6 +351,8 @@ int vomp_mdp_event(overlay_mdp_frame *mdp,
|
||||
vomp_interested_usock_lengths[i]=recvaddrlen;
|
||||
vomp_interested_expiries[i]=overlay_gettime_ms()+60000;
|
||||
if (i==vomp_interested_usock_count) vomp_interested_usock_count++;
|
||||
return overlay_mdp_reply_error
|
||||
(mdp_named_socket,recvaddr,recvaddrlen,0,"Success");
|
||||
} else {
|
||||
return overlay_mdp_reply_error
|
||||
(mdp_named_socket,recvaddr,recvaddrlen,
|
||||
@ -359,6 +362,7 @@ int vomp_mdp_event(overlay_mdp_frame *mdp,
|
||||
break;
|
||||
case VOMPEVENT_WITHDRAWINTEREST:
|
||||
/* opposite of above */
|
||||
WHY("Request to withdraw interest");
|
||||
{
|
||||
int i;
|
||||
for(i=0;i<vomp_interested_usock_count;i++)
|
||||
@ -848,13 +852,18 @@ int app_vomp_status(int argc, char **argv, struct command_line_option *o)
|
||||
if (mdp.packetTypeAndFlags==MDP_ERROR&&mdp.error.error)
|
||||
fprintf(stderr,"MDP: error=%d, message='%s'\n",
|
||||
mdp.error.error,mdp.error.message);
|
||||
overlay_mdp_client_done();
|
||||
return -1;
|
||||
}
|
||||
if (mdp.packetTypeAndFlags!=MDP_VOMPEVENT) {
|
||||
return WHYF("Received incorrect reply type from server (received MDP message type 0x%04x)\n",mdp.packetTypeAndFlags);
|
||||
WHYF("Received incorrect reply type from server (received MDP message type 0x%04x)\n",mdp.packetTypeAndFlags);
|
||||
overlay_mdp_client_done();
|
||||
return -1;
|
||||
}
|
||||
if (mdp.vompevent.flags!=VOMPEVENT_CALLINFO) {
|
||||
return WHYF("Received incorrect reply type from server (received VoMP message type 0x%04x)\n",mdp.vompevent.flags);
|
||||
WHYF("Received incorrect reply type from server (received VoMP message type 0x%04x)\n",mdp.vompevent.flags);
|
||||
overlay_mdp_client_done();
|
||||
return -1;
|
||||
}
|
||||
int i;
|
||||
int count=0;
|
||||
@ -891,7 +900,7 @@ int app_vomp_status(int argc, char **argv, struct command_line_option *o)
|
||||
fprintf(stderr,"\n");
|
||||
}
|
||||
fprintf(stderr,"%d live call descriptors.\n",count);
|
||||
return 0;
|
||||
return overlay_mdp_client_done();
|
||||
}
|
||||
|
||||
int app_vomp_dial(int argc, char **argv, struct command_line_option *o)
|
||||
@ -922,7 +931,7 @@ int app_vomp_dial(int argc, char **argv, struct command_line_option *o)
|
||||
else
|
||||
printf("Dial request accepted.\n");
|
||||
|
||||
return 0;
|
||||
return overlay_mdp_client_done();
|
||||
}
|
||||
|
||||
|
||||
@ -948,7 +957,7 @@ int app_vomp_pickup(int argc, char **argv, struct command_line_option *o)
|
||||
else
|
||||
printf("Pickup request accepted.\n");
|
||||
|
||||
return 0;
|
||||
return overlay_mdp_client_done();
|
||||
}
|
||||
|
||||
int app_vomp_hangup(int argc, char **argv, struct command_line_option *o)
|
||||
@ -973,9 +982,45 @@ int app_vomp_hangup(int argc, char **argv, struct command_line_option *o)
|
||||
else
|
||||
printf("Hangup/reject request accepted.\n");
|
||||
|
||||
return 0;
|
||||
return overlay_mdp_client_done();
|
||||
}
|
||||
|
||||
int app_vomp_monitor(int argc, char **argv, struct command_line_option *o)
|
||||
{
|
||||
overlay_mdp_frame mdp;
|
||||
bzero(&mdp,sizeof(mdp));
|
||||
|
||||
mdp.packetTypeAndFlags=MDP_VOMPEVENT;
|
||||
mdp.vompevent.flags=VOMPEVENT_REGISTERINTEREST;
|
||||
if (overlay_mdp_send(&mdp,MDP_AWAITREPLY,5000))
|
||||
{ WHY("Failed to register interest in telephony events.");
|
||||
overlay_mdp_client_done(); return -1; }
|
||||
if (mdp.packetTypeAndFlags==MDP_ERROR&&mdp.error.error) {
|
||||
fprintf(stderr," MDP Server error #%d: '%s'\n",
|
||||
mdp.error.error,mdp.error.message);
|
||||
}
|
||||
|
||||
while(!servalShutdown) {
|
||||
overlay_mdp_frame rx;
|
||||
int ttl;
|
||||
if (overlay_mdp_client_poll(0)>0)
|
||||
if (!overlay_mdp_recv(&rx,&ttl))
|
||||
dump("monitored message",&rx,overlay_mdp_relevant_bytes(&rx));
|
||||
|
||||
}
|
||||
|
||||
mdp.packetTypeAndFlags=MDP_VOMPEVENT;
|
||||
mdp.vompevent.flags=VOMPEVENT_WITHDRAWINTEREST;
|
||||
if (overlay_mdp_send(&mdp,MDP_AWAITREPLY,5000))
|
||||
{ WHY("Failed to deregister interest in telephony events.");
|
||||
overlay_mdp_client_done(); return -1; }
|
||||
if (mdp.packetTypeAndFlags==MDP_ERROR&&mdp.error.error) {
|
||||
fprintf(stderr," MDP Server error #%d: '%s'\n",
|
||||
mdp.error.error,mdp.error.message);
|
||||
}
|
||||
|
||||
return overlay_mdp_client_done();
|
||||
}
|
||||
|
||||
int overlay_mdp_getmyaddr(int index,unsigned char *sid)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user