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