push a load of changes before holidays
[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(message_body);
31 zend_class_entry *PHP_HTTP_EX_CE(invalid_param);
32 zend_class_entry *PHP_HTTP_EX_CE(encoding);
33 zend_class_entry *PHP_HTTP_EX_CE(request);
34 zend_class_entry *PHP_HTTP_EX_CE(request_pool);
35 zend_class_entry *PHP_HTTP_EX_CE(request_datashare);
36 zend_class_entry *PHP_HTTP_EX_CE(request_factory);
37 zend_class_entry *PHP_HTTP_EX_CE(socket);
38 zend_class_entry *PHP_HTTP_EX_CE(response);
39 zend_class_entry *PHP_HTTP_EX_CE(url);
40 zend_class_entry *PHP_HTTP_EX_CE(querystring);
41 zend_class_entry *PHP_HTTP_EX_CE(cookie);
42
43 zend_function_entry php_http_exception_method_entry[] = {
44 EMPTY_FUNCTION_ENTRY
45 };
46
47 #if PHP_HTTP_DBG_EXCEPTIONS
48 static void php_http_exception_hook(zval *ex TSRMLS_DC)
49 {
50 if (ex) {
51 zval *m = zend_read_property(Z_OBJCE_P(ex), ex, "message", lenof("message"), 0 TSRMLS_CC);
52 fprintf(stderr, "*** Threw exception '%s'\n", Z_STRVAL_P(m));
53 } else {
54 fprintf(stderr, "*** Threw NULL exception\n");
55 }
56 }
57 #endif
58
59 PHP_MINIT_FUNCTION(http_exception)
60 {
61 PHP_HTTP_REGISTER_EXCEPTION(Exception, PHP_HTTP_EX_DEF_CE, zend_exception_get_default(TSRMLS_C));
62
63 PHP_HTTP_REGISTER_EXCEPTION(RuntimeException, PHP_HTTP_EX_CE(runtime), PHP_HTTP_EX_DEF_CE);
64 PHP_HTTP_REGISTER_EXCEPTION(InvalidParamException, PHP_HTTP_EX_CE(invalid_param), PHP_HTTP_EX_DEF_CE);
65 PHP_HTTP_REGISTER_EXCEPTION(HeaderException, PHP_HTTP_EX_CE(header), PHP_HTTP_EX_DEF_CE);
66 PHP_HTTP_REGISTER_EXCEPTION(MalformedHeadersException, PHP_HTTP_EX_CE(malformed_headers), PHP_HTTP_EX_DEF_CE);
67 PHP_HTTP_REGISTER_EXCEPTION(RequestMethodException, PHP_HTTP_EX_CE(request_method), PHP_HTTP_EX_DEF_CE);
68 PHP_HTTP_REGISTER_EXCEPTION(MessageException, PHP_HTTP_EX_CE(message), PHP_HTTP_EX_DEF_CE);
69 PHP_HTTP_REGISTER_EXCEPTION(MessageTypeException, PHP_HTTP_EX_CE(message_type), PHP_HTTP_EX_DEF_CE);
70 PHP_HTTP_REGISTER_EXCEPTION(MessageBodyException, PHP_HTTP_EX_CE(message_body), PHP_HTTP_EX_DEF_CE);
71 PHP_HTTP_REGISTER_EXCEPTION(EncodingException, PHP_HTTP_EX_CE(encoding), PHP_HTTP_EX_DEF_CE);
72 PHP_HTTP_REGISTER_EXCEPTION(RequestException, PHP_HTTP_EX_CE(request), PHP_HTTP_EX_DEF_CE);
73
74 zend_declare_property_long(PHP_HTTP_EX_CE(request), "curlCode", lenof("curlCode"), 0, ZEND_ACC_PUBLIC TSRMLS_CC);
75
76 PHP_HTTP_REGISTER_EXCEPTION(RequestPoolException, PHP_HTTP_EX_CE(request_pool), PHP_HTTP_EX_DEF_CE);
77 PHP_HTTP_REGISTER_EXCEPTION(RequestDataShareException, PHP_HTTP_EX_CE(request_datashare), PHP_HTTP_EX_DEF_CE);
78 PHP_HTTP_REGISTER_EXCEPTION(RequestFactoryException, PHP_HTTP_EX_CE(request_factory), PHP_HTTP_EX_DEF_CE);
79 PHP_HTTP_REGISTER_EXCEPTION(SocketException, PHP_HTTP_EX_CE(socket), PHP_HTTP_EX_DEF_CE);
80 PHP_HTTP_REGISTER_EXCEPTION(ResponseException, PHP_HTTP_EX_CE(response), PHP_HTTP_EX_DEF_CE);
81 PHP_HTTP_REGISTER_EXCEPTION(UrlException, PHP_HTTP_EX_CE(url), PHP_HTTP_EX_DEF_CE);
82 PHP_HTTP_REGISTER_EXCEPTION(QueryStringException, PHP_HTTP_EX_CE(querystring), PHP_HTTP_EX_DEF_CE);
83 PHP_HTTP_REGISTER_EXCEPTION(CookieException, PHP_HTTP_EX_CE(cookie), PHP_HTTP_EX_DEF_CE);
84
85 #if PHP_HTTP_DBG_EXCEPTIONS
86 zend_throw_exception_hook = php_http_exception_hook;
87 #endif
88
89 return SUCCESS;
90 }
91
92 zend_class_entry *php_http_exception_get_default(void)
93 {
94 return PHP_HTTP_EX_DEF_CE;
95 }
96
97 zend_class_entry *php_http_exception_get_for_code(long code)
98 {
99 zend_class_entry *ex = PHP_HTTP_EX_DEF_CE;
100
101 switch (code) {
102 case PHP_HTTP_E_RUNTIME: ex = PHP_HTTP_EX_CE(runtime); break;
103 case PHP_HTTP_E_INVALID_PARAM: ex = PHP_HTTP_EX_CE(invalid_param); break;
104 case PHP_HTTP_E_HEADER: ex = PHP_HTTP_EX_CE(header); break;
105 case PHP_HTTP_E_MALFORMED_HEADERS: ex = PHP_HTTP_EX_CE(malformed_headers); break;
106 case PHP_HTTP_E_REQUEST_METHOD: ex = PHP_HTTP_EX_CE(request_method); break;
107 case PHP_HTTP_E_MESSAGE: ex = PHP_HTTP_EX_CE(message); break;
108 case PHP_HTTP_E_MESSAGE_TYPE: ex = PHP_HTTP_EX_CE(message_type); break;
109 case PHP_HTTP_E_MESSAGE_BODY: ex = PHP_HTTP_EX_CE(message_body); break;
110 case PHP_HTTP_E_ENCODING: ex = PHP_HTTP_EX_CE(encoding); break;
111 case PHP_HTTP_E_REQUEST: ex = PHP_HTTP_EX_CE(request); break;
112 case PHP_HTTP_E_REQUEST_POOL: ex = PHP_HTTP_EX_CE(request_pool); break;
113 case PHP_HTTP_E_REQUEST_DATASHARE: ex = PHP_HTTP_EX_CE(request_datashare); break;
114 case PHP_HTTP_E_REQUEST_FACTORY: ex = PHP_HTTP_EX_CE(request_factory); break;
115 case PHP_HTTP_E_SOCKET: ex = PHP_HTTP_EX_CE(socket); break;
116 case PHP_HTTP_E_RESPONSE: ex = PHP_HTTP_EX_CE(response); break;
117 case PHP_HTTP_E_URL: ex = PHP_HTTP_EX_CE(url); break;
118 case PHP_HTTP_E_QUERYSTRING: ex = PHP_HTTP_EX_CE(querystring); break;
119 case PHP_HTTP_E_COOKIE: ex = PHP_HTTP_EX_CE(cookie); break;
120 }
121
122 return ex;
123 }
124
125 /*
126 * Local variables:
127 * tab-width: 4
128 * c-basic-offset: 4
129 * End:
130 * vim600: noet sw=4 ts=4 fdm=marker
131 * vim<600: noet sw=4 ts=4
132 */
133