fix php version incompatibility
[m6w6/ext-ircclient] / php_ircclient.c
1 /*
2 +----------------------------------------------------------------------+
3 | PHP Version 5 |
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 +----------------------------------------------------------------------+
15 | Author: |
16 +----------------------------------------------------------------------+
17 */
18
19 /* $Id: header 310447 2011-04-23 21:14:10Z bjori $ */
20
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24
25 #include "php.h"
26 #include "php_ini.h"
27 #include "php_network.h"
28 #include "ext/standard/php_string.h"
29 #include "ext/standard/info.h"
30
31 #include "zend_interfaces.h"
32
33 #include "php_ircclient.h"
34
35 #include <errno.h>
36 #include <ctype.h>
37 #include <libircclient/libircclient.h>
38
39 PHP_FUNCTION(parse_origin)
40 {
41 char *origin_str;
42 int origin_len;
43
44 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &origin_str, &origin_len)) {
45 zval *znick, *zuser, *zhost;
46 size_t siz = 0;
47 char *ptr;
48
49 MAKE_STD_ZVAL(znick); ZVAL_NULL(znick);
50 MAKE_STD_ZVAL(zuser); ZVAL_NULL(zuser);
51 MAKE_STD_ZVAL(zhost); ZVAL_NULL(zhost);
52
53 for (ptr = origin_str; *ptr; ptr += siz + 1) {
54 if ((siz = strcspn(ptr, "!@"))) {
55 switch (ptr[siz]) {
56 case '!':
57 ZVAL_STRINGL(znick, ptr, siz, 1);
58 break;
59 case '@':
60 ZVAL_STRINGL(zuser, ptr, siz, 1);
61 break;
62 case '\0':
63 ZVAL_STRINGL(zhost, ptr, siz, 1);
64 goto done;
65 break;
66 default:
67 break;
68 }
69 }
70 }
71 done:
72 array_init(return_value);
73 add_assoc_zval_ex(return_value, ZEND_STRS("nick"), znick);
74 add_assoc_zval_ex(return_value, ZEND_STRS("user"), zuser);
75 add_assoc_zval_ex(return_value, ZEND_STRS("host"), zhost);
76 }
77 }
78
79
80 const zend_function_entry php_ircclient_function_entry[] = {
81 ZEND_NS_FENTRY("irc\\client", parse_origin, ZEND_FN(parse_origin), NULL, 0)
82 {0}
83 };
84
85 zend_module_entry ircclient_module_entry = {
86 STANDARD_MODULE_HEADER,
87 "ircclient",
88 php_ircclient_function_entry,
89 PHP_MINIT(ircclient),
90 PHP_MSHUTDOWN(ircclient),
91 PHP_RINIT(ircclient),
92 PHP_RSHUTDOWN(ircclient),
93 PHP_MINFO(ircclient),
94 "0.1.0",
95 STANDARD_MODULE_PROPERTIES
96 };
97
98
99 #ifdef COMPILE_DL_IRCCLIENT
100 ZEND_GET_MODULE(ircclient)
101 #endif
102
103 static void php_ircclient_event_callback(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count);
104 static void php_ircclient_event_code_callback(irc_session_t *session, unsigned int event, const char *origin, const char **params, unsigned int count);
105 static void php_ircclient_event_dcc_chat_callback(irc_session_t *session, const char *nick, const char *addr, irc_dcc_t dccid);
106 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);
107
108 static irc_callbacks_t php_ircclient_callbacks = {
109 .event_connect = php_ircclient_event_callback,
110 .event_nick = php_ircclient_event_callback,
111 .event_quit = php_ircclient_event_callback,
112 .event_join = php_ircclient_event_callback,
113 .event_part = php_ircclient_event_callback,
114 .event_mode = php_ircclient_event_callback,
115 .event_umode = php_ircclient_event_callback,
116 .event_topic = php_ircclient_event_callback,
117 .event_kick = php_ircclient_event_callback,
118 .event_channel = php_ircclient_event_callback,
119 .event_privmsg = php_ircclient_event_callback,
120 .event_notice = php_ircclient_event_callback,
121 /* .event_channel_notice = php_ircclient_event_callback, */
122 .event_invite = php_ircclient_event_callback,
123 .event_ctcp_req = php_ircclient_event_callback,
124 .event_ctcp_rep = php_ircclient_event_callback,
125 .event_ctcp_action = php_ircclient_event_callback,
126 .event_unknown = php_ircclient_event_callback,
127 .event_numeric = php_ircclient_event_code_callback,
128 .event_dcc_chat_req = php_ircclient_event_dcc_chat_callback,
129 .event_dcc_send_req = php_ircclient_event_dcc_send_callback
130 };
131
132 typedef struct php_ircclient_session_object {
133 zend_object zo;
134 zend_object_value ov;
135 irc_session_t *sess;
136 #ifdef ZTS
137 void ***ts;
138 #endif
139 } php_ircclient_session_object_t;
140
141 zend_class_entry *php_ircclient_session_class_entry;
142
143 void php_ircclient_session_object_free(void *object TSRMLS_DC)
144 {
145 php_ircclient_session_object_t *o = (php_ircclient_session_object_t *) object;
146
147 if (o->sess) {
148 irc_destroy_session(o->sess);
149 o->sess = NULL;
150 }
151 zend_object_std_dtor((zend_object *) o TSRMLS_CC);
152 efree(o);
153 }
154
155 zend_object_value php_ircclient_session_object_create(zend_class_entry *ce TSRMLS_DC)
156 {
157 php_ircclient_session_object_t *obj;
158
159 obj = ecalloc(1, sizeof(*obj));
160 #if PHP_VERSION_ID >= 50399
161 zend_object_std_init((zend_object *) obj, ce TSRMLS_CC);
162 object_properties_init((zend_object *) obj, ce);
163 #else
164 obj->zo.ce = ce;
165 ALLOC_HASHTABLE(obj->zo.properties);
166 zend_hash_init(obj->zo.properties, zend_hash_num_elements(&ce->default_properties), NULL, ZVAL_PTR_DTOR, 0);
167 zend_hash_copy(obj->zo.properties, &ce->default_properties, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *));
168 #endif
169
170 obj->sess = irc_create_session(&php_ircclient_callbacks);
171 irc_set_ctx(obj->sess, obj);
172 TSRMLS_SET_CTX(obj->ts);
173
174 obj->ov.handle = zend_objects_store_put(obj, NULL, php_ircclient_session_object_free, NULL TSRMLS_CC);
175 obj->ov.handlers = zend_get_std_object_handlers();
176
177 return obj->ov;
178 }
179
180 static void php_ircclient_event_callback(irc_session_t *session, const char *event, const char *origin, const char **params, unsigned int count)
181 {
182 char *fn_str;
183 int i, fn_len;
184 zval *zo, *zr, *za;
185 php_ircclient_session_object_t *obj = irc_get_ctx(session);
186 TSRMLS_FETCH_FROM_CTX(obj->ts);
187
188 fn_str = emalloc(strlen(event) + 2 + 1);
189 fn_str[0] = 'o';
190 fn_str[1] = 'n';
191 fn_len = 2;
192 do {
193 if (*event != '_') {
194 fn_str[fn_len++] = tolower(*event);
195 }
196 } while (*event++);
197
198 MAKE_STD_ZVAL(zo);
199 Z_TYPE_P(zo) = IS_OBJECT;
200 zo->value.obj = obj->ov;
201 zend_objects_store_add_ref(zo TSRMLS_CC);
202
203 MAKE_STD_ZVAL(zr);
204 if (origin) {
205 ZVAL_STRING(zr, estrdup(origin), 0);
206 } else {
207 ZVAL_NULL(zr);
208 }
209
210 MAKE_STD_ZVAL(za);
211 array_init(za);
212 for (i = 0; i < count; ++i) {
213 add_next_index_string(za, estrdup(params[i]), 0);
214 }
215
216 zend_call_method(&zo, NULL, NULL, fn_str, fn_len - 1, NULL, 2, zr, za TSRMLS_CC);
217
218 zval_ptr_dtor(&za);
219 zval_ptr_dtor(&zr);
220 zval_ptr_dtor(&zo);
221
222 efree(fn_str);
223 }
224
225 static void php_ircclient_event_code_callback(irc_session_t *session, unsigned int event, const char *origin, const char **params, unsigned int count)
226 {
227 int i;
228 zval *zo, *zr, *zp, *za;
229 php_ircclient_session_object_t *obj = irc_get_ctx(session);
230 TSRMLS_FETCH_FROM_CTX(obj->ts);
231
232 MAKE_STD_ZVAL(zo);
233 Z_TYPE_P(zo) = IS_OBJECT;
234 zo->value.obj = obj->ov;
235 zend_objects_store_add_ref(zo TSRMLS_CC);
236
237 MAKE_STD_ZVAL(zr);
238 if (origin) {
239 ZVAL_STRING(zr, estrdup(origin), 0);
240 } else {
241 ZVAL_NULL(zr);
242 }
243
244 MAKE_STD_ZVAL(za);
245 array_init(za);
246 add_assoc_long_ex(za, ZEND_STRS("event"), event);
247
248 MAKE_STD_ZVAL(zp);
249 array_init(zp);
250 for (i = 0; i < count; ++i) {
251 add_next_index_string(zp, estrdup(params[i]), 0);
252 }
253 add_assoc_zval_ex(za, ZEND_STRS("params"), zp);
254
255 zend_call_method(&zo, NULL, NULL, ZEND_STRL("onnumeric"), NULL, 2, zr, za TSRMLS_CC);
256
257 zval_ptr_dtor(&zp);
258 zval_ptr_dtor(&za);
259 zval_ptr_dtor(&zr);
260 zval_ptr_dtor(&zo);
261
262 }
263
264 static void php_ircclient_event_dcc_chat_callback(irc_session_t *session, const char *nick, const char *addr, irc_dcc_t dccid)
265 {
266 zval *zo, *zp;
267 php_ircclient_session_object_t *obj = irc_get_ctx(session);
268 TSRMLS_FETCH_FROM_CTX(obj->ts);
269
270 MAKE_STD_ZVAL(zo);
271 Z_TYPE_P(zo) = IS_OBJECT;
272 zo->value.obj = obj->ov;
273 zend_objects_store_add_ref(zo TSRMLS_CC);
274
275 MAKE_STD_ZVAL(zp);
276 array_init(zp);
277 add_assoc_string_ex(zp, ZEND_STRS("nick"), estrdup(nick), 0);
278 add_assoc_string_ex(zp, ZEND_STRS("remote_addr"), estrdup(addr), 0);
279 add_assoc_long_ex(zp, ZEND_STRS("dccid"), dccid);
280
281 zend_call_method(&zo, NULL, NULL, ZEND_STRS("ondccchatreq"), NULL, 1, zp, NULL TSRMLS_CC);
282
283 zval_ptr_dtor(&zp);
284 zval_ptr_dtor(&zo);
285 }
286
287 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 {
289 zval *zo, *zp;
290 php_ircclient_session_object_t *obj = irc_get_ctx(session);
291 TSRMLS_FETCH_FROM_CTX(obj->ts);
292
293 MAKE_STD_ZVAL(zo);
294 Z_TYPE_P(zo) = IS_OBJECT;
295 zo->value.obj = obj->ov;
296 zend_objects_store_add_ref(zo TSRMLS_CC);
297
298 MAKE_STD_ZVAL(zp);
299 array_init(zp);
300 add_assoc_string_ex(zp, ZEND_STRS("nick"), estrdup(nick), 0);
301 add_assoc_string_ex(zp, ZEND_STRS("remote_addr"), estrdup(addr), 0);
302 add_assoc_string_ex(zp, ZEND_STRS("filename"), estrdup(filename), 0);
303 add_assoc_long_ex(zp, ZEND_STRS("filesize"), size);
304 add_assoc_long_ex(zp, ZEND_STRS("dccid"), dccid);
305
306 zend_call_method(&zo, NULL, NULL, ZEND_STRL("ondccsendreq"), NULL, 1, zp, NULL TSRMLS_CC);
307
308 zval_ptr_dtor(&zp);
309 zval_ptr_dtor(&zo);
310 }
311
312 PHP_METHOD(Session, __construct)
313 {
314 char *nick_str = NULL, *user_str = NULL, *real_str = NULL;
315 int nick_len = 0, user_len = 0, real_len = 0;
316
317 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)) {
318 if (nick_str && nick_len) {
319 zend_update_property_stringl(php_ircclient_session_class_entry, getThis(), ZEND_STRL("nick"), nick_str, nick_len TSRMLS_CC);
320 }
321 if (nick_str && nick_len) {
322 zend_update_property_stringl(php_ircclient_session_class_entry, getThis(), ZEND_STRL("nick"), nick_str, nick_len TSRMLS_CC);
323 }
324 if (real_str && real_len) {
325 zend_update_property_stringl(php_ircclient_session_class_entry, getThis(), ZEND_STRL("real"), real_str, real_len TSRMLS_CC);
326 }
327 }
328 }
329
330 PHP_METHOD(Session, doConnect)
331 {
332 char *server_str, *passwd_str = NULL;
333 int server_len, passwd_len = 0;
334 long port = 6667;
335 zend_bool ip6;
336
337 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "bs|ls!", &ip6, &server_str, &server_len, &port, &passwd_str, &passwd_len)) {
338 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
339 char *nick = NULL, *user = NULL, *real = NULL;
340 zval *znick, *zuser, *zreal, *tmp;
341
342 znick = zend_read_property(php_ircclient_session_class_entry, getThis(), ZEND_STRL("nick"), 0 TSRMLS_CC);
343 SEPARATE_ARG_IF_REF(znick);
344 convert_to_string_ex(&znick);
345 if (Z_STRLEN_P(znick)) {
346 nick = Z_STRVAL_P(znick);
347 }
348 zuser = zend_read_property(php_ircclient_session_class_entry, getThis(), ZEND_STRL("user"), 0 TSRMLS_CC);
349 SEPARATE_ARG_IF_REF(zuser);
350 convert_to_string_ex(&zuser);
351 if (Z_STRLEN_P(zuser)) {
352 user = Z_STRVAL_P(zuser);
353 }
354 zreal = zend_read_property(php_ircclient_session_class_entry, getThis(), ZEND_STRL("real"), 0 TSRMLS_CC);
355 SEPARATE_ARG_IF_REF(zreal);
356 convert_to_string_ex(&zreal);
357 if (Z_STRLEN_P(zreal)) {
358 real = Z_STRVAL_P(zreal);
359 }
360
361 if (ip6) {
362 if (0 != irc_connect6(obj->sess, server_str, port, passwd_str, nick, user, real)) {
363 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
364 RETVAL_FALSE;
365 }
366 } else if (0 != irc_connect(obj->sess, server_str, port, passwd_str, nick, user, real)) {
367 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
368 RETVAL_FALSE;
369 } else {
370 RETVAL_TRUE;
371 }
372
373 zval_ptr_dtor(&znick);
374 zval_ptr_dtor(&zuser);
375 zval_ptr_dtor(&zreal);
376 }
377 }
378
379 PHP_METHOD(Session, isConnected)
380 {
381 if (SUCCESS == zend_parse_parameters_none()) {
382 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
383
384 RETURN_BOOL(irc_is_connected(obj->sess));
385 }
386 }
387
388 PHP_METHOD(Session, disconnect)
389 {
390 if (SUCCESS == zend_parse_parameters_none()) {
391 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
392
393 irc_disconnect(obj->sess);
394 }
395 }
396
397 PHP_METHOD(Session, run)
398 {
399 HashTable *ifds = NULL, *ofds = NULL;
400 double to = 0.25;
401
402 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|H!H!d", &ifds, &ofds, &to)) {
403 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
404
405 if ((ifds && zend_hash_num_elements(ifds)) || (ofds && zend_hash_num_elements(ofds))) {
406 struct timeval t;
407 fd_set i, o;
408 int m = 0;
409 zval **zfd, *zr, *zw;
410
411 FD_ZERO(&i);
412 FD_ZERO(&o);
413
414 if (0 != irc_add_select_descriptors(obj->sess, &i, &o, &m)) {
415 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
416 RETURN_FALSE;
417 }
418 if (ifds) {
419 for ( zend_hash_internal_pointer_reset(ifds);
420 SUCCESS == zend_hash_get_current_data(ifds, (void *) &zfd);
421 zend_hash_move_forward(ifds)
422 ) {
423 if (Z_TYPE_PP(zfd) == IS_RESOURCE) {
424 php_stream *s = NULL;
425 int fd = -1;
426
427 php_stream_from_zval_no_verify(s, zfd);
428
429 if (!s || SUCCESS != php_stream_cast(s, PHP_STREAM_AS_FD_FOR_SELECT, (void *) &fd, 1) || fd == -1) {
430 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "invalid resource");
431 } else {
432 PHP_SAFE_FD_SET(fd, &i);
433 if (m < fd) {
434 m = fd;
435 }
436 }
437 }
438 }
439 }
440 if (ofds) {
441 for ( zend_hash_internal_pointer_reset(ofds);
442 SUCCESS == zend_hash_get_current_data(ofds, (void *) &zfd);
443 zend_hash_move_forward(ofds)
444 ) {
445 if (Z_TYPE_PP(zfd) == IS_RESOURCE) {
446 php_stream *s = NULL;
447 int fd = -1;
448
449 php_stream_from_zval_no_verify(s, zfd);
450
451 if (!s || SUCCESS != php_stream_cast(s, PHP_STREAM_AS_FD_FOR_SELECT|PHP_STREAM_CAST_INTERNAL, (void *) &fd, 1) || fd == -1) {
452 php_error_docref(NULL TSRMLS_CC, E_NOTICE, "invalid resource");
453 } else {
454 PHP_SAFE_FD_SET(fd, &o);
455 if (m < fd) {
456 m = fd;
457 }
458 }
459 }
460 }
461 }
462
463 PHP_SAFE_MAX_FD(m, m);
464
465 t.tv_sec = (time_t) to;
466 t.tv_usec = (suseconds_t) ((to - t.tv_sec) * 1000000.0);
467
468 if (0 > select(m + 1, &i, &o, NULL, &t) && errno != EINTR) {
469 php_error_docref(NULL TSRMLS_CC, E_WARNING, "select() error: %s", strerror(errno));
470 RETURN_FALSE;
471 }
472
473 if (0 != irc_process_select_descriptors(obj->sess, &i, &o)) {
474 int err = irc_errno(obj->sess);
475
476 if (err) {
477 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(err));
478 RETURN_FALSE;
479 }
480 }
481
482 array_init(return_value);
483 MAKE_STD_ZVAL(zr);
484 array_init(zr);
485 MAKE_STD_ZVAL(zw);
486 array_init(zw);
487
488 if (ifds) {
489 for ( zend_hash_internal_pointer_reset(ifds);
490 SUCCESS == zend_hash_get_current_data(ifds, (void *) &zfd);
491 zend_hash_move_forward(ifds)
492 ) {
493 if (Z_TYPE_PP(zfd) == IS_RESOURCE) {
494 php_stream *s = NULL;
495 int fd = -1;
496
497 php_stream_from_zval_no_verify(s, zfd);
498
499 if (s && SUCCESS == php_stream_cast(s, PHP_STREAM_AS_FD_FOR_SELECT|PHP_STREAM_CAST_INTERNAL, (void *) &fd, 1) && fd != -1) {
500 if (PHP_SAFE_FD_ISSET(fd, &i)) {
501 Z_ADDREF_PP(zfd);
502 add_next_index_zval(zr, *zfd);
503 }
504 }
505 }
506 }
507 }
508 if (ofds) {
509 for ( zend_hash_internal_pointer_reset(ofds);
510 SUCCESS == zend_hash_get_current_data(ofds, (void *) &zfd);
511 zend_hash_move_forward(ofds)
512 ) {
513 if (Z_TYPE_PP(zfd) == IS_RESOURCE) {
514 php_stream *s = NULL;
515 int fd = -1;
516
517 php_stream_from_zval_no_verify(s, zfd);
518
519 if (s && SUCCESS == php_stream_cast(s, PHP_STREAM_AS_FD_FOR_SELECT|PHP_STREAM_CAST_INTERNAL, (void *) &fd, 1) && fd != -1) {
520 if (PHP_SAFE_FD_ISSET(fd, &o)) {
521 Z_ADDREF_PP(zfd);
522 add_next_index_zval(zw, *zfd);
523 }
524 }
525 }
526 }
527 }
528
529 add_next_index_zval(return_value, zr);
530 add_next_index_zval(return_value, zw);
531
532 return;
533
534 } else {
535 if (0 != irc_run(obj->sess)) {
536 int err = irc_errno(obj->sess);
537
538 if (err) {
539 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(err));
540 RETURN_FALSE;
541 }
542 }
543 }
544
545 RETURN_TRUE;
546 }
547 }
548
549 PHP_METHOD(Session, setOption)
550 {
551 long opt;
552 zend_bool onoff = 1;
553
554 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|b", &opt, &onoff)) {
555 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
556
557 if (onoff) {
558 irc_option_set(obj->sess, opt);
559 } else {
560 irc_option_reset(obj->sess, opt);
561 }
562 }
563 }
564
565 PHP_METHOD(Session, doJoin)
566 {
567 char *chan_str, *key_str = NULL;
568 int chan_len, key_len = 0;
569
570 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &chan_str, &chan_len, &key_str, &key_len)) {
571 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
572
573 if (0 != irc_cmd_join(obj->sess, chan_str, key_str)) {
574 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
575 RETVAL_FALSE;
576 } else {
577 RETVAL_TRUE;
578 }
579 }
580 }
581
582 PHP_METHOD(Session, doPart)
583 {
584 char *chan_str;
585 int chan_len;
586
587 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &chan_str, &chan_len)) {
588 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
589
590 if (0 != irc_cmd_part(obj->sess, chan_str)) {
591 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
592 RETVAL_FALSE;
593 } else {
594 RETVAL_TRUE;
595 }
596 }
597 }
598
599 PHP_METHOD(Session, doInvite)
600 {
601 char *chan_str, *nick_str;
602 int chan_len, nick_len;
603
604 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &nick_str, &nick_len, &chan_str, &chan_len)) {
605 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
606
607 if (0 != irc_cmd_invite(obj->sess, nick_str, chan_str)) {
608 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
609 RETVAL_FALSE;
610 } else {
611 RETVAL_TRUE;
612 }
613 }
614 }
615
616 PHP_METHOD(Session, doNames)
617 {
618 char *chan_str;
619 int chan_len;
620
621 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &chan_str, &chan_len)) {
622 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
623
624 if (0 != irc_cmd_names(obj->sess, chan_str)) {
625 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
626 RETVAL_FALSE;
627 } else {
628 RETVAL_TRUE;
629 }
630 }
631 }
632
633 PHP_METHOD(Session, doList)
634 {
635 char *chan_str;
636 int chan_len;
637
638 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &chan_str, &chan_len)) {
639 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
640
641 if (0 != irc_cmd_list(obj->sess, chan_str)) {
642 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
643 RETVAL_FALSE;
644 } else {
645 RETVAL_TRUE;
646 }
647 }
648 }
649
650 PHP_METHOD(Session, doTopic)
651 {
652 char *chan_str, *topic_str = NULL;
653 int chan_len, topic_len;
654
655 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &chan_str, &chan_len, &topic_str, &topic_len)) {
656 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
657
658 if (0 != irc_cmd_topic(obj->sess, chan_str, topic_str)) {
659 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
660 RETVAL_FALSE;
661 } else {
662 RETVAL_TRUE;
663 }
664 }
665 }
666
667 PHP_METHOD(Session, doChannelMode)
668 {
669 char *chan_str, *mode_str = NULL;
670 int chan_len, mode_len;
671
672 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &chan_str, &chan_len, &mode_str, &mode_len)) {
673 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
674
675 if (0 != irc_cmd_topic(obj->sess, chan_str, mode_str)) {
676 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
677 RETVAL_FALSE;
678 } else {
679 RETVAL_TRUE;
680 }
681 }
682 }
683
684 PHP_METHOD(Session, doKick)
685 {
686 char *chan_str, *nick_str, *reason_str = NULL;
687 int chan_len, nick_len, reason_len;
688
689 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s!", &nick_str, &nick_len, &chan_str, &chan_len, &reason_str, &reason_len)) {
690 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
691
692 if (0 != irc_cmd_kick(obj->sess, nick_str, chan_str, reason_str)) {
693 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
694 RETVAL_FALSE;
695 } else {
696 RETVAL_TRUE;
697 }
698 }
699 }
700
701 PHP_METHOD(Session, doMsg)
702 {
703 char *dest_str, *msg_str;
704 int dest_len, msg_len;
705
706 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &dest_str, &dest_len, &msg_str, &msg_len)) {
707 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
708
709 if (0 != irc_cmd_msg(obj->sess, dest_str, msg_str)) {
710 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
711 RETVAL_FALSE;
712 } else {
713 RETVAL_TRUE;
714 }
715 }
716 }
717
718 PHP_METHOD(Session, doMe)
719 {
720 char *dest_str, *msg_str;
721 int dest_len, msg_len;
722
723 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &dest_str, &dest_len, &msg_str, &msg_len)) {
724 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
725
726 if (0 != irc_cmd_me(obj->sess, dest_str, msg_str)) {
727 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
728 RETVAL_FALSE;
729 } else {
730 RETVAL_TRUE;
731 }
732 }
733 }
734
735 PHP_METHOD(Session, doNotice)
736 {
737 char *dest_str, *msg_str;
738 int dest_len, msg_len;
739
740 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &dest_str, &dest_len, &msg_str, &msg_len)) {
741 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
742
743 if (0 != irc_cmd_notice(obj->sess, dest_str, msg_str)) {
744 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
745 RETVAL_FALSE;
746 } else {
747 RETVAL_TRUE;
748 }
749 }
750 }
751
752 PHP_METHOD(Session, doQuit)
753 {
754 char *reason_str = NULL;
755 int reason_len;
756
757 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &reason_str, &reason_len)) {
758 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
759
760 if (0 != irc_cmd_quit(obj->sess, reason_str)) {
761 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
762 RETVAL_FALSE;
763 } else {
764 RETVAL_TRUE;
765 }
766 }
767 }
768
769 PHP_METHOD(Session, doUserMode)
770 {
771 char *mode_str = NULL;
772 int mode_len;
773
774 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &mode_str, &mode_len)) {
775 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
776
777 if (0 != irc_cmd_user_mode(obj->sess, mode_str)) {
778 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
779 RETVAL_FALSE;
780 } else {
781 RETVAL_TRUE;
782 }
783 }
784 }
785
786 PHP_METHOD(Session, doNick)
787 {
788 char *nick_str;
789 int nick_len;
790
791 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &nick_str, &nick_len)) {
792 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
793
794 if (0 != irc_cmd_nick(obj->sess, nick_str)) {
795 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
796 RETVAL_FALSE;
797 } else {
798 RETVAL_TRUE;
799 }
800 }
801 }
802
803 PHP_METHOD(Session, doWhois)
804 {
805 char *nick_str = NULL;
806 int nick_len;
807
808 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &nick_str, &nick_len)) {
809 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
810
811 if (0 != irc_cmd_whois(obj->sess, nick_str)) {
812 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
813 RETVAL_FALSE;
814 } else {
815 RETVAL_TRUE;
816 }
817 }
818 }
819
820 PHP_METHOD(Session, doCtcpReply)
821 {
822 char *nick_str, *reply_str;
823 int nick_len, reply_len;
824
825 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &nick_str, &nick_len, &reply_str, &reply_len)) {
826 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
827
828 if (0 != irc_cmd_ctcp_reply(obj->sess, nick_str, reply_str)) {
829 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
830 RETVAL_FALSE;
831 } else {
832 RETVAL_TRUE;
833 }
834 }
835 }
836
837 PHP_METHOD(Session, doCtcpRequest)
838 {
839 char *nick_str, *request_str;
840 int nick_len, request_len;
841
842 if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &nick_str, &nick_len, &request_str, &request_len)) {
843 php_ircclient_session_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC);
844
845 if (0 != irc_cmd_ctcp_request(obj->sess, nick_str, request_str)) {
846 php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", irc_strerror(irc_errno(obj->sess)));
847 RETVAL_FALSE;
848 } else {
849 RETVAL_TRUE;
850 }
851 }
852 }
853
854
855
856 PHP_METHOD(Session, onConnect) {}
857 PHP_METHOD(Session, onNick) {}
858 PHP_METHOD(Session, onQuit) {}
859 PHP_METHOD(Session, onJoin) {}
860 PHP_METHOD(Session, onPart) {}
861 PHP_METHOD(Session, onMode) {}
862 PHP_METHOD(Session, onUmode) {}
863 PHP_METHOD(Session, onTopic) {}
864 PHP_METHOD(Session, onKick) {}
865 PHP_METHOD(Session, onChannel) {}
866 PHP_METHOD(Session, onPrivmsg) {}
867 PHP_METHOD(Session, onNotice) {}
868 PHP_METHOD(Session, onChannelNotice) {}
869 PHP_METHOD(Session, onInvite) {}
870 PHP_METHOD(Session, onCtcpReq) {}
871 PHP_METHOD(Session, onCtcpRep) {}
872 PHP_METHOD(Session, onAction) {}
873 PHP_METHOD(Session, onUnknown) {}
874 PHP_METHOD(Session, onNumeric) {}
875 PHP_METHOD(Session, onDccChatReq) {}
876 PHP_METHOD(Session, onDccSendReq) {}
877 PHP_METHOD(Session, onError) {}
878
879 #define ME(m) PHP_ME(Session, m, NULL, ZEND_ACC_PUBLIC)
880
881 zend_function_entry php_ircclient_session_method_entry[] = {
882 ME(__construct)
883 ME(doConnect)
884 ME(isConnected)
885 ME(disconnect)
886 ME(run)
887 ME(setOption)
888
889 ME(doJoin)
890 ME(doPart)
891 ME(doInvite)
892 ME(doNames)
893 ME(doList)
894 ME(doTopic)
895 ME(doChannelMode)
896 ME(doKick)
897
898 ME(doMsg)
899 ME(doMe)
900 ME(doNotice)
901
902 ME(doQuit)
903 ME(doUserMode)
904 ME(doNick)
905 ME(doWhois)
906
907 ME(doCtcpReply)
908 ME(doCtcpRequest)
909
910 ME(onConnect)
911 ME(onNick)
912 ME(onQuit)
913 ME(onJoin)
914 ME(onPart)
915 ME(onMode)
916 ME(onUmode)
917 ME(onTopic)
918 ME(onKick)
919 ME(onChannel)
920 ME(onPrivmsg)
921 ME(onNotice)
922 ME(onChannelNotice)
923 ME(onInvite)
924 ME(onCtcpReq)
925 ME(onCtcpRep)
926 ME(onAction)
927 ME(onUnknown)
928 ME(onNumeric)
929 ME(onDccChatReq)
930 ME(onDccSendReq)
931 ME(onError)
932 {0}
933 };
934
935 PHP_MINIT_FUNCTION(ircclient)
936 {
937 zend_class_entry ce;
938
939 memset(&ce, 0, sizeof(zend_class_entry));
940 INIT_NS_CLASS_ENTRY(ce, "irc\\client", "Session", php_ircclient_session_method_entry);
941 ce.create_object = php_ircclient_session_object_create;
942 php_ircclient_session_class_entry = zend_register_internal_class_ex(&ce, NULL, NULL TSRMLS_CC);
943
944 zend_declare_property_null(php_ircclient_session_class_entry, ZEND_STRL("nick"), ZEND_ACC_PUBLIC TSRMLS_CC);
945 zend_declare_property_null(php_ircclient_session_class_entry, ZEND_STRL("user"), ZEND_ACC_PUBLIC TSRMLS_CC);
946 zend_declare_property_null(php_ircclient_session_class_entry, ZEND_STRL("real"), ZEND_ACC_PUBLIC TSRMLS_CC);
947
948 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WELCOME", 001, CONST_CS|CONST_PERSISTENT);
949 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_YOURHOST", 002, CONST_CS|CONST_PERSISTENT);
950 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_CREATED", 003, CONST_CS|CONST_PERSISTENT);
951 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_MYINFO", 004, CONST_CS|CONST_PERSISTENT);
952 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_BOUNCE", 005, CONST_CS|CONST_PERSISTENT);
953 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_USERHOST", 302, CONST_CS|CONST_PERSISTENT);
954 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ISON", 303, CONST_CS|CONST_PERSISTENT);
955 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_AWAY", 301, CONST_CS|CONST_PERSISTENT);
956 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_UNAWAY", 305, CONST_CS|CONST_PERSISTENT);
957 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NOWAWAY", 306, CONST_CS|CONST_PERSISTENT);
958 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISUSER", 311, CONST_CS|CONST_PERSISTENT);
959 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISSERVER", 312, CONST_CS|CONST_PERSISTENT);
960 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISOPERATOR", 313, CONST_CS|CONST_PERSISTENT);
961 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISIDLE", 317, CONST_CS|CONST_PERSISTENT);
962 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFWHOIS", 318, CONST_CS|CONST_PERSISTENT);
963 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOISCHANNELS", 319, CONST_CS|CONST_PERSISTENT);
964 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOWASUSER", 314, CONST_CS|CONST_PERSISTENT);
965 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFWHOWAS", 369, CONST_CS|CONST_PERSISTENT);
966 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LIST", 322, CONST_CS|CONST_PERSISTENT);
967 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LISTEND", 323, CONST_CS|CONST_PERSISTENT);
968 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_UNIQOPIS", 325, CONST_CS|CONST_PERSISTENT);
969 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_CHANNELMODEIS", 324, CONST_CS|CONST_PERSISTENT);
970 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NOTOPIC", 331, CONST_CS|CONST_PERSISTENT);
971 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TOPIC", 332, CONST_CS|CONST_PERSISTENT);
972 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_INVITING", 341, CONST_CS|CONST_PERSISTENT);
973 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_SUMMONING", 342, CONST_CS|CONST_PERSISTENT);
974 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_INVITELIST", 346, CONST_CS|CONST_PERSISTENT);
975 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFINVITELIST", 347, CONST_CS|CONST_PERSISTENT);
976 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_EXCEPTLIST", 348, CONST_CS|CONST_PERSISTENT);
977 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFEXCEPTLIST", 349, CONST_CS|CONST_PERSISTENT);
978 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_VERSION", 351, CONST_CS|CONST_PERSISTENT);
979 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_WHOREPLY", 352, CONST_CS|CONST_PERSISTENT);
980 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFWHO", 315, CONST_CS|CONST_PERSISTENT);
981 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NAMREPLY", 353, CONST_CS|CONST_PERSISTENT);
982 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFNAMES", 366, CONST_CS|CONST_PERSISTENT);
983 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LINKS", 364, CONST_CS|CONST_PERSISTENT);
984 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFLINKS", 365, CONST_CS|CONST_PERSISTENT);
985 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_BANLIST", 367, CONST_CS|CONST_PERSISTENT);
986 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFBANLIST", 368, CONST_CS|CONST_PERSISTENT);
987 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_INFO", 371, CONST_CS|CONST_PERSISTENT);
988 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFINFO", 374, CONST_CS|CONST_PERSISTENT);
989 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_MOTDSTART", 375, CONST_CS|CONST_PERSISTENT);
990 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_MOTD", 372, CONST_CS|CONST_PERSISTENT);
991 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFMOTD", 376, CONST_CS|CONST_PERSISTENT);
992 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_YOUREOPER", 381, CONST_CS|CONST_PERSISTENT);
993 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_REHASHING", 382, CONST_CS|CONST_PERSISTENT);
994 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_YOURESERVICE", 383, CONST_CS|CONST_PERSISTENT);
995 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TIME", 391, CONST_CS|CONST_PERSISTENT);
996 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_USERSSTART", 392, CONST_CS|CONST_PERSISTENT);
997 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_USERS", 393, CONST_CS|CONST_PERSISTENT);
998 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFUSERS", 394, CONST_CS|CONST_PERSISTENT);
999 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_NOUSERS", 395, CONST_CS|CONST_PERSISTENT);
1000 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACELINK", 200, CONST_CS|CONST_PERSISTENT);
1001 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACECONNECTING", 201, CONST_CS|CONST_PERSISTENT);
1002 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEHANDSHAKE", 202, CONST_CS|CONST_PERSISTENT);
1003 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEUNKNOWN", 203, CONST_CS|CONST_PERSISTENT);
1004 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEOPERATOR", 204, CONST_CS|CONST_PERSISTENT);
1005 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEUSER", 205, CONST_CS|CONST_PERSISTENT);
1006 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACESERVER", 206, CONST_CS|CONST_PERSISTENT);
1007 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACESERVICE", 207, CONST_CS|CONST_PERSISTENT);
1008 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACENEWTYPE", 208, CONST_CS|CONST_PERSISTENT);
1009 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACECLASS", 209, CONST_CS|CONST_PERSISTENT);
1010 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACELOG", 261, CONST_CS|CONST_PERSISTENT);
1011 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRACEEND", 262, CONST_CS|CONST_PERSISTENT);
1012 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSLINKINFO", 211, CONST_CS|CONST_PERSISTENT);
1013 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSCOMMANDS", 212, CONST_CS|CONST_PERSISTENT);
1014 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ENDOFSTATS", 219, CONST_CS|CONST_PERSISTENT);
1015 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSUPTIME", 242, CONST_CS|CONST_PERSISTENT);
1016 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_STATSOLINE", 243, CONST_CS|CONST_PERSISTENT);
1017 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_UMODEIS", 221, CONST_CS|CONST_PERSISTENT);
1018 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_SERVLIST", 234, CONST_CS|CONST_PERSISTENT);
1019 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_SERVLISTEND", 235, CONST_CS|CONST_PERSISTENT);
1020 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERCLIENT", 251, CONST_CS|CONST_PERSISTENT);
1021 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSEROP", 252, CONST_CS|CONST_PERSISTENT);
1022 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERUNKNOWN", 253, CONST_CS|CONST_PERSISTENT);
1023 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERCHANNELS", 254, CONST_CS|CONST_PERSISTENT);
1024 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_LUSERME", 255, CONST_CS|CONST_PERSISTENT);
1025 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINME", 256, CONST_CS|CONST_PERSISTENT);
1026 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINLOC1", 257, CONST_CS|CONST_PERSISTENT);
1027 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINLOC2", 258, CONST_CS|CONST_PERSISTENT);
1028 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_ADMINEMAIL", 259, CONST_CS|CONST_PERSISTENT);
1029 REGISTER_NS_LONG_CONSTANT("irc\\client", "RPL_TRYAGAIN", 263, CONST_CS|CONST_PERSISTENT);
1030 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHNICK", 401, CONST_CS|CONST_PERSISTENT);
1031 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHSERVER", 402, CONST_CS|CONST_PERSISTENT);
1032 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHCHANNEL", 403, CONST_CS|CONST_PERSISTENT);
1033 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CANNOTSENDTOCHAN", 404, CONST_CS|CONST_PERSISTENT);
1034 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_TOOMANYCHANNELS", 405, CONST_CS|CONST_PERSISTENT);
1035 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_WASNOSUCHNICK", 406, CONST_CS|CONST_PERSISTENT);
1036 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_TOOMANYTARGETS", 407, CONST_CS|CONST_PERSISTENT);
1037 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOSUCHSERVICE", 408, CONST_CS|CONST_PERSISTENT);
1038 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOORIGIN", 409, CONST_CS|CONST_PERSISTENT);
1039 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NORECIPIENT", 411, CONST_CS|CONST_PERSISTENT);
1040 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTEXTTOSEND", 412, CONST_CS|CONST_PERSISTENT);
1041 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTOPLEVEL", 413, CONST_CS|CONST_PERSISTENT);
1042 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_WILDTOPLEVEL", 414, CONST_CS|CONST_PERSISTENT);
1043 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BADMASK", 415, CONST_CS|CONST_PERSISTENT);
1044 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNKNOWNCOMMAND", 421, CONST_CS|CONST_PERSISTENT);
1045 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOMOTD", 422, CONST_CS|CONST_PERSISTENT);
1046 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOADMININFO", 423, CONST_CS|CONST_PERSISTENT);
1047 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_FILEERROR", 424, CONST_CS|CONST_PERSISTENT);
1048 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NONICKNAMEGIVEN", 431, CONST_CS|CONST_PERSISTENT);
1049 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_ERRONEUSNICKNAME", 432, CONST_CS|CONST_PERSISTENT);
1050 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NICKNAMEINUSE", 433, CONST_CS|CONST_PERSISTENT);
1051 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NICKCOLLISION", 436, CONST_CS|CONST_PERSISTENT);
1052 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNAVAILRESOURCE", 437, CONST_CS|CONST_PERSISTENT);
1053 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERNOTINCHANNEL", 441, CONST_CS|CONST_PERSISTENT);
1054 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTONCHANNEL", 442, CONST_CS|CONST_PERSISTENT);
1055 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERONCHANNEL", 443, CONST_CS|CONST_PERSISTENT);
1056 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOLOGIN", 444, CONST_CS|CONST_PERSISTENT);
1057 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_SUMMONDISABLED", 445, CONST_CS|CONST_PERSISTENT);
1058 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERSDISABLED", 446, CONST_CS|CONST_PERSISTENT);
1059 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOTREGISTERED", 451, CONST_CS|CONST_PERSISTENT);
1060 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NEEDMOREPARAMS", 461, CONST_CS|CONST_PERSISTENT);
1061 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_ALREADYREGISTRED", 462, CONST_CS|CONST_PERSISTENT);
1062 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOPERMFORHOST", 463, CONST_CS|CONST_PERSISTENT);
1063 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_PASSWDMISMATCH", 464, CONST_CS|CONST_PERSISTENT);
1064 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_YOUREBANNEDCREEP", 465, CONST_CS|CONST_PERSISTENT);
1065 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_YOUWILLBEBANNED", 466, CONST_CS|CONST_PERSISTENT);
1066 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_KEYSET", 467, CONST_CS|CONST_PERSISTENT);
1067 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CHANNELISFULL", 471, CONST_CS|CONST_PERSISTENT);
1068 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNKNOWNMODE", 472, CONST_CS|CONST_PERSISTENT);
1069 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_INVITEONLYCHAN", 473, CONST_CS|CONST_PERSISTENT);
1070 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BANNEDFROMCHAN", 474, CONST_CS|CONST_PERSISTENT);
1071 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BADCHANNELKEY", 475, CONST_CS|CONST_PERSISTENT);
1072 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BADCHANMASK", 476, CONST_CS|CONST_PERSISTENT);
1073 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOCHANMODES", 477, CONST_CS|CONST_PERSISTENT);
1074 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_BANLISTFULL", 478, CONST_CS|CONST_PERSISTENT);
1075 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOPRIVILEGES", 481, CONST_CS|CONST_PERSISTENT);
1076 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CHANOPRIVSNEEDED", 482, CONST_CS|CONST_PERSISTENT);
1077 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_CANTKILLSERVER", 483, CONST_CS|CONST_PERSISTENT);
1078 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_RESTRICTED", 484, CONST_CS|CONST_PERSISTENT);
1079 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UNIQOPPRIVSNEEDED", 485, CONST_CS|CONST_PERSISTENT);
1080 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_NOOPERHOST", 491, CONST_CS|CONST_PERSISTENT);
1081 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_UMODEUNKNOWNFLAG", 501, CONST_CS|CONST_PERSISTENT);
1082 REGISTER_NS_LONG_CONSTANT("irc\\client", "ERR_USERSDONTMATCH", 502, CONST_CS|CONST_PERSISTENT);
1083
1084 return SUCCESS;
1085 }
1086
1087
1088 PHP_MSHUTDOWN_FUNCTION(ircclient)
1089 {
1090 return SUCCESS;
1091 }
1092
1093
1094
1095 PHP_RINIT_FUNCTION(ircclient)
1096 {
1097 return SUCCESS;
1098 }
1099
1100
1101
1102 PHP_RSHUTDOWN_FUNCTION(ircclient)
1103 {
1104 return SUCCESS;
1105 }
1106
1107
1108 PHP_MINFO_FUNCTION(ircclient)
1109 {
1110 php_info_print_table_start();
1111 php_info_print_table_header(2, "ircclient support", "enabled");
1112 php_info_print_table_end();
1113
1114 }
1115
1116
1117
1118
1119