cleanups & includes
[m6w6/ext-http] / php_http_exception.c
1 /*
2 +--------------------------------------------------------------------+
3 | PECL :: http |
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) 2004-2010, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
11 */
12
13 /* $Id: http_exception_object.c 292841 2009-12-31 08:48:57Z mike $ */
14
15 #include "php_http.h"
16
17 #include <Zend/zend_exceptions.h>
18
19 #ifndef PHP_HTTP_DBG_EXCEPTIONS
20 # define PHP_HTTP_DBG_EXCEPTIONS 0
21 #endif
22
23 zend_class_entry *PHP_HTTP_EX_DEF_CE;
24 zend_class_entry *PHP_HTTP_EX_CE(runtime);
25 zend_class_entry *PHP_HTTP_EX_CE(header);
26 zend_class_entry *PHP_HTTP_EX_CE(malformed_headers);
27 zend_class_entry *PHP_HTTP_EX_CE(request_method);
28 zend_class_entry *PHP_HTTP_EX_CE(message);
29 zend_class_entry *PHP_HTTP_EX_CE(message_type);
30 zend_class_entry *PHP_HTTP_EX_CE(invalid_param);
31 zend_class_entry *PHP_HTTP_EX_CE(encoding);
32 zend_class_entry *PHP_HTTP_EX_CE(request);
33 zend_class_entry *PHP_HTTP_EX_CE(request_pool);
34 zend_class_entry *PHP_HTTP_EX_CE(socket);
35 zend_class_entry *PHP_HTTP_EX_CE(response);
36 zend_class_entry *PHP_HTTP_EX_CE(url);
37 zend_class_entry *PHP_HTTP_EX_CE(querystring);
38 zend_class_entry *PHP_HTTP_EX_CE(cookie);
39
40 zend_function_entry php_http_exception_method_entry[] = {
41 EMPTY_FUNCTION_ENTRY
42 };
43
44 #if PHP_HTTP_DBG_EXCEPTIONS
45 static void php_http_exception_hook(zval *ex TSRMLS_DC)
46 {
47 if (ex) {
48 zval *m = zend_read_property(Z_OBJCE_P(ex), ex, "message", lenof("message"), 0 TSRMLS_CC);
49 fprintf(stderr, "*** Threw exception '%s'\n", Z_STRVAL_P(m));
50 } else {
51 fprintf(stderr, "*** Threw NULL exception\n");
52 }
53 }
54 #endif
55
56 PHP_MINIT_FUNCTION(http_exception)
57 {
58 PHP_HTTP_REGISTER_EXCEPTION(Exception, PHP_HTTP_EX_DEF_CE, zend_exception_get_default(TSRMLS_C));
59
60 PHP_HTTP_REGISTER_EXCEPTION(RuntimeException, PHP_HTTP_EX_CE(runtime), PHP_HTTP_EX_DEF_CE);
61 PHP_HTTP_REGISTER_EXCEPTION(InvalidParamException, PHP_HTTP_EX_CE(invalid_param), PHP_HTTP_EX_DEF_CE);
62 PHP_HTTP_REGISTER_EXCEPTION(HeaderException, PHP_HTTP_EX_CE(header), PHP_HTTP_EX_DEF_CE);
63 PHP_HTTP_REGISTER_EXCEPTION(MalformedHeadersException, PHP_HTTP_EX_CE(malformed_headers), PHP_HTTP_EX_DEF_CE);
64 PHP_HTTP_REGISTER_EXCEPTION(RequestMethodException, PHP_HTTP_EX_CE(request_method), PHP_HTTP_EX_DEF_CE);
65 PHP_HTTP_REGISTER_EXCEPTION(MessageException, PHP_HTTP_EX_CE(message), PHP_HTTP_EX_DEF_CE);
66 PHP_HTTP_REGISTER_EXCEPTION(MessageTypeException, PHP_HTTP_EX_CE(message_type), PHP_HTTP_EX_DEF_CE);
67 PHP_HTTP_REGISTER_EXCEPTION(EncodingException, PHP_HTTP_EX_CE(encoding), PHP_HTTP_EX_DEF_CE);
68 PHP_HTTP_REGISTER_EXCEPTION(RequestException, PHP_HTTP_EX_CE(request), PHP_HTTP_EX_DEF_CE);
69
70 zend_declare_property_long(PHP_HTTP_EX_CE(request), "curlCode", lenof("curlCode"), 0, ZEND_ACC_PUBLIC TSRMLS_CC);
71
72 PHP_HTTP_REGISTER_EXCEPTION(RequestPoolException, PHP_HTTP_EX_CE(request_pool), PHP_HTTP_EX_DEF_CE);
73 PHP_HTTP_REGISTER_EXCEPTION(SocketException, PHP_HTTP_EX_CE(socket), PHP_HTTP_EX_DEF_CE);
74 PHP_HTTP_REGISTER_EXCEPTION(ResponseException, PHP_HTTP_EX_CE(response), PHP_HTTP_EX_DEF_CE);
75 PHP_HTTP_REGISTER_EXCEPTION(UrlException, PHP_HTTP_EX_CE(url), PHP_HTTP_EX_DEF_CE);
76 PHP_HTTP_REGISTER_EXCEPTION(QueryStringException, PHP_HTTP_EX_CE(querystring), PHP_HTTP_EX_DEF_CE);
77 PHP_HTTP_REGISTER_EXCEPTION(CookieException, PHP_HTTP_EX_CE(cookie), PHP_HTTP_EX_DEF_CE);
78
79 #if PHP_HTTP_DBG_EXCEPTIONS
80 zend_throw_exception_hook = php_http_exception_hook;
81 #endif
82
83 return SUCCESS;
84 }
85
86 zend_class_entry *php_http_exception_get_default(void)
87 {
88 return PHP_HTTP_EX_DEF_CE;
89 }
90
91 zend_class_entry *php_http_exception_get_for_code(long code)
92 {
93 zend_class_entry *ex = PHP_HTTP_EX_DEF_CE;
94
95 switch (code) {
96 case PHP_HTTP_E_RUNTIME: ex = PHP_HTTP_EX_CE(runtime); break;
97 case PHP_HTTP_E_INVALID_PARAM: ex = PHP_HTTP_EX_CE(invalid_param); break;
98 case PHP_HTTP_E_HEADER: ex = PHP_HTTP_EX_CE(header); break;
99 case PHP_HTTP_E_MALFORMED_HEADERS: ex = PHP_HTTP_EX_CE(malformed_headers); break;
100 case PHP_HTTP_E_REQUEST_METHOD: ex = PHP_HTTP_EX_CE(request_method); break;
101 case PHP_HTTP_E_MESSAGE: ex = PHP_HTTP_EX_CE(message); break;
102 case PHP_HTTP_E_MESSAGE_TYPE: ex = PHP_HTTP_EX_CE(message_type); break;
103 case PHP_HTTP_E_ENCODING: ex = PHP_HTTP_EX_CE(encoding); break;
104 case PHP_HTTP_E_REQUEST: ex = PHP_HTTP_EX_CE(request); break;
105 case PHP_HTTP_E_REQUEST_POOL: ex = PHP_HTTP_EX_CE(request_pool); break;
106 case PHP_HTTP_E_SOCKET: ex = PHP_HTTP_EX_CE(socket); break;
107 case PHP_HTTP_E_RESPONSE: ex = PHP_HTTP_EX_CE(response); break;
108 case PHP_HTTP_E_URL: ex = PHP_HTTP_EX_CE(url); break;
109 case PHP_HTTP_E_QUERYSTRING: ex = PHP_HTTP_EX_CE(querystring); break;
110 case PHP_HTTP_E_COOKIE: ex = PHP_HTTP_EX_CE(cookie); break;
111 }
112
113 return ex;
114 }
115
116 /*
117 * Local variables:
118 * tab-width: 4
119 * c-basic-offset: 4
120 * End:
121 * vim600: noet sw=4 ts=4 fdm=marker
122 * vim<600: noet sw=4 ts=4
123 */
124