From fbd19db931396042e8811bdbb747ffbc238aa496 Mon Sep 17 00:00:00 2001
From: gardners <paul@servalproject.org>
Date: Wed, 9 May 2012 07:35:05 +0930
Subject: [PATCH] stripped out lots of debugging for audio frame handling ready
 for audio-streaming of call.

---
 monitor.c | 24 +++++++++++++++---------
 vomp.c    | 23 ++++++++++++-----------
 2 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/monitor.c b/monitor.c
index 4da02e29..4cb44f76 100644
--- a/monitor.c
+++ b/monitor.c
@@ -153,9 +153,9 @@ int monitor_get_fds(struct pollfd *fds,int *fdcount,int fdmax)
 int monitor_poll()
 {
   int s;
-  struct sockaddr ignored_address;
+  unsigned char buffer[1024];
+  struct sockaddr *ignored_address=(struct sockaddr *)&buffer[0];
   socklen_t ignored_length=sizeof(ignored_address);
-  WHY("here");
 
   /* tell all monitor clients about status of all calls periodically */
   long long now=overlay_gettime_ms();
@@ -173,7 +173,7 @@ int monitor_poll()
       /* Push out any undelivered status changes */
       monitor_call_status(&vomp_call_states[i]);
       WHYF("Sending keepalives for call #%d",i);
-
+      
       /* And let far-end know that call is still alive */
       snprintf(msg,128,"\nKEEPALIVE:%06x\n",vomp_call_states[i].local.session);
       for(m=0;m<monitor_socket_count;m++)
@@ -186,16 +186,20 @@ int monitor_poll()
 	fcntl(monitor_named_socket, F_GETFL, NULL)|O_NONBLOCK);
   while((
 #ifdef HAVE_LINUX_IF_H
-	 s=accept4(monitor_named_socket,&ignored_address,&ignored_length,O_NONBLOCK)
+	 s=accept4(monitor_named_socket,ignored_address,&ignored_length,O_NONBLOCK)
 #else
 	 s=accept(monitor_named_socket,&ignored_address,&ignored_length)
 #endif
 )>-1) {
+    WHYF("ignored_length=%d",ignored_length);
     int res = fcntl(s,F_SETFL, O_NONBLOCK);
     if (res) { close(s); continue; }
     struct ucred ucred;
     socklen_t len=sizeof(ucred);
     res = getsockopt(s,SOL_SOCKET,SO_PEERCRED,&ucred,&len);
+    if (len>sizeof(ucred)) {
+      WHYF("This is likely to be bad (memory overrun by getsockopt())");
+    }
     if (res) { 
       WHY("Failed to read credentials of monitor.socket client");
       close(s); continue; }
@@ -205,7 +209,8 @@ int monitor_poll()
       write(s,"\nCLOSE:Incorrect UID\n",strlen("\nCLOSE:Incorrect UID\n"));
       close(s); continue;
     }
