add ability to read from a stream

do not use this unless you understand what you are doing and you want to take the risk,
you are warnned
This commit is contained in:
Seven Du 2014-09-04 09:00:38 +08:00
parent f0b9407cca
commit 31f78d8cac
6 changed files with 34 additions and 0 deletions

View File

@ -3,6 +3,7 @@
#ifdef __cplusplus
#include <string>
extern "C" {
#endif
#ifdef DOH
@ -149,7 +150,9 @@ SWITCH_DECLARE(bool) email(char *to, char *from, char *headers = NULL, char *bod
SWITCH_DECLARE_CONSTRUCTOR Stream(void);
SWITCH_DECLARE_CONSTRUCTOR Stream(switch_stream_handle_t *);
virtual SWITCH_DECLARE_CONSTRUCTOR ~ Stream();
SWITCH_DECLARE(std::string) read();
SWITCH_DECLARE(void) write(const char *data);
SWITCH_DECLARE(void) raw_write(std::string data);
SWITCH_DECLARE(const char *) get_data(void);
};

View File

@ -91,6 +91,7 @@ struct switch_state_handler_table {
};
struct switch_stream_handle {
switch_stream_handle_read_function_t read_function;
switch_stream_handle_write_function_t write_function;
switch_stream_handle_raw_write_function_t raw_write_function;
void *data;

View File

@ -2152,6 +2152,7 @@ typedef void (*switch_scheduler_func_t) (switch_scheduler_task_t *task);
typedef switch_status_t (*switch_state_handler_t) (switch_core_session_t *);
typedef struct switch_stream_handle switch_stream_handle_t;
typedef uint8_t * (*switch_stream_handle_read_function_t) (switch_stream_handle_t *handle, int *len);
typedef switch_status_t (*switch_stream_handle_write_function_t) (switch_stream_handle_t *handle, const char *fmt, ...);
typedef switch_status_t (*switch_stream_handle_raw_write_function_t) (switch_stream_handle_t *handle, uint8_t *data, switch_size_t datalen);

View File

@ -43,6 +43,8 @@
%newobject API::execute;
%newobject API::executeString;
%include "std_string.i"
/**
* tell swig to grok everything defined in these header files and
* build all sorts of c wrappers and lua shadows of the c wrappers.

View File

@ -22,7 +22,9 @@ class Stream {
Stream(void);
Stream(switch_stream_handle_t *);
virtual ~ Stream();
string read();
void write(const char *data);
void raw_write(void *data, int len);
const char *get_data(void);
};

View File

@ -531,12 +531,37 @@ SWITCH_DECLARE_CONSTRUCTOR Stream::~Stream()
}
}
/* WARNING!! you are not encouraged to use this unless you understand the risk!!! */
SWITCH_DECLARE(std::string) Stream::read()
{
uint8_t *buff;
this_check(std::string(""));
int len = 0;
this_check(std::string());
if (!stream_p->read_function) return std::string();
buff = stream_p->read_function(stream_p, &len);
if (!buff) return std::string();
if (len < 0) return std::string();
return std::string((const char *)buff, len);
}
SWITCH_DECLARE(void) Stream::write(const char *data)
{
this_check_void();
stream_p->write_function(stream_p, "%s", data);
}
SWITCH_DECLARE(void) Stream::raw_write(std::string data)
{
this_check_void();
stream_p->raw_write_function(stream_p, (uint8_t *)data.c_str(), data.length());
}
SWITCH_DECLARE(const char *)Stream::get_data()
{
this_check("");