cvs: embed /php-irssi channel.c ext-irssi.c php-irssi-obj.c php-irssi.h server.c

[email protected] ("Wez Furlong") Tue, 01 Apr 2003 12:28:05 -0000
Newsgroups php.embed.cvs
Message-ID <cvswez1049200085@cvsserver>
--wez1049200085
Content-Type: text/plain

wez		Tue Apr  1 07:28:05 2003 EDT

  Modified files:              
    /embed/php-irssi	channel.c ext-irssi.c php-irssi-obj.c php-irssi.h 
                    	server.c 
  Log:
  Add $channel->command().
  
  Usage: $channel->command("op _Wez_")
         Will send that command to the channel and op _Wez_.  This is routed
  	   via the irssi command processor, so it will/should correctly split
  	   the command into separate ops if the number of nicks is too much
  	   for one attempt.
  
  Add more settings functions.
  
  Add $server->mask_match(), $server->masks_match() and $server->match_address()
  which can be used to compare a nick/hostmask and see if it matches.
  
  Resolve a slight problem when exporting objects (I hope!).
  
  
  
--wez1049200085
Content-Type: text/plain
Content-Disposition: attachment; filename="wez-20030401072805.txt"

Index: embed/php-irssi/channel.c
diff -u embed/php-irssi/channel.c:1.7 embed/php-irssi/channel.c:1.8
--- embed/php-irssi/channel.c:1.7	Tue Mar 11 09:15:24 2003
+++ embed/php-irssi/channel.c	Tue Apr  1 07:28:04 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: channel.c,v 1.7 2003/03/11 14:15:24 tal Exp $
+  $Id: channel.c,v 1.8 2003/04/01 12:28:04 wez Exp $
 */
 #include "php-irssi.h"
 #define PHP_IRSSI_PROTOS_ONLY
@@ -135,10 +135,41 @@
 	signal_emit("message own_public", 4, channel->server, msg, channel->name, channel->name);
 }
 
+PHP_FUNCTION(channel_command)
+{
+	char *cmd, *sendcmd;
+	const char *cmdchars;
+	long cmdlen;
+	CH_FETCH();
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &cmd, &cmdlen)) {
+		return;
+	}
+
+	if (cmdlen == 0) {
+		return;
+	}
+	
+	sendcmd = cmd;
+	cmdchars = settings_get_str("cmdchars");
+	
+	if (strchr(cmdchars, *cmd) == NULL) {
+		/* prepend command char */
+		spprintf(&sendcmd, 0, "%c%s", *cmdchars, cmd);
+	}
+
+	signal_emit("send command", 3, sendcmd, channel->server, channel);
+
+	if (sendcmd != cmd) {
+		efree(sendcmd);
+	}
+}
+
 function_entry php_irssi_CHANNEL_funcs[] = {
 	PHP_NAMED_FE(nick_find, PHP_FN(channel_nick_find), NULL)
 	PHP_NAMED_FE(nick_find_mask, PHP_FN(channel_nick_find_mask), NULL)
 	PHP_NAMED_FE(send, PHP_FN(channel_send), NULL)
+	PHP_NAMED_FE(command, PHP_FN(channel_command), NULL)
 	{NULL, NULL, NULL}
 };
 
Index: embed/php-irssi/ext-irssi.c
diff -u embed/php-irssi/ext-irssi.c:1.22 embed/php-irssi/ext-irssi.c:1.23
--- embed/php-irssi/ext-irssi.c:1.22	Mon Mar 31 19:53:02 2003
+++ embed/php-irssi/ext-irssi.c	Tue Apr  1 07:28:04 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: ext-irssi.c,v 1.22 2003/04/01 00:53:02 wez Exp $
+  $Id: ext-irssi.c,v 1.23 2003/04/01 12:28:04 wez Exp $
 */
 #include "php-irssi.h"
 #include "php-signals-list.h" /* generated by php during make */
@@ -179,6 +179,11 @@
 			val = *zargs[i];
 			argc++;
 
+			if (args[i] == NULL) {
+				ZVAL_NULL(val);
+				continue;
+			}
+			
 			switch(rec->sigargs->argtypes[i]) {
 				case PIAT_STRING:
 					ZVAL_STRING(val, (char *)args[i], 1);
@@ -934,6 +939,98 @@
 	RETURN_LONG(settings_get_size(key));
 }
 