-    else if (monitor_socket_count>=MAX_MONITOR_SOCKETS) {
+    else if (monitor_socket_count>=MAX_MONITOR_SOCKETS
+	     ||monitor_socket_count<0) {
       write(s,"\nCLOSE:All sockets busy\n",strlen("\nCLOSE:All sockets busy\n"));
       close(s);
     } else {
@@ -254,7 +259,7 @@ int monitor_poll()
 	  default:
 	    /* all other errors; close socket */
 	    WHYF("Tearing down monitor client #%d due to errno=%d (%s)",
-		 i,errno,strerror(errno));
+		 i,errno,strerror(errno)?strerror(errno):"<unknown error>");
 	    close(c->socket);
 	    if (i==monitor_socket_count-1) {
 	      monitor_socket_count--;
@@ -506,6 +511,7 @@ int monitor_call_status(vomp_call_state *call)
 	     overlay_render_sid(call->local.sid),
 	     overlay_render_sid(call->remote.sid),
 	     call->local.did,call->remote.did);
+    msg[1023]=0;
     for(i=0;i<monitor_socket_count;i++)
       {
 	if (!(monitor_sockets[i].flags&MONITOR_VOMP))
@@ -538,8 +544,8 @@ int monitor_call_status(vomp_call_state *call)
 
 int monitor_send_audio(vomp_call_state *call,overlay_mdp_frame *audio)
 {
-  WHYF("Tell call monitor about audio for call %06x:%06x",
-       call->local.session,call->remote.session);
+  if (0) WHYF("Tell call monitor about audio for call %06x:%06x",
+	      call->local.session,call->remote.session);
 
   int sample_bytes=vomp_sample_size(audio->vompevent.audio_sample_codec);
   unsigned char msg[1024+MAX_AUDIO_BYTES];
@@ -570,7 +576,7 @@ int monitor_send_audio(vomp_call_state *call,overlay_mdp_frame *audio)
       fcntl(monitor_sockets[i].socket,F_SETFL,
 	    fcntl(monitor_sockets[i].socket, F_GETFL, NULL)|O_NONBLOCK);
       write(monitor_sockets[i].socket,msg,msglen);
-      WHYF("Writing AUDIOPACKET to client");
+      // WHYF("Writing AUDIOPACKET to client");
       if (errno&&(errno!=EINTR)&&(errno!=EAGAIN)) {
 	/* error sending update, so kill monitor socket */
 	WHYF("Tearing down monitor client #%d due to errno=%d",
diff --git a/vomp.c b/vomp.c
index 671f6eec..326efbf2 100644
--- a/vomp.c
+++ b/vomp.c
@@ -212,15 +212,15 @@ int vomp_send_status(vomp_call_state *call,int flags,overlay_mdp_frame *arg)
       }
 
       if (flags&VOMP_SENDAUDIO) {
-	WHYF("got %d sample bytes, expecting %d",
-	     arg->vompevent.audio_sample_bytes,
-	     vomp_sample_size(arg->vompevent.audio_sample_codec));
+	if (0) WHYF("got %d sample bytes, expecting %d",
+		    arg->vompevent.audio_sample_bytes,
+		    vomp_sample_size(arg->vompevent.audio_sample_codec));
 	if (vomp_sample_size(arg->vompevent.audio_sample_codec)
 	    ==arg->vompevent.audio_sample_bytes) {
         unsigned short  *len=&mdp.out.payload_length;
 	unsigned char *p=&mdp.out.payload[0];
 
-	WHY("Including audio sample block");
+	// WHY("Including audio sample block");
 
 	/* record sample in recent list.
 	   XXX - What timestamp to attach to the sample?
@@ -298,8 +298,8 @@ int vomp_send_status(vomp_call_state *call,int flags,overlay_mdp_frame *arg)
     bcopy(&call->remote_codec_list[0],&mdp.vompevent.supported_codecs[0],256);
 
     if (flags&VOMP_SENDAUDIO) {
-      WHYF("Frame contains audio (codec=%s)",
-	  vomp_describe_codec(arg->vompevent.audio_sample_codec));
+      if (0) WHYF("Frame contains audio (codec=%s)",
+		  vomp_describe_codec(arg->vompevent.audio_sample_codec));
       bcopy(&arg->vompevent.audio_bytes[0],
 	    &mdp.vompevent.audio_bytes[0],
 	    vomp_sample_size(arg->vompevent.audio_sample_codec));
@@ -332,8 +332,8 @@ int vomp_call_start_audio(vomp_call_state *call)
 int vomp_process_audio(vomp_call_state *call,overlay_mdp_frame *mdp)
 {
   int ofs=14;
-  if (mdp->in.payload_length>14)
-    WHYF("got here (payload has %d bytes)",mdp->in.payload_length);
+  // if (mdp->in.payload_length>14)
+  //  WHYF("got here (payload has %d bytes)",mdp->in.payload_length);
 
   /* Get end time marker for sample block collection */
   unsigned int e=0;
@@ -345,7 +345,7 @@ int vomp_process_audio(vomp_call_state *call,overlay_mdp_frame *mdp)
   while(ofs<mdp->in.payload_length)
     {
       int codec=mdp->in.payload[ofs];
-      WHYF("Spotted a %s sample block",vomp_describe_codec(codec));
+      // WHYF("Spotted a %s sample block",vomp_describe_codec(codec));
       if (!codec||vomp_sample_size(codec)<0) break;
       if ((ofs+1+vomp_sample_size(codec))>mdp->in.payload_length) break;
 
@@ -560,6 +560,7 @@ int vomp_mdp_event(overlay_mdp_frame *mdp,
 	  bcopy(call->remote.sid,mdpreply.vompevent.remote_sid,SID_SIZE);
 	  bcopy(call->local.did,mdpreply.vompevent.local_did,64);
 	  bcopy(call->remote.did,mdpreply.vompevent.remote_did,64);
+	  dump_vomp_status();
 	} else 
 	  if (mdp->vompevent.call_session_token)
 	    /* let the requestor know that the requested call doesn't exist */
@@ -679,11 +680,11 @@ int vomp_mdp_event(overlay_mdp_frame *mdp,
       break;
     case VOMPEVENT_AUDIOPACKET: /* user supplying audio */
       {
-	WHY("Audio packet arrived");
+	// WHY("Audio packet arrived");
 	vomp_call_state *call
 	  =vomp_find_call_by_session(mdp->vompevent.call_session_token);
 	if (call) {
-	  WHY("pushing audio sample out");
+	  // WHY("pushing audio sample out");
 	  return vomp_send_status(call,VOMP_TELLREMOTE|VOMP_SENDAUDIO,mdp);
 	}
 	else WHY("audio packet had invalid call session token");