diff --git a/Freeswitch.2008.sln b/Freeswitch.2008.sln index 737ea6b808..5acc6fffe0 100644 --- a/Freeswitch.2008.sln +++ b/Freeswitch.2008.sln @@ -998,7 +998,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_siren", "src\mod\codecs {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} = {1BC8A8EC-E03B-44DF-BCD9-088650F4D29C} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "esl", "libs\esl\esl.2008.vcproj", "{CF405366-9558-4AE8-90EF-5E21B51CCB4E}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "esl", "libs\esl\src\esl.2008.vcproj", "{CF405366-9558-4AE8-90EF-5E21B51CCB4E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fs_cli", "libs\esl\fs_cli.2008.vcproj", "{D2FB8043-D208-4AEE-8F18-3B5857C871B9}" + ProjectSection(ProjectDependencies) = postProject + {CF405366-9558-4AE8-90EF-5E21B51CCB4E} = {CF405366-9558-4AE8-90EF-5E21B51CCB4E} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1762,6 +1767,10 @@ Global {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.ActiveCfg = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|Win32.Build.0 = Release|Win32 {CF405366-9558-4AE8-90EF-5E21B51CCB4E}.Release|x64.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|Win32.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Debug|x64.ActiveCfg = Debug|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|Win32.ActiveCfg = Release|Win32 + {D2FB8043-D208-4AEE-8F18-3B5857C871B9}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/libs/esl/fs_cli.2008.vcproj b/libs/esl/fs_cli.2008.vcproj new file mode 100644 index 0000000000..79093674e6 --- /dev/null +++ b/libs/esl/fs_cli.2008.vcproj @@ -0,0 +1,258 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/esl/fs_cli.c b/libs/esl/fs_cli.c index f49dd12270..c430aaa905 100644 --- a/libs/esl/fs_cli.c +++ b/libs/esl/fs_cli.c @@ -2,13 +2,20 @@ #include #include #include -#include +#ifdef WIN32 +#define strdup(src) _strdup(src) +#define usleep(time) Sleep(time/1000) +#else +#include #include +#define HAVE_EDITLINE +#endif static char prompt_str[512] = ""; static char hostname[512] = ""; +#ifdef HAVE_EDITLINE static char *prompt(EditLine * e) { return prompt_str; @@ -17,6 +24,8 @@ static char *prompt(EditLine * e) static EditLine *el; static History *myhistory; static HistEvent ev; +#endif + static int running = 1; static int thread_running = 0; @@ -149,8 +158,8 @@ static int get_profile(const char *name, cli_profile_t **profile) int main(int argc, char *argv[]) { esl_handle_t handle = {{0}}; - int count; - const char *line; + int count = 0; + const char *line = NULL; char cmd_str[1024] = ""; char hfile[512] = "/tmp/fs_cli_history"; char cfile[512] = "/tmp/fs_cli_config"; @@ -199,7 +208,7 @@ int main(int argc, char *argv[]) } else if (!strcasecmp(var, "port")) { int pt = atoi(val); if (pt > 0) { - profiles[cur].port = pt; + profiles[cur].port = (esl_port_t)pt; } } } @@ -227,7 +236,8 @@ int main(int argc, char *argv[]) } esl_thread_create_detached(msg_thread_run, &handle); - + +#ifdef HAVE_EDITLINE el = el_init(__FILE__, stdout, stdout, stdout); el_set(el, EL_PROMPT, &prompt); el_set(el, EL_EDITOR, "emacs"); @@ -241,7 +251,8 @@ int main(int argc, char *argv[]) history(myhistory, &ev, H_SETSIZE, 800); el_set(el, EL_HIST, history, myhistory); history(myhistory, &ev, H_LOAD, hfile); - +#endif + snprintf(cmd_str, sizeof(cmd_str), "log info\n\n"); esl_send_recv(&handle, cmd_str); @@ -249,19 +260,28 @@ int main(int argc, char *argv[]) while (running) { +#ifdef HAVE_EDITLINE line = el_gets(el, &count); - +#endif + if (count > 1) { if (!esl_strlen_zero(line)) { char *cmd = strdup(line); char *p; + +#ifdef HAVE_EDITLINE const LineInfo *lf = el_line(el); char *foo = (char *) lf->buffer; +#endif + if ((p = strrchr(cmd, '\r')) || (p = strrchr(cmd, '\n'))) { *p = '\0'; } assert(cmd != NULL); + +#ifdef HAVE_EDITLINE history(myhistory, &ev, H_ENTER, line); +#endif if (!strncasecmp(cmd, "...", 3)) { goto done; @@ -277,8 +297,10 @@ int main(int argc, char *argv[]) } } +#ifdef HAVE_EDITLINE el_deletestr(el, strlen(foo) + 1); memset(foo, 0, strlen(foo)); +#endif free(cmd); } } @@ -290,11 +312,13 @@ int main(int argc, char *argv[]) done: +#ifdef HAVE_EDITLINE history(myhistory, &ev, H_SAVE, hfile); /* Clean up our memory */ history_end(myhistory); el_end(el); +#endif esl_disconnect(&handle); diff --git a/libs/esl/esl.2008.vcproj b/libs/esl/src/esl.2008.vcproj similarity index 86% rename from libs/esl/esl.2008.vcproj rename to libs/esl/src/esl.2008.vcproj index c4a78e459b..d64593c7aa 100644 --- a/libs/esl/esl.2008.vcproj +++ b/libs/esl/src/esl.2008.vcproj @@ -41,7 +41,7 @@ @@ -200,19 +200,19 @@ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" > diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index 79fa4a7919..c832d11e51 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -175,23 +175,23 @@ ESL_DECLARE(const char *)esl_stristr(const char *instr, const char *str) return NULL; } -#ifdef WIN32 -#ifndef vsnprintf -#define vsnprintf _vsnprintf -#endif -#endif - -ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...) -{ - va_list ap; - int ret; - - va_start(ap, fmt); - ret = vsnprintf(buffer, count-1, fmt, ap); - if (ret < 0) - buffer[count-1] = '\0'; - va_end(ap); - return ret; +#ifdef WIN32 +#ifndef vsnprintf +#define vsnprintf _vsnprintf +#endif +#endif + +ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...) +{ + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vsnprintf(buffer, count-1, fmt, ap); + if (ret < 0) + buffer[count-1] = '\0'; + va_end(ap); + return ret; } static void null_logger(const char *file, const char *func, int line, int level, const char *fmt, ...) @@ -261,7 +261,7 @@ static void default_logger(const char *file, const char *func, int line, int lev esl_logger_t esl_log = null_logger; -void esl_global_set_logger(esl_logger_t logger) +ESL_DECLARE(void) esl_global_set_logger(esl_logger_t logger) { if (logger) { esl_log = logger; @@ -270,7 +270,7 @@ void esl_global_set_logger(esl_logger_t logger) } } -void esl_global_set_default_logger(int level) +ESL_DECLARE(void) esl_global_set_default_logger(int level) { if (level < 0 || level > 7) { level = 7; @@ -410,7 +410,7 @@ ESL_DECLARE(esl_status_t) esl_execute(esl_handle_t *handle, const char *app, con static int esl_socket_reuseaddr(esl_socket_t socket) { #ifdef WIN32 - BOOL reuse_addr = TRUE; + BOOL reuse_addr = TRUE; return setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse_addr, sizeof(reuse_addr)); #else int reuse_addr = 1; @@ -596,11 +596,11 @@ ESL_DECLARE(esl_status_t) esl_recv_event_timed(esl_handle_t *handle, uint32_t ms FD_ZERO(&efds); #ifdef WIN32 -#pragma warning( push ) +#pragma warning( push ) #pragma warning( disable : 4127 ) FD_SET(handle->sock, &rfds); FD_SET(handle->sock, &efds); -#pragma warning( pop ) +#pragma warning( pop ) #else FD_SET(handle->sock, &rfds); FD_SET(handle->sock, &efds); diff --git a/libs/esl/src/include/esl.h b/libs/esl/src/include/esl.h index dbdfb70676..58a941dc49 100644 --- a/libs/esl/src/include/esl.h +++ b/libs/esl/src/include/esl.h @@ -163,10 +163,10 @@ typedef struct esl_event esl_event_t; #include #endif #include - -#if (_MSC_VER >= 1400) // VC8+ -#define esl_assert(expr) assert(expr);__analysis_assume( expr ) -#endif + +#if (_MSC_VER >= 1400) // VC8+ +#define esl_assert(expr) assert(expr);__analysis_assume( expr ) +#endif #ifndef esl_assert #define esl_assert(_x) assert(_x) @@ -192,23 +192,23 @@ typedef intptr_t esl_ssize_t; typedef int esl_filehandle_t; #define ESL_SOCK_INVALID INVALID_SOCKET #define strerror_r(num, buf, size) strerror_s(buf, size, num) -#if defined(ESL_DECLARE_STATIC) -#define ESL_DECLARE(type) type __stdcall -#define ESL_DECLARE_NONSTD(type) type __cdecl -#define ESL_DECLARE_DATA -#elif defined(ESL_EXPORTS) -#define ESL_DECLARE(type) __declspec(dllexport) type __stdcall -#define ESL_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl -#define ESL_DECLARE_DATA __declspec(dllexport) -#else -#define ESL_DECLARE(type) __declspec(dllimport) type __stdcall -#define ESL_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl -#define ESL_DECLARE_DATA __declspec(dllimport) -#endif +#if defined(ESL_DECLARE_STATIC) +#define ESL_DECLARE(type) type __stdcall +#define ESL_DECLARE_NONSTD(type) type __cdecl +#define ESL_DECLARE_DATA +#elif defined(ESL_EXPORTS) +#define ESL_DECLARE(type) __declspec(dllexport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllexport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllexport) #else -#define ESL_DECLARE(type) type -#define ESL_DECLARE_NONSTD(type) type -#define ESL_DECLARE_DATA +#define ESL_DECLARE(type) __declspec(dllimport) type __stdcall +#define ESL_DECLARE_NONSTD(type) __declspec(dllimport) type __cdecl +#define ESL_DECLARE_DATA __declspec(dllimport) +#endif +#else +#define ESL_DECLARE(type) type +#define ESL_DECLARE_NONSTD(type) type +#define ESL_DECLARE_DATA #include #include #include @@ -281,10 +281,10 @@ typedef enum { #define ESL_LOG_EMERG ESL_PRE, ESL_LOG_LEVEL_EMERG typedef void (*esl_logger_t)(const char *file, const char *func, int line, int level, const char *fmt, ...); -extern esl_logger_t esl_log; +ESL_DECLARE_DATA extern esl_logger_t esl_log; -void esl_global_set_logger(esl_logger_t logger); -void esl_global_set_default_logger(int level); +ESL_DECLARE(void) esl_global_set_logger(esl_logger_t logger); +ESL_DECLARE(void) esl_global_set_default_logger(int level); #include "esl_event.h" #include "esl_threadmutex.h" @@ -295,7 +295,7 @@ ESL_DECLARE(char *)esl_url_decode(char *s); ESL_DECLARE(const char *)esl_stristr(const char *instr, const char *str); ESL_DECLARE(int) esl_toupper(int c); ESL_DECLARE(int) esl_tolower(int c); -ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); +ESL_DECLARE(int) esl_snprintf(char *buffer, size_t count, const char *fmt, ...); typedef void (*esl_listen_callback_t)(esl_socket_t server_sock, esl_socket_t client_sock, struct sockaddr_in addr);