+/* proto void irssi_settings_set_str(string key, string value)
+   Set a string setting */
+PHP_FUNCTION(irssi_settings_set_str)
+{
+	char *key, *val;
+	long keylen, vallen;
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
+				&key, &keylen, &val, &vallen)) {
+		return;
+	}
+
+	settings_set_str(key, val);
+}
+
+/* proto void irssi_settings_set_int(string key, long value)
+   Set an int setting */
+PHP_FUNCTION(irssi_settings_set_int)
+{
+	char *key;
+	long keylen, val;
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl",
+				&key, &keylen, &val)) {
+		return;
+	}
+
+	settings_set_int(key, val);
+}
+
+/* proto void irssi_settings_set_bool(string key, bool value)
+   Set a bool setting */
+PHP_FUNCTION(irssi_settings_set_bool)
+{
+	char *key;
+	long keylen;
+	zend_bool val;
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl",
+				&key, &keylen, &val)) {
+		return;
+	}
+
+	settings_set_bool(key, val);
+}
+
+
+/* proto void irssi_settings_set_time(string key, string value)
+   Set a time setting */
+PHP_FUNCTION(irssi_settings_set_time)
+{
+	char *key, *val;
+	long keylen, vallen;
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
+				&key, &keylen, &val, &vallen)) {
+		return;
+	}
+
+	settings_set_time(key, val);
+}
+
+/* proto void irssi_settings_set_level(string key, string value)
+   Set a level setting */
+PHP_FUNCTION(irssi_settings_set_level)
+{
+	char *key, *val;
+	long keylen, vallen;
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
+				&key, &keylen, &val, &vallen)) {
+		return;
+	}
+
+	settings_set_level(key, val);
+}
+
+/* proto void irssi_settings_set_size(string key, string value)
+   Set a size setting */
+PHP_FUNCTION(irssi_settings_set_size)
+{
+	char *key, *val;
+	long keylen, vallen;
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
+				&key, &keylen, &val, &vallen)) {
+		return;
+	}
+
+	settings_set_size(key, val);
+}
+
 
 
 
@@ -1055,6 +1152,12 @@
 	PHP_FE(irssi_settings_get_time, NULL)
 	PHP_FE(irssi_settings_get_level, NULL)
 	PHP_FE(irssi_settings_get_size, NULL)
+	PHP_FE(irssi_settings_set_str, NULL)
+	PHP_FE(irssi_settings_set_int, NULL)
+	PHP_FE(irssi_settings_set_bool, NULL)
+	PHP_FE(irssi_settings_set_time, NULL)
+	PHP_FE(irssi_settings_set_level, NULL)
+	PHP_FE(irssi_settings_set_size, NULL)
 	{NULL, NULL, NULL}
 };
 
Index: embed/php-irssi/php-irssi-obj.c
diff -u embed/php-irssi/php-irssi-obj.c:1.8 embed/php-irssi/php-irssi-obj.c:1.9
--- embed/php-irssi/php-irssi-obj.c:1.8	Tue Mar 11 09:15:25 2003
+++ embed/php-irssi/php-irssi-obj.c	Tue Apr  1 07:28:04 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: php-irssi-obj.c,v 1.8 2003/03/11 14:15:25 tal Exp $
+  $Id: php-irssi-obj.c,v 1.9 2003/04/01 12:28:04 wez Exp $
 */
 #include "php-irssi.h"
 #include "php-irssi-obj-defs.h"
@@ -45,10 +45,10 @@
 			ZVAL_STRING(val, *(char **)arg, 1);
 			break;
 		case PIAT_SERVER:
-			php_irssi_export_SERVER(val, (SERVER_REC*)arg TSRMLS_CC);
+			php_irssi_export_SERVER(val, *(SERVER_REC**)arg TSRMLS_CC);
 			break;
 		case PIAT_CHANNEL:
-			php_irssi_export_CHANNEL(val, (CHANNEL_REC*)arg TSRMLS_CC);
+			php_irssi_export_CHANNEL(val, *(CHANNEL_REC**)arg TSRMLS_CC);
 			break;
 		case PIAT_INT:
 			ZVAL_LONG(val, *(int *)arg);
@@ -60,10 +60,10 @@
 			php_irssi_export_GList(val, (GSList*)arg, PIAT_STRING TSRMLS_CC);
 			break;
 		case PIAT_WI_ITEM:
