Asterisk Manager Interface PHP extension

Ha pasado algo de tiempo desde mi ultimo post, pero he andado algo ocupado. Por estos dias ya empece a escribir ( al fin ) mi extensión en C para el lenguaje PHP, esta extensión le dará soporte a PHP para conectarse directamente y sin escalas al API del manager de Asterisk. En linux ya compila y funciona al 80%. Necesito terminar ese 20% restante y darle soporte para windows.

El API general para PHP es:

resource ami_connect(string host, string user, string passwd)
bool ami_send_action(resource ami, string action, [array data])
array ami_read(resource ami, int timeout)
bool ami_attach(resource ami, string event, callback user_callback)
bool ami_detach(resource ami, string event)
int ami_queue_action(resource ami, string action, [array data], [callback user_callback])
void ami_loop(resource ami)
void ami_disconnect(resource ami)

CONSTANTS

AMI_KILL_LOOP
AMI_EXIT_LOOP

Y este es un script que he estado usando para probar:

http://moy.ivsol.net/scripts/ami.php

Es interesante empezar a conocer mas a fondo como funciona el zend engine. Ya con algo mas de experiencia explicare a detalle como hacer una extensión, de momento solo quiero hacer mención que dentro del zend engine, todas las variables son representadas como una estructura de C llamada zval. Asi que por ejemplo, para recibir una variable como argumento usualmente se hace algo como esto:

zval *my_argument; // declaramos el apuntador a la variable PHP

int my_length; /* aqui el zend engine pondra la longitud del argumento, en este caso es una cadena */

zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “s”, &my_argument, &my_length);

de esta forma tenemos el argumento enviado por el usuario y la longitud de la cadena, el argumento “s” es una cadena de formateo, es necesario para especificar de que tipo debe ser el zval, en este caso una cadena.

ahila…

This entry was posted in asterisk, dev-php. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*