2 +--------------------------------------------------------------------+
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the conditions mentioned |
7 | in the accompanying LICENSE file are met. |
8 +--------------------------------------------------------------------+
9 | Copyright (c) 2011, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
18 #include <main/php_config.h>
19 #include <main/php_ini.h>
20 #include <main/php_network.h>
21 #include <ext/standard/php_string.h>
22 #include <ext/standard/info.h>
24 #include <Zend/zend.h>
25 #include <Zend/zend_constants.h>
26 #include <Zend/zend_interfaces.h>
28 #include "php_ircclient.h"
32 #include <libircclient/libircclient.h>
34 PHP_FUNCTION(parse_origin
)
39 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &origin_str
, &origin_len
)) {
40 zval
*znick
, *zuser
, *zhost
;
44 MAKE_STD_ZVAL(znick
); ZVAL_NULL(znick
);
45 MAKE_STD_ZVAL(zuser
); ZVAL_NULL(zuser
);
46 MAKE_STD_ZVAL(zhost
); ZVAL_NULL(zhost
);
48 for (ptr
= origin_str
; *ptr
; ptr
+= siz
+ 1) {
49 if ((siz
= strcspn(ptr
, "!@"))) {
52 ZVAL_STRINGL(znick
, ptr
, siz
, 1);
55 ZVAL_STRINGL(zuser
, ptr
, siz
, 1);
58 ZVAL_STRINGL(zhost
, ptr
, siz
, 1);
67 array_init(return_value
);
68 add_assoc_zval_ex(return_value
, ZEND_STRS("nick"), znick
);
69 add_assoc_zval_ex(return_value
, ZEND_STRS("user"), zuser
);
70 add_assoc_zval_ex(return_value
, ZEND_STRS("host"), zhost
);
75 const zend_function_entry php_ircclient_function_entry
[] = {
76 ZEND_NS_FENTRY("irc\\client", parse_origin
, ZEND_FN(parse_origin
), NULL
, 0)
80 PHP_MINIT_FUNCTION(ircclient
);
81 PHP_MINFO_FUNCTION(ircclient
);
83 zend_module_entry ircclient_module_entry
= {
84 STANDARD_MODULE_HEADER
,
86 php_ircclient_function_entry
,
92 PHP_IRCCLIENT_VERSION
,
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 #if PHP_VERSION_ID >= 50399
159 zend_object_std_init((zend_object
*) obj
, ce TSRMLS_CC
);
160 object_properties_init((zend_object
*) obj
, ce
);
163 ALLOC_HASHTABLE(obj
->zo
.properties
);
164 zend_hash_init(obj
->zo
.properties
, zend_hash_num_elements(&ce
->default_properties
), NULL
, ZVAL_PTR_DTOR
, 0);
165 zend_hash_copy(obj
->zo
.properties
, &ce
->default_properties
, (copy_ctor_func_t
) zval_add_ref
, NULL
, sizeof(zval
*));
168 obj
->sess
= irc_create_session(&php_ircclient_callbacks
);
169 irc_set_ctx(obj
->sess
, obj
);
170 TSRMLS_SET_CTX(obj
->ts
);
172 obj
->ov
.handle
= zend_objects_store_put(obj
, NULL
, php_ircclient_session_object_free
, NULL TSRMLS_CC
);
173 obj
->ov
.handlers
= zend_get_std_object_handlers();
178 static void php_ircclient_event_callback(irc_session_t
*session
, const char *event
, const char *origin
, const char **params
, unsigned int count
)
183 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
184 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
186 fn_str
= emalloc(strlen(event
) + 2 + 1);
192 fn_str
[fn_len
++] = tolower(*event
);
197 Z_TYPE_P(zo
) = IS_OBJECT
;
198 zo
->value
.obj
= obj
->ov
;
199 zend_objects_store_add_ref(zo TSRMLS_CC
);
203 ZVAL_STRING(zr
, estrdup(origin
), 0);
210 for (i
= 0; i
< count
; ++i
) {
211 add_next_index_string(za
, estrdup(params
[i
]), 0);
214 zend_call_method(&zo
, NULL
, NULL
, fn_str
, fn_len
- 1, NULL
, 2, zr
, za TSRMLS_CC
);
223 static void php_ircclient_event_code_callback(irc_session_t
*session
, unsigned int event
, const char *origin
, const char **params
, unsigned int count
)
226 zval
*zo
, *zr
, *zp
, *za
;
227 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
228 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
231 Z_TYPE_P(zo
) = IS_OBJECT
;
232 zo
->value
.obj
= obj
->ov
;
233 zend_objects_store_add_ref(zo TSRMLS_CC
);
237 ZVAL_STRING(zr
, estrdup(origin
), 0);
244 add_assoc_long_ex(za
, ZEND_STRS("event"), event
);
248 for (i
= 0; i
< count
; ++i
) {
249 add_next_index_string(zp
, estrdup(params
[i
]), 0);
251 add_assoc_zval_ex(za
, ZEND_STRS("params"), zp
);
253 zend_call_method(&zo
, NULL
, NULL
, ZEND_STRL("onnumeric"), NULL
, 2, zr
, za TSRMLS_CC
);
262 static void php_ircclient_event_dcc_chat_callback(irc_session_t
*session
, const char *nick
, const char *addr
, irc_dcc_t dccid
)
265 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
266 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
269 Z_TYPE_P(zo
) = IS_OBJECT
;
270 zo
->value
.obj
= obj
->ov
;
271 zend_objects_store_add_ref(zo TSRMLS_CC
);
275 add_assoc_string_ex(zp
, ZEND_STRS("nick"), estrdup(nick
), 0);
276 add_assoc_string_ex(zp
, ZEND_STRS("remote_addr"), estrdup(addr
), 0);
277 add_assoc_long_ex(zp
, ZEND_STRS("dccid"), dccid
);
279 zend_call_method(&zo
, NULL
, NULL
, ZEND_STRS("ondccchatreq"), NULL
, 1, zp
, NULL TSRMLS_CC
);
285 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
)
288 php_ircclient_session_object_t
*obj
= irc_get_ctx(session
);
289 TSRMLS_FETCH_FROM_CTX(obj
->ts
);
292 Z_TYPE_P(zo
) = IS_OBJECT
;
293 zo
->value
.obj
= obj
->ov
;
294 zend_objects_store_add_ref(zo TSRMLS_CC
);
298 add_assoc_string_ex(zp
, ZEND_STRS("nick"), estrdup(nick
), 0);
299 add_assoc_string_ex(zp
, ZEND_STRS("remote_addr"), estrdup(addr
), 0);
300 add_assoc_string_ex(zp
, ZEND_STRS("filename"), estrdup(filename
), 0);
301 add_assoc_long_ex(zp
, ZEND_STRS("filesize"), size
);
302 add_assoc_long_ex(zp
, ZEND_STRS("dccid"), dccid
);
304 zend_call_method(&zo
, NULL
, NULL
, ZEND_STRL("ondccsendreq"), NULL
, 1, zp
, NULL TSRMLS_CC
);
310 PHP_METHOD(Session
, __construct
)
312 char *nick_str
= NULL
, *user_str
= NULL
, *real_str
= NULL
;
313 int nick_len
= 0, user_len
= 0, real_len
= 0;
315 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
)) {
316 if (nick_str
&& nick_len
) {
317 zend_update_property_stringl(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("nick"), nick_str
, nick_len TSRMLS_CC
);
319 if (nick_str
&& nick_len
) {
320 zend_update_property_stringl(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("nick"), nick_str
, nick_len TSRMLS_CC
);
322 if (real_str
&& real_len
) {
323 zend_update_property_stringl(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("real"), real_str
, real_len TSRMLS_CC
);
328 PHP_METHOD(Session
, doConnect
)
330 char *server_str
, *passwd_str
= NULL
;
331 int server_len
, passwd_len
= 0;
335 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "bs|ls!", &ip6
, &server_str
, &server_len
, &port
, &passwd_str
, &passwd_len
)) {
336 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
337 char *nick
= NULL
, *user
= NULL
, *real
= NULL
;
338 zval
*znick
, *zuser
, *zreal
, *tmp
;
340 znick
= zend_read_property(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("nick"), 0 TSRMLS_CC
);
341 SEPARATE_ARG_IF_REF(znick
);
342 convert_to_string_ex(&znick
);
343 if (Z_STRLEN_P(znick
)) {
344 nick
= Z_STRVAL_P(znick
);
346 zuser
= zend_read_property(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("user"), 0 TSRMLS_CC
);
347 SEPARATE_ARG_IF_REF(zuser
);
348 convert_to_string_ex(&zuser
);
349 if (Z_STRLEN_P(zuser
)) {
350 user
= Z_STRVAL_P(zuser
);
352 zreal
= zend_read_property(php_ircclient_session_class_entry
, getThis(), ZEND_STRL("real"), 0 TSRMLS_CC
);
353 SEPARATE_ARG_IF_REF(zreal
);
354 convert_to_string_ex(&zreal
);
355 if (Z_STRLEN_P(zreal
)) {
356 real
= Z_STRVAL_P(zreal
);
360 if (0 != irc_connect6(obj
->sess
, server_str
, port
, passwd_str
, nick
, user
, real
)) {
361 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
364 } else if (0 != irc_connect(obj
->sess
, server_str
, port
, passwd_str
, nick
, user
, real
)) {
365 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
371 zval_ptr_dtor(&znick
);
372 zval_ptr_dtor(&zuser
);
373 zval_ptr_dtor(&zreal
);
377 PHP_METHOD(Session
, isConnected
)
379 if (SUCCESS
== zend_parse_parameters_none()) {
380 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
382 RETURN_BOOL(irc_is_connected(obj
->sess
));
386 PHP_METHOD(Session
, disconnect
)
388 if (SUCCESS
== zend_parse_parameters_none()) {
389 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
391 irc_disconnect(obj
->sess
);
395 PHP_METHOD(Session
, run
)
397 HashTable
*ifds
= NULL
, *ofds
= NULL
;
400 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|H!H!d", &ifds
, &ofds
, &to
)) {
401 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
403 if ((ifds
&& zend_hash_num_elements(ifds
)) || (ofds
&& zend_hash_num_elements(ofds
))) {
407 zval
**zfd
, *zr
, *zw
;
412 if (0 != irc_add_select_descriptors(obj
->sess
, &i
, &o
, &m
)) {
413 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
417 for ( zend_hash_internal_pointer_reset(ifds
);
418 SUCCESS
== zend_hash_get_current_data(ifds
, (void *) &zfd
);
419 zend_hash_move_forward(ifds
)
421 if (Z_TYPE_PP(zfd
) == IS_RESOURCE
) {
422 php_stream
*s
= NULL
;
425 php_stream_from_zval_no_verify(s
, zfd
);
427 if (!s
|| SUCCESS
!= php_stream_cast(s
, PHP_STREAM_AS_FD_FOR_SELECT
, (void *) &fd
, 1) || fd
== -1) {
428 php_error_docref(NULL TSRMLS_CC
, E_NOTICE
, "invalid resource");
430 PHP_SAFE_FD_SET(fd
, &i
);
439 for ( zend_hash_internal_pointer_reset(ofds
);
440 SUCCESS
== zend_hash_get_current_data(ofds
, (void *) &zfd
);
441 zend_hash_move_forward(ofds
)
443 if (Z_TYPE_PP(zfd
) == IS_RESOURCE
) {
444 php_stream
*s
= NULL
;
447 php_stream_from_zval_no_verify(s
, zfd
);
449 if (!s
|| SUCCESS
!= php_stream_cast(s
, PHP_STREAM_AS_FD_FOR_SELECT
|PHP_STREAM_CAST_INTERNAL
, (void *) &fd
, 1) || fd
== -1) {
450 php_error_docref(NULL TSRMLS_CC
, E_NOTICE
, "invalid resource");
452 PHP_SAFE_FD_SET(fd
, &o
);
461 PHP_SAFE_MAX_FD(m
, m
);
463 t
.tv_sec
= (time_t) to
;
464 t
.tv_usec
= (suseconds_t
) ((to
- t
.tv_sec
) * 1000000.0);
466 if (0 > select(m
+ 1, &i
, &o
, NULL
, &t
) && errno
!= EINTR
) {
467 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "select() error: %s", strerror(errno
));
471 if (0 != irc_process_select_descriptors(obj
->sess
, &i
, &o
)) {
472 int err
= irc_errno(obj
->sess
);
475 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(err
));
480 array_init(return_value
);
487 for ( zend_hash_internal_pointer_reset(ifds
);
488 SUCCESS
== zend_hash_get_current_data(ifds
, (void *) &zfd
);
489 zend_hash_move_forward(ifds
)
491 if (Z_TYPE_PP(zfd
) == IS_RESOURCE
) {
492 php_stream
*s
= NULL
;
495 php_stream_from_zval_no_verify(s
, zfd
);
497 if (s
&& SUCCESS
== php_stream_cast(s
, PHP_STREAM_AS_FD_FOR_SELECT
|PHP_STREAM_CAST_INTERNAL
, (void *) &fd
, 1) && fd
!= -1) {
498 if (PHP_SAFE_FD_ISSET(fd
, &i
)) {
500 add_next_index_zval(zr
, *zfd
);
507 for ( zend_hash_internal_pointer_reset(ofds
);
508 SUCCESS
== zend_hash_get_current_data(ofds
, (void *) &zfd
);
509 zend_hash_move_forward(ofds
)
511 if (Z_TYPE_PP(zfd
) == IS_RESOURCE
) {
512 php_stream
*s
= NULL
;
515 php_stream_from_zval_no_verify(s
, zfd
);
517 if (s
&& SUCCESS
== php_stream_cast(s
, PHP_STREAM_AS_FD_FOR_SELECT
|PHP_STREAM_CAST_INTERNAL
, (void *) &fd
, 1) && fd
!= -1) {
518 if (PHP_SAFE_FD_ISSET(fd
, &o
)) {
520 add_next_index_zval(zw
, *zfd
);
527 add_next_index_zval(return_value
, zr
);
528 add_next_index_zval(return_value
, zw
);
533 if (0 != irc_run(obj
->sess
)) {
534 int err
= irc_errno(obj
->sess
);
537 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(err
));
547 PHP_METHOD(Session
, setOption
)
552 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "l|b", &opt
, &onoff
)) {
553 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
556 irc_option_set(obj
->sess
, opt
);
558 irc_option_reset(obj
->sess
, opt
);
563 PHP_METHOD(Session
, doJoin
)
565 char *chan_str
, *key_str
= NULL
;
566 int chan_len
, key_len
= 0;
568 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s|s!", &chan_str
, &chan_len
, &key_str
, &key_len
)) {
569 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
571 if (0 != irc_cmd_join(obj
->sess
, chan_str
, key_str
)) {
572 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
580 PHP_METHOD(Session
, doPart
)
585 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &chan_str
, &chan_len
)) {
586 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
588 if (0 != irc_cmd_part(obj
->sess
, chan_str
)) {
589 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
597 PHP_METHOD(Session
, doInvite
)
599 char *chan_str
, *nick_str
;
600 int chan_len
, nick_len
;
602 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &nick_str
, &nick_len
, &chan_str
, &chan_len
)) {
603 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
605 if (0 != irc_cmd_invite(obj
->sess
, nick_str
, chan_str
)) {
606 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
614 PHP_METHOD(Session
, doNames
)
619 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &chan_str
, &chan_len
)) {
620 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
622 if (0 != irc_cmd_names(obj
->sess
, chan_str
)) {
623 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
631 PHP_METHOD(Session
, doList
)
636 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &chan_str
, &chan_len
)) {
637 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
639 if (0 != irc_cmd_list(obj
->sess
, chan_str
)) {
640 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
648 PHP_METHOD(Session
, doTopic
)
650 char *chan_str
, *topic_str
= NULL
;
651 int chan_len
, topic_len
;
653 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s|s!", &chan_str
, &chan_len
, &topic_str
, &topic_len
)) {
654 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
656 if (0 != irc_cmd_topic(obj
->sess
, chan_str
, topic_str
)) {
657 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
665 PHP_METHOD(Session
, doChannelMode
)
667 char *chan_str
, *mode_str
= NULL
;
668 int chan_len
, mode_len
;
670 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s|s!", &chan_str
, &chan_len
, &mode_str
, &mode_len
)) {
671 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
673 if (0 != irc_cmd_channel_mode(obj
->sess
, chan_str
, mode_str
)) {
674 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
682 PHP_METHOD(Session
, doKick
)
684 char *chan_str
, *nick_str
, *reason_str
= NULL
;
685 int chan_len
, nick_len
, reason_len
;
687 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss|s!", &nick_str
, &nick_len
, &chan_str
, &chan_len
, &reason_str
, &reason_len
)) {
688 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
690 if (0 != irc_cmd_kick(obj
->sess
, nick_str
, chan_str
, reason_str
)) {
691 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
699 PHP_METHOD(Session
, doMsg
)
701 char *dest_str
, *msg_str
;
702 int dest_len
, msg_len
;
704 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &dest_str
, &dest_len
, &msg_str
, &msg_len
)) {
705 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
707 if (0 != irc_cmd_msg(obj
->sess
, dest_str
, msg_str
)) {
708 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
716 PHP_METHOD(Session
, doMe
)
718 char *dest_str
, *msg_str
;
719 int dest_len
, msg_len
;
721 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &dest_str
, &dest_len
, &msg_str
, &msg_len
)) {
722 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
724 if (0 != irc_cmd_me(obj
->sess
, dest_str
, msg_str
)) {
725 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
733 PHP_METHOD(Session
, doNotice
)
735 char *dest_str
, *msg_str
;
736 int dest_len
, msg_len
;
738 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &dest_str
, &dest_len
, &msg_str
, &msg_len
)) {
739 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
741 if (0 != irc_cmd_notice(obj
->sess
, dest_str
, msg_str
)) {
742 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
750 PHP_METHOD(Session
, doQuit
)
752 char *reason_str
= NULL
;
755 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|s!", &reason_str
, &reason_len
)) {
756 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
758 if (0 != irc_cmd_quit(obj
->sess
, reason_str
)) {
759 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
767 PHP_METHOD(Session
, doUserMode
)
769 char *mode_str
= NULL
;
772 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|s!", &mode_str
, &mode_len
)) {
773 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
775 if (0 != irc_cmd_user_mode(obj
->sess
, mode_str
)) {
776 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
784 PHP_METHOD(Session
, doNick
)
789 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &nick_str
, &nick_len
)) {
790 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
792 if (0 != irc_cmd_nick(obj
->sess
, nick_str
)) {
793 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
801 PHP_METHOD(Session
, doWhois
)
803 char *nick_str
= NULL
;
806 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "|s!", &nick_str
, &nick_len
)) {
807 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
809 if (0 != irc_cmd_whois(obj
->sess
, nick_str
)) {
810 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
818 PHP_METHOD(Session
, doCtcpReply
)
820 char *nick_str
, *reply_str
;
821 int nick_len
, reply_len
;
823 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &nick_str
, &nick_len
, &reply_str
, &reply_len
)) {
824 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
826 if (0 != irc_cmd_ctcp_reply(obj
->sess
, nick_str
, reply_str
)) {
827 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
835 PHP_METHOD(Session
, doCtcpRequest
)
837 char *nick_str
, *request_str
;
838 int nick_len
, request_len
;
840 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "ss", &nick_str
, &nick_len
, &request_str
, &request_len
)) {
841 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
843 if (0 != irc_cmd_ctcp_request(obj
->sess
, nick_str
, request_str
)) {
844 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
852 PHP_METHOD(Session
, doRaw
)
857 if (SUCCESS
== zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC
, "s", &msg_str
, &msg_len
)) {
858 php_ircclient_session_object_t
*obj
= zend_object_store_get_object(getThis() TSRMLS_CC
);
860 if (0 != irc_send_raw(obj
->sess
, "%.*s", msg_len
, msg_str
)) {
861 php_error_docref(NULL TSRMLS_CC
, E_WARNING
, "%s", irc_strerror(irc_errno(obj
->sess
)));
869 PHP_METHOD(Session
, onConnect
) {}
870 PHP_METHOD(Session
, onNick
) {}
871 PHP_METHOD(Session
, onQuit
) {}
872 PHP_METHOD(Session
, onJoin
) {}
873 PHP_METHOD(Session
, onPart
) {}
874 PHP_METHOD(Session
, onMode
) {}
875 PHP_METHOD(Session
, onUmode
) {}
876 PHP_METHOD(Session
, onTopic
) {}
877 PHP_METHOD(Session
, onKick
) {}
878 PHP_METHOD(Session
, onChannel
) {}
879 PHP_METHOD(Session
, onPrivmsg
) {}
880 PHP_METHOD(Session
, onNotice
) {}
881 PHP_METHOD(Session
, onChannelNotice
) {}
882 PHP_METHOD(Session
, onInvite
) {}
883 PHP_METHOD(Session
, onCtcpReq
) {}
884 PHP_METHOD(Session
, onCtcpRep
) {}
885 PHP_METHOD(Session
, onAction
) {}
886 PHP_METHOD(Session
, onUnknown
) {}
887 PHP_METHOD(Session
, onNumeric
) {}
888 PHP_METHOD(Session
, onDccChatReq
) {}
889 PHP_METHOD(Session
, onDccSendReq
) {}
890 PHP_METHOD(Session
, onError
) {}
892 #define ME(m) PHP_ME(Session, m, NULL, ZEND_ACC_PUBLIC)
894 zend_function_entry php_ircclient_session_method_entry
[] = {
950 PHP_MINIT_FUNCTION(ircclient
)
954 memset(&ce
, 0, sizeof(zend_class_entry
));
955 INIT_NS_CLASS_ENTRY(ce
, "irc\\client", "Session", php_ircclient_session_method_entry
);
956 ce
.create_object
= php_ircclient_session_object_create
;
957 php_ircclient_session_class_entry
= zend_register_internal_class_ex(&ce
, NULL
, NULL TSRMLS_CC
);
959 zend_declare_property_null(php_ircclient_session_class_entry
, ZEND_STRL("nick"), ZEND_ACC_PUBLIC TSRMLS_CC
);
960 zend_declare_property_null(php_ircclient_session_class_entry
, ZEND_STRL("user"), ZEND_ACC_PUBLIC TSRMLS_CC
);
961 zend_declare_property_null(php_ircclient_session_class_entry
, ZEND_STRL("real"), ZEND_ACC_PUBLIC TSRMLS_CC
);
963 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WELCOME", 001, CONST_CS
|CONST_PERSISTENT
);
964 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_YOURHOST", 002, CONST_CS
|CONST_PERSISTENT
);
965 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_CREATED", 003, CONST_CS
|CONST_PERSISTENT
);
966 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_MYINFO", 004, CONST_CS
|CONST_PERSISTENT
);
967 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_BOUNCE", 005, CONST_CS
|CONST_PERSISTENT
);
968 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_USERHOST", 302, CONST_CS
|CONST_PERSISTENT
);
969 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ISON", 303, CONST_CS
|CONST_PERSISTENT
);
970 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_AWAY", 301, CONST_CS
|CONST_PERSISTENT
);
971 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_UNAWAY", 305, CONST_CS
|CONST_PERSISTENT
);
972 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NOWAWAY", 306, CONST_CS
|CONST_PERSISTENT
);
973 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISUSER", 311, CONST_CS
|CONST_PERSISTENT
);
974 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISSERVER", 312, CONST_CS
|CONST_PERSISTENT
);
975 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISOPERATOR", 313, CONST_CS
|CONST_PERSISTENT
);
976 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISIDLE", 317, CONST_CS
|CONST_PERSISTENT
);
977 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFWHOIS", 318, CONST_CS
|CONST_PERSISTENT
);
978 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISCHANNELS", 319, CONST_CS
|CONST_PERSISTENT
);
979 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOWASUSER", 314, CONST_CS
|CONST_PERSISTENT
);
980 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFWHOWAS", 369, CONST_CS
|CONST_PERSISTENT
);
981 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LIST", 322, CONST_CS
|CONST_PERSISTENT
);
982 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LISTEND", 323, CONST_CS
|CONST_PERSISTENT
);
983 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_UNIQOPIS", 325, CONST_CS
|CONST_PERSISTENT
);
984 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_CHANNELMODEIS", 324, CONST_CS
|CONST_PERSISTENT
);
985 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NOTOPIC", 331, CONST_CS
|CONST_PERSISTENT
);
986 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TOPIC", 332, CONST_CS
|CONST_PERSISTENT
);
987 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_INVITING", 341, CONST_CS
|CONST_PERSISTENT
);
988 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_SUMMONING", 342, CONST_CS
|CONST_PERSISTENT
);
989 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_INVITELIST", 346, CONST_CS
|CONST_PERSISTENT
);
990 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFINVITELIST", 347, CONST_CS
|CONST_PERSISTENT
);
991 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_EXCEPTLIST", 348, CONST_CS
|CONST_PERSISTENT
);
992 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFEXCEPTLIST", 349, CONST_CS
|CONST_PERSISTENT
);
993 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_VERSION", 351, CONST_CS
|CONST_PERSISTENT
);
994 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOREPLY", 352, CONST_CS
|CONST_PERSISTENT
);
995 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFWHO", 315, CONST_CS
|CONST_PERSISTENT
);
996 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NAMREPLY", 353, CONST_CS
|CONST_PERSISTENT
);
997 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFNAMES", 366, CONST_CS
|CONST_PERSISTENT
);
998 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LINKS", 364, CONST_CS
|CONST_PERSISTENT
);
999 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFLINKS", 365, CONST_CS
|CONST_PERSISTENT
);
1000 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_BANLIST", 367, CONST_CS
|CONST_PERSISTENT
);
1001 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFBANLIST", 368, CONST_CS
|CONST_PERSISTENT
);
1002 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_INFO", 371, CONST_CS
|CONST_PERSISTENT
);
1003 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFINFO", 374, CONST_CS
|CONST_PERSISTENT
);
1004 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_MOTDSTART", 375, CONST_CS
|CONST_PERSISTENT
);
1005 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_MOTD", 372, CONST_CS
|CONST_PERSISTENT
);
1006 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFMOTD", 376, CONST_CS
|CONST_PERSISTENT
);
1007 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_YOUREOPER", 381, CONST_CS
|CONST_PERSISTENT
);
1008 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_REHASHING", 382, CONST_CS
|CONST_PERSISTENT
);
1009 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_YOURESERVICE", 383, CONST_CS
|CONST_PERSISTENT
);
1010 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TIME", 391, CONST_CS
|CONST_PERSISTENT
);
1011 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_USERSSTART", 392, CONST_CS
|CONST_PERSISTENT
);
1012 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_USERS", 393, CONST_CS
|CONST_PERSISTENT
);
1013 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFUSERS", 394, CONST_CS
|CONST_PERSISTENT
);
1014 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NOUSERS", 395, CONST_CS
|CONST_PERSISTENT
);
1015 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACELINK", 200, CONST_CS
|CONST_PERSISTENT
);
1016 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACECONNECTING", 201, CONST_CS
|CONST_PERSISTENT
);
1017 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEHANDSHAKE", 202, CONST_CS
|CONST_PERSISTENT
);
1018 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEUNKNOWN", 203, CONST_CS
|CONST_PERSISTENT
);
1019 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEOPERATOR", 204, CONST_CS
|CONST_PERSISTENT
);
1020 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEUSER", 205, CONST_CS
|CONST_PERSISTENT
);
1021 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACESERVER", 206, CONST_CS
|CONST_PERSISTENT
);
1022 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACESERVICE", 207, CONST_CS
|CONST_PERSISTENT
);
1023 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACENEWTYPE", 208, CONST_CS
|CONST_PERSISTENT
);
1024 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACECLASS", 209, CONST_CS
|CONST_PERSISTENT
);
1025 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACELOG", 261, CONST_CS
|CONST_PERSISTENT
);
1026 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEEND", 262, CONST_CS
|CONST_PERSISTENT
);
1027 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSLINKINFO", 211, CONST_CS
|CONST_PERSISTENT
);
1028 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSCOMMANDS", 212, CONST_CS
|CONST_PERSISTENT
);
1029 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFSTATS", 219, CONST_CS
|CONST_PERSISTENT
);
1030 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSUPTIME", 242, CONST_CS
|CONST_PERSISTENT
);
1031 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSOLINE", 243, CONST_CS
|CONST_PERSISTENT
);
1032 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_UMODEIS", 221, CONST_CS
|CONST_PERSISTENT
);
1033 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_SERVLIST", 234, CONST_CS
|CONST_PERSISTENT
);
1034 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_SERVLISTEND", 235, CONST_CS
|CONST_PERSISTENT
);
1035 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERCLIENT", 251, CONST_CS
|CONST_PERSISTENT
);
1036 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSEROP", 252, CONST_CS
|CONST_PERSISTENT
);
1037 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERUNKNOWN", 253, CONST_CS
|CONST_PERSISTENT
);
1038 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERCHANNELS", 254, CONST_CS
|CONST_PERSISTENT
);
1039 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERME", 255, CONST_CS
|CONST_PERSISTENT
);
1040 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINME", 256, CONST_CS
|CONST_PERSISTENT
);
1041 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINLOC1", 257, CONST_CS
|CONST_PERSISTENT
);
1042 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINLOC2", 258, CONST_CS
|CONST_PERSISTENT
);
1043 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINEMAIL", 259, CONST_CS
|CONST_PERSISTENT
);
1044 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRYAGAIN", 263, CONST_CS
|CONST_PERSISTENT
);
1045 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHNICK", 401, CONST_CS
|CONST_PERSISTENT
);
1046 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHSERVER", 402, CONST_CS
|CONST_PERSISTENT
);
1047 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHCHANNEL", 403, CONST_CS
|CONST_PERSISTENT
);
1048 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CANNOTSENDTOCHAN", 404, CONST_CS
|CONST_PERSISTENT
);
1049 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_TOOMANYCHANNELS", 405, CONST_CS
|CONST_PERSISTENT
);
1050 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_WASNOSUCHNICK", 406, CONST_CS
|CONST_PERSISTENT
);
1051 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_TOOMANYTARGETS", 407, CONST_CS
|CONST_PERSISTENT
);
1052 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHSERVICE", 408, CONST_CS
|CONST_PERSISTENT
);
1053 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOORIGIN", 409, CONST_CS
|CONST_PERSISTENT
);
1054 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NORECIPIENT", 411, CONST_CS
|CONST_PERSISTENT
);
1055 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTEXTTOSEND", 412, CONST_CS
|CONST_PERSISTENT
);
1056 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTOPLEVEL", 413, CONST_CS
|CONST_PERSISTENT
);
1057 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_WILDTOPLEVEL", 414, CONST_CS
|CONST_PERSISTENT
);
1058 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BADMASK", 415, CONST_CS
|CONST_PERSISTENT
);
1059 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNKNOWNCOMMAND", 421, CONST_CS
|CONST_PERSISTENT
);
1060 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOMOTD", 422, CONST_CS
|CONST_PERSISTENT
);
1061 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOADMININFO", 423, CONST_CS
|CONST_PERSISTENT
);
1062 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_FILEERROR", 424, CONST_CS
|CONST_PERSISTENT
);
1063 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NONICKNAMEGIVEN", 431, CONST_CS
|CONST_PERSISTENT
);
1064 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_ERRONEUSNICKNAME", 432, CONST_CS
|CONST_PERSISTENT
);
1065 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NICKNAMEINUSE", 433, CONST_CS
|CONST_PERSISTENT
);
1066 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NICKCOLLISION", 436, CONST_CS
|CONST_PERSISTENT
);
1067 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNAVAILRESOURCE", 437, CONST_CS
|CONST_PERSISTENT
);
1068 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERNOTINCHANNEL", 441, CONST_CS
|CONST_PERSISTENT
);
1069 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTONCHANNEL", 442, CONST_CS
|CONST_PERSISTENT
);
1070 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERONCHANNEL", 443, CONST_CS
|CONST_PERSISTENT
);
1071 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOLOGIN", 444, CONST_CS
|CONST_PERSISTENT
);
1072 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_SUMMONDISABLED", 445, CONST_CS
|CONST_PERSISTENT
);
1073 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERSDISABLED", 446, CONST_CS
|CONST_PERSISTENT
);
1074 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTREGISTERED", 451, CONST_CS
|CONST_PERSISTENT
);
1075 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NEEDMOREPARAMS", 461, CONST_CS
|CONST_PERSISTENT
);
1076 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_ALREADYREGISTRED", 462, CONST_CS
|CONST_PERSISTENT
);
1077 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOPERMFORHOST", 463, CONST_CS
|CONST_PERSISTENT
);
1078 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_PASSWDMISMATCH", 464, CONST_CS
|CONST_PERSISTENT
);
1079 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_YOUREBANNEDCREEP", 465, CONST_CS
|CONST_PERSISTENT
);
1080 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_YOUWILLBEBANNED", 466, CONST_CS
|CONST_PERSISTENT
);
1081 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_KEYSET", 467, CONST_CS
|CONST_PERSISTENT
);
1082 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CHANNELISFULL", 471, CONST_CS
|CONST_PERSISTENT
);
1083 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNKNOWNMODE", 472, CONST_CS
|CONST_PERSISTENT
);
1084 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_INVITEONLYCHAN", 473, CONST_CS
|CONST_PERSISTENT
);
1085 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BANNEDFROMCHAN", 474, CONST_CS
|CONST_PERSISTENT
);
1086 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BADCHANNELKEY", 475, CONST_CS
|CONST_PERSISTENT
);
1087 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BADCHANMASK", 476, CONST_CS
|CONST_PERSISTENT
);
1088 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOCHANMODES", 477, CONST_CS
|CONST_PERSISTENT
);
1089 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BANLISTFULL", 478, CONST_CS
|CONST_PERSISTENT
);
1090 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOPRIVILEGES", 481, CONST_CS
|CONST_PERSISTENT
);
1091 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CHANOPRIVSNEEDED", 482, CONST_CS
|CONST_PERSISTENT
);
1092 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CANTKILLSERVER", 483, CONST_CS
|CONST_PERSISTENT
);
1093 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_RESTRICTED", 484, CONST_CS
|CONST_PERSISTENT
);
1094 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNIQOPPRIVSNEEDED", 485, CONST_CS
|CONST_PERSISTENT
);
1095 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOOPERHOST", 491, CONST_CS
|CONST_PERSISTENT
);
1096 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UMODEUNKNOWNFLAG", 501, CONST_CS
|CONST_PERSISTENT
);
1097 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERSDONTMATCH", 502, CONST_CS
|CONST_PERSISTENT
);
1102 PHP_MINFO_FUNCTION(ircclient
)
1104 unsigned int high
, low
;
1107 irc_get_version(&high
, &low
);
1108 spprintf(&version
[1], 0, "%u.%u", high
, low
);
1109 spprintf(&version
[0], 0, "%u.%u", PHP_IRCCLIENT_LIBIRCCLIENT_VERSION_HIGH
, PHP_IRCCLIENT_LIBIRCCLIENT_VERSION_LOW
);
1111 php_info_print_table_start();
1112 php_info_print_table_header(2, "IRC client support", "enabled");
1113 php_info_print_table_row(2, "Version", PHP_IRCCLIENT_VERSION
);
1114 php_info_print_table_end();
1116 php_info_print_table_start();
1117 php_info_print_table_header(3, "Used Library", "compiled", "linked");
1118 php_info_print_table_row(3,
1123 php_info_print_table_end();