From 48653e3a9db899cd4991bd09250b547c49834ac0 Mon Sep 17 00:00:00 2001 From: naga Date: Wed, 15 Apr 1998 18:44:04 +0000 Subject: *** empty log message *** --- .../mpeg/source/mpeg_client/Command_Handler.cpp | 34 +- .../tests/AVStreams/mpeg/source/mpeg_client/ab.cpp | 6 +- .../AVStreams/mpeg/source/mpeg_client/ctr.cpp | 5 +- .../mpeg/source/mpeg_server/Audio_Server.cpp | 635 ++++++++++++++++++++- .../mpeg/source/mpeg_server/Audio_Server.h | 116 +++- .../mpeg/source/mpeg_server/Video_Control_i.h | 3 - .../mpeg/source/mpeg_shared/Audio_Control.idl | 41 +- .../AVStreams/mpeg/source/mpeg_shared/Makefile | 366 +++++++++++- .../AVStreams/mpeg/source/mpeg_shared/com.cpp | 4 +- .../tests/AVStreams/mpeg/source/server/Makefile | 207 ++++++- .../tests/AVStreams/mpeg/source/server/server.cpp | 97 ++-- .../tests/AVStreams/mpeg/source/server/server.h | 11 +- 12 files changed, 1415 insertions(+), 110 deletions(-) diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/Command_Handler.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/Command_Handler.cpp index a66e8a76c03..0fbdfac524c 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/Command_Handler.cpp +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/Command_Handler.cpp @@ -586,6 +586,29 @@ Command_Handler::stat_stream (CORBA::Char_out ch, CORBA::Boolean Command_Handler::close (void) { + + if (audioSocket >=0) + { + unsigned char tmp = CmdCLOSE; + int result = + this->stop_playing(); + if (result < 0) + return result; + + if (audioSocket >= 0) + { + if (ABpid > 0) { + kill(ABpid, SIGUSR1); + ABpid = -1; + } + usleep(10000); + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Reached line %d in %s\n", __LINE__, __FILE__)); + AudioWrite(&tmp, 1); + ComCloseConn(audioSocket); + audioSocket = -1; + } + } + if (this->video_control_.in () == 0) return CORBA::B_TRUE; TAO_TRY @@ -796,9 +819,9 @@ Command_Handler::play (int auto_exp, unsigned int ats; int cmdstarted = 0; int stuffsamples = 0; - /* + fprintf (stderr, "CTR: PLAY . . .\n"); - */ + this->stop_playing (); if (!shared->live && !shared->config.rt && videoSocket >= 0) { @@ -859,7 +882,9 @@ Command_Handler::play (int auto_exp, tmp = CmdPLAY; AudioWrite (&tmp, 1); AudioWrite (¶, sizeof (para)); + // ACE_DEBUG ((LM_DEBUG,"(%P|%t)Reached line %d in %s",__LINE__,__FILE__)); read_int (audioSocket, (int *)&ats); + // ACE_DEBUG ((LM_DEBUG,"(%P|%t)Reached line %d in %s",__LINE__,__FILE__)); } if (videoSocket >= 0 && shared->nextFrame < shared->totalFrames) @@ -933,7 +958,7 @@ Command_Handler::play (int auto_exp, this->video_control_->play (para, vts, env); - + ACE_DEBUG ((LM_DEBUG,"(%P|%t)Reached line %d in %s",__LINE__,__FILE__)); if (shared->config.qosEffective) { /* fprintf (stderr, "CTR start FeedBack with init frameRateLimit %lf\n", @@ -1204,6 +1229,7 @@ Command_Handler::stop_playing (void) if (precmd == CmdFF || precmd == CmdFB || precmd == CmdPLAY) { + ACE_DEBUG ((LM_DEBUG, "(%P|%t) Reached line %d in %s\n", __LINE__, __FILE__)); unsigned char tmp = CmdSTOP; NewCmd(CmdSTOP); @@ -1509,7 +1535,7 @@ Client_Sig_Handler::handle_signal (int signum, siginfo_t *, ucontext_t *) ACE_DEBUG ((LM_DEBUG, "(%t) %S: not handled, returning to program\n", signum)); - break; + return 0; } TimerProcessing (); return 0; diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ab.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ab.cpp index c2829df769c..f1d927aaf49 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ab.cpp +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ab.cpp @@ -222,11 +222,14 @@ void ABprocess(int dataSocket) int bytes; if (conn_tag >= 0) { bytes = sizeof(*packet); + + len = wait_read_bytes(dataSocket, (char *)packet, bytes); if (exit_tag) exit_on_kill(); } else { /* discard mode packet stream, read all bytes */ bytes = PACKET_SIZE; + //ACE_DEBUG ((LM_DEBUG,"(%P|%t) ABprocess: waiting for %d sized packet\n",bytes)); len = read(dataSocket, (char *)packet, bytes); if (exit_tag) exit_on_kill(); if (len == -1) { @@ -251,7 +254,8 @@ void ABprocess(int dataSocket) packet->dataBytes = ntohl(packet->dataBytes); #endif - if (packet->dataBytes <= 0) { + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) ABprocess: Received %d sized packet\n",len)); + if (packet->dataBytes <= 0) { fprintf(stderr, "AB Error: pkt->dataBytes %d, len %d\n", packet->dataBytes, len); diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ctr.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ctr.cpp index 33412c67fa9..507cd8d9fba 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ctr.cpp +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_client/ctr.cpp @@ -2814,10 +2814,11 @@ static void on_exit_routine(void) ComCloseConn(audioSocket); audioSocket = -1; } + if (videoSocket >= 0) { - write(videoSocket, &tmp, 1); - ComCloseConn(videoSocket); + // write(videoSocket, &tmp, 1); + // ComCloseConn(videoSocket); videoSocket = -1; if (VBpid > 0) { kill(VBpid, SIGUSR1); diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.cpp index 4df0a7e095d..8c963ea975b 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.cpp +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.cpp @@ -2,7 +2,12 @@ #include "Audio_Server.h" Audio_Global::Audio_Global (void) - :bytes_sent (0), + :state (AUDIO_WAITING), + addSamples (0), + nextTime (0), + upp (0), + delta_sps (0), + bytes_sent (0), start_time (0), conn_tag (0), serviceSocket (-1), @@ -176,6 +181,7 @@ Audio_Global::INITaudio(void) int Audio_Global::send_packet(int firstSample, int samples) { + // ACE_DEBUG ((LM_DEBUG,"(%P|%t) send_packet called\n")); long offset = firstSample * audioPara.bytesPerSample; int size = samples * audioPara.bytesPerSample; char * buf = (char *)pktbuf + sizeof(*pktbuf); @@ -290,6 +296,7 @@ Audio_Global::ResendPacket(int firstsample, int samples) } } +#if 0 int Audio_Global::PLAYaudio(void) { @@ -558,6 +565,105 @@ Audio_Global::PLAYaudio(void) } } } +#endif + +// our version of play audio. +int +Audio_Global::play_audio(void) +{ + int result; + + ACE_DEBUG ((LM_DEBUG,"(%P|%t) play_audio () called \n")); + + { + PLAYaudioPara para; + result = CmdRead((char *)¶, sizeof(para)); + if (result != 0) + return result; +#ifdef NeedByteOrderConversion + para.sn = ntohl(para.sn); + para.nextSample = ntohl(para.nextSample); + para.samplesPerSecond = ntohl(para.samplesPerSecond); + para.samplesPerPacket = ntohl(para.samplesPerPacket); + para.ABsamples = ntohl(para.ABsamples); + para.spslimit = ntohl(para.spslimit); +#endif + nextsample = para.nextSample; + cmdsn = para.sn; + sps = para.samplesPerSecond; + spslimit = para.spslimit; + spp = para.samplesPerPacket; + addSamples = para.ABsamples / 2; + if (spp * audioPara.bytesPerSample > databuf_size) { + spp = databuf_size / audioPara.bytesPerSample; + } + /* + SFprintf(stderr, "AS got CmdPLAY: sps %d\n", sps); + */ + } + /* + fprintf(stderr, "AS: nextSampe=%d for PLAY.\n", para.nextSample); + */ + + upp = (int)(1000000.0 / ((double)sps / (double)spp)); + nextTime = get_usec(); + + CmdWrite((char *)&nextTime, sizeof(int)); + if (live_source) { + StartPlayLiveAudio(); + } + this->send_audio (); +} + +int +Audio_Global::send_audio (void) +{ + static int packets = 0; + static int hasdata = 1; + static struct timeval tval; + unsigned curTime = get_usec(); + + if (hasdata) { + if (addSamples < - spp) { /* slow down by not sending packets */ + /* ACE_DEBUG ((LM_DEBUG,"(%P|%t) slow down by not sending\n")); */ + nextTime += upp; + addSamples += spp; + } + else { + /* ACE_DEBUG ((LM_DEBUG,"(%P|%t) sending." + "nexttime = %d, curTime = %d, hasdata = %d\n", + nextTime, curTime, hasdata)); */ + int need_sleep = 0; + while ( (nextTime <= curTime) && (hasdata)) { + if (need_sleep) usleep(5000); + hasdata = SendPacket(); + need_sleep = 1; + packets ++; + nextTime += upp; + if (addSamples > 0 && packets % SPEEDUP_SCALE == 0) { + addSamples -= spp; + usleep(5000); + hasdata = SendPacket(); + packets ++; + } + } + } + } + curTime = nextTime - curTime; + if (curTime > 5000000) curTime = 5000000; /* limit on 5 second weit time + in case error happens */ + tval.tv_sec = curTime / 1000000; + tval.tv_usec = curTime % 1000000; + + if (hasdata) + { + // schedule a sigalrm to simulate select timeout. + ACE_Time_Value tv (tval); + ACE_OS::ualarm (tv,0); + } + return 0; +} + void Audio_Global::on_exit_routine(void) @@ -588,30 +694,417 @@ Audio_Global::on_exit_routine(void) ComCloseConn(serviceSocket); ComCloseConn(audioSocket); } +//---------------------------------------- +// Audio_Sig_Handler methods. + +Audio_Sig_Handler::Audio_Sig_Handler (Audio_Global *audio_global) + :audio_global_ (audio_global) +{ +} + +int +Audio_Sig_Handler::register_handler (void) +{ + // Assign the Sig_Handler a dummy I/O descriptor. Note that even + // though we open this file "Write Only" we still need to use the + // ACE_Event_Handler::NULL_MASK when registering this with the + // ACE_Reactor (see below). + this->handle_ = ACE_OS::open (ACE_DEV_NULL, O_WRONLY); + ACE_ASSERT (this->handle_ != -1); + + // Register signal handler object. Note that NULL_MASK is used to + // keep the ACE_Reactor from calling us back on the "/dev/null" + // descriptor. + if (ACE_Reactor::instance ()->register_handler + (this, ACE_Event_Handler::NULL_MASK) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + "%p\n", + "register_handler"), + -1); + + // Create a sigset_t corresponding to the signals we want to catch. + ACE_Sig_Set sig_set; + + // sig_set.sig_add (SIGINT); + // sig_set.sig_add (SIGQUIT); + sig_set.sig_add (SIGALRM); + + // Register the signal handler object to catch the signals. + if (ACE_Reactor::instance ()->register_handler (sig_set, + this) == -1) + ACE_ERROR_RETURN ((LM_ERROR, + "%p\n", + "register_handler"), + -1); + return 0; +} +// Called by the ACE_Reactor to extract the fd. + +ACE_HANDLE +Audio_Sig_Handler::get_handle (void) const +{ + return this->handle_; +} + +int +Audio_Sig_Handler::handle_input (ACE_HANDLE) +{ + ACE_DEBUG ((LM_DEBUG, "(%t) handling asynchonrous input...\n")); + return 0; +} + +int +Audio_Sig_Handler::shutdown (ACE_HANDLE, ACE_Reactor_Mask) +{ + ACE_DEBUG ((LM_DEBUG, "(%t) closing down Sig_Handler...\n")); + return 0; +} + +// This method handles all the signals that are being caught by this +// object. In our simple example, we are simply catching SIGALRM, +// SIGINT, and SIGQUIT. Anything else is logged and ignored. +// +// There are several advantages to using this approach. First, +// the behavior triggered by the signal is handled in the main event +// loop, rather than in the signal handler. Second, the ACE_Reactor's +// signal handling mechanism eliminates the need to use global signal +// handler functions and data. + +int +Audio_Sig_Handler::handle_signal (int signum, siginfo_t *, ucontext_t *) +{ + // ACE_DEBUG ((LM_DEBUG, "(%t) received signal %S\n", signum)); + + switch (signum) + { + case SIGALRM: + if (this->audio_global_->state == Audio_Global::AUDIO_PLAY) + this->audio_global_->send_audio ();// honor the signal only if you're in play state. + break; + default: + ACE_DEBUG ((LM_DEBUG, + "(%t) %S: not handled, returning to program\n", + signum)); + break; + } + // ACE_DEBUG ((LM_DEBUG,"returning from handle_signal")); + return 0; +} + +//---------------------------------------------- +// Audio_Data_Handler methods + +Audio_Data_Handler::Audio_Data_Handler (ACE_HANDLE data_fd, + Audio_Global *audio_global) + :data_fd_ (data_fd), + audio_global_ (audio_global) +{ +} + +ACE_HANDLE +Audio_Data_Handler::get_handle (void) const +{ + return this->data_fd_; +} + +int +Audio_Data_Handler::handle_input (ACE_HANDLE fd) +{ + ACE_DEBUG ((LM_DEBUG,"(%P|%t)Audio_Data_Handler::handle_input ()\n")); + int bytes, len; + for (;;) { + if (this->audio_global_->conn_tag >= 0) { + len = wait_read_bytes(this->audio_global_->audioSocket, (char *)this->audio_global_->fbpara, sizeof(*(this->audio_global_->fbpara))); + if (len == 0) return(1); /* connection broken */ + else if (len < 0) { /* unexpected error */ + perror("AS read1 FB"); + return(-1); + } + } + else { /* discard mode packet stream, read the whole packet */ + len = ::read(this->audio_global_->audioSocket, (char *)this->audio_global_->fbpara, FBBUF_SIZE); + } + if (len == -1) { + if (errno == EINTR) continue; /* interrupt */ + else { + if (errno != EPIPE && errno != ECONNRESET) perror("AS failed to read() fbmsg header"); + break; + } + } + break; + } + if (len < sizeof(*this->audio_global_->fbpara)) { + if (len > 0) fprintf(stderr, + "AS warn read() len %dB < sizeof(*this->audio_global_->fbpara) %dB\n", + len, sizeof(*this->audio_global_->fbpara)); + // continue; + // simulate the continue ?? + this->audio_global_->send_audio (); + } +#ifdef NeedByteOrderConversion + this->audio_global_->fbpara->type = ntohl(this->audio_global_->fbpara->type); +#endif + bytes = (this->audio_global_->fbpara->type > 0) ? + sizeof(APdescriptor) * (this->audio_global_->fbpara->type - 1) : + 0; + if (bytes > 0) { + if (this->audio_global_->conn_tag >= 0) { /* not discard mode packet stream, + read the rest of packet */ + len = wait_read_bytes(this->audio_global_->audioSocket, + ((char *)this->audio_global_->fbpara) + sizeof(*this->audio_global_->fbpara), + bytes); + if (len == 0) return(1); /* connection broken */ + else if (len < 0) { /* unexpected error */ + perror("AS read2 FB"); + return(-1); + } + len += sizeof(*this->audio_global_->fbpara); + } + } + bytes += sizeof(*this->audio_global_->fbpara); + if (len < bytes) { + if (len > 0) fprintf(stderr, + "AS only read partial FBpacket, %dB out of %dB.\n", + len, bytes); + // continue; + this->audio_global_->send_audio (); + } + if (this->audio_global_->live_source) { /* ignore all feedback messags for live source */ + // continue; + this->audio_global_->send_audio (); + } + +#ifdef NeedByteOrderConversion + this->audio_global_->fbpara->cmdsn = ntohl(this->audio_global_->fbpara->cmdsn); +#endif + if (len != sizeof(*this->audio_global_->fbpara) + + (this->audio_global_->fbpara->type ? (this->audio_global_->fbpara->type -1) * sizeof(APdescriptor) : 0)) { + /* unknown message, discard */ + SFprintf(stderr, "AS Unkown fb msg: len = %d, type = %d\n", + len, this->audio_global_->fbpara->type); + // continue; + this->audio_global_->send_audio (); + } + if (this->audio_global_->fbpara->cmdsn != this->audio_global_->cmdsn) { /* discard the outdated message */ + // continue; + this->audio_global_->send_audio (); + } +#ifdef NeedByteOrderConversion + { + int i, * ptr = (int *)this->audio_global_->fbpara + 2; + for (i = 0; i < (len >> 2) - 2; i++) *ptr = ntohl(*ptr); + } +#endif + if (this->audio_global_->fbpara->type == 0) { /* feedback message */ + /* + SFprintf(stderr, "AS got fbmsg: addsamples %d, addsps %d\n", + this->audio_global_->fbpara->data.fb.addSamples, this->audio_global_->fbpara->data.fb.addsps); + */ + this->audio_global_->addSamples += this->audio_global_->fbpara->data.fb.addSamples; + if (this->audio_global_->fbpara->data.fb.addsps) { + this->audio_global_->delta_sps += this->audio_global_->fbpara->data.fb.addsps; + this->audio_global_->upp = (int)(1000000.0 / ((double)(this->audio_global_->sps + this->audio_global_->delta_sps) / (double)this->audio_global_->spp)); + } + } + else { /* resend requests */ + APdescriptor * req = &(this->audio_global_->fbpara->data.ap); + int i; + /* + SFprintf(stderr, "AS got %d resend reqs\n", this->audio_global_->fbpara->type); + */ + for (i = 0; i < this->audio_global_->fbpara->type; i ++) { + this->audio_global_->ResendPacket(req->firstSample, req->samples); + req ++; + } + } + // send a audio frame.?? + this->audio_global_->send_audio (); + return 0; +} + +// --------------------------------------------- +// Audio_Control_Handler methods + +Audio_Control_Handler::Audio_Control_Handler (ACE_HANDLE control_fd, + Audio_Global *audio_global) + :control_fd_ (control_fd), + audio_global_ (audio_global) +{ +} + +ACE_HANDLE +Audio_Control_Handler::get_handle (void) const +{ + return this->audio_global_->serviceSocket; +} + +int +Audio_Control_Handler::handle_input (ACE_HANDLE fd) +{ + ACE_DEBUG ((LM_DEBUG,"(%P|%t)Audio_Control_Handler::handle_input ()\n")); + int result; + switch (this->audio_global_->state) + { + case Audio_Global::AUDIO_WAITING: + result = this->audio_global_->CmdRead((char *)&(this->audio_global_->cmd), 1); + if (result != 0) + return result; + ACE_DEBUG ((LM_DEBUG,"(%P|%t)command %d received",this->audio_global_->cmd)); + switch (this->audio_global_->cmd) + { + case CmdPLAY: + this->audio_global_->state = Audio_Global::AUDIO_PLAY; + result = this->audio_global_->play_audio(); + if (result != 0) + return result; + break; + case CmdCLOSE: + ACE_DEBUG ((LM_DEBUG,"(%P|%t) A session closed\n")); + ACE_Reactor::instance ()->end_event_loop (); + return(0); + break; + default: + fprintf(stderr, "audio channel command %d not recoganizeable\n", + this->audio_global_->cmd); + break; + } + break; + case Audio_Global::AUDIO_PLAY: + unsigned char tmp; + result = this->audio_global_->CmdRead((char *)&tmp, 1); + if (result != 0) + return result; + switch (tmp) + { + case CmdSPEED: + { + SPEEDaudioPara para; + result = this->audio_global_->CmdRead((char *)¶, sizeof(para)); + if (result != 0) + return result; +#ifdef NeedByteOrderConversion + para.sn = ntohl(para.sn); + para.samplesPerSecond = ntohl(para.samplesPerSecond); + para.samplesPerPacket = ntohl(para.samplesPerPacket); + para.spslimit = ntohl(para.spslimit); +#endif + this->audio_global_->sps = para.samplesPerSecond; + this->audio_global_->spslimit = para.spslimit; + this->audio_global_->spp = para.samplesPerPacket; + if (this->audio_global_->spp * this->audio_global_->audioPara.bytesPerSample > this->audio_global_->databuf_size) { + this->audio_global_->spp = this->audio_global_->databuf_size / this->audio_global_->audioPara.bytesPerSample; + } + this->audio_global_->delta_sps = 0; /* reset compensation value */ + this->audio_global_->upp = (int)(1000000.0 / ((double)(this->audio_global_->sps) / (double)(this->audio_global_->spp))); + /* + SFprintf(stderr, "AS got CmdSPEED: sps %d\n", sps); + */ + } + break; + case CmdSTOP: + { + int val; + this->audio_global_->cmd = tmp; + + fprintf(stderr, "AS: CmdSTOP. . .\n"); + + result = this->audio_global_->CmdRead((char *)&val, sizeof(int)); + if (result != 0) + return result; + /* + CmdWrite(AUDIO_STOP_PATTERN, strlen(AUDIO_STOP_PATTERN)); + */ + if (this->audio_global_->live_source) { + StopPlayLiveAudio(); + } + this->audio_global_->state = Audio_Global::AUDIO_WAITING; + return 0; + } + case CmdCLOSE: + if (this->audio_global_->live_source) { + StopPlayLiveAudio(); + } + // Make sure you remove the timer handler if you end the + // event loop. + + ACE_Reactor::instance ()->end_event_loop (); + return(1); /* The whole AS session terminates */ + default: + if (this->audio_global_->live_source) { + StopPlayLiveAudio(); + } + fprintf(stderr, "AS error: cmd=%d while expects STOP/SPEED/CLOSE.\n", tmp); + return(-1); + } + this->audio_global_->send_audio (); + break; + default: + ACE_DEBUG ((LM_DEBUG,"(%P|%t)Audio_Control_Handler::handle_input () invalid state\n")); + break; + } + return 0; +} + + +//------------------------------------------------- +// Audio Server methods. Audio_Server::Audio_Server (void) + :audio_global_ (0) { } -Audio_Server::Audio_Server (ACE_SOCK_Stream& control, - int rttag, - int max_pkt_size) +Audio_Server::Audio_Server (int argc, + char **argv, + // ACE_SOCK_Stream& control, + int rttag, + int max_pkt_size) + :audio_global_ (0) { - this->init (control, + this->init (argc, + argv, + // control, rttag, max_pkt_size); } int -Audio_Server::init (ACE_SOCK_Stream& control, - int rttag, - int max_pkt_size) +Audio_Server::init (int argc, + char **argv, + // ACE_SOCK_Stream& control, + int rttag, + int max_pkt_size) { int result; int junk; u_short port; ACE_UINT32 ip; + TAO_TRY + { + this->orb_manager_.init (argc,argv,TAO_TRY_ENV); + TAO_CHECK_ENV; + } + TAO_CATCHANY + { + TAO_TRY_ENV.print_exception ("Audio_Server::init ()"); + return -1; + } + TAO_ENDTRY; + + // Allocate memory for the audio globals. + + ACE_NEW_RETURN (this->audio_global_, + Audio_Global, + -1); + + if (this->parse_args (argc, + argv) == -1) + return -1; + + + control.set_handle (this->audio_global_->serviceSocket); + ACE_INET_Addr server_data_addr; ACE_INET_Addr client_data_addr; @@ -687,40 +1180,62 @@ Audio_Server::init (ACE_SOCK_Stream& control, // -1); // end of handshaking. - this->audio_global_.serviceSocket = control.get_handle (); - this->audio_global_.audioSocket = this->dgram_.get_handle (); - this->audio_global_.conn_tag = max_pkt_size; + + + + ACE_DEBUG ((LM_DEBUG,"%s,%d\n",__FILE__,__LINE__)); + this->audio_global_->serviceSocket = control.get_handle (); + ACE_DEBUG ((LM_DEBUG,"(%P|%t)serviceSocket = %d",this->audio_global_->serviceSocket)); + this->audio_global_->audioSocket = this->dgram_.get_handle (); + this->audio_global_->conn_tag = max_pkt_size; + + // Create the handlers + ACE_NEW_RETURN (this->control_handler_, + Audio_Control_Handler (this->audio_global_->serviceSocket, + this->audio_global_), + -1); + + ACE_NEW_RETURN (this->data_handler_, + Audio_Data_Handler (this->dgram_.get_handle (), + this->audio_global_), + -1); + + ACE_NEW_RETURN (this->sig_handler_, + Audio_Sig_Handler (this->audio_global_), + -1); + if (max_pkt_size < 0) max_pkt_size = -max_pkt_size; else if (max_pkt_size == 0) max_pkt_size = 1024 * 1024; - this->audio_global_.start_time = time(NULL); + this->audio_global_->start_time = time(NULL); // atexit(on_exit_routine); - result = this->audio_global_.INITaudio (); - + result = this->audio_global_->INITaudio (); + ACE_DEBUG ((LM_DEBUG,"%s,%d\n",__FILE__,__LINE__)); if (result != 0) ACE_ERROR_RETURN ((LM_ERROR, "(%P|%t) Audio_Server: "), result); - this->audio_global_.fbpara = (AudioFeedBackPara *)malloc(FBBUF_SIZE); - if (this->audio_global_.fbpara == NULL) { + this->audio_global_->fbpara = (AudioFeedBackPara *)malloc(FBBUF_SIZE); + if (this->audio_global_->fbpara == NULL) { perror("AS failed to allocate mem for fbpara"); return (-1); } - this->audio_global_.databuf_size = max_pkt_size - sizeof(AudioPacket); - if (this->audio_global_.databuf_size > DATABUF_SIZE) - this->audio_global_.databuf_size = DATABUF_SIZE; + this->audio_global_->databuf_size = max_pkt_size - sizeof(AudioPacket); + if (this->audio_global_->databuf_size > DATABUF_SIZE) + this->audio_global_->databuf_size = DATABUF_SIZE; - this->audio_global_.pktbuf = (AudioPacket *)malloc(sizeof(AudioPacket) + - this->audio_global_.databuf_size); - if (this->audio_global_.pktbuf == NULL) { + this->audio_global_->pktbuf = (AudioPacket *)malloc(sizeof(AudioPacket) + + this->audio_global_->databuf_size); + if (this->audio_global_->pktbuf == NULL) { perror("AS failed to allocate mem for pktbuf"); return(-1); } + ACE_DEBUG ((LM_DEBUG,"%s,%d\n",__FILE__,__LINE__)); return 0; } @@ -729,22 +1244,89 @@ Audio_Server::set_peer (void) { return 0; } + +int +Audio_Server::parse_args (int argc, + char **argv) +{ + ACE_Get_Opt get_opts (argc,argv,"f:"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'f': + ACE_DEBUG ((LM_DEBUG,"Received control fd %d",ACE_OS::atoi (get_opts.optarg))); + this->audio_global_->serviceSocket = ACE_OS::atoi (get_opts.optarg); + break; + case '?': + ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t)Unknown option passed to Audio_Server\n"),-1); + break; + } + return 0; +} + int Audio_Server::run (void) { + ACE_DEBUG ((LM_DEBUG,"%s,%d\n",__FILE__,__LINE__)); + // Register the handlers with the TAO reactor. + + if (ACE_Reactor::instance ()->register_handler (this->control_handler_, + ACE_Event_Handler::READ_MASK) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%P|%t)Audio_Server::run () failed to register control handler\n"), + -1); + } + ACE_DEBUG ((LM_DEBUG,"%s,%d\n",__FILE__,__LINE__)); + if (ACE_Reactor::instance ()->register_handler (this->data_handler_, + ACE_Event_Handler::READ_MASK) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%P|%t)Audio_Server::run () failed to register data handler\n"), + -1); + } + ACE_DEBUG ((LM_DEBUG,"%s,%d\n",__FILE__,__LINE__)); + if (this->sig_handler_->register_handler () == -1) + { + + ACE_ERROR_RETURN ((LM_ERROR, + "(%P|%t)Audio_Server::run () failed to register data handler\n"), + -1); + } + if (ACE_Reactor::instance ()->handler (this->audio_global_->serviceSocket, + ACE_Event_Handler::READ_MASK) == -1) + + ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t)handler for serviceSocket not registered\n"),-1); + else + ACE_DEBUG ((LM_DEBUG,"Control handler registered\n")); + // Set the global state of the Audio_Server to be in WAITING state. + ACE_DEBUG ((LM_DEBUG,"%s,%d\n",__FILE__,__LINE__)); + this->audio_global_->state = Audio_Global::AUDIO_WAITING; + + // run the reactor event loop. + ACE_Reactor::instance ()->run_event_loop (); + + ACE_DEBUG ((LM_DEBUG,"(%P|%t) Audio_Server::run,reactor came out of event loop \n")); + + return 0; + +#if 0 + // unused code. int result; for (;;) { /* fprintf(stderr, "AS: waiting for a new command...\n"); */ - result = this->audio_global_.CmdRead((char *)&(this->audio_global_.cmd), 1); + result = this->audio_global_->CmdRead((char *)&(this->audio_global_->cmd), 1); if (result != 0) return result; - switch (this->audio_global_.cmd) + switch (this->audio_global_->cmd) { case CmdPLAY: - result = this->audio_global_.PLAYaudio(); + result = this->audio_global_->PLAYaudio(); if (result != 0) return result; break; @@ -756,8 +1338,9 @@ Audio_Server::run (void) break; default: fprintf(stderr, "audio channel command %d not recoganizeable\n", - this->audio_global_.cmd); + this->audio_global_->cmd); break; } } +#endif } diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.h b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.h index b8fb4c6e1fd..bf5c8329457 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.h +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.h @@ -29,6 +29,7 @@ #include "ace/SOCK_CODgram.h" #include "ace/SOCK_Stream.h" +#include "tao/TAO.h" #define DATABUF_SIZE 500 @@ -50,9 +51,23 @@ int SendPacket(void); void ResendPacket(int firstsample, int samples); int PLAYaudio(void); + int play_audio (void); + int send_audio (void); void on_exit_routine(void); public: + + enum audio_state {AUDIO_WAITING = 0,AUDIO_PLAY =1}; + + audio_state state; + // The state of the audio server. + + int addSamples; + unsigned nextTime; + int upp; /* micro-seconds per packet */ + int delta_sps ; + // The members previously in PLAY audio. + int bytes_sent ; time_t start_time; @@ -79,16 +94,87 @@ AudioFeedBackPara * fbpara ; }; +class Audio_Sig_Handler + : public virtual ACE_Event_Handler +{ +public: + Audio_Sig_Handler (Audio_Global *audio_global); + // Constructor. + + virtual ACE_HANDLE get_handle (void) const; + + int register_handler (void); + // this will register this sig_handler + // with the reactor for SIGALRM + + virtual int shutdown (ACE_HANDLE, + ACE_Reactor_Mask); + + virtual int handle_input (ACE_HANDLE); + + virtual int handle_signal (ACE_HANDLE signum, + siginfo_t * = 0, + ucontext_t* = 0); +private: + ACE_HANDLE handle_; + // my handle + Audio_Global *audio_global_; +}; + +class Audio_Data_Handler : public virtual ACE_Event_Handler +{ +public: + Audio_Data_Handler (ACE_HANDLE data_fd, + Audio_Global *audio_global); + + // Constructor + + virtual int handle_input (ACE_HANDLE fd = ACE_INVALID_HANDLE); + // Called when data shows up. + + virtual ACE_HANDLE get_handle (void) const; + // Get the handle used by this event handler + +private: + ACE_HANDLE data_fd_; + Audio_Global *audio_global_; +}; + +class Audio_Control_Handler : public virtual ACE_Event_Handler +{ +public: + Audio_Control_Handler (ACE_HANDLE fd, + Audio_Global *audio_global); + // Constructor + + virtual int handle_input (ACE_HANDLE fd = ACE_INVALID_HANDLE); + // Called when data shows up. + + virtual ACE_HANDLE get_handle (void) const; + // Get the handle used by this event handler + +private: + ACE_HANDLE control_fd_; + // The underlying TCP socket. + Audio_Global *audio_global_; + // Pointer to the global object. +}; + + class Audio_Server { public: Audio_Server (void); // Default constructor - Audio_Server (ACE_SOCK_Stream& control, + Audio_Server (int argc, + char **argv, + //ACE_SOCK_Stream& control, int rttag, int max_pkt_size); // Taking the control,data fd's and rttag. - int init (ACE_SOCK_Stream& control, + int init (int argc, + char **argv, + // ACE_SOCK_Stream& control, int rttag, int max_pkt_size); // inits the Audio_Server @@ -97,7 +183,29 @@ public: int set_peer (void); // sets the peer endpoint. private: - Audio_Global audio_global_; + int parse_args (int argc, + char **argv); + // Parse the arguments. + + TAO_ORB_Manager orb_manager_; + // The ORB Manager. + + Audio_Global *audio_global_; + // The globals object. + + Audio_Control_Handler *control_handler_; + // The audio control handler + + Audio_Data_Handler *data_handler_; + // The audio data i.e feedback handler. + + Audio_Sig_Handler *sig_handler_; + // The signal handler. + + ACE_SOCK_Stream control; + // The control stream. ACE_SOCK_CODgram dgram_; + // The data socket. }; -#endif + +#endif /*_AUDIO_SERVER_H */ diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_i.h b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_i.h index b7cc53ebaaf..592ce66fd6f 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_i.h +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_i.h @@ -78,9 +78,6 @@ protected: ACE_Reactor *reactor_; // The Reactor - TAO_ORB_Manager *orb_manager_; - // The ORB manager - Video_Control_State *state_; // State pattern - pointer to abstract State object diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Audio_Control.idl b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Audio_Control.idl index 1056fddbcfb..7d83d9abefe 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Audio_Control.idl +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Audio_Control.idl @@ -5,37 +5,46 @@ interface Audio_Control { + struct AudioParameter + { + short encodeType; + short channels; + short samplesPerSecond; + short bytesPerSample; + }; + + /* CmdINITaudio parameter of fixed structure of 3 integers and a AudioPara, replys with CmdINITaudio followed by reply or CmdFAIL followed by a string */ struct INITaudioPara { - int sn; - int version; + short sn; + short version; AudioParameter para; - int nameLength; + short nameLength; sequence audiofile; /* char audioFile[] */ }; struct INITaudioReply { - int live; - int format; + short live; + short format; AudioParameter para; - int totalSamples; + short totalSamples; }; /* CmdPLAY parameter */ struct PLAYPara { - int sn; - int nextSample; - int samplesPerSecond; /* audio playback speed */ - int samplesPerPacket; /* Number of samples in a packet */ - int ABsamples; /* size of client VB buffer in samples */ - int spslimit; /* QoS parameter: sps supported by the audio channel */ + short sn; + short nextSample; + short samplesPerSecond; /* audio playback speed */ + short samplesPerPacket; /* Number of samples in a packet */ + short ABsamples; /* size of client VB buffer in samples */ + short spslimit; /* QoS parameter: sps supported by the audio channel */ }; /* STOP followed only by SN */ @@ -43,10 +52,10 @@ interface Audio_Control /* CmdSPEED parameter */ struct SPEEDPara { - int sn; - int samplesPerSecond; - int samplesPerPacket; /* Number of samples in a packet */ - int spslimit; + short sn; + short samplesPerSecond; + short samplesPerPacket; /* Number of samples in a packet */ + short spslimit; }; boolean init_audio (in INITaudioPara para, diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Makefile b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Makefile index e756c22337f..469c7848f6b 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Makefile +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Makefile @@ -19,7 +19,7 @@ LSRC = $(addsuffix .cpp,$(FILES)) #TAO_IDLFLAGS = -Wb,export_macro=TAO_ORBSVCS_Export -Wb,export_include=orbsvcs_export.h -IDL_FILES = Video_ControlS Video_ControlC +IDL_FILES = Video_ControlS Video_ControlC Audio_ControlS Audio_ControlC FILES += com fileio filters routine sendpt @@ -52,7 +52,7 @@ include $(ACE_ROOT)/include/makeinclude/rules.local.GNU CPPFLAGS += -I$(TAO_ROOT) -I$(TAO_ROOT)/tao/compat -I$(TAO_ROOT)/orbsvcs $(TSS_ORB_FLAG)#-H CPPFLAGS += -DSH_MEM -DNDEBUG -.PRECIOUS: Video_ControlS.cpp Video_ControlC.cpp +.PRECIOUS: Video_ControlS.cpp Video_ControlC.cpp Audio_ControlS.cpp Audio_ControlC.cpp idl_stubs: $(addsuffix .h, $(IDL_FILES)) @@ -78,7 +78,6 @@ realclean: clean $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/Version.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i \ @@ -255,7 +254,6 @@ realclean: clean $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/Version.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i \ @@ -419,6 +417,358 @@ realclean: clean $(TAO_ROOT)/tao/GIOP.i \ $(TAO_ROOT)/tao/singletons.h \ Video_ControlC.i Video_ControlS.h Video_ControlS.i +.obj/Audio_ControlS.o .obj/Audio_ControlS.so .shobj/Audio_ControlS.o .shobj/Audio_ControlS.so: Audio_ControlS.cpp Audio_ControlS.h Audio_ControlC.h \ + $(TAO_ROOT)/tao/corba.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Get_Opt.h \ + $(ACE_ROOT)/ace/Get_Opt.i \ + $(ACE_ROOT)/ace/SOCK_Stream.h \ + $(ACE_ROOT)/ace/SOCK_IO.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h \ + $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_IO.i \ + $(ACE_ROOT)/ace/INET_Addr.h \ + $(ACE_ROOT)/ace/INET_Addr.i \ + $(ACE_ROOT)/ace/SOCK_Stream.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/SOCK_Acceptor.h \ + $(ACE_ROOT)/ace/Time_Value.h \ + $(ACE_ROOT)/ace/SOCK_Acceptor.i \ + $(ACE_ROOT)/ace/SOCK_Connector.h \ + $(ACE_ROOT)/ace/SOCK_Connector.i \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(ACE_ROOT)/ace/Synch_Options.h \ + $(ACE_ROOT)/ace/Connector.h \ + $(ACE_ROOT)/ace/Map_Manager.h \ + $(ACE_ROOT)/ace/Map_Manager.i \ + $(ACE_ROOT)/ace/Svc_Handler.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue.i \ + $(ACE_ROOT)/ace/Task_T.i \ + $(ACE_ROOT)/ace/Dynamic.h \ + $(ACE_ROOT)/ace/Dynamic.i \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Svc_Handler.i \ + $(ACE_ROOT)/ace/Connector.i \ + $(ACE_ROOT)/ace/Acceptor.h \ + $(ACE_ROOT)/ace/Acceptor.i \ + $(TAO_ROOT)/tao/compat/objbase.h \ + $(TAO_ROOT)/tao/compat/initguid.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(TAO_ROOT)/tao/Align.h \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Sequence.i \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/Object_KeyC.i \ + $(TAO_ROOT)/tao/ORB.i \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/Exception.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Any.i \ + $(TAO_ROOT)/tao/params.h \ + $(TAO_ROOT)/tao/params.i \ + $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/default_client.h \ + $(TAO_ROOT)/tao/default_client.i \ + $(TAO_ROOT)/tao/default_server.h \ + $(TAO_ROOT)/tao/ORB_Strategies_T.h \ + $(TAO_ROOT)/tao/ORB_Strategies_T.i \ + $(TAO_ROOT)/tao/default_server.i \ + $(TAO_ROOT)/tao/NVList.h \ + $(TAO_ROOT)/tao/NVList.i \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/Request.h \ + $(TAO_ROOT)/tao/Request.i \ + $(TAO_ROOT)/tao/Stub.h \ + $(TAO_ROOT)/tao/Stub.i \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object.i \ + $(TAO_ROOT)/tao/Server_Request.h \ + $(TAO_ROOT)/tao/Server_Request.i \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Typecode.i \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ + $(TAO_ROOT)/tao/CDR.h \ + $(TAO_ROOT)/tao/CDR.i \ + $(TAO_ROOT)/tao/POA.h \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Object_Table.h \ + $(TAO_ROOT)/tao/Connect.h \ + $(TAO_ROOT)/tao/Connect.i \ + $(TAO_ROOT)/tao/ORB_Core.h \ + $(TAO_ROOT)/tao/ORB_Core.i \ + $(ACE_ROOT)/ace/Dynamic_Service.h \ + $(TAO_ROOT)/tao/Operation_Table.h \ + $(TAO_ROOT)/tao/debug.h \ + $(TAO_ROOT)/tao/IIOP_Object.h \ + $(TAO_ROOT)/tao/IIOP_Object.i \ + $(TAO_ROOT)/tao/IIOP_ORB.h \ + $(TAO_ROOT)/tao/IIOP_ORB.i \ + $(TAO_ROOT)/tao/IIOP_Interpreter.h \ + $(TAO_ROOT)/tao/GIOP.h \ + $(TAO_ROOT)/tao/GIOP.i \ + $(TAO_ROOT)/tao/singletons.h \ + Audio_ControlC.i Audio_ControlS.i +.obj/Audio_ControlC.o .obj/Audio_ControlC.so .shobj/Audio_ControlC.o .shobj/Audio_ControlC.so: Audio_ControlC.cpp Audio_ControlC.h \ + $(TAO_ROOT)/tao/corba.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/Get_Opt.h \ + $(ACE_ROOT)/ace/Get_Opt.i \ + $(ACE_ROOT)/ace/SOCK_Stream.h \ + $(ACE_ROOT)/ace/SOCK_IO.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h \ + $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_IO.i \ + $(ACE_ROOT)/ace/INET_Addr.h \ + $(ACE_ROOT)/ace/INET_Addr.i \ + $(ACE_ROOT)/ace/SOCK_Stream.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/SOCK_Acceptor.h \ + $(ACE_ROOT)/ace/Time_Value.h \ + $(ACE_ROOT)/ace/SOCK_Acceptor.i \ + $(ACE_ROOT)/ace/SOCK_Connector.h \ + $(ACE_ROOT)/ace/SOCK_Connector.i \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(ACE_ROOT)/ace/Synch_Options.h \ + $(ACE_ROOT)/ace/Connector.h \ + $(ACE_ROOT)/ace/Map_Manager.h \ + $(ACE_ROOT)/ace/Map_Manager.i \ + $(ACE_ROOT)/ace/Svc_Handler.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue.i \ + $(ACE_ROOT)/ace/Task_T.i \ + $(ACE_ROOT)/ace/Dynamic.h \ + $(ACE_ROOT)/ace/Dynamic.i \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Svc_Handler.i \ + $(ACE_ROOT)/ace/Connector.i \ + $(ACE_ROOT)/ace/Acceptor.h \ + $(ACE_ROOT)/ace/Acceptor.i \ + $(TAO_ROOT)/tao/compat/objbase.h \ + $(TAO_ROOT)/tao/compat/initguid.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(TAO_ROOT)/tao/Align.h \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Sequence.i \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/Object_KeyC.i \ + $(TAO_ROOT)/tao/ORB.i \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/Exception.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Any.i \ + $(TAO_ROOT)/tao/params.h \ + $(TAO_ROOT)/tao/params.i \ + $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/default_client.h \ + $(TAO_ROOT)/tao/default_client.i \ + $(TAO_ROOT)/tao/default_server.h \ + $(TAO_ROOT)/tao/ORB_Strategies_T.h \ + $(TAO_ROOT)/tao/ORB_Strategies_T.i \ + $(TAO_ROOT)/tao/default_server.i \ + $(TAO_ROOT)/tao/NVList.h \ + $(TAO_ROOT)/tao/NVList.i \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/Request.h \ + $(TAO_ROOT)/tao/Request.i \ + $(TAO_ROOT)/tao/Stub.h \ + $(TAO_ROOT)/tao/Stub.i \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object.i \ + $(TAO_ROOT)/tao/Server_Request.h \ + $(TAO_ROOT)/tao/Server_Request.i \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Typecode.i \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ + $(TAO_ROOT)/tao/CDR.h \ + $(TAO_ROOT)/tao/CDR.i \ + $(TAO_ROOT)/tao/POA.h \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Object_Table.h \ + $(TAO_ROOT)/tao/Connect.h \ + $(TAO_ROOT)/tao/Connect.i \ + $(TAO_ROOT)/tao/ORB_Core.h \ + $(TAO_ROOT)/tao/ORB_Core.i \ + $(ACE_ROOT)/ace/Dynamic_Service.h \ + $(TAO_ROOT)/tao/Operation_Table.h \ + $(TAO_ROOT)/tao/debug.h \ + $(TAO_ROOT)/tao/IIOP_Object.h \ + $(TAO_ROOT)/tao/IIOP_Object.i \ + $(TAO_ROOT)/tao/IIOP_ORB.h \ + $(TAO_ROOT)/tao/IIOP_ORB.i \ + $(TAO_ROOT)/tao/IIOP_Interpreter.h \ + $(TAO_ROOT)/tao/GIOP.h \ + $(TAO_ROOT)/tao/GIOP.i \ + $(TAO_ROOT)/tao/singletons.h \ + Audio_ControlC.i Audio_ControlS.h Audio_ControlS.i .obj/com.o .obj/com.so .shobj/com.o .shobj/com.so: com.cpp \ $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/include/common.h \ $(ACE_ROOT)/ace/OS.h \ @@ -432,11 +782,10 @@ realclean: clean $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/Version.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ - $(ACE_ROOT)/ace/Log_Record.i fileio.h routine.h \ - com.h + $(ACE_ROOT)/ace/Log_Record.i fileio.h \ + routine.h com.h .obj/fileio.o .obj/fileio.so .shobj/fileio.o .shobj/fileio.so: fileio.cpp routine.h \ $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/include/common.h \ $(ACE_ROOT)/ace/OS.h \ @@ -450,7 +799,6 @@ realclean: clean $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/Version.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i fileio.h @@ -466,7 +814,6 @@ realclean: clean $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/Version.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i @@ -483,7 +830,6 @@ realclean: clean $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ $(ACE_ROOT)/ace/ACE.h \ - $(ACE_ROOT)/ace/Version.h \ $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/com.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/com.cpp index 7c219eb1d1b..3eb592b6e4b 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/com.cpp +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/com.cpp @@ -514,7 +514,7 @@ int ComOpenConnPair(char * address, int *ctr_fd, int *data_fd, int *max_pkt_size fprintf(stderr, "ComOpenConnPair UDP port %d (should be > 0)\n", ntohs(addressIn.sin_port)); - /* + i = sizeof(addressIn); if (getsockname(cfd, (struct sockaddr *)&addressIn, &i) == -1) { fprintf(stderr, @@ -525,7 +525,7 @@ int ComOpenConnPair(char * address, int *ctr_fd, int *data_fd, int *max_pkt_size close(cfd); return -1; } - */ + if (time_write_bytes(cfd, (char *)&addressIn.sin_addr.s_addr, sizeof(int)) == -1) { fprintf(stderr, "Error ComOpenConnPair: pid %d failed to write (IP addr) to TCP cfd:", diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/Makefile b/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/Makefile index af4f35917ff..871ec61f175 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/Makefile +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/Makefile @@ -5,16 +5,17 @@ #---------------------------------------------------------------------------- MAKEFILE = Makefile -BIN = server vs +BIN = server vs as BUILD = $(BIN) AV_SERVER_OBJS = server.o AV_VS_OBJS = vs.o +AV_AS_OBJS = as.o # On non-Windows environment, we should at least define # the export_include IDL flag. -FILES = server vs +FILES = server vs as DEFS = $(addsuffix .h,$(FILES)) LSRC = $(addsuffix .cpp,$(FILES)) @@ -51,6 +52,8 @@ server:$(addprefix $(VDIR),$(AV_SERVER_OBJS)) vs:$(addprefix $(VDIR),$(AV_VS_OBJS)) $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK) +as:$(addprefix $(VDIR),$(AV_AS_OBJS)) + $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK) clean: -/bin/rm -rf *.o Log $(BIN) obj.* core Templates.DB .make.state @@ -74,10 +77,9 @@ realclean: clean $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i \ - $(ACE_ROOT)/ace/Version.h \ - $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Get_Opt.i \ $(ACE_ROOT)/ace/Acceptor.h \ $(ACE_ROOT)/ace/Service_Config.h \ @@ -273,6 +275,7 @@ realclean: clean $(TAO_ROOT)/orbsvcs/orbsvcs/CosNamingS.h \ $(TAO_ROOT)/orbsvcs/orbsvcs/CosNamingS.i \ $(TAO_ROOT)/orbsvcs/orbsvcs/Naming/Entries.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.h \ $(ACE_ROOT)/ace/Process.h \ $(ACE_ROOT)/ace/Process.i .obj/vs.o .obj/vs.so .shobj/vs.o .shobj/vs.so: vs.cpp \ @@ -290,10 +293,9 @@ realclean: clean $(ACE_ROOT)/ace/Trace.h \ $(ACE_ROOT)/ace/Log_Msg.h \ $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Log_Priority.h \ $(ACE_ROOT)/ace/Log_Record.i \ - $(ACE_ROOT)/ace/Version.h \ - $(ACE_ROOT)/ace/ACE.i \ $(ACE_ROOT)/ace/Handle_Set.i \ $(ACE_ROOT)/ace/Timer_Queue.h \ $(ACE_ROOT)/ace/Synch.h \ @@ -468,5 +470,198 @@ realclean: clean $(ACE_ROOT)/ace/SOCK_CODgram.i \ $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_State.h \ $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_i.h +.obj/as.o .obj/as.so .shobj/as.o .shobj/as.so: as.cpp \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Audio_Server.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/include/common.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/inc_user_config.h \ + $(ACE_ROOT)/ace/config.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Basic_Types.i \ + $(ACE_ROOT)/ace/OS.i \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/fileio.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/routine.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/com.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/server_proto.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Globals.h \ + $(ACE_ROOT)/ace/SOCK_CODgram.h \ + $(ACE_ROOT)/ace/SOCK_IO.h \ + $(ACE_ROOT)/ace/SOCK.h \ + $(ACE_ROOT)/ace/Addr.h \ + $(ACE_ROOT)/ace/Addr.i \ + $(ACE_ROOT)/ace/IPC_SAP.h \ + $(ACE_ROOT)/ace/IPC_SAP.i \ + $(ACE_ROOT)/ace/SOCK.i \ + $(ACE_ROOT)/ace/SOCK_IO.i \ + $(ACE_ROOT)/ace/SOCK_CODgram.i \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Synch.i \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Event_Handler.i \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread.i \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(ACE_ROOT)/ace/Singleton.i \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/sendpt.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Server.h \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Handle_Set.i \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers.i \ + $(ACE_ROOT)/ace/Signal.i \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Object_Manager.i \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Reactor.i \ + $(ACE_ROOT)/ace/Reactor_Impl.h \ + $(TAO_ROOT)/tao/TAO.h \ + $(TAO_ROOT)/tao/corba.h \ + $(ACE_ROOT)/ace/Get_Opt.h \ + $(ACE_ROOT)/ace/Get_Opt.i \ + $(ACE_ROOT)/ace/SOCK_Stream.h \ + $(ACE_ROOT)/ace/INET_Addr.h \ + $(ACE_ROOT)/ace/INET_Addr.i \ + $(ACE_ROOT)/ace/SOCK_Stream.i \ + $(ACE_ROOT)/ace/Hash_Map_Manager.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/SString.i \ + $(ACE_ROOT)/ace/SOCK_Acceptor.h \ + $(ACE_ROOT)/ace/Time_Value.h \ + $(ACE_ROOT)/ace/SOCK_Acceptor.i \ + $(ACE_ROOT)/ace/SOCK_Connector.h \ + $(ACE_ROOT)/ace/SOCK_Connector.i \ + $(ACE_ROOT)/ace/Strategies.h \ + $(ACE_ROOT)/ace/Strategies_T.h \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.i \ + $(ACE_ROOT)/ace/Service_Object.i \ + $(ACE_ROOT)/ace/Service_Config.i \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(ACE_ROOT)/ace/Synch_Options.h \ + $(ACE_ROOT)/ace/Connector.h \ + $(ACE_ROOT)/ace/Map_Manager.h \ + $(ACE_ROOT)/ace/Map_Manager.i \ + $(ACE_ROOT)/ace/Svc_Handler.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Thread_Manager.i \ + $(ACE_ROOT)/ace/Task.i \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Malloc.i \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/Mem_Map.i \ + $(ACE_ROOT)/ace/Memory_Pool.i \ + $(ACE_ROOT)/ace/Message_Block.i \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue.i \ + $(ACE_ROOT)/ace/Task_T.i \ + $(ACE_ROOT)/ace/Dynamic.h \ + $(ACE_ROOT)/ace/Dynamic.i \ + $(ACE_ROOT)/ace/Svc_Handler.i \ + $(ACE_ROOT)/ace/Connector.i \ + $(ACE_ROOT)/ace/Acceptor.h \ + $(ACE_ROOT)/ace/Acceptor.i \ + $(TAO_ROOT)/tao/compat/objbase.h \ + $(TAO_ROOT)/tao/compat/initguid.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(TAO_ROOT)/tao/Align.h \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Sequence.i \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/Object_KeyC.i \ + $(TAO_ROOT)/tao/ORB.i \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/Exception.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Any.i \ + $(TAO_ROOT)/tao/params.h \ + $(TAO_ROOT)/tao/params.i \ + $(TAO_ROOT)/tao/Client_Strategy_Factory.h \ + $(TAO_ROOT)/tao/Server_Strategy_Factory.h \ + $(TAO_ROOT)/tao/default_client.h \ + $(TAO_ROOT)/tao/default_client.i \ + $(TAO_ROOT)/tao/default_server.h \ + $(TAO_ROOT)/tao/ORB_Strategies_T.h \ + $(TAO_ROOT)/tao/ORB_Strategies_T.i \ + $(TAO_ROOT)/tao/default_server.i \ + $(TAO_ROOT)/tao/NVList.h \ + $(TAO_ROOT)/tao/NVList.i \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/Request.h \ + $(TAO_ROOT)/tao/Request.i \ + $(TAO_ROOT)/tao/Stub.h \ + $(TAO_ROOT)/tao/Stub.i \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object.i \ + $(TAO_ROOT)/tao/Server_Request.h \ + $(TAO_ROOT)/tao/Server_Request.i \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Typecode.i \ + $(TAO_ROOT)/tao/Marshal.h \ + $(TAO_ROOT)/tao/Marshal.i \ + $(TAO_ROOT)/tao/CDR.h \ + $(TAO_ROOT)/tao/CDR.i \ + $(TAO_ROOT)/tao/POA.h \ + $(TAO_ROOT)/tao/POAC.h \ + $(TAO_ROOT)/tao/POAC.i \ + $(TAO_ROOT)/tao/Servant_Base.h \ + $(TAO_ROOT)/tao/POAS.h \ + $(TAO_ROOT)/tao/POAS.i \ + $(TAO_ROOT)/tao/Object_Table.h \ + $(TAO_ROOT)/tao/Connect.h \ + $(TAO_ROOT)/tao/Connect.i \ + $(TAO_ROOT)/tao/ORB_Core.h \ + $(TAO_ROOT)/tao/ORB_Core.i \ + $(ACE_ROOT)/ace/Dynamic_Service.h \ + $(TAO_ROOT)/tao/Operation_Table.h \ + $(TAO_ROOT)/tao/debug.h \ + $(TAO_ROOT)/tao/IIOP_Object.h \ + $(TAO_ROOT)/tao/IIOP_Object.i \ + $(TAO_ROOT)/tao/IIOP_ORB.h \ + $(TAO_ROOT)/tao/IIOP_ORB.i \ + $(TAO_ROOT)/tao/IIOP_Interpreter.h \ + $(TAO_ROOT)/tao/GIOP.h \ + $(TAO_ROOT)/tao/GIOP.i \ + $(TAO_ROOT)/tao/singletons.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Video_ControlS.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Video_ControlC.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Video_ControlC.i \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_shared/Video_ControlS.i \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_State.h \ + $(TAO_ROOT)/orbsvcs/tests/AVStreams/mpeg/source/mpeg_server/Video_Control_i.h # IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.cpp b/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.cpp index 28e90998eae..6d28c912d81 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.cpp +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.cpp @@ -105,6 +105,7 @@ AV_Svc_Handler::handle_connection (ACE_HANDLE) "(%P|%t) semaphore acquire failed: %p\n", "acquire"), -1); + // ~~?? remove the semaphore. // Wait until a ACE_SV_Semaphore's value is greater than 0, the // decrement it by 1 and return. Dijkstra's P operation, Tannenbaums // DOWN operation. @@ -124,37 +125,55 @@ AV_Svc_Handler::handle_connection (ACE_HANDLE) break; case CmdINITaudio: ACE_DEBUG ((LM_DEBUG,"(%P|%t) Received CmdINITaudio\n")); - // %% need to fork here - switch (ACE_OS::fork ("child")) - { - case 0: - ACE_DEBUG ((LM_DEBUG,"(%P|%t) New process forked \n")); - if (Mpeg_Global::live_audio) - LeaveLiveAudio (); - ACE_NEW_RETURN (this->as_, - Audio_Server, - -1); - ACE_DEBUG ((LM_DEBUG,"(%P|%t) AudioServer created\n")); - int result; - result = this->as_->init (this->peer (), - Mpeg_Global::rttag, - -INET_SOCKET_BUFFER_SIZE); - if (result < 0) - ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) Audio_Server init failed ()\n"),-1); - result = as_->run (); - // ACE_Reactor::instance ()->end_event_loop (); - TAO_ORB_Core_instance ()->orb ()-> shutdown (); - if (result != 0) - ACE_ERROR_RETURN ((LM_ERROR, - "(%P|%t) handle_connection : %d\n"), - result); - return result; - break; - default: - this->destroy (); - return 0; - } + { + ACE_Process_Options audio_process_options; + + char command_str[BUFSIZ]; + sprintf (command_str,"./as -ORBport 0 -f %d",this->peer ().get_handle ()); + ACE_DEBUG ((LM_DEBUG,"Audio command string %s",command_str)); + audio_process_options.command_line (command_str); + + ACE_Process audio_process; + + audio_process.spawn (audio_process_options); + } + this->destroy (); break; + // %% need to fork here +// switch (ACE_OS::fork ("child")) +// { +// case 0: +// TAO_ORB_Core_instance ()->orb ()-> shutdown (); +// // Remove the acceptor handler and other signal handlers registered by the parent. +// TAO_ORB_Core_instance ()->reactor ()->remove_handler (AV_SERVER::instance ()->acceptor (), +// ACE_Event_Handler::ACCEPT_MASK); + +// ACE_DEBUG ((LM_DEBUG,"(%P|%t) New process forked \n")); +// if (Mpeg_Global::live_audio) +// LeaveLiveAudio (); +// ACE_NEW_RETURN (this->as_, +// Audio_Server, +// -1); +// ACE_DEBUG ((LM_DEBUG,"(%P|%t) AudioServer created\n")); +// int result; +// result = this->as_->init (this->peer (), +// Mpeg_Global::rttag, +// -INET_SOCKET_BUFFER_SIZE); +// if (result < 0) +// ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t) Audio_Server init failed ()\n"),-1); +// result = as_->run (); + +// if (result != 0) +// ACE_ERROR_RETURN ((LM_ERROR, +// "(%P|%t) handle_connection : %d\n"), +// result); +// return result; +// break; +// default: +// this->destroy (); +// return 0; +// } +// break; default: ACE_ERROR_RETURN ((LM_ERROR,"(%P|%t)Unknown command received\n"),-1); break; @@ -473,6 +492,13 @@ AV_Server::run (CORBA::Environment& env){ } +AV_ACCEPTOR * +AV_Server::acceptor (void) +{ + return &(this->acceptor_); +} + + AV_Server::~AV_Server (void) { ACE_DEBUG ((LM_DEBUG, @@ -495,16 +521,19 @@ AV_Server::~AV_Server (void) int main (int argc, char **argv) { - AV_Server vcr_server; + // AV_Server vcr_server; TAO_TRY { // Parses the arguments, and initializes the server. - if (vcr_server.init (argc, argv, TAO_TRY_ENV) == -1) + // if (vcr_server.init (argc, argv, TAO_TRY_ENV) == -1) + if (AV_SERVER::instance ()->init (argc, argv, TAO_TRY_ENV) == -1) return 1; - + TAO_CHECK_ENV; // Runs the reactor event loop. - vcr_server.run (TAO_TRY_ENV); + // vcr_server.run (TAO_TRY_ENV); + AV_SERVER::instance ()->run (TAO_TRY_ENV); + TAO_CHECK_ENV; } TAO_CATCHANY { diff --git a/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.h b/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.h index dca16183315..0be49ebd91a 100644 --- a/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.h +++ b/TAO/orbsvcs/tests/AVStreams/mpeg/source/server/server.h @@ -153,6 +153,8 @@ private: ACE_Sig_Set sig_set; }; +typedef ACE_Acceptor AV_ACCEPTOR; + class AV_Server { // = TITLE @@ -174,13 +176,16 @@ public: int run (CORBA::Environment& env); // Run the AV_Server + AV_ACCEPTOR *acceptor (void); + // Returns the acceptor. + static void on_exit_routine (void); // Routine called when this process exits. ~AV_Server (void); // Destructor + //private: private: - // @@ Why are some of these data members pointers and others // objects? Shouldn't we be consistent here? @@ -193,7 +198,7 @@ private: // %% need to comment!! // typedef ACE_Strategy_Acceptor AV_ACCEPTOR; // typedef ACE_Thread_Strategy AV_THREAD_STRATEGY; - typedef ACE_Acceptor AV_ACCEPTOR; + // AV_THREAD_STRATEGY thread_strategy_; // the strategy @@ -211,4 +216,6 @@ private: // Parse the arguments. }; +typedef ACE_Singleton AV_SERVER; + #endif /* TAO_AV_SERVER_H */ -- cgit v1.2.1