2 +----------------------------------------------------------------------+
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1997-2011 The PHP Group |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
16 +----------------------------------------------------------------------+
19 /* $Id: header 310447 2011-04-23 21:14:10Z bjori $ */
27 #include "ext/standard/php_string.h"
28 #include "ext/standard/info.h"
30 #include "zend_interfaces.h"
32 #include "php_ircclient.h"
35 #include <libircclient/libircclient.h>
37 PHP_FUNCTION(parse_origin
)
42 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &origin_str
, &origin_len
)) {
43 zval
*znick
, *zuser
, *zhost
;
47 MAKE_STD_ZVAL(znick
); ZVAL_NULL(znick
);
48 MAKE_STD_ZVAL(zuser
); ZVAL_NULL(zuser
);
49 MAKE_STD_ZVAL(zhost
); ZVAL_NULL(zhost
);
51 for (ptr
= origin_str
; *ptr
; ptr
+= siz
+ 1) {
52 if ((siz
= strcspn(ptr
, "!@"))) {
55 ZVAL_STRINGL(znick
, ptr
, siz
, 1);
58 ZVAL_STRINGL(zuser
, ptr
, siz
, 1);
61 ZVAL_STRINGL(zhost
, ptr
, siz
, 1);
70 array_init(return_value
);
71 add_assoc_zval_ex(return_value
, ZEND_STRS("nick"), znick
);
72 add_assoc_zval_ex(return_value
, ZEND_STRS("user"), zuser
);
73 add_assoc_zval_ex(return_value
, ZEND_STRS("host"), zhost
);
78 const zend_function_entry php_ircclient_function_entry
[] = {
79 ZEND_NS_FENTRY("irc\\client", parse_origin
, ZEND_FN(parse_origin
), NULL
, 0)
83 zend_module_entry ircclient_module_entry
= {
84 STANDARD_MODULE_HEADER
,
86 php_ircclient_function_entry
,
88 PHP_MSHUTDOWN(ircclient
),
90 PHP_RSHUTDOWN(ircclient
),
93 STANDARD_MODULE_PROPERTIES
97 #ifdef COMPILE_DL_IRCCLIENT
98 ZEND_GET_MODULE(ircclient
)
101 static void php_ircclient_event_callback(irc_session_t
*session
, const char *event
, const char *origin
, const char **params
, unsigned int count
);
102 static void php_ircclient_event_code_callback(irc_session_t
*session
, unsigned int event
, const char *origin
, const char **params
, unsigned int count
);
103 static void php_ircclient_event_dcc_chat_callback(irc_session_t
*session
, const char *nick
, const char *addr
, irc_dcc_t dccid
);
104 static void php_ircclient_event_dcc_send_callback(irc_session_t
*session
, const char *nick
, const char *addr
, const char *filename
, unsigned long size
, irc_dcc_t dccid
);
106 static irc_callbacks_t php_ircclient_callbacks
= {
107 .event_connect
= php_ircclient_event_callback
,
108 .event_nick
= php_ircclient_event_callback
,
109 .event_quit
= php_ircclient_event_callback
,
110 .event_join
= php_ircclient_event_callback
,
111 .event_part
= php_ircclient_event_callback
,
112 .event_mode
= php_ircclient_event_callback
,
113 .event_umode
= php_ircclient_event_callback
,
114 .event_topic
= php_ircclient_event_callback
,
115 .event_kick
= php_ircclient_event_callback
,
116 .event_channel
= php_ircclient_event_callback
,
117 .event_privmsg
= php_ircclient_event_callback
,
118 .event_notice
= php_ircclient_event_callback
,
119 /* .event_channel_notice = php_ircclient_event_callback, */
120 .event_invite
= php_ircclient_event_callback
,
121 .event_ctcp_req
= php_ircclient_event_callback
,
122 .event_ctcp_rep
= php_ircclient_event_callback
,
123 .event_ctcp_action
= php_ircclient_event_callback
,
124 .event_unknown
= php_ircclient_event_callback
,
125 .event_numeric
= php_ircclient_event_code_callback
,
126 .event_dcc_chat_req
= php_ircclient_event_dcc_chat_callback
,
127 .event_dcc_send_req
= php_ircclient_event_dcc_send_callback
130 typedef struct php_ircclient_session_object
{
132 zend_object_value ov
;
137 } php_ircclient_session_object_t
;
139 zend_class_entry
*php_ircclient_session_class_entry
;
141 void php_ircclient_session_object_free(void *object TSRMLS_DC
)
143 php_ircclient_session_object_t
*o
= (php_ircclient_session_object_t
*) object
;
146 irc_destroy_session(o
->sess
);
149 zend_object_std_dtor((zend_object
*) o TSRMLS_CC
);
153 zend_object_value
php_ircclient_session_object_create(zend_class_entry
*ce TSRMLS_DC
)
155 php_ircclient_session_object_t
*obj
;
157 obj
= ecalloc(1, sizeof(*obj
));
158 zend_object_std_init((zend_object
*) obj
, ce TSRMLS_CC
);
159 object_properties_init((zend_object
*) obj
, ce
);
161 obj
->sess
= irc_create_session(&php_ircclient_callbacks
);
162 irc_set_ctx(obj
->sess
, obj
);
163 TSRMLS_SET_CTX(obj
->ts
);
165 obj
->ov
.handle
= zend_objects_store_put(obj
, NULL
, php_ircclient_session_object_free
, NULL TSRMLS_CC
);
166 obj
->ov
.handlers
= zend_get_std_object_handlers();
171 static void php_ircclient_event_callback(irc_session_t
*session
, const char *event
, const char *origin
, const char **params
, unsigned int count
)
176 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
177 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
179 fn_str
= emalloc(strlen(event
) + 2 + 1);
185 fn_str
[fn_len
++] = tolower(*event
);
190 Z_TYPE_P(zo
) = IS_OBJECT
;
191 zo
->value
.obj
= obj
->ov
;
192 zend_objects_store_add_ref(zo TSRMLS_CC
);
196 ZVAL_STRING(zr
, estrdup(origin
), 0);
203 for (i
= 0; i
< count
; ++i
) {
204 add_next_index_string(za
, estrdup(params
[i
]), 0);
207 zend_call_method(&zo
, NULL
, NULL
, fn_str
, fn_len
- 1, NULL
, 2, zr
, za TSRMLS_CC
);
216 static void php_ircclient_event_code_callback(irc_session_t
*session
, unsigned int event
, const char *origin
, const char **params
, unsigned int count
)
219 zval
*zo
, *zr
, *zp
, *za
;
220 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
221 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
224 Z_TYPE_P(zo
) = IS_OBJECT
;
225 zo
->value
.obj
= obj
->ov
;
226 zend_objects_store_add_ref(zo TSRMLS_CC
);
230 ZVAL_STRING(zr
, estrdup(origin
), 0);
237 add_assoc_long_ex(za
, ZEND_STRS("event"), event
);
241 for (i
= 0; i
< count
; ++i
) {
242 add_next_index_string(zp
, estrdup(params
[i
]), 0);
244 add_assoc_zval_ex(za
, ZEND_STRS("params"), zp
);
246 zend_call_method(&zo
, NULL
, NULL
, ZEND_STRL("onnumeric"), NULL
, 2, zr
, za TSRMLS_CC
);
255 static void php_ircclient_event_dcc_chat_callback(irc_session_t
*session
, const char *nick
, const char *addr
, irc_dcc_t dccid
)
258 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
259 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
262 Z_TYPE_P(zo
) = IS_OBJECT
;
263 zo
->value
.obj
= obj
->ov
;
264 zend_objects_store_add_ref(zo TSRMLS_CC
);
268 add_assoc_string_ex(zp
, ZEND_STRS("nick"), estrdup(nick
), 0);
269 add_assoc_string_ex(zp
, ZEND_STRS("remote_addr"), estrdup(addr
), 0);
270 add_assoc_long_ex(zp
, ZEND_STRS("dccid"), dccid
);
272 zend_call_method(&zo
, NULL
, NULL
, ZEND_STRS("ondccchatreq"), NULL
, 1, zp
, NULL TSRMLS_CC
);
278 static void php_ircclient_event_dcc_send_callback(irc_session_t
*session
, const char *nick
, const char *addr
, const char *filename
, unsigned long size
, irc_dcc_t dccid
)
281 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
282 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
285 Z_TYPE_P(zo
) = IS_OBJECT
;
286 zo
->value
.obj
= obj
->ov
;
287 zend_objects_store_add_ref(zo TSRMLS_CC
);
291 add_assoc_string_ex(zp
, ZEND_STRS("nick"), estrdup(nick
), 0);
292 add_assoc_string_ex(zp
, ZEND_STRS("remote_addr"), estrdup(addr
), 0);
293 add_assoc_string_ex(zp
, ZEND_STRS("filename"), estrdup(filename
), 0);
294 add_assoc_long_ex(zp
, ZEND_STRS("filesize"), size
);
295 add_assoc_long_ex(zp
, ZEND_STRS("dccid"), dccid
);
297 zend_call_method(&zo
, NULL
, NULL
, ZEND_STRL("ondccsendreq"), NULL
, 1, zp
, NULL TSRMLS_CC
);
303 PHP_METHOD(Session
, __construct
)
305 char *nick_str
= NULL
, *user_str
= NULL
, *real_str
= NULL
;
306 int nick_len
= 0, user_len
= 0, real_len
= 0;
308 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|s!s!s!", &nick_str
, &nick_len
, &user_str
, &user_len
, &real_str
, &real_len
)) {
309 if (nick_str
&& nick_len
) {
310 zend_update_property_stringl(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("nick"), nick_str
, nick_len TSRMLS_CC
);
312 if (nick_str
&& nick_len
) {
313 zend_update_property_stringl(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("nick"), nick_str
, nick_len TSRMLS_CC
);
315 if (real_str
&& real_len
) {
316 zend_update_property_stringl(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("real"), real_str
, real_len TSRMLS_CC
);
321 PHP_METHOD(Session
, doConnect
)
323 char *server_str
, *passwd_str
= NULL
;
324 int server_len
, passwd_len
= 0;
328 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "bs|ls!", &ip6
, &server_str
, &server_len
, &port
, &passwd_str
, &passwd_len
)) {
329 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
330 char *nick
= NULL
, *user
= NULL
, *real
= NULL
;
331 zval
*znick
, *zuser
, *zreal
, *tmp
;
333 znick
= zend_read_property(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("nick"), 0 TSRMLS_CC
);
334 SEPARATE_ARG_IF_REF(znick
);
335 convert_to_string_ex(&znick
);
336 if (Z_STRLEN_P(znick
)) {
337 nick
= Z_STRVAL_P(znick
);
339 zuser
= zend_read_property(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("user"), 0 TSRMLS_CC
);
340 SEPARATE_ARG_IF_REF(zuser
);
341 convert_to_string_ex(&zuser
);
342 if (Z_STRLEN_P(zuser
)) {
343 user
= Z_STRVAL_P(zuser
);
345 zreal
= zend_read_property(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("real"), 0 TSRMLS_CC
);
346 SEPARATE_ARG_IF_REF(zreal
);
347 convert_to_string_ex(&zreal
);
348 if (Z_STRLEN_P(zreal
)) {
349 real
= Z_STRVAL_P(zreal
);
353 if (0 != irc_connect6(obj
->sess
, server_str
, port
, passwd_str
, nick
, user
, real
)) {
354 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
357 } else if (0 != irc_connect(obj
->sess
, server_str
, port
, passwd_str
, nick
, user
, real
)) {
358 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
364 zval_ptr_dtor(&znick
);
365 zval_ptr_dtor(&zuser
);
366 zval_ptr_dtor(&zreal
);
370 PHP_METHOD(Session
, isConnected
)
372 if (SUCCESS
== zend_parse_parameters_none()) {
373 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
375 RETURN_BOOL(irc_is_connected(obj
->sess
));
379 PHP_METHOD(Session
, disconnect
)
381 if (SUCCESS
== zend_parse_parameters_none()) {
382 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
384 irc_disconnect(obj
->sess
);
388 PHP_METHOD(Session
, run
)
390 if (SUCCESS
== zend_parse_parameters_none()) {
391 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
393 if (0 != irc_run(obj
->sess
)) {
394 int err
= irc_errno(obj
->sess
);
397 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(err
));
403 PHP_METHOD(Session
, setOption
)
408 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "l|b", &opt
, &onoff
)) {
409 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
412 irc_option_set(obj
->sess
, opt
);
414 irc_option_reset(obj
->sess
, opt
);
419 PHP_METHOD(Session
, doJoin
)
421 char *chan_str
, *key_str
= NULL
;
422 int chan_len
, key_len
= 0;
424 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s|s!", &chan_str
, &chan_len
, &key_str
, &key_len
)) {
425 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
427 if (0 != irc_cmd_join(obj
->sess
, chan_str
, key_str
)) {
428 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
436 PHP_METHOD(Session
, doPart
)
441 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &chan_str
, &chan_len
)) {
442 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
444 if (0 != irc_cmd_part(obj
->sess
, chan_str
)) {
445 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
453 PHP_METHOD(Session
, doInvite
)
455 char *chan_str
, *nick_str
;
456 int chan_len
, nick_len
;
458 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &nick_str
, &nick_len
, &chan_str
, &chan_len
)) {
459 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
461 if (0 != irc_cmd_invite(obj
->sess
, nick_str
, chan_str
)) {
462 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
470 PHP_METHOD(Session
, doNames
)
475 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &chan_str
, &chan_len
)) {
476 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
478 if (0 != irc_cmd_names(obj
->sess
, chan_str
)) {
479 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
487 PHP_METHOD(Session
, doList
)
492 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &chan_str
, &chan_len
)) {
493 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
495 if (0 != irc_cmd_list(obj
->sess
, chan_str
)) {
496 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
504 PHP_METHOD(Session
, doTopic
)
506 char *chan_str
, *topic_str
= NULL
;
507 int chan_len
, topic_len
;
509 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s|s!", &chan_str
, &chan_len
, &topic_str
, &topic_len
)) {
510 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
512 if (0 != irc_cmd_topic(obj
->sess
, chan_str
, topic_str
)) {
513 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
521 PHP_METHOD(Session
, doChannelMode
)
523 char *chan_str
, *mode_str
= NULL
;
524 int chan_len
, mode_len
;
526 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s|s!", &chan_str
, &chan_len
, &mode_str
, &mode_len
)) {
527 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
529 if (0 != irc_cmd_topic(obj
->sess
, chan_str
, mode_str
)) {
530 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
538 PHP_METHOD(Session
, doKick
)
540 char *chan_str
, *nick_str
, *reason_str
= NULL
;
541 int chan_len
, nick_len
, reason_len
;
543 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss|s!", &nick_str
, &nick_len
, &chan_str
, &chan_len
, &reason_str
, &reason_len
)) {
544 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
546 if (0 != irc_cmd_kick(obj
->sess
, nick_str
, chan_str
, reason_str
)) {
547 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
555 PHP_METHOD(Session
, doMsg
)
557 char *dest_str
, *msg_str
;
558 int dest_len
, msg_len
;
560 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &dest_str
, &dest_len
, &msg_str
, &msg_len
)) {
561 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
563 if (0 != irc_cmd_msg(obj
->sess
, dest_str
, msg_str
)) {
564 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
572 PHP_METHOD(Session
, doMe
)
574 char *dest_str
, *msg_str
;
575 int dest_len
, msg_len
;
577 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &dest_str
, &dest_len
, &msg_str
, &msg_len
)) {
578 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
580 if (0 != irc_cmd_me(obj
->sess
, dest_str
, msg_str
)) {
581 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
589 PHP_METHOD(Session
, doNotice
)
591 char *dest_str
, *msg_str
;
592 int dest_len
, msg_len
;
594 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &dest_str
, &dest_len
, &msg_str
, &msg_len
)) {
595 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
597 if (0 != irc_cmd_notice(obj
->sess
, dest_str
, msg_str
)) {
598 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
606 PHP_METHOD(Session
, doQuit
)
608 char *reason_str
= NULL
;
611 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|s!", &reason_str
, &reason_len
)) {
612 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
614 if (0 != irc_cmd_quit(obj
->sess
, reason_str
)) {
615 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
623 PHP_METHOD(Session
, doUserMode
)
625 char *mode_str
= NULL
;
628 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|s!", &mode_str
, &mode_len
)) {
629 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
631 if (0 != irc_cmd_user_mode(obj
->sess
, mode_str
)) {
632 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
640 PHP_METHOD(Session
, doNick
)
645 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &nick_str
, &nick_len
)) {
646 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
648 if (0 != irc_cmd_nick(obj
->sess
, nick_str
)) {
649 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
657 PHP_METHOD(Session
, doWhois
)
659 char *nick_str
= NULL
;
662 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|s!", &nick_str
, &nick_len
)) {
663 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
665 if (0 != irc_cmd_whois(obj
->sess
, nick_str
)) {
666 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
674 PHP_METHOD(Session
, doCtcpReply
)
676 char *nick_str
, *reply_str
;
677 int nick_len
, reply_len
;
679 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &nick_str
, &nick_len
, &reply_str
, &reply_len
)) {
680 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
682 if (0 != irc_cmd_ctcp_reply(obj
->sess
, nick_str
, reply_str
)) {
683 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
691 PHP_METHOD(Session
, doCtcpRequest
)
693 char *nick_str
, *request_str
;
694 int nick_len
, request_len
;
696 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &nick_str
, &nick_len
, &request_str
, &request_len
)) {
697 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
699 if (0 != irc_cmd_ctcp_request(obj
->sess
, nick_str
, request_str
)) {
700 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
710 PHP_METHOD(Session
, onConnect
) {}
711 PHP_METHOD(Session
, onNick
) {}
712 PHP_METHOD(Session
, onQuit
) {}
713 PHP_METHOD(Session
, onJoin
) {}
714 PHP_METHOD(Session
, onPart
) {}
715 PHP_METHOD(Session
, onMode
) {}
716 PHP_METHOD(Session
, onUmode
) {}
717 PHP_METHOD(Session
, onTopic
) {}
718 PHP_METHOD(Session
, onKick
) {}
719 PHP_METHOD(Session
, onChannel
) {}
720 PHP_METHOD(Session
, onPrivmsg
) {}
721 PHP_METHOD(Session
, onNOTICE
) {}
722 PHP_METHOD(Session
, onChannelNotice
) {}
723 PHP_METHOD(Session
, onInvite
) {}
724 PHP_METHOD(Session
, onCtcpReq
) {}
725 PHP_METHOD(Session
, onCtcpRep
) {}
726 PHP_METHOD(Session
, onCtcpAction
) {}
727 PHP_METHOD(Session
, onUnknown
) {}
728 PHP_METHOD(Session
, onNumeric
) {}
729 PHP_METHOD(Session
, onDccChatReq
) {}
730 PHP_METHOD(Session
, onDccSendReq
) {}
732 #define ME(m) PHP_ME(Session, m, NULL, ZEND_ACC_PUBLIC)
734 zend_function_entry php_ircclient_session_method_entry
[] = {
787 PHP_MINIT_FUNCTION(ircclient
)
791 memset(&ce
, 0, sizeof(zend_class_entry
));
792 INIT_NS_CLASS_ENTRY(ce
, "irc\\client", "Session", php_ircclient_session_method_entry
);
793 ce
.create_object
= php_ircclient_session_object_create
;
794 php_ircclient_session_class_entry
= zend_register_internal_class_ex(&ce
, NULL
, NULL TSRMLS_CC
);
796 zend_declare_property_null(php_ircclient_session_class_entry
, ZEND_STRL("nick"), ZEND_ACC_PUBLIC TSRMLS_CC
);
797 zend_declare_property_null(php_ircclient_session_class_entry
, ZEND_STRL("user"), ZEND_ACC_PUBLIC TSRMLS_CC
);
798 zend_declare_property_null(php_ircclient_session_class_entry
, ZEND_STRL("real"), ZEND_ACC_PUBLIC TSRMLS_CC
);
804 PHP_MSHUTDOWN_FUNCTION(ircclient
)
811 PHP_RINIT_FUNCTION(ircclient
)
818 PHP_RSHUTDOWN_FUNCTION(ircclient
)
824 PHP_MINFO_FUNCTION(ircclient
)
826 php_info_print_table_start();
827 php_info_print_table_header(2, "ircclient support", "enabled");
828 php_info_print_table_end();