From 0b67f85b60aa72d163a0646066a5796320a9fb45 Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Tue, 25 Mar 2008 17:50:12 -0500 Subject: [PATCH] Add some error handling to Peak_Server. --- Engine/Peak_Server.C | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/Engine/Peak_Server.C b/Engine/Peak_Server.C index 93bd619..92521b1 100644 --- a/Engine/Peak_Server.C +++ b/Engine/Peak_Server.C @@ -25,17 +25,23 @@ /* Peak Server - The peak server streams peak data to any timeline editors or other clients that ask for it. + The Peak Server streams peak data to any Timeline Editors or other + clients that ask for it. - Peak request looks like: + Peak request looks like (in ASCII) > read_peaks "foo.wav" fpp start end - Response looks like (in binary floats): + Where "foo.wav" is the base name. (actual filenames may differ if + the channels of the source are 'broken out') - > channels length min max min max min max - length ... + Response looks like (in binary) + > (int)channels (int)length (float)min max min max min max + > length ... + + Were length specifies the number of Peaks (min/max pairs). The + first channel is transmitted first, and any others follow. */ #include "Audio_File.H" @@ -43,7 +49,6 @@ typedef unsigned long tick_t; - #define PEAK_PORT 6100 void @@ -68,10 +73,22 @@ Peak_Server::handle_request ( int s, const char *buf, int l ) tick_t start, end; if ( 4 != sscanf( buf, "read_peaks \"%[^\"]\" %f %lu %lu", source, &fpp, &start, &end ) ) - fprintf( stderr, "error: malformed peak request!\n" ); + { + const char *err = "error: malformed request\n"; + fprintf( stderr, err ); + send( s, err, strlen( err ), 0 ); + return; + } Audio_File *af = Audio_File::from_file( source ); + if ( ! af ) + { + const char *err = "error: could not open source\n"; + send( s, err, strlen( err ), 0 ); + return; + } + int channels = af->channels(); send( s, &channels, sizeof( int ), 0 ); @@ -87,5 +104,5 @@ Peak_Server::handle_request ( int s, const char *buf, int l ) send( s, pk->peakbuf(), peaks * sizeof( Peak ), 0 ); } - delete af; +// delete af; }