提交 dd704bca authored 作者: Brian Fertig's avatar Brian Fertig

Yet another fix. PHP now doesnt crash :)

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2638 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 5e0ed731
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
PCFG=$(PREFIX)/bin/php-config PCFG=$(PREFIX)/bin/php-config
LCFLAGS=-fPIC -DZTS -DPTHREADS LCFLAGS=-fPIC -DZTS -DPTHREADS
CFLAGS += `$(PCFG) --includes` CFLAGS += `$(PCFG) --includes` -g3
MDIR += `$(PCFG) --extension-dir` MDIR += `$(PCFG) --extension-dir`
PHPMOD=freeswitch PHPMOD=freeswitch
PHPLDFLAGS = `$(PCFG) --ldflags` -lcrypt -lresolv -lm -ldl -lnsl -lxml2 -lz -lphp5 PHPLDFLAGS = `$(PCFG) --ldflags` -lcrypt -lresolv -lm -ldl -lnsl -lxml2 -lz -lphp5
...@@ -10,7 +10,7 @@ PHPLDFLAGS = `$(PCFG) --ldflags` -lcrypt -lresolv -lm -ldl -lnsl -lxml2 -lz -lph ...@@ -10,7 +10,7 @@ PHPLDFLAGS = `$(PCFG) --ldflags` -lcrypt -lresolv -lm -ldl -lnsl -lxml2 -lz -lph
all: depends $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(PHPMOD).$(DYNAMIC_LIB_EXTEN) all: depends $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(PHPMOD).$(DYNAMIC_LIB_EXTEN)
depends: depends:
MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install php-5.1.6.tar.gz --prefix=$(PREFIX) --enable-embed=static --enable-static --with-pic --with-mysql --with-curl MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install php-5.1.6.tar.gz --prefix=$(PREFIX) --enable-embed=shared --enable-shared --with-pic --with-mysql --with-curl --enable-maintainer-zts --with-tsrm-pthreads
%.o: %.c %.o: %.c
$(CC) $(LCFLAGS) $(CFLAGS) -c $< -o $@ $(CC) $(LCFLAGS) $(CFLAGS) -c $< -o $@
...@@ -41,3 +41,7 @@ install: ...@@ -41,3 +41,7 @@ install:
cp -f php_$(PHPMOD).$(DYNAMIC_LIB_EXTEN) $(MDIR) cp -f php_$(PHPMOD).$(DYNAMIC_LIB_EXTEN) $(MDIR)
cp -f $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(PREFIX)/mod cp -f $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(PREFIX)/mod
cp -f $(PHPMOD).php $(PREFIX)/lib/php cp -f $(PHPMOD).php $(PREFIX)/lib/php
cp -f classFreeswitch.php $(PREFIX)/lib/php
cp -f freeswitch.php $(PREFIX)/lib/php
cp -f apptest.php $(PREFIX)/scripts
cp -f test.php $(PREFIX)/scripts
...@@ -8,10 +8,12 @@ ...@@ -8,10 +8,12 @@
*/ */
require("classFreeswitch.php"); require("classFreeswitch.php");
$fs = new fs_class_api; echo "uuid: $uuid\n";
$fs->fs_answer($session); $fs = new fs_class_api();
$fs->fs_play_file($session, "/ram/sr8k.wav"); $fs->fs_answer();
$fs->fs_play_file("/ram/sr8k.wav");
?> ?>
...@@ -31,13 +31,12 @@ ...@@ -31,13 +31,12 @@
* *
*/ */
require("freeswitch.php"); // Required for freeswitch driver to be loaded require("freeswitch.php"); // Required for freeswitch driver to be loaded
global $sessn;
class fs_class_api { class fs_class_api {
Private $uuid;
function fs_class_api() { function fs_class_api() {
if($sessn = $this->fs_getsessn($uuid)){} $this->uuid = $uuid;
else{
echo "Couldnt get sessn!\n";
}
} }
...@@ -62,99 +61,88 @@ class fs_class_api { ...@@ -62,99 +61,88 @@ class fs_class_api {
} }
function fs_getsessn($uuid){
return fs_core_sessn_locate($uuid);
}
function fs_answer(){ function fs_answer(){
fs_channel_answer($sessn); fs_channel_answer($this->uuid);
} }
function fs_early_media($sessn){ function fs_early_media(){
fs_channel_pre_answer($sessn); fs_channel_pre_answer($this->uuid);
} }
function fs_hangup($cause){ function fs_hangup($cause){
fs_channel_hangup($sessn, $cause); fs_channel_hangup($this->uuid, $cause);
} }
function fs_set_variable($var, $val){ function fs_set_variable($var, $val){
fs_channel_set_variable($sessn, $var, $val); fs_channel_set_variable($this->uuid, $var, $val);
} }
function fs_get_variable($var){ function fs_get_variable($var){
return fs_channel_get_var($sessn, $var); return fs_channel_get_var($this->uuid, $var);
} }
function fs_set_channel_state($state){ function fs_set_channel_state($state){
fs_channel_set_state($sessn, $state); fs_channel_set_state($this->uuid, $state);
} }
function fs_play_file($file){ function fs_play_file($file){
return fs_ivr_play_file($sessn, $file, NULL, NULL, NULL, 0); return fs_ivr_play_file($this->uuid, $file, NULL, NULL, NULL, 0);
} }
function record_file($file){ function record_file($file){
return fs_switch_ivr_record_file($sessn, NULL, $file, NULL, NULL, 0); return fs_switch_ivr_record_file($this->uuid, NULL, $file, NULL, NULL, 0);
} }
function fs_wait($ms){ function fs_wait($ms){
return fs_switch_ivr_sleep($sessn, $ms); return fs_switch_ivr_sleep($this->uuid, $ms);
} }
function fs_get_dtmf_callback($len){ function fs_get_dtmf_callback($len){
return fs_switch_ivr_collect_digits_callback($sessn, NULL, NULL, $len); return fs_switch_ivr_collect_digits_callback($this->uuid, NULL, NULL, $len);
} }
function fs_get_digit_count ($maxdigits, $terminator, $timeout){ function fs_get_digit_count ($maxdigits, $terminator, $timeout){
return fs_switch_ivr_collect_digits_count($sessn, NULL, NULL, $maxdigits, NULL, $terminator, $timeout); return fs_switch_ivr_collect_digits_count($this->uuid, NULL, NULL, $maxdigits, NULL, $terminator, $timeout);
}
function fs_x_way($peer_sessn, $dtmf, $sessn_data, $peer_data){
return fs_switch_ivr_multi_threaded_bridge ($sessn, $peer_sessn, $dtmf, $sessn_data, $peer_data);
} }
function fs_dial($data, $timelimit){ function fs_dial($data, $timelimit){
return fs_switch_ivr_originate(sessn, NULL, $data, $timelimit, NULL, NULL, NULL, NULL); return fs_switch_ivr_originate($this->uuid, NULL, $data, $timelimit, NULL, NULL, NULL, NULL);
} }
function fs_transfer($exten, $dialplan, $context){ function fs_transfer($exten, $dialplan, $context){
return fs_switch_ivr_sessn_transfer($sessn, $exten, $dialplan, $context); return fs_switch_ivr_sessn_transfer($this->uuid, $exten, $dialplan, $context);
} }
function fs_speak($ttsName, $voice, $text, $dtmf=NULL){ function fs_speak($ttsName, $voice, $text, $dtmf=NULL){
return fs_switch_ivr_speak_text($sessn, $ttsName, NULL, NULL, $dtmf, $text, NULL, 0); return fs_switch_ivr_speak_text($this->uuid, $ttsName, NULL, NULL, $dtmf, $text, NULL, 0);
} }
......
...@@ -112,38 +112,57 @@ switch_core_session_t *fs_core_session_locate(char *uuid) ...@@ -112,38 +112,57 @@ switch_core_session_t *fs_core_session_locate(char *uuid)
return session; return session;
} }
void fs_channel_answer(switch_core_session_t *session) void fs_channel_answer(char *uuid)
{ {
switch_channel_t *channel = switch_core_session_get_channel(session); switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_channel_t *channel;
channel = switch_core_session_get_channel(session);
switch_channel_answer(channel); switch_channel_answer(channel);
} }
void fs_channel_pre_answer(switch_core_session_t *session) void fs_channel_pre_answer(char *uuid)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_channel_pre_answer(channel); switch_channel_pre_answer(channel);
} }
void fs_channel_hangup(switch_core_session_t *session, char *cause) void fs_channel_hangup(char *uuid, char *cause)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_channel_hangup(channel, switch_channel_str2cause(cause)); switch_channel_hangup(channel, switch_channel_str2cause(cause));
} }
void fs_channel_set_variable(switch_core_session_t *session, char *var, char *val) void fs_channel_set_variable(char *uuid, char *var, char *val)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_channel_set_variable(channel, var, val); switch_channel_set_variable(channel, var, val);
} }
void fs_channel_get_variable(switch_core_session_t *session, char *var) void fs_channel_get_variable(char *uuid, char *var)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_channel_get_variable(channel, var); switch_channel_get_variable(channel, var);
} }
void fs_channel_set_state(switch_core_session_t *session, char *state) void fs_channel_set_state(char *uuid, char *state)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_channel_t *channel = switch_core_session_get_channel(session); switch_channel_t *channel = switch_core_session_get_channel(session);
switch_channel_state_t fs_state = switch_channel_get_state(channel); switch_channel_state_t fs_state = switch_channel_get_state(channel);
...@@ -157,13 +176,16 @@ void fs_channel_set_state(switch_core_session_t *session, char *state) ...@@ -157,13 +176,16 @@ void fs_channel_set_state(switch_core_session_t *session, char *state)
IVR Routines! You can do IVR in PHP NOW! IVR Routines! You can do IVR in PHP NOW!
*/ */
int fs_ivr_play_file(switch_core_session_t *session, int fs_ivr_play_file(char *uuid,
char *file, char *file,
char *timer_name, char *timer_name,
switch_input_callback_function_t dtmf_callback, switch_input_callback_function_t dtmf_callback,
void *buf, void *buf,
unsigned int buflen) unsigned int buflen)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
if (switch_strlen_zero(timer_name)) { if (switch_strlen_zero(timer_name)) {
timer_name = NULL; timer_name = NULL;
...@@ -173,31 +195,40 @@ int fs_ivr_play_file(switch_core_session_t *session, ...@@ -173,31 +195,40 @@ int fs_ivr_play_file(switch_core_session_t *session,
return status == SWITCH_STATUS_SUCCESS ? 1 : 0; return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
} }
int fs_switch_ivr_record_file(switch_core_session_t *session, int fs_switch_ivr_record_file(char *uuid,
switch_file_handle_t *fh, switch_file_handle_t *fh,
char *file, char *file,
switch_input_callback_function_t dtmf_callback, switch_input_callback_function_t dtmf_callback,
void *buf, void *buf,
unsigned int buflen) unsigned int buflen)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
status = switch_ivr_record_file(session, fh, file, dtmf_callback, buf, buflen); status = switch_ivr_record_file(session, fh, file, dtmf_callback, buf, buflen);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0; return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
} }
int fs_switch_ivr_sleep(switch_core_session_t *session, int fs_switch_ivr_sleep(char *uuid,
uint32_t ms) uint32_t ms)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
status = switch_ivr_sleep(session, ms); status = switch_ivr_sleep(session, ms);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0; return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
} }
int fs_ivr_play_file2(switch_core_session_t *session, int fs_ivr_play_file2(char *uuid,
char *file) char *file)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
status = switch_ivr_play_file(session, NULL, file, NULL, NULL, NULL, 0); status = switch_ivr_play_file(session, NULL, file, NULL, NULL, NULL, 0);
...@@ -205,18 +236,21 @@ int fs_ivr_play_file2(switch_core_session_t *session, ...@@ -205,18 +236,21 @@ int fs_ivr_play_file2(switch_core_session_t *session,
} }
int fs_switch_ivr_collect_digits_callback (switch_core_session_t *session, int fs_switch_ivr_collect_digits_callback (char *uuid,
switch_input_callback_function_t dtmf_callback, switch_input_callback_function_t dtmf_callback,
void *buf, void *buf,
unsigned int buflen) unsigned int buflen)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
status = switch_ivr_collect_digits_callback(session, dtmf_callback, buf, buflen); status = switch_ivr_collect_digits_callback(session, dtmf_callback, buf, buflen);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0; return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
} }
int fs_switch_ivr_collect_digits_count (switch_core_session_t *session, int fs_switch_ivr_collect_digits_count(char *uuid,
char *buf, char *buf,
unsigned int buflen, unsigned int buflen,
unsigned int maxdigits, unsigned int maxdigits,
...@@ -224,6 +258,9 @@ int fs_switch_ivr_collect_digits_count (switch_core_session_t *session, ...@@ -224,6 +258,9 @@ int fs_switch_ivr_collect_digits_count (switch_core_session_t *session,
char *terminator, char *terminator,
unsigned int timeout) unsigned int timeout)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
status = switch_ivr_collect_digits_count(session, buf, buflen, maxdigits, terminators, terminator, timeout); status = switch_ivr_collect_digits_count(session, buf, buflen, maxdigits, terminators, terminator, timeout);
...@@ -243,7 +280,7 @@ int fs_switch_ivr_collect_digits_count (switch_core_session_t *session, ...@@ -243,7 +280,7 @@ int fs_switch_ivr_collect_digits_count (switch_core_session_t *session,
} }
*/ */
int fs_switch_ivr_originate (switch_core_session_t *session, int fs_switch_ivr_originate(char *uuid,
switch_core_session_t **bleg, switch_core_session_t **bleg,
char * bridgeto, char * bridgeto,
uint32_t timelimit_sec) uint32_t timelimit_sec)
...@@ -252,6 +289,8 @@ int fs_switch_ivr_originate (switch_core_session_t *session, ...@@ -252,6 +289,8 @@ int fs_switch_ivr_originate (switch_core_session_t *session,
char * cid_num_override, char * cid_num_override,
switch_caller_profile_t *caller_profile_override) */ switch_caller_profile_t *caller_profile_override) */
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_channel_t *caller_channel; switch_channel_t *caller_channel;
switch_core_session_t *peer_session; switch_core_session_t *peer_session;
...@@ -276,18 +315,21 @@ int fs_switch_ivr_originate (switch_core_session_t *session, ...@@ -276,18 +315,21 @@ int fs_switch_ivr_originate (switch_core_session_t *session,
} }
int fs_switch_ivr_session_transfer(switch_core_session_t *session, int fs_switch_ivr_session_transfer(char *uuid,
char *extension, char *extension,
char *dialplan, char *dialplan,
char *context) char *context)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
status = switch_ivr_session_transfer(session,extension,dialplan,context); status = switch_ivr_session_transfer(session,extension,dialplan,context);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0; return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
} }
int fs_switch_ivr_speak_text (switch_core_session_t *session, int fs_switch_ivr_speak_text (char *uuid,
char *tts_name, char *tts_name,
char *voice_name, char *voice_name,
char *timer_name, char *timer_name,
...@@ -297,6 +339,9 @@ int fs_switch_ivr_speak_text (switch_core_session_t *session, ...@@ -297,6 +339,9 @@ int fs_switch_ivr_speak_text (switch_core_session_t *session,
void *buf, void *buf,
unsigned int buflen) unsigned int buflen)
{ {
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status; switch_status_t status;
status = switch_ivr_speak_text(session,tts_name,voice_name,timer_name,rate,dtmf_callback,text,buf,buflen); status = switch_ivr_speak_text(session,tts_name,voice_name,timer_name,rate,dtmf_callback,text,buf,buflen);
...@@ -310,17 +355,28 @@ int fs_switch_ivr_speak_text (switch_core_session_t *session, ...@@ -310,17 +355,28 @@ int fs_switch_ivr_speak_text (switch_core_session_t *session,
*/ */
char* fs_switch_channel_get_variable(switch_channel_t *channel, char *varname) char* fs_switch_channel_get_variable(char *uuid, char *varname)
{ {
switch_channel_t *channel;
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
channel = switch_core_session_get_channel(session);
return switch_channel_get_variable(channel, varname); return switch_channel_get_variable(channel, varname);
} }
int fs_switch_channel_set_variable(switch_channel_t *channel, char *varname, char *value) int fs_switch_channel_set_variable(char *uuid, char *varname, char *value)
{ {
switch_status_t status; switch_channel_t *channel;
switch_core_session_t *session;
session = fs_core_session_locate(uuid);
switch_status_t status;
channel = switch_core_session_get_channel(session);
status = switch_channel_set_variable(channel, varname, value); status = switch_channel_set_variable(channel, varname, value);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0; return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
} }
//char*
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论