diff options
| author | Sascha Schumann <sas@php.net> | 1999-09-04 11:25:43 +0000 |
|---|---|---|
| committer | Sascha Schumann <sas@php.net> | 1999-09-04 11:25:43 +0000 |
| commit | 62fc17983a112d640599207e1247419521c42354 (patch) | |
| tree | 6f7f64ec385c494ea89108f7edc52e2e6cd771e9 /ext | |
| parent | 81301ad2a98c51f52e4cbd0b3e96349a740a89ea (diff) | |
| download | php-git-62fc17983a112d640599207e1247419521c42354.tar.gz | |
First try at WDDX serializer
(not active currently)
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/session/session.c | 91 |
1 files changed, 81 insertions, 10 deletions
diff --git a/ext/session/session.c b/ext/session/session.c index 0157868a5b..3ad7fbebc9 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -113,6 +113,16 @@ zend_module_entry session_module_entry = { #define STD_FMT "%s|" #define NOTFOUND_FMT "!%s|" +#define PS_ADD_VARL(name,namelen) \ + zend_hash_update(&PS(vars), name, namelen + 1, 0, 0, NULL) + +#define PS_ADD_VAR(name) PS_ADD_VARL(name, strlen(name)) + +#define PS_DEL_VARL(name,namelen) \ + zend_hash_del(&PS(vars), name, namelen + 1); + +#define PS_DEL_VAR(name) PS_DEL_VARL(name, strlen(name)) + PS_SERIALIZER_ENCODE_FUNC(php) { pval *buf; @@ -147,16 +157,6 @@ PS_SERIALIZER_ENCODE_FUNC(php) return SUCCESS; } -#define PS_ADD_VARL(name,namelen) \ - zend_hash_update(&PS(vars), name, namelen + 1, 0, 0, NULL) - -#define PS_ADD_VAR(name) PS_ADD_VARL(name, strlen(name)) - -#define PS_DEL_VARL(name,namelen) \ - zend_hash_del(&PS(vars), name, namelen + 1); - -#define PS_DEL_VAR(name) PS_DEL_VARL(name, strlen(name)) - PS_SERIALIZER_DECODE_FUNC(php) { const char *p, *q; @@ -195,6 +195,77 @@ PS_SERIALIZER_DECODE_FUNC(php) return SUCCESS; } +#if 0 + +PS_SERIALIZER_ENCODE_FUNC(wddx) +{ + wddx_packet *packet; + char *key; + ELS_FETCH(); + zval **struc; + char *buf; + + packet = _php_wddx_constructor(); + + _php_wddx_packet_start(packet, NULL); + _php_wddx_add_chunk(packet, WDDX_STRUCT_S); + + for(zend_hash_internal_pointer_reset(&PS(vars)); + zend_hash_get_current_key(&PS(vars), &key, NULL) == HASH_KEY_IS_STRING; + zend_hash_move_forward(&PS(vars))) { + if(zend_hash_find(&EG(symbol_table), key, strlen(key) + 1, (void **) &struc) == SUCCESS) { + _php_wddx_serialize_var(packet, *struc, key); + } + } + + _php_wddx_add_chunk(packet, WDDX_STRUCT_E); + _php_wddx_packet_end(packet); + *newstr = _php_wddx_gather(packet); + _php_wddx_destructor(packet); + + if(newlen) *newlen = strlen(*newstr); + + return SUCCESS; +} + +PS_SERIALIZER_DECODE_FUNC(wddx) +{ + zval *retval; + zval **ent; + zval *current; + char *key; + char tmp[128]; + ulong idx; + int hash_type; + ELS_FETCH(); + + retval = (zval *) ecalloc(sizeof(zval), 1); + + _php_wddx_deserialize(val, retval); + + for(zend_hash_internal_pointer_reset(retval->value.ht); + zend_hash_get_current_data(retval->value.ht, (void **) &ent) == SUCCESS; + zend_hash_move_forward(retval->value.ht)) { + hash_type = zend_hash_get_current_key(retval->value.ht, &key, &idx); + + switch(hash_type) { + case HASH_KEY_IS_LONG: + sprintf(tmp, "%ld", idx); + key = tmp; + case HASH_KEY_IS_STRING: + zval_add_ref(ent); + zend_hash_update(&EG(symbol_table), key, strlen(key) + 1, + ent, sizeof(ent), NULL); + } + } + + zval_dtor(retval); + efree(retval); + + return SUCCESS; +} +#endif + static char *_php_session_encode(int *newlen PSLS_DC) { char *ret = NULL; |
