Author: mishehu Date: Tue Jul 25 18:58:16 2006 New Revision: 2140 Added: freeswitch/branches/mishehu/mac/xcode/FreeSWITCH.xcodeproj/ - copied from r2139, /freeswitch/trunk/mac/xcode/FreeSWITCH.xcodeproj/ freeswitch/branches/mishehu/mac/xcode/FreeSWITCH.xcodeproj/project.pbxproj - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/FreeSWITCH.xcodeproj/project.pbxproj freeswitch/branches/mishehu/mac/xcode/apr.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/apr.plist freeswitch/branches/mishehu/mac/xcode/aprutil.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/aprutil.plist freeswitch/branches/mishehu/mac/xcode/dingaling.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/dingaling.plist freeswitch/branches/mishehu/mac/xcode/gsm.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/gsm.plist freeswitch/branches/mishehu/mac/xcode/iksemel.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/iksemel.plist freeswitch/branches/mishehu/mac/xcode/ilbc.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/ilbc.plist freeswitch/branches/mishehu/mac/xcode/libfreeswitch.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/libfreeswitch.plist freeswitch/branches/mishehu/mac/xcode/pcre.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/pcre.plist freeswitch/branches/mishehu/mac/xcode/resample.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/resample.plist freeswitch/branches/mishehu/mac/xcode/sndfile.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/sndfile.plist freeswitch/branches/mishehu/mac/xcode/speakup.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/speakup.plist freeswitch/branches/mishehu/mac/xcode/sqlite.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/sqlite.plist freeswitch/branches/mishehu/mac/xcode/srtp.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/srtp.plist freeswitch/branches/mishehu/mac/xcode/teletone.plist - copied unchanged from r2139, /freeswitch/trunk/mac/xcode/teletone.plist freeswitch/branches/mishehu/w32/vsnet/Tools/libsndfile/ - copied from r2139, /freeswitch/trunk/w32/vsnet/Tools/libsndfile/ freeswitch/branches/mishehu/w32/vsnet/Tools/libsndfile/config.h - copied unchanged from r2139, /freeswitch/trunk/w32/vsnet/Tools/libsndfile/config.h freeswitch/branches/mishehu/w32/vsnet/Tools/libsndfile/libsndfile.vcproj - copied unchanged from r2139, /freeswitch/trunk/w32/vsnet/Tools/libsndfile/libsndfile.vcproj freeswitch/branches/mishehu/w32/vsnet/Tools/libsndfile/sndfile.h - copied unchanged from r2139, /freeswitch/trunk/w32/vsnet/Tools/libsndfile/sndfile.h Removed: freeswitch/branches/mishehu/libs/MD5 freeswitch/branches/mishehu/mac/xcode/libs/ Modified: freeswitch/branches/mishehu/Makefile.am freeswitch/branches/mishehu/Makefile.in freeswitch/branches/mishehu/scripts/socket/FreeSWITCH/Client.pm freeswitch/branches/mishehu/scripts/socket/fs.pl freeswitch/branches/mishehu/src/include/switch_apr.h freeswitch/branches/mishehu/src/include/switch_core.h freeswitch/branches/mishehu/src/include/switch_module_interfaces.h freeswitch/branches/mishehu/src/include/switch_types.h freeswitch/branches/mishehu/src/include/switch_utils.h freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/Makefile freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/basecdr.cpp freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.cpp freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.h freeswitch/branches/mishehu/src/mod/event_handlers/mod_event_socket/mod_event_socket.c freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/Makefile freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/mod_sndfile.c freeswitch/branches/mishehu/src/switch_core.c freeswitch/branches/mishehu/src/switch_event.c freeswitch/branches/mishehu/src/switch_ivr.c freeswitch/branches/mishehu/src/switch_utils.c freeswitch/branches/mishehu/w32/vsnet/GetLibs.vbs Log: Added checking for MySQL server 'going away' in MysqlCDR, added csvcdr.o to Makefile. Modified: freeswitch/branches/mishehu/Makefile.am ============================================================================== --- freeswitch/branches/mishehu/Makefile.am (original) +++ freeswitch/branches/mishehu/Makefile.am Tue Jul 25 18:58:16 2006 @@ -164,9 +164,9 @@ @./build/addenv.sh build/freeswitch.env PREFIX $(PREFIX) @./build/addenv.sh build/freeswitch.env MAKE $(MAKE) mkdir -p $(PREFIX) - ./build/buildlib.sh . install sqlite-3.3.5.tar.gz --prefix=$(PREFIX) --disable-tcl --enable-threadsafe - ./build/buildlib.sh . install apr-1.2.6.tar.gz --prefix=$(PREFIX) - ./build/buildlib.sh . install apr-util-1.2.6.tar.gz --with-apr=../apr-1.2.6 --prefix=$(PREFIX) + ./build/buildlib.sh . install sqlite-3.3.6.tar.gz --prefix=$(PREFIX) --disable-tcl --enable-threadsafe + ./build/buildlib.sh . install apr-1.2.7.tar.gz --prefix=$(PREFIX) + ./build/buildlib.sh . install apr-util-1.2.7.tar.gz --with-apr=../apr-1.2.7 --prefix=$(PREFIX) ./build/buildlib.sh . libresample-0.1.3.tgz --prefix=$(PREFIX) ./build/buildlib.sh . install libteletone --prefix=$(PREFIX) ./build/buildlib.sh . install srtp --prefix=$(PREFIX) Modified: freeswitch/branches/mishehu/Makefile.in ============================================================================== --- freeswitch/branches/mishehu/Makefile.in (original) +++ freeswitch/branches/mishehu/Makefile.in Tue Jul 25 18:58:16 2006 @@ -805,7 +805,7 @@ distdir: $(DISTFILES) $(am__remove_distdir) - mkdir $(distdir) + mkdir -p $(distdir) $(mkdir_p) $(distdir)/build/config $(distdir)/src/include @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ @@ -1084,9 +1084,9 @@ @./build/addenv.sh build/freeswitch.env PREFIX $(PREFIX) @./build/addenv.sh build/freeswitch.env MAKE $(MAKE) mkdir -p $(PREFIX) - ./build/buildlib.sh . install sqlite-3.3.5.tar.gz --prefix=$(PREFIX) --disable-tcl --enable-threadsafe - ./build/buildlib.sh . install apr-1.2.6.tar.gz --prefix=$(PREFIX) - ./build/buildlib.sh . install apr-util-1.2.6.tar.gz --with-apr=../apr-1.2.6 --prefix=$(PREFIX) + ./build/buildlib.sh . install sqlite-3.3.6.tar.gz --prefix=$(PREFIX) --disable-tcl --enable-threadsafe + ./build/buildlib.sh . install apr-1.2.7.tar.gz --prefix=$(PREFIX) + ./build/buildlib.sh . install apr-util-1.2.7.tar.gz --with-apr=../apr-1.2.7 --prefix=$(PREFIX) ./build/buildlib.sh . libresample-0.1.3.tgz --prefix=$(PREFIX) ./build/buildlib.sh . install libteletone --prefix=$(PREFIX) ./build/buildlib.sh . install srtp --prefix=$(PREFIX) Modified: freeswitch/branches/mishehu/scripts/socket/FreeSWITCH/Client.pm ============================================================================== --- freeswitch/branches/mishehu/scripts/socket/FreeSWITCH/Client.pm (original) +++ freeswitch/branches/mishehu/scripts/socket/FreeSWITCH/Client.pm Tue Jul 25 18:58:16 2006 @@ -89,7 +89,7 @@ my ($self,$data) = @_; my $s = $self->{_sock}; - print $s $data; + print $s $data ; } sub cmd($$$) { @@ -97,12 +97,26 @@ my $cmd = shift; my $to = shift; - $self->output($cmd); + $self->output($cmd->{command}); + foreach(keys %{$cmd}) { + next if ($_ eq "command"); + $self->output($cmd->{$_}); + } + $self->output("\n\n"); + my $h = $self->readhash($to); $h; } +sub disconnect($) { + my $self = shift; + $self->{_sock}->shutdown(2); + $self->{_sock}->close(); + undef $self->{_sock}; + delete $self->{_sock}; +} + sub connect($) { my $self = shift; @@ -120,8 +134,7 @@ if ($h->{"content-type"} eq "auth/request") { my $pass = $self->{"_password"}; - $self->output("auth $pass"); - $h = $self->readhash(undef); + $h = $self->cmd({command => "auth $pass"}); } if ($h->{'reply-text'} =~ "OK") { Modified: freeswitch/branches/mishehu/scripts/socket/fs.pl ============================================================================== --- freeswitch/branches/mishehu/scripts/socket/fs.pl (original) +++ freeswitch/branches/mishehu/scripts/socket/fs.pl Tue Jul 25 18:58:16 2006 @@ -11,21 +11,29 @@ my $log = shift; +$SIG{CHLD} = sub {$fs->disconnect(); die "done"}; + if ($log) { $pid = fork; if (!$pid) { my $fs2 = init FreeSWITCH::Client {-password => $password} or die "Error $@"; - $fs2->cmd("log $log"); + + + $fs2->cmd({ command => "log $log" }); while (1) { my $reply = $fs2->readhash(undef); - + if ($reply->{socketerror}) { + die "socket error"; + } if ($reply->{body}) { print $reply->{body} . "\n"; } elsif ($reply->{'reply-text'}) { print $reply->{'reply-text'} . "\n"; } } + exit; } + } @@ -34,8 +42,11 @@ my $reply; if ($_) { - my $reply = $fs->cmd("api $_"); - + my $reply = $fs->cmd({command => "api $_"}); + if ($reply->{socketerror}) { + $fs2->disconnect(); + die "socket error"; + } if ($reply->{body}) { print $reply->{body}; } elsif ($reply->{'reply-text'}) { Modified: freeswitch/branches/mishehu/src/include/switch_apr.h ============================================================================== --- freeswitch/branches/mishehu/src/include/switch_apr.h (original) +++ freeswitch/branches/mishehu/src/include/switch_apr.h Tue Jul 25 18:58:16 2006 @@ -656,7 +656,7 @@ apr_int32_t flags, char *buf, apr_size_t *len);) -//#define switch_socket_recvfrom apr_socket_recvfrom +#define switch_socket_recvfrom apr_socket_recvfrom /** * Send a file from an open file descriptor to a socket, along with Modified: freeswitch/branches/mishehu/src/include/switch_core.h ============================================================================== --- freeswitch/branches/mishehu/src/include/switch_core.h (original) +++ freeswitch/branches/mishehu/src/include/switch_core.h Tue Jul 25 18:58:16 2006 @@ -867,6 +867,25 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_seek(switch_file_handle_t *fh, unsigned int *cur_pos, int64_t samples, int whence); /*! + \brief Set metadata to the desired string + \param fh the file handle to set data to + \param col the enum of the col name + \param string the string to add + \return SWITCH_STATUS_SUCCESS with cur_pos adjusted to new position +*/ +SWITCH_DECLARE(switch_status_t) switch_core_file_set_string(switch_file_handle_t *fh, switch_audio_col_t col, const char *string); + +/*! + \brief get metadata of the desired string + \param fh the file handle to get data from + \param col the enum of the col name + \param string pointer to the string to fetch + \return SWITCH_STATUS_SUCCESS with cur_pos adjusted to new position +*/ +SWITCH_DECLARE(switch_status_t) switch_core_file_get_string(switch_file_handle_t *fh, switch_audio_col_t col, const char **string); + + +/*! \brief Close an open file handle \param fh the file handle to close \return SWITCH_STATUS_SUCCESS if the file handle was closed Modified: freeswitch/branches/mishehu/src/include/switch_module_interfaces.h ============================================================================== --- freeswitch/branches/mishehu/src/include/switch_module_interfaces.h (original) +++ freeswitch/branches/mishehu/src/include/switch_module_interfaces.h Tue Jul 25 18:58:16 2006 @@ -266,6 +266,10 @@ switch_status_t (*file_write)(switch_file_handle_t *, void *data, switch_size_t *len); /*! function to seek to a certian position in the file */ switch_status_t (*file_seek)(switch_file_handle_t *, unsigned int *cur_pos, int64_t samples, int whence); + /*! function to set meta data */ + switch_status_t (*file_set_string)(switch_file_handle_t *fh, switch_audio_col_t col, const char *string); + /*! function to get meta data */ + switch_status_t (*file_get_string)(switch_file_handle_t *fh, switch_audio_col_t col, const char **string); /*! list of supported file extensions */ char **extens; const struct switch_file_interface *next; Modified: freeswitch/branches/mishehu/src/include/switch_types.h ============================================================================== --- freeswitch/branches/mishehu/src/include/switch_types.h (original) +++ freeswitch/branches/mishehu/src/include/switch_types.h Tue Jul 25 18:58:16 2006 @@ -94,7 +94,17 @@ #define SWITCH_FALSE 0 #define SWITCH_CORE_QUEUE_LEN 100000 + typedef enum { + SWITCH_AUDIO_COL_STR_TITLE = 0x01, + SWITCH_AUDIO_COL_STR_COPYRIGHT = 0x02, + SWITCH_AUDIO_COL_STR_SOFTWARE = 0x03, + SWITCH_AUDIO_COL_STR_ARTIST = 0x04, + SWITCH_AUDIO_COL_STR_COMMENT = 0x05, + SWITCH_AUDIO_COL_STR_DATE = 0x06 +} switch_audio_col_t; + +typedef enum { SWITCH_XML_SECTION_RESULT = 0, SWITCH_XML_SECTION_CONFIG = (1 << 0), SWITCH_XML_SECTION_DIRECTORY = (1 << 1), @@ -543,6 +553,7 @@ SWITCH_EVENT_SESSION_CRASH - Session Crashed SWITCH_EVENT_MODULE_LOAD - Module was loaded SWITCH_EVENT_DTMF - DTMF was sent + SWITCH_EVENT_MESSAGE - A Basic Message SWITCH_EVENT_ALL - All events at once </pre> @@ -570,6 +581,7 @@ SWITCH_EVENT_SESSION_CRASH, SWITCH_EVENT_MODULE_LOAD, SWITCH_EVENT_DTMF, + SWITCH_EVENT_MESSAGE, SWITCH_EVENT_ALL } switch_event_types_t; Modified: freeswitch/branches/mishehu/src/include/switch_utils.h ============================================================================== --- freeswitch/branches/mishehu/src/include/switch_utils.h (original) +++ freeswitch/branches/mishehu/src/include/switch_utils.h Tue Jul 25 18:58:16 2006 @@ -61,9 +61,6 @@ !strcasecmp(expr, "true") ||\ atoi(expr))) ? SWITCH_TRUE : SWITCH_FALSE - -SWITCH_DECLARE(switch_status_t) switch_socket_recvfrom(switch_sockaddr_t *from, switch_socket_t *sock, int32_t flags, char *buf, switch_size_t *len); - /*! \brief Return a printable name of a switch_priority_t \param priority the priority to get the name of Modified: freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/Makefile ============================================================================== --- freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/Makefile (original) +++ freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/Makefile Tue Jul 25 18:58:16 2006 @@ -1,7 +1,7 @@ LDFLAGS += -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -lssl -lcrypto CFLAGS += -I/usr/include/mysql -L/usr/lib64/mysql CPPCC = g++ -OBJS=cdrcontainer.o basecdr.o baseregistry.o mysqlcdr.o pddcdr.o +OBJS=cdrcontainer.o basecdr.o baseregistry.o mysqlcdr.o pddcdr.o csvcdr.o all: depends $(OBJS) $(MODNAME).$(DYNAMIC_LIB_EXTEN) Modified: freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/basecdr.cpp ============================================================================== --- freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/basecdr.cpp (original) +++ freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/basecdr.cpp Tue Jul 25 18:58:16 2006 @@ -59,6 +59,7 @@ { if(newchannel != 0) { + errorcode = 0; memset(clid,0,80); memset(dialplan,0,80); memset(myuuid,0,37); Modified: freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.cpp ============================================================================== --- freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.cpp (original) +++ freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.cpp Tue Jul 25 18:58:16 2006 @@ -86,7 +86,7 @@ char* MysqlCDR::sql_query = 0; std::string MysqlCDR::tmp_sql_query; char MysqlCDR::sql_query_chanvars[100] = ""; -MYSQL* MysqlCDR:: conn = 0; +MYSQL* MysqlCDR::conn = 0; MYSQL_STMT* MysqlCDR::stmt=0; MYSQL_STMT* MysqlCDR::stmt_chanvars=0; char MysqlCDR::hostname[255] = ""; @@ -217,29 +217,34 @@ memset(sql_query_chanvars,0,100); strncpy(sql_query_chanvars,tempsql_query_chanvars,strlen(tempsql_query_chanvars)); - conn = mysql_init(NULL); - mysql_options(conn, MYSQL_READ_DEFAULT_FILE, ""); - if(mysql_real_connect(conn,hostname,username,password,dbname,0,NULL,0) == NULL) - { - char *error1 = "Cannot connect to MySQL Server. The error was: "; - const char *error2 = mysql_error(conn); - strncat(error1,error2,strlen(error2)); - switch_console_printf(SWITCH_CHANNEL_LOG,error1); - } - else - connectionstate = 1; + connect_to_database(); + } + } +} + +void MysqlCDR::connect_to_database() +{ + conn = mysql_init(NULL); + mysql_options(conn, MYSQL_READ_DEFAULT_FILE, ""); + if(mysql_real_connect(conn,hostname,username,password,dbname,0,NULL,0) == NULL) + { + char *error1 = "Cannot connect to MySQL Server. The error was: "; + const char *error2 = mysql_error(conn); + strncat(error1,error2,strlen(error2)); + switch_console_printf(SWITCH_CHANNEL_LOG,error1); + } + else + connectionstate = 1; - mysql_autocommit(conn,0); - stmt = mysql_stmt_init(conn); + mysql_autocommit(conn,0); + stmt = mysql_stmt_init(conn); - mysql_stmt_prepare(stmt,sql_query,(long unsigned int)strlen(sql_query)); + mysql_stmt_prepare(stmt,sql_query,(long unsigned int)strlen(sql_query)); - if(logchanvars) - { - stmt_chanvars = mysql_stmt_init(conn); - mysql_stmt_prepare(stmt_chanvars,sql_query_chanvars,(long unsigned int)strlen(sql_query_chanvars)); - } - } + if(logchanvars) + { + stmt_chanvars = mysql_stmt_init(conn); + mysql_stmt_prepare(stmt_chanvars,sql_query_chanvars,(long unsigned int)strlen(sql_query_chanvars)); } } @@ -434,13 +439,22 @@ copy(bindme.begin(), bindme.end(), bindmetemp); mysql_stmt_bind_param(stmt,bindmetemp); - int bah = mysql_stmt_execute(stmt); - switch_console_printf(SWITCH_CHANNEL_LOG,"MysqlCDR::process_record() - Statement executed? Error: %d\n",bah); + int mysql_stmt_error_code = mysql_stmt_execute(stmt); + switch_console_printf(SWITCH_CHANNEL_LOG,"MysqlCDR::process_record() - Statement executed? Error: %d\n",mysql_stmt_error_code); - const char* bah2 = mysql_stmt_error(stmt); - switch_console_printf(SWITCH_CHANNEL_LOG,"MySQL encountered error: %s\n",bah2); + const char* mysql_stmt_error_string = mysql_stmt_error(stmt); + switch_console_printf(SWITCH_CHANNEL_LOG,"MySQL encountered error: %s\n",mysql_stmt_error_string); + + if(mysql_stmt_error_code == 1) + { + connect_to_database(); + mysql_stmt_bind_param(stmt,bindmetemp); + mysql_stmt_error_code = mysql_stmt_execute(stmt); + if (mysql_stmt_error_code != 0) + errorstate = 1; + } - if(logchanvars && chanvars_supp.size() > 0) + if(logchanvars && chanvars_supp.size() > 0 && errorstate == 0) { long long insertid = mysql_stmt_insert_id(stmt); @@ -484,25 +498,11 @@ } } - - mysql_commit(conn); - - /* For future use - if(!mysql_stmt_execute(stmt)) - { - if(errorstate == TRUE) - reprocess_tempdumped_data(); + if(errorstate == 0) mysql_commit(conn); - errorstate=FALSE(); - } else - { - errorstate = TRUE; mysql_rollback(conn); - tempdump_data(); - } - */ - + delete [] bindmetemp; if(temp_chanvars_holder.size() > 0) { Modified: freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.h ============================================================================== --- freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.h (original) +++ freeswitch/branches/mishehu/src/mod/event_handlers/mod_cdr/mysqlcdr.h Tue Jul 25 18:58:16 2006 @@ -94,6 +94,7 @@ template <typename T> void add_parameter(T& param, enum_field_types type, bool *is_null=0); void add_string_parameter(char* param, long unsigned int& param_length, enum_field_types type, bool* is_null=0); void set_mysql_time(switch_time_exp_t& param, MYSQL_TIME& destination); + void connect_to_database(); }; #endif Modified: freeswitch/branches/mishehu/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/branches/mishehu/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/branches/mishehu/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Tue Jul 25 18:58:16 2006 @@ -114,15 +114,28 @@ switch_mutex_lock(listen_list.mutex); for (l = listen_list.listeners; l; l = l->next) { - if (switch_test_flag(l, LFLAG_EVENTS) && (l->event_list[(uint8_t)event->event_id] || l->event_list[(uint8_t)SWITCH_EVENT_ALL])) { + uint8_t send = 0; + + if (!switch_test_flag(l, LFLAG_EVENTS)) { + continue; + } + + if (l->event_list[(uint8_t)SWITCH_EVENT_ALL]) { + send = 1; + } else if ((l->event_list[(uint8_t)event->event_id])) { if (event->event_id != SWITCH_EVENT_CUSTOM || (event->subclass && switch_core_hash_find(l->event_hash, event->subclass->name))) { - if (switch_event_dup(&clone, event) == SWITCH_STATUS_SUCCESS) { - switch_queue_push(l->event_queue, clone); - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n"); - } + send = 1; } } + + if (send) { + if (switch_event_dup(&clone, event) == SWITCH_STATUS_SUCCESS) { + switch_queue_push(l->event_queue, clone); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n"); + } + } + } switch_mutex_unlock(listen_list.mutex); } @@ -149,7 +162,14 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void) { + listener_t *l; + switch_mutex_lock(listen_list.mutex); + for (l = listen_list.listeners; l; l = l->next) { + close_socket(&l->sock); + } + switch_mutex_unlock(listen_list.mutex); + close_socket(&listen_list.sock); return SWITCH_STATUS_SUCCESS; @@ -201,8 +221,165 @@ } } -static void parse_command(listener_t *listener, char *cmd, char *reply, uint32_t reply_len) +static switch_status_t read_packet(listener_t *listener, switch_event_t **event, uint32_t timeout) { + switch_size_t mlen; + char mbuf[1024] = ""; + char buf[1024] = ""; + switch_size_t len; + switch_status_t status = SWITCH_STATUS_SUCCESS; + int count = 0, bytes = 0; + uint32_t elapsed = 0; + time_t start = 0; + void *pop; + char *ptr; + uint8_t crcount = 0; + + *event = NULL; + start = time(NULL); + ptr = mbuf; + + while(listener->sock) { + uint8_t do_sleep = 1; + mlen = 1; + status = switch_socket_recv(listener->sock, ptr, &mlen); + + if (status != SWITCH_STATUS_BREAK && status != SWITCH_STATUS_SUCCESS) { + return status; + } + + if (status != SWITCH_STATUS_BREAK && mlen) { + bytes++; + + if (*mbuf == '\r' || *mbuf == '\n') { /* bah */ + ptr = mbuf; + continue; + } + + if (*ptr == '\n') { + crcount++; + } else if (*ptr != '\r') { + crcount = 0; + } + ptr++; + if (crcount == 2) { + char *next; + char *cur = mbuf; + + while(cur) { + if ((next = strchr(cur, '\r')) || (next = strchr(cur, '\n'))) { + while (*next == '\r' || *next == '\n') { + next++; + } + } + count++; + if (count == 1) { + switch_event_create(event, SWITCH_EVENT_MESSAGE); + switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Command", mbuf); + } else { + char *var, *val; + var = mbuf; + if ((val = strchr(var, ':'))) { + *val++ = '\0'; + while(*val == ' ') { + val++; + } + } + if (var && val) { + switch_event_add_header(*event, SWITCH_STACK_BOTTOM, var, val); + } + } + + cur = next; + } + break; + } + } + + if (timeout) { + elapsed = (uint32_t)(time(NULL) - start); + if (elapsed >= timeout) { + switch_clear_flag_locked(listener, LFLAG_RUNNING); + return SWITCH_STATUS_FALSE; + } + } + + if (!*mbuf) { + if (switch_test_flag(listener, LFLAG_LOG)) { + if (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { + char *data = (char *) pop; + + + if (data) { + snprintf(buf, sizeof(buf), "Content-Type: log/data\nContent-Length: %"APR_SSIZE_T_FMT"\n\n", strlen(data)); + len = strlen(buf) + 1; + switch_socket_send(listener->sock, buf, &len); + len = strlen(data) + 1; + switch_socket_send(listener->sock, data, &len); + + free(data); + } + do_sleep = 0; + } + } + + if (switch_test_flag(listener, LFLAG_EVENTS)) { + if (switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) { + char hbuf[512]; + switch_event_t *event = (switch_event_t *) pop; + char *etype, *packet, *xmlstr = NULL; + + do_sleep = 0; + if (listener->format == EVENT_FORMAT_PLAIN) { + etype = "plain"; + switch_event_serialize(event, buf, sizeof(buf), NULL); + packet = buf; + } else { + switch_xml_t xml; + etype = "xml"; + + if ((xml = switch_event_xmlize(event, NULL))) { + xmlstr = switch_xml_toxml(xml); + packet = xmlstr; + switch_xml_free(xml); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "XML ERROR!\n"); + continue; + } + } + + len = strlen(packet) + 1; + + snprintf(hbuf, sizeof(hbuf), "Content-Length: %"APR_SSIZE_T_FMT"\n" + "Content-Type: text/event-%s\n" + "\n", len, etype); + + len = strlen(hbuf) + 1; + switch_socket_send(listener->sock, hbuf, &len); + + len = strlen(packet) + 1; + switch_socket_send(listener->sock, packet, &len); + + if (xmlstr) { + free(xmlstr); + } + } + } + } + if (do_sleep) { + switch_yield(1000); + } + } + + return status; + +} + +static switch_status_t parse_command(listener_t *listener, switch_event_t *event, char *reply, uint32_t reply_len) +{ + switch_status_t status = SWITCH_STATUS_SUCCESS; + char *cmd = switch_event_get_header(event, "command"); + *reply = '\0'; if (!strncasecmp(cmd, "exit", 4)) { @@ -262,7 +439,7 @@ switch_socket_send(listener->sock, buf, &len); len = strlen(listener->retbuf) + 1; switch_socket_send(listener->sock, listener->retbuf, &len); - return; + return SWITCH_STATUS_SUCCESS; } } else if (!strncasecmp(cmd, "log", 3)) { @@ -356,10 +533,15 @@ } done: + if (event) { + switch_event_destroy(&event); + } + if (switch_strlen_zero(reply)) { snprintf(reply, reply_len, "-ERR command not found"); } + return status; } static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj) @@ -368,9 +550,7 @@ char buf[1024]; switch_size_t len; switch_status_t status; - void *pop; - uint32_t elapsed; - time_t start = 0; + switch_event_t *event; char reply[512] = ""; assert(listener != NULL); @@ -386,126 +566,59 @@ len = strlen(buf) + 1; switch_socket_send(listener->sock, buf, &len); - start = time(NULL); - while(!switch_test_flag(listener, LFLAG_AUTHED)) { - len = sizeof(buf); - memset(buf, 0, len); - status = switch_socket_recv(listener->sock, buf, &len); - if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) { - break; - } - - if (len) { - parse_command(listener, buf, reply, sizeof(reply)); - if (!switch_strlen_zero(reply)) { - snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); - len = strlen(buf) + 1; - switch_socket_send(listener->sock, buf, &len); - } + while (!switch_test_flag(listener, LFLAG_AUTHED)) { + + status = read_packet(listener, &event, 25); + if (status != SWITCH_STATUS_SUCCESS) { goto done; } - - if (status == SWITCH_STATUS_BREAK) { - elapsed = (uint32_t)(time(NULL) - start); - if (elapsed >= 15) { - switch_clear_flag_locked(listener, LFLAG_RUNNING); - break; - } - - //switch_yield(1000); + if (!event) { continue; } - + if (parse_command(listener, event, reply, sizeof(reply)) != SWITCH_STATUS_SUCCESS) { + switch_clear_flag_locked(listener, LFLAG_RUNNING); + goto done; + } + if (!switch_strlen_zero(reply)) { + snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); + len = strlen(buf) + 1; + switch_socket_send(listener->sock, buf, &len); + } + break; } - done: while(switch_test_flag(listener, LFLAG_RUNNING) && listen_list.ready) { - uint8_t do_sleep = 1; + switch_event_t *event; + len = sizeof(buf); memset(buf, 0, len); - status = switch_socket_recv(listener->sock, buf, &len); + status = read_packet(listener, &event, 0); - if (!len && status != SWITCH_STATUS_BREAK) { + if (status != SWITCH_STATUS_SUCCESS) { break; } - - if (len) { - parse_command(listener, buf, reply, sizeof(reply)); - if (!switch_strlen_zero(reply)) { - snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); - len = strlen(buf) + 1; - switch_socket_send(listener->sock, buf, &len); - } + + if (!event) { continue; } - if (switch_test_flag(listener, LFLAG_LOG)) { - if (switch_queue_trypop(listener->log_queue, &pop) == SWITCH_STATUS_SUCCESS) { - char *data = (char *) pop; - if (data) { - snprintf(buf, sizeof(buf), "Content-Type: log/data\nContent-Length: %"APR_SSIZE_T_FMT"\n\n", strlen(data)); - len = strlen(buf) + 1; - switch_socket_send(listener->sock, buf, &len); - len = strlen(data) + 1; - switch_socket_send(listener->sock, data, &len); - - free(data); - } - do_sleep = 0; - } + if (parse_command(listener, event, reply, sizeof(reply)) != SWITCH_STATUS_SUCCESS) { + switch_clear_flag_locked(listener, LFLAG_RUNNING); + break; } - if (switch_test_flag(listener, LFLAG_EVENTS)) { - if (switch_queue_trypop(listener->event_queue, &pop) == SWITCH_STATUS_SUCCESS) { - char hbuf[512]; - switch_event_t *event = (switch_event_t *) pop; - char *etype, *packet, *xmlstr = NULL; - do_sleep = 0; - if (listener->format == EVENT_FORMAT_PLAIN) { - etype = "plain"; - switch_event_serialize(event, buf, sizeof(buf), NULL); - packet = buf; - } else { - switch_xml_t xml; - etype = "xml"; - - if ((xml = switch_event_xmlize(event, NULL))) { - xmlstr = switch_xml_toxml(xml); - packet = xmlstr; - switch_xml_free(xml); - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "XML ERROR!\n"); - continue; - } - } - - len = strlen(packet) + 1; - - snprintf(hbuf, sizeof(hbuf), "Content-Length: %"APR_SSIZE_T_FMT"\n" - "Content-Type: text/event-%s\n" - "\n", len, etype); - - len = strlen(hbuf) + 1; - switch_socket_send(listener->sock, hbuf, &len); - - len = strlen(packet) + 1; - switch_socket_send(listener->sock, packet, &len); - - switch_event_destroy(&event); - - if (xmlstr) { - free(xmlstr); - } - } + if (!switch_strlen_zero(reply)) { + snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); + len = strlen(buf) + 1; + switch_socket_send(listener->sock, buf, &len); } - - if (do_sleep) { - switch_yield(1000); - } + } + + done: remove_listener(listener); close_socket(&listener->sock); Modified: freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/Makefile ============================================================================== --- freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/Makefile (original) +++ freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/Makefile Tue Jul 25 18:58:16 2006 @@ -3,7 +3,7 @@ all: depends $(MODNAME).$(DYNAMIC_LIB_EXTEN) depends: - MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libsndfile-1.0.12.tar.gz --prefix=$(PREFIX) + MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libsndfile-1.0.16.tar.gz --prefix=$(PREFIX) $(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c $(CC) $(CFLAGS) -fPIC -c $(MODNAME).c -o $(MODNAME).o Modified: freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/mod_sndfile.c ============================================================================== --- freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/mod_sndfile.c (original) +++ freeswitch/branches/mishehu/src/mod/formats/mod_sndfile/mod_sndfile.c Tue Jul 25 18:58:16 2006 @@ -213,6 +213,26 @@ return SWITCH_STATUS_SUCCESS; } +static switch_status_t sndfile_file_set_string(switch_file_handle_t *handle, switch_audio_col_t col, const char *string) +{ + sndfile_context *context = handle->private_info; + + return sf_set_string(context->handle, (int)col, string) ? SWITCH_STATUS_FALSE : SWITCH_STATUS_SUCCESS; +} + +static switch_status_t sndfile_file_get_string(switch_file_handle_t *handle, switch_audio_col_t col, const char **string) +{ + sndfile_context *context = handle->private_info; + const char *s; + + if ((s = sf_get_string(context->handle, (int)col))) { + *string = s; + return SWITCH_STATUS_SUCCESS; + } + + return SWITCH_STATUS_FALSE; +} + /* Registration */ static char **supported_formats; @@ -224,6 +244,8 @@ /*.file_read */ sndfile_file_read, /*.file_write */ sndfile_file_write, /*.file_seek */ sndfile_file_seek, + /*.file_set_string */ sndfile_file_set_string, + /*.file_get_string */ sndfile_file_get_string, /*.extens */ NULL, /*.next */ NULL, }; Modified: freeswitch/branches/mishehu/src/switch_core.c ============================================================================== --- freeswitch/branches/mishehu/src/switch_core.c (original) +++ freeswitch/branches/mishehu/src/switch_core.c Tue Jul 25 18:58:16 2006 @@ -543,8 +543,25 @@ SWITCH_DECLARE(switch_status_t) switch_core_file_seek(switch_file_handle_t *fh, unsigned int *cur_pos, int64_t samples, int whence) { + assert(fh != NULL); return fh->file_interface->file_seek(fh, cur_pos, samples, whence); } + +SWITCH_DECLARE(switch_status_t) switch_core_file_set_string(switch_file_handle_t *fh, switch_audio_col_t col, const char *string) +{ + assert(fh != NULL); + + return fh->file_interface->file_set_string(fh, col, string); +} + +SWITCH_DECLARE(switch_status_t) switch_core_file_get_string(switch_file_handle_t *fh, switch_audio_col_t col, const char **string) +{ + assert(fh != NULL); + + return fh->file_interface->file_get_string(fh, col, string); + +} + SWITCH_DECLARE(switch_status_t) switch_core_file_close(switch_file_handle_t *fh) { Modified: freeswitch/branches/mishehu/src/switch_event.c ============================================================================== --- freeswitch/branches/mishehu/src/switch_event.c (original) +++ freeswitch/branches/mishehu/src/switch_event.c Tue Jul 25 18:58:16 2006 @@ -112,6 +112,7 @@ "SESSION_CRASH", "MODULE_LOAD", "DTMF", + "MESSAGE", "ALL" }; Modified: freeswitch/branches/mishehu/src/switch_ivr.c ============================================================================== --- freeswitch/branches/mishehu/src/switch_ivr.c (original) +++ freeswitch/branches/mishehu/src/switch_ivr.c Tue Jul 25 18:58:16 2006 @@ -214,6 +214,8 @@ switch_codec_t codec, *read_codec; char *codec_name; switch_status_t status = SWITCH_STATUS_SUCCESS; + char *p; + const char *vval; if (!fh) { fh = &lfh; @@ -241,6 +243,41 @@ switch_channel_answer(channel); + if ((p = switch_channel_get_variable(channel, "RECORD_TITLE"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_TITLE, vval); + switch_channel_set_variable(channel, "RECORD_TITLE", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_COPYRIGHT"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_COPYRIGHT, vval); + switch_channel_set_variable(channel, "RECORD_COPYRIGHT", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_SOFTWARE"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_SOFTWARE, vval); + switch_channel_set_variable(channel, "RECORD_SOFTWARE", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_ARTIST"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_ARTIST, vval); + switch_channel_set_variable(channel, "RECORD_ARTIST", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_COMMENT"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_COMMENT, vval); + switch_channel_set_variable(channel, "RECORD_COMMENT", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_DATE"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_DATE, vval); + switch_channel_set_variable(channel, "RECORD_DATE", NULL); + } codec_name = "L16"; if (switch_core_codec_init(&codec, @@ -333,7 +370,9 @@ switch_status_t status = SWITCH_STATUS_SUCCESS; switch_file_handle_t lfh; switch_codec_t *read_codec = switch_core_session_get_read_codec(session); - + const char *p; + char *title = "", *copyright = "", *software = "", *artist = "", *comment = "", *date = ""; + if (!fh) { fh = &lfh; memset(fh, 0, sizeof(lfh)); @@ -354,8 +393,52 @@ write_frame.data = abuf; write_frame.buflen = sizeof(abuf); + + if (switch_core_file_get_string(fh, SWITCH_AUDIO_COL_STR_TITLE, &p) == SWITCH_STATUS_SUCCESS) { + title = (char *) switch_core_session_strdup(session, (char *)p); + switch_channel_set_variable(channel, "RECORD_TITLE", (char *)p); + } + + if (switch_core_file_get_string(fh, SWITCH_AUDIO_COL_STR_COPYRIGHT, &p) == SWITCH_STATUS_SUCCESS) { + copyright = (char *) switch_core_session_strdup(session, (char *)p); + switch_channel_set_variable(channel, "RECORD_COPYRIGHT", (char *)p); + } + + if (switch_core_file_get_string(fh, SWITCH_AUDIO_COL_STR_SOFTWARE, &p) == SWITCH_STATUS_SUCCESS) { + software = (char *) switch_core_session_strdup(session, (char *)p); + switch_channel_set_variable(channel, "RECORD_SOFTWARE", (char *)p); + } + + if (switch_core_file_get_string(fh, SWITCH_AUDIO_COL_STR_ARTIST, &p) == SWITCH_STATUS_SUCCESS) { + artist = (char *) switch_core_session_strdup(session, (char *)p); + switch_channel_set_variable(channel, "RECORD_ARTIST", (char *)p); + } + + if (switch_core_file_get_string(fh, SWITCH_AUDIO_COL_STR_COMMENT, &p) == SWITCH_STATUS_SUCCESS) { + comment = (char *) switch_core_session_strdup(session, (char *)p); + switch_channel_set_variable(channel, "RECORD_COMMENT", (char *)p); + } + + if (switch_core_file_get_string(fh, SWITCH_AUDIO_COL_STR_DATE, &p) == SWITCH_STATUS_SUCCESS) { + date = (char *) switch_core_session_strdup(session, (char *)p); + switch_channel_set_variable(channel, "RECORD_DATE", (char *)p); + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + "OPEN FILE %s %uhz %u channels\n" + "TITLE=%s\n" + "COPYRIGHT=%s\n" + "SOFTWARE=%s\n" + "ARTIST=%s\n" + "COMMENT=%s\n" + "DATE=%s\n", file, fh->samplerate, fh->channels, + title, + copyright, + software, + artist, + comment, + date); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "OPEN FILE %s %uhz %u channels\n", file, fh->samplerate, fh->channels); interval = read_codec->implementation->microseconds_per_frame / 1000; Modified: freeswitch/branches/mishehu/src/switch_utils.c ============================================================================== --- freeswitch/branches/mishehu/src/switch_utils.c (original) +++ freeswitch/branches/mishehu/src/switch_utils.c Tue Jul 25 18:58:16 2006 @@ -34,16 +34,6 @@ #include <string.h> #include <stdlib.h> -SWITCH_DECLARE(switch_status_t) switch_socket_recvfrom(switch_sockaddr_t *from, switch_socket_t *sock, int32_t flags, char *buf, switch_size_t *len) -{ - switch_status_t status; - - if ((status = apr_socket_recvfrom(from, sock, flags, buf, len)) == SWITCH_STATUS_SUCCESS) { - from->port = ntohs(from->sa.sin.sin_port); - } - return status; -} - SWITCH_DECLARE(char *) switch_priority_name(switch_priority_t priority) { switch(priority) { /*lol*/ Modified: freeswitch/branches/mishehu/w32/vsnet/GetLibs.vbs ============================================================================== --- freeswitch/branches/mishehu/w32/vsnet/GetLibs.vbs (original) +++ freeswitch/branches/mishehu/w32/vsnet/GetLibs.vbs Tue Jul 25 18:58:16 2006 @@ -248,16 +248,13 @@ ' Lib Build Sectiton ' ****************** Sub BuildLibs_aprutil(BuildDebug, BuildRelease) - If Not FSO.FolderExists(LibDestDir & "apr-util") Then -' WgetUnCompress "ftp://ftp.wayne.edu/apache/apr/apr-util-1.2.6.tar.gz", LibDestDir - If Not FSO.FolderExists(LibDestDir & "apr-util-1.2.6") Then - Wscript.echo "Unable to get apr-util from default download location, Trying backup location:" - WgetUnCompress LibsBase & "apr-util-1.2.6.tar.gz", LibDestDir - End If - RenameFolder LibDestDir & "apr-util-1.2.6", "apr-util" - FSO.CopyFile Utilsdir & "apr\xml.vcproj", LibDestDir & "apr-util\xml\expat\lib\", True - FSO.CopyFile Utilsdir & "apr\libaprutil.vcproj", LibDestDir & "apr-util\", True - End If + If Not FSO.FolderExists(LibDestDir & "apr-util") Then + Wscript.echo "Unable to get apr-util from default download location, Trying backup location:" + WgetUnCompress LibsBase & "apr-util-1.2.7.tar.gz", LibDestDir + End If + RenameFolder LibDestDir & "apr-util-1.2.7", "apr-util" + FSO.CopyFile Utilsdir & "apr\xml.vcproj", LibDestDir & "apr-util\xml\expat\lib\", True + FSO.CopyFile Utilsdir & "apr\libaprutil.vcproj", LibDestDir & "apr-util\", True If FSO.FolderExists(LibDestDir & "apr-util") Then If BuildDebug Then If Not FSO.FileExists(LibDestDir & "apr-util\xml\expat\lib\LibD\xml.lib") Then @@ -285,15 +282,12 @@ End Sub Sub BuildLibs_apriconv(BuildDebug, BuildRelease) - If Not FSO.FolderExists(LibDestDir & "apr-iconv") Then -' WgetUnCompress "ftp://ftp.wayne.edu/apache/apr/apr-iconv-1.1.1.tar.gz", LibDestDir - If Not FSO.FolderExists(LibDestDir & "apr-iconv-1.1.1") Then - Wscript.echo "Unable to get apr-iconv from default download location, Trying backup location:" - WgetUnCompress LibsBase & "apr-iconv-1.1.1.tar.gz", LibDestDir - End If - RenameFolder LibDestDir & "apr-iconv-1.1.1", "apr-iconv" - FSO.CopyFile Utilsdir & "apr\libapriconv.vcproj", LibDestDir & "apr-iconv\", True - End If + If Not FSO.FolderExists(LibDestDir & "apr-iconv-1.1.1") Then + Wscript.echo "Unable to get apr-iconv from default download location, Trying backup location:" + WgetUnCompress LibsBase & "apr-iconv-1.1.1.tar.gz", LibDestDir + End If + RenameFolder LibDestDir & "apr-iconv-1.1.1", "apr-iconv" + FSO.CopyFile Utilsdir & "apr\libapriconv.vcproj", LibDestDir & "apr-iconv\", True If FSO.FolderExists(LibDestDir & "apr-iconv") Then If BuildDebug Then If Not FSO.FileExists(LibDestDir & "apr-iconv\Debug\libapriconv-1.lib") Then @@ -315,16 +309,13 @@ End Sub Sub BuildLibs_apr(BuildDebug, BuildRelease) - If Not FSO.FolderExists(LibDestDir & "apr") Then -' WgetUnCompress "ftp://ftp.wayne.edu/apache/apr/apr-1.2.6.tar.gz", LibDestDir - If Not FSO.FolderExists(LibDestDir & "apr-1.2.6") Then - Wscript.echo "Unable to get apr from default download location, Trying backup location:" - WgetUnCompress LibsBase & "apr-1.2.6.tar.gz", LibDestDir - End If - RenameFolder LibDestDir & "apr-1.2.6", "apr" - FSO.CopyFile Utilsdir & "apr\libapr.vcproj", LibDestDir & "apr\", True - FSO.CopyFile Utilsdir & "apr\apr.hw", LibDestDir & "apr\include\", True - End If + If Not FSO.FolderExists(LibDestDir & "apr") Then + Wscript.echo "Unable to get apr from default download location, Trying backup location:" + WgetUnCompress LibsBase & "apr-1.2.7.tar.gz", LibDestDir + End If + RenameFolder LibDestDir & "apr-1.2.7", "apr" + FSO.CopyFile Utilsdir & "apr\libapr.vcproj", LibDestDir & "apr\", True + FSO.CopyFile Utilsdir & "apr\apr.hw", LibDestDir & "apr\include\", True If FSO.FolderExists(LibDestDir & "apr") Then If BuildDebug Then If Not FSO.FileExists(LibDestDir & "apr\Debug\libapr-1.lib") Then @@ -421,16 +412,13 @@ End Sub Sub BuildLibs_sqlite(BuildDebug, BuildRelease) - If Not FSO.FolderExists(LibDestDir & "sqlite") Then - WgetUnCompress "http://www.sqlite.org/sqlite-source-3_3_5.zip", LibDestDir - If Not FSO.FolderExists(LibDestDir & "sqlite-source-3_3_5") Then + If Not FSO.FolderExists(LibDestDir & "sqlite") Then Wscript.echo "Unable to get SQLite from default download location, Trying backup location:" - WgetUnCompress LibsBase & "sqlite-source-3_3_5.zip", LibDestDir + WgetUnCompress LibsBase & "sqlite-source-3_3_6.zip", LibDestDir End If - RenameFolder LibDestDir & "sqlite-source-3_3_5", "sqlite" + RenameFolder LibDestDir & "sqlite-source-3_3_6", "sqlite" FSO.CopyFile Utilsdir & "sqlite.vcproj", LibDestDir & "sqlite\", True FindReplaceInFile LibDestDir & "sqlite\sqlite.vcproj", "WIN32;", "_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;" - End If If FSO.FolderExists(LibDestDir & "sqlite") Then If BuildDebug Then If Not FSO.FileExists(LibDestDir & "sqlite\Debug DLL\sqlite.lib") Then @@ -629,9 +617,10 @@ Sub BuildLibs_libsndfile(BuildDebug, BuildRelease) If Not FSO.FolderExists(LibDestDir & "libsndfile") Then - WgetUnCompress LibsBase & "libsndfile-1.0.12.tar.gz", LibDestDir - RenameFolder LibDestDir & "libsndfile-1.0.12", "libsndfile" - FSO.CopyFile Utilsdir & "libsndfile.vcproj", LibDestDir & "libsndfile\Win32\", True + WgetUnCompress LibsBase & "libsndfile-1.0.16.tar.gz", LibDestDir + RenameFolder LibDestDir & "libsndfile-1.0.16", "libsndfile" + FSO.CopyFile Utilsdir & "libsndfile\*.*", LibDestDir & "libsndfile\Win32\", True + FindReplaceInFile LibDestDir & "libsndfile\src\common.c", "memset (ptr + most,", "memset ((char *)ptr + most," End If If FSO.FolderExists(LibDestDir & "libsndfile") Then If BuildDebug Then