-			php_irssi_export_WI_ITEM(val, (WI_ITEM_REC*)arg TSRMLS_CC);
+			php_irssi_export_WI_ITEM(val, *(WI_ITEM_REC**)arg TSRMLS_CC);
 			break;
 		case PIAT_WINDOW:
-			php_irssi_export_WINDOW(val, (WINDOW_REC*)arg TSRMLS_CC);
+			php_irssi_export_WINDOW(val, *(WINDOW_REC**)arg TSRMLS_CC);
 			break;
 		case PIAT_NICK:
 			/* We need some context for a NICK */
Index: embed/php-irssi/php-irssi.h
diff -u embed/php-irssi/php-irssi.h:1.9 embed/php-irssi/php-irssi.h:1.10
--- embed/php-irssi/php-irssi.h:1.9	Mon Mar 31 15:16:50 2003
+++ embed/php-irssi/php-irssi.h	Tue Apr  1 07:28:04 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: php-irssi.h,v 1.9 2003/03/31 20:16:50 wez Exp $
+  $Id: php-irssi.h,v 1.10 2003/04/01 12:28:04 wez Exp $
 */
 
 #define MODULE_NAME "php/core"
@@ -28,6 +28,7 @@
 #include "irc-servers.h"
 #include "channels.h"
 #include "nicklist.h"
+#include "masks.h"
 #include "settings.h"
 #include "servers.h"
 #include "commands.h"
Index: embed/php-irssi/server.c
diff -u embed/php-irssi/server.c:1.6 embed/php-irssi/server.c:1.7
--- embed/php-irssi/server.c:1.6	Tue Mar 11 09:15:25 2003
+++ embed/php-irssi/server.c	Tue Apr  1 07:28:04 2003
@@ -14,7 +14,7 @@
   +----------------------------------------------------------------------+
   | Author: Wez Furlong <[email protected]>                                    |
   +----------------------------------------------------------------------+
-  $Id: server.c,v 1.6 2003/03/11 14:15:25 tal Exp $
+  $Id: server.c,v 1.7 2003/04/01 12:28:04 wez Exp $
 */
 
 #include "php-irssi.h"
@@ -132,11 +132,54 @@
 	
 }
 
+PHP_FUNCTION(server_mask_match)
+{
+	char *mask, *nick, *user, *host;
+	long masklen, nicklen, userlen, hostlen;
+	SV_FETCH();
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssss", &mask, &masklen, &nick, &nicklen, &user, &userlen, &host, &hostlen)) {
+		return;
+	}
+
+	RETURN_BOOL(mask_match(server, mask, nick, user, host));
+}
+
+PHP_FUNCTION(server_mask_match_address)
+{
+	char *mask, *nick, *address;
+	long masklen, nicklen, addresslen;
+	SV_FETCH();
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &mask, &masklen, &nick, &nicklen, &address, &addresslen)) {
+		return;
+	}
+
+	RETURN_BOOL(mask_match_address(server, mask, nick, address));
+}
+
+PHP_FUNCTION(server_masks_match)
+{
+	char *masks, *nick, *address;
+	long maskslen, nicklen, addresslen;
+	SV_FETCH();
+
+	if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &masks, &maskslen, &nick, &nicklen, &address, &addresslen)) {
+		return;
+	}
+
+	RETURN_BOOL(masks_match(server, masks, nick, address));
+}
+
+
 function_entry php_irssi_SERVER_funcs[] = {
 	PHP_NAMED_FE(privmsg,	PHP_FN(server_privmsg), NULL)
 	PHP_NAMED_FE(send_cmd,	PHP_FN(server_send_cmd), NULL)
 	PHP_NAMED_FE(send_cmd_now,	PHP_FN(server_send_cmd_now), NULL)
 	PHP_NAMED_FE(channels_join,	PHP_FN(server_channels_join), NULL)
+	PHP_NAMED_FE(mask_match, PHP_FN(server_mask_match), NULL)
+	PHP_NAMED_FE(masks_match, PHP_FN(server_masks_match), NULL)
+	PHP_NAMED_FE(mask_match_address, PHP_FN(server_mask_match_address), NULL)
 	{NULL, NULL, NULL}
 };
 

--wez1049200085--