From 073067ba96ac99ed5696d27f13ca6c8124986e74 Mon Sep 17 00:00:00 2001
From: Jan-E <github@ehrhardt.nl>
Date: Thu, 28 Jun 2018 08:43:48 +0200
Subject: [PATCH] @dstogov Fixed PHP7 port. Restored commented reference
 counting.

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
[Retrieved from:
https://github.com/php/pecl-networking-ssh2/commit/073067ba96ac99ed5696d27f13ca6c8124986e74]
---
 php_ssh2.h            |  14 ++---
 ssh2.c                |  26 ++++-----
 ssh2_fopen_wrappers.c | 129 ++++++++++++++++++------------------------
 ssh2_sftp.c           |  59 +++++++++----------
 4 files changed, 102 insertions(+), 126 deletions(-)

diff --git a/php_ssh2.h b/php_ssh2.h
index d010ff9..2bbaa26 100644
--- a/php_ssh2.h
+++ b/php_ssh2.h
@@ -73,14 +73,14 @@ typedef struct _php_ssh2_sftp_data {
 	LIBSSH2_SESSION *session;
 	LIBSSH2_SFTP *sftp;
 
-	int session_rsrcid;
+	zend_resource *session_rsrc;
 } php_ssh2_sftp_data;
 
 typedef struct _php_ssh2_listener_data {
 	LIBSSH2_SESSION *session;
 	LIBSSH2_LISTENER *listener;
 
-	int session_rsrcid;
+	zend_resource *session_rsrc;
 } php_ssh2_listener_data;
 
 #include "libssh2_publickey.h"
@@ -89,7 +89,7 @@ typedef struct _php_ssh2_pkey_subsys_data {
 	LIBSSH2_SESSION *session;
 	LIBSSH2_PUBLICKEY *pkey;
 
-	int session_rsrcid;
+	zend_resource *session_rsrc;
 } php_ssh2_pkey_subsys_data;
 
 #define SSH2_FETCH_NONAUTHENTICATED_SESSION(session, zsession) \
@@ -118,8 +118,8 @@ typedef struct _php_ssh2_channel_data {
 	char is_blocking;
 	long timeout;
 
-	/* Resource ID */
-	int session_rsrcid;
+	/* Resource */
+	zend_resource *session_rsrc;
 
 	/* Allow one stream to be closed while the other is kept open */
 	unsigned char *refcount;
@@ -151,8 +151,8 @@ PHP_FUNCTION(ssh2_sftp_realpath);
 LIBSSH2_SESSION *php_ssh2_session_connect(char *host, int port, zval *methods, zval *callbacks);
 void php_ssh2_sftp_dtor(zend_resource *rsrc);
 php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stream_context *context,
-											LIBSSH2_SESSION **psession, int *presource_id,
-											LIBSSH2_SFTP **psftp, int *psftp_rsrcid);
+											LIBSSH2_SESSION **psession, zend_resource **presource,
+											LIBSSH2_SFTP **psftp, zend_resource **psftp_rsrc);
 
 extern php_stream_ops php_ssh2_channel_stream_ops;
 
diff --git a/ssh2.c b/ssh2.c
index e73867e..849766b 100644
--- a/ssh2.c
+++ b/ssh2.c
@@ -772,9 +772,8 @@ PHP_FUNCTION(ssh2_forward_listen)
 
 	data = emalloc(sizeof(php_ssh2_listener_data));
 	data->session = session;
-	data->session_rsrcid = Z_LVAL_P(zsession);
-	//TODO Sean-Der
-	//zend_list_addref(data->session_rsrcid);
+	data->session_rsrc = Z_RES_P(zsession);
+	Z_ADDREF_P(zsession);
 	data->listener = listener;
 
 	RETURN_RES(zend_register_resource(data, le_ssh2_listener));
@@ -810,7 +809,7 @@ PHP_FUNCTION(ssh2_forward_accept)
 	channel_data->channel = channel;
 	channel_data->streamid = 0;
 	channel_data->is_blocking = 0;
-	channel_data->session_rsrcid = data->session_rsrcid;
+	channel_data->session_rsrc = data->session_rsrc;
 	channel_data->refcount = NULL;
 
 	stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
@@ -820,8 +819,12 @@ PHP_FUNCTION(ssh2_forward_accept)
 		libssh2_channel_free(channel);
 		RETURN_FALSE;
 	}
-	//TODO Sean-Der
-	//zend_list_addref(channel_data->session_rsrcid);
+
+#if PHP_VERSION_ID < 70300
+	GC_REFCOUNT(channel_data->session_rsrc)++;
+#else
+	GC_ADDREF(channel_data->session_rsrc);
+#endif
 
 	php_stream_to_zval(stream, return_value);
 }
@@ -975,9 +978,8 @@ PHP_FUNCTION(ssh2_publickey_init)
 
 	data = emalloc(sizeof(php_ssh2_pkey_subsys_data));
 	data->session = session;
-	data->session_rsrcid = Z_RES_P(zsession)->handle;
-	//TODO Sean-Der
-	//zend_list_addref(data->session_rsrcid);
+	data->session_rsrc = Z_RES_P(zsession);
+	Z_ADDREF_P(zsession);
 	data->pkey = pkey;
 
 	RETURN_RES(zend_register_resource(data, le_ssh2_pkey_subsys));
@@ -1280,8 +1282,7 @@ static void php_ssh2_listener_dtor(zend_resource *rsrc)
 	LIBSSH2_LISTENER *listener = data->listener;
 
 	libssh2_channel_forward_cancel(listener);
-	// TODO Sean-Der
-	//zend_list_delete(data->session_rsrcid);
+	zend_list_delete(data->session_rsrc);
 	efree(data);
 }
 
@@ -1291,8 +1292,7 @@ static void php_ssh2_pkey_subsys_dtor(zend_resource *rsrc)
 	LIBSSH2_PUBLICKEY *pkey = data->pkey;
 
 	libssh2_publickey_shutdown(pkey);
-	// TODO Sean-Der
-	//zend_list_delete(data->session_rsrcid);
+	zend_list_delete(data->session_rsrc);
 	efree(data);
 }
 
diff --git a/ssh2_fopen_wrappers.c b/ssh2_fopen_wrappers.c
index f2f3475..c4eb9dc 100644
--- a/ssh2_fopen_wrappers.c
+++ b/ssh2_fopen_wrappers.c
@@ -47,11 +47,9 @@ static size_t php_ssh2_channel_stream_write(php_stream *stream, const char *buf,
 	php_ssh2_channel_data *abstract = (php_ssh2_channel_data*)stream->abstract;
 	size_t writestate;
 	LIBSSH2_SESSION *session;
-	zval *zresource;
 
 	libssh2_channel_set_blocking(abstract->channel, abstract->is_blocking);
-	zresource = php_ssh2_zval_from_resource_handle(abstract->session_rsrcid);
-	session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
+	session = (LIBSSH2_SESSION *)zend_fetch_resource(abstract->session_rsrc, PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
 
 
 
@@ -90,12 +88,10 @@ static size_t php_ssh2_channel_stream_read(php_stream *stream, char *buf, size_t
 	php_ssh2_channel_data *abstract = (php_ssh2_channel_data*)stream->abstract;
 	ssize_t readstate;
 	LIBSSH2_SESSION *session;
-	zval *zresource;
 
 	stream->eof = libssh2_channel_eof(abstract->channel);
 	libssh2_channel_set_blocking(abstract->channel, abstract->is_blocking);
-	zresource = php_ssh2_zval_from_resource_handle(abstract->session_rsrcid);
-	session = (LIBSSH2_SESSION *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
+	session = (LIBSSH2_SESSION *)zend_fetch_resource(abstract->session_rsrc, PHP_SSH2_SESSION_RES_NAME, le_ssh2_session);
 
 #ifdef PHP_SSH2_SESSION_TIMEOUT
 	if (abstract->is_blocking) {
@@ -137,8 +133,7 @@ static int php_ssh2_channel_stream_close(php_stream *stream, int close_handle)
 		}
 		libssh2_channel_eof(abstract->channel);
 		libssh2_channel_free(abstract->channel);
-		//TODO Sean-Der
-		//zend_list_delete(abstract->session_rsrcid);
+		zend_list_delete(abstract->session_rsrc);
 	}
 	efree(abstract);
 
@@ -207,8 +202,8 @@ php_stream_ops php_ssh2_channel_stream_ops = {
  * Parse an ssh2.*:// path
  */
 php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stream_context *context,
-											LIBSSH2_SESSION **psession, int *presource_id,
-											LIBSSH2_SFTP **psftp, int *psftp_rsrcid)
+											LIBSSH2_SESSION **psession, zend_resource **presource,
+											LIBSSH2_SFTP **psftp, zend_resource **psftp_rsrc)
 {
 	php_ssh2_sftp_data *sftp_data = NULL;
 	LIBSSH2_SESSION *session;
@@ -283,11 +278,10 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
 			sftp_data = (php_ssh2_sftp_data *)zend_fetch_resource(Z_RES_P(zresource), PHP_SSH2_SFTP_RES_NAME, le_ssh2_sftp);
 			if (sftp_data) {
 				/* Want the sftp layer */
-				//TODO Sean-Der
-				//zend_list_addref(resource_id);
-				*psftp_rsrcid = resource_id;
+				Z_ADDREF_P(zresource);
+				*psftp_rsrc = Z_RES_P(zresource);
 				*psftp = sftp_data->sftp;
-				*presource_id = sftp_data->session_rsrcid;
+				*presource = sftp_data->session_rsrc;
 				*psession = sftp_data->session;
 				return resource;
 			}
@@ -305,18 +299,16 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
 				sftp_data = emalloc(sizeof(php_ssh2_sftp_data));
 				sftp_data->sftp = sftp;
 				sftp_data->session = session;
-				sftp_data->session_rsrcid = resource_id;
-				//TODO Sean-Der
-				//zend_list_addref(resource_id);
-				*psftp_rsrcid = zend_register_resource(sftp_data, le_ssh2_sftp)->handle;
+				sftp_data->session_rsrc = Z_RES_P(zresource);
+				Z_ADDREF_P(zresource);
+				*psftp_rsrc = zend_register_resource(sftp_data, le_ssh2_sftp);
 				*psftp = sftp;
-				*presource_id = resource_id;
+				*presource = Z_RES_P(zresource);
 				*psession = session;
 				return resource;
 			}
-			//TODO Sean-Der
-			//zend_list_addref(resource_id);
-			*presource_id = resource_id;
+			Z_ADDREF_P(zresource);
+			*presource = Z_RES_P(zresource);
 			*psession = session;
 			return resource;
 		}
@@ -330,9 +322,9 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
 		sftp_data = (php_ssh2_sftp_data *)zend_fetch_resource(Z_RES_P(tmpzval), PHP_SSH2_SFTP_RES_NAME, le_ssh2_sftp);
 		if (sftp_data) {
 			Z_ADDREF_P(tmpzval);
-			*psftp_rsrcid = Z_LVAL_P(tmpzval);
+			*psftp_rsrc = Z_RES_P(tmpzval);
 			*psftp = sftp_data->sftp;
-			*presource_id = sftp_data->session_rsrcid;
+			*presource = sftp_data->session_rsrc;
 			*psession = sftp_data->session;
 			return resource;
 		}
@@ -354,17 +346,17 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
 				sftp_data = emalloc(sizeof(php_ssh2_sftp_data));
 				sftp_data->sftp = sftp;
 				sftp_data->session = session;
-				sftp_data->session_rsrcid = Z_LVAL_P(tmpzval);
+				sftp_data->session_rsrc = Z_RES_P(tmpzval);
 				Z_ADDREF_P(tmpzval);
-				*psftp_rsrcid = zend_register_resource(sftp_data, le_ssh2_sftp)->handle;
+				*psftp_rsrc = zend_register_resource(sftp_data, le_ssh2_sftp);
 				*psftp = sftp;
-				*presource_id = Z_RES_P(tmpzval)->handle;
+				*presource = Z_RES_P(tmpzval);
 				*psession = session;
 				return resource;
 			}
 			Z_ADDREF_P(tmpzval);
 			*psession = session;
-			*presource_id = Z_LVAL_P(tmpzval);
+			*presource = Z_RES_P(tmpzval);
 			return resource;
 		}
 	}
@@ -465,8 +457,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
 
 	/* Auth failure */
 	php_url_free(resource);
-	//TODO Sean-Der
-	//zend_list_delete(Z_LVAL(zsession));
+	zend_list_delete(Z_RES(zsession));
 	return NULL;
 
 session_authed:
@@ -480,24 +471,22 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
 		sftp = libssh2_sftp_init(session);
 		if (!sftp) {
 			php_url_free(resource);
-			//TODO Sean-Der
-			//zend_list_delete(Z_LVAL(zsession));
+			zend_list_delete(Z_RES(zsession));
 			return NULL;
 		}
 
 		sftp_data = emalloc(sizeof(php_ssh2_sftp_data));
 		sftp_data->session = session;
 		sftp_data->sftp = sftp;
-		sftp_data->session_rsrcid = Z_LVAL(zsession);
+		sftp_data->session_rsrc = Z_RES(zsession);
 
 		//TODO Sean-Der
 		//ZEND_REGISTER_RESOURCE(sftp_data, le_ssh2_sftp);
-		*psftp_rsrcid = Z_LVAL(zsftp);
+		*psftp_rsrc = Z_RES(zsftp);
 		*psftp = sftp;
 	}
 
-	//TODO may be undefined
-	*presource_id = Z_LVAL(zsession);
+	*presource = Z_RES(zsession);
 	*psession = session;
 
 	return resource;
@@ -511,7 +500,7 @@ php_url *php_ssh2_fopen_wraper_parse_path(const char *path, char *type, php_stre
 /* {{{ php_ssh2_shell_open
  * Make a stream from a session
  */
-static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id, char *term, int term_len, zval *environment, long width, long height, long type)
+static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, zend_resource *resource, char *term, int term_len, zval *environment, long width, long height, long type)
 {
 	LIBSSH2_CHANNEL *channel;
 	php_ssh2_channel_data *channel_data;
@@ -578,7 +567,7 @@ static php_stream *php_ssh2_shell_open(LIBSSH2_SESSION *session, int resource_id
 	channel_data->streamid = 0;
 	channel_data->is_blocking = 0;
 	channel_data->timeout = 0;
-	channel_data->session_rsrcid = resource_id;
+	channel_data->session_rsrc = resource;
 	channel_data->refcount = NULL;
 
 	stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
@@ -599,11 +588,12 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con
 	zend_long width = PHP_SSH2_DEFAULT_TERM_WIDTH;
 	zend_long height = PHP_SSH2_DEFAULT_TERM_HEIGHT;
 	zend_long type = PHP_SSH2_DEFAULT_TERM_UNIT;
-	int resource_id = 0, terminal_len = sizeof(PHP_SSH2_DEFAULT_TERMINAL) - 1;
+	zend_resource *rsrc = NULL;
+	int terminal_len = sizeof(PHP_SSH2_DEFAULT_TERMINAL) - 1;
 	php_url *resource;
 	char *s;
 
-	resource = php_ssh2_fopen_wraper_parse_path(path, "shell", context, &session, &resource_id, NULL, NULL);
+	resource = php_ssh2_fopen_wraper_parse_path(path, "shell", context, &session, &rsrc, NULL, NULL);
 	if (!resource || !session) {
 		return NULL;
 	}
@@ -677,10 +667,9 @@ static php_stream *php_ssh2_fopen_wrapper_shell(php_stream_wrapper *wrapper, con
 	/* TODO: Accept resolution and environment vars as URL style parameters
 	 * ssh2.shell://hostorresource/terminal/99x99c?envvar=envval&envvar=envval....
 	 */
-	stream = php_ssh2_shell_open(session, resource_id, terminal, terminal_len, environment, width, height, type);
+	stream = php_ssh2_shell_open(session, rsrc, terminal, terminal_len, environment, width, height, type);
 	if (!stream) {
-		//TODO Sean-Der
-		//zend_list_delete(resource_id);
+		zend_list_delete(rsrc);
 	}
 	php_url_free(resource);
 
@@ -730,7 +719,7 @@ PHP_FUNCTION(ssh2_shell)
 
 	SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession);
 
-	stream = php_ssh2_shell_open(session, Z_RES_P(zsession)->handle, term, term_len, environment, width, height, type);
+	stream = php_ssh2_shell_open(session, Z_RES_P(zsession), term, term_len, environment, width, height, type);
 	if (!stream) {
 		RETURN_FALSE;
 	}
@@ -749,7 +738,7 @@ PHP_FUNCTION(ssh2_shell)
 /* {{{ php_ssh2_exec_command
  * Make a stream from a session
  */
-static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_id, char *command, char *term, int term_len, zval *environment, long width, long height, long type)
+static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, zend_resource *rsrc, char *command, char *term, int term_len, zval *environment, long width, long height, long type)
 {
 	LIBSSH2_CHANNEL *channel;
 	php_ssh2_channel_data *channel_data;
@@ -819,7 +808,7 @@ static php_stream *php_ssh2_exec_command(LIBSSH2_SESSION *session, int resource_
 	channel_data->streamid = 0;
 	channel_data->is_blocking = 0;
 	channel_data->timeout = 0;
-	channel_data->session_rsrcid = resource_id;
+	channel_data->session_rsrc = rsrc;
 	channel_data->refcount = NULL;
 
 	stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
@@ -836,7 +825,7 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons
 	LIBSSH2_SESSION *session = NULL;
 	php_stream *stream;
 	zval *tmpzval, *environment = NULL;
-	int resource_id = 0;
+	zend_resource *rsrc = NULL;
 	php_url *resource;
 	char *terminal = NULL;
 	int terminal_len = 0;
@@ -844,14 +833,13 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons
 	long height = PHP_SSH2_DEFAULT_TERM_HEIGHT;
 	long type = PHP_SSH2_DEFAULT_TERM_UNIT;
 
-	resource = php_ssh2_fopen_wraper_parse_path(path, "exec", context, &session, &resource_id, NULL, NULL);
+	resource = php_ssh2_fopen_wraper_parse_path(path, "exec", context, &session, &rsrc, NULL, NULL);
 	if (!resource || !session) {
 		return NULL;
 	}
 	if (!resource->path) {
 		php_url_free(resource);
-		//TODO Sean-Der
-		//zend_list_delete(resource_id);
+		zend_list_delete(rsrc);
 		return NULL;
 	}
 
@@ -893,10 +881,9 @@ static php_stream *php_ssh2_fopen_wrapper_exec(php_stream_wrapper *wrapper, cons
 		zval_ptr_dtor(copyval);
 	}
 
-	stream = php_ssh2_exec_command(session, resource_id, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type);
+	stream = php_ssh2_exec_command(session, rsrc, SSH2_URL_STR(resource->path) + 1, terminal, terminal_len, environment, width, height, type);
 	if (!stream) {
-		// TODO Sean-Der
-		//zend_list_delete(resource_id);
+		zend_list_delete(rsrc);
 	}
 	php_url_free(resource);
 
@@ -963,7 +950,7 @@ PHP_FUNCTION(ssh2_exec)
 
 	SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession);
 
-	stream = php_ssh2_exec_command(session, Z_RES_P(zsession)->handle, command, term, term_len, environment, width, height, type);
+	stream = php_ssh2_exec_command(session, Z_RES_P(zsession), command, term, term_len, environment, width, height, type);
 	if (!stream) {
 		RETURN_FALSE;
 	}
@@ -982,7 +969,7 @@ PHP_FUNCTION(ssh2_exec)
 /* {{{ php_ssh2_scp_xfer
  * Make a stream from a session
  */
-static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, int resource_id, char *filename)
+static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, zend_resource *rsrc, char *filename)
 {
 	LIBSSH2_CHANNEL *channel;
 	php_ssh2_channel_data *channel_data;
@@ -1002,7 +989,7 @@ static php_stream *php_ssh2_scp_xfer(LIBSSH2_SESSION *session, int resource_id,
 	channel_data->streamid = 0;
 	channel_data->is_blocking = 0;
 	channel_data->timeout = 0;
-	channel_data->session_rsrcid = resource_id;
+	channel_data->session_rsrc = rsrc;
 	channel_data->refcount = NULL;
 
 	stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r");
@@ -1018,28 +1005,26 @@ static php_stream *php_ssh2_fopen_wrapper_scp(php_stream_wrapper *wrapper, const
 {
 	LIBSSH2_SESSION *session = NULL;
 	php_stream *stream;
-	int resource_id = 0;
+	zend_resource *rsrc = NULL;
 	php_url *resource;
 
 	if (strchr(mode, '+') || strchr(mode, 'a') || strchr(mode, 'w')) {
 		return NULL;
 	}
 
-	resource = php_ssh2_fopen_wraper_parse_path(path, "scp", context, &session, &resource_id, NULL, NULL);
+	resource = php_ssh2_fopen_wraper_parse_path(path, "scp", context, &session, &rsrc, NULL, NULL);
 	if (!resource || !session) {
 		return NULL;
 	}
 	if (!resource->path) {
 		php_url_free(resource);
-		//TODO Sean-Der
-		//zend_list_delete(resource_id);
+		zend_list_delete(rsrc);
 		return NULL;
 	}
 
-	stream = php_ssh2_scp_xfer(session, resource_id, SSH2_URL_STR(resource->path));
+	stream = php_ssh2_scp_xfer(session, rsrc, SSH2_URL_STR(resource->path));
 	if (!stream) {
-		//TODO Sean-Der
-		//zend_list_delete(resource_id);
+		zend_list_delete(rsrc);
 	}
 	php_url_free(resource);
 
@@ -1231,7 +1216,7 @@ PHP_FUNCTION(ssh2_scp_send)
 /* {{{ php_ssh2_direct_tcpip
  * Make a stream from a session
  */
-static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, int resource_id, char *host, int port)
+static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, zend_resource *rsrc, char *host, int port)
 {
 	LIBSSH2_CHANNEL *channel;
 	php_ssh2_channel_data *channel_data;
@@ -1251,7 +1236,7 @@ static php_stream *php_ssh2_direct_tcpip(LIBSSH2_SESSION *session, int resource_
 	channel_data->streamid = 0;
 	channel_data->is_blocking = 0;
 	channel_data->timeout = 0;
-	channel_data->session_rsrcid = resource_id;
+	channel_data->session_rsrc = rsrc;
 	channel_data->refcount = NULL;
 
 	stream = php_stream_alloc(&php_ssh2_channel_stream_ops, channel_data, 0, "r+");
@@ -1270,9 +1255,9 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co
 	php_url *resource;
 	char *host = NULL;
 	int port = 0;
-	int resource_id = 0;
+	zend_resource *rsrc;
 
-	resource = php_ssh2_fopen_wraper_parse_path(path, "tunnel", context, &session, &resource_id, NULL, NULL);
+	resource = php_ssh2_fopen_wraper_parse_path(path, "tunnel", context, &session, &rsrc, NULL, NULL);
 	if (!resource || !session) {
 		return NULL;
 	}
@@ -1303,15 +1288,13 @@ static php_stream *php_ssh2_fopen_wrapper_tunnel(php_stream_wrapper *wrapper, co
 	if ((port <= 0) || (port > 65535) || !host || (strlen(host) == 0)) {
 		/* Invalid connection criteria */
 		php_url_free(resource);
-		//TODO Sean-Der
-		//zend_list_delete(resource_id);
+		zend_list_delete(rsrc);
 		return NULL;
 	}
 
-	stream = php_ssh2_direct_tcpip(session, resource_id, host, port);
+	stream = php_ssh2_direct_tcpip(session, rsrc, host, port);
 	if (!stream) {
-		// TODO Sean-Der
-		//zend_list_delete(resource_id);
+		zend_list_delete(rsrc);
 	}
 	php_url_free(resource);
 
@@ -1352,7 +1335,7 @@ PHP_FUNCTION(ssh2_tunnel)
 
 	SSH2_FETCH_AUTHENTICATED_SESSION(session, zsession);
 
-	stream = php_ssh2_direct_tcpip(session, Z_RES_P(zsession)->handle, host, port);
+	stream = php_ssh2_direct_tcpip(session, Z_RES_P(zsession), host, port);
 	if (!stream) {
 		RETURN_FALSE;
 	}
diff --git a/ssh2_sftp.c b/ssh2_sftp.c
index 6332be8..256fc70 100644
--- a/ssh2_sftp.c
+++ b/ssh2_sftp.c
@@ -40,8 +40,7 @@ void php_ssh2_sftp_dtor(zend_resource *rsrc)
 
 	libssh2_sftp_shutdown(data->sftp);
 
-	// TODO Sean-Der
-	//zend_list_delete(data->session_rsrcid);
+	zend_list_delete(data->session_rsrc);
 
 	efree(data);
 }
@@ -50,7 +49,7 @@ void php_ssh2_sftp_dtor(zend_resource *rsrc)
    * SFTP File Ops *
    ***************** */
 
-inline unsigned long php_ssh2_parse_fopen_modes(char *openmode) {
+unsigned long php_ssh2_parse_fopen_modes(char *openmode) {
 	unsigned long flags = 0;
 
 	if (strchr(openmode, 'a')) {
@@ -101,7 +100,7 @@ inline int php_ssh2_sftp_attr2ssb(php_stream_statbuf *ssb, LIBSSH2_SFTP_ATTRIBUT
 typedef struct _php_ssh2_sftp_handle_data {
 	LIBSSH2_SFTP_HANDLE *handle;
 
-	long sftp_rsrcid;
+	zend_resource *sftp_rsrc;
 } php_ssh2_sftp_handle_data;
 
 /* {{{ php_ssh2_sftp_stream_write
@@ -139,8 +138,7 @@ static int php_ssh2_sftp_stream_close(php_stream *stream, int close_handle)
 	php_ssh2_sftp_handle_data *data = (php_ssh2_sftp_handle_data*)stream->abstract;
 
 	libssh2_sftp_close(data->handle);
-	//TODO Sean-Der
-	//zend_list_delete(data->sftp_rsrcid);
+	zend_list_delete(data->sftp_rsrc);
 	efree(data);
 
 	return 0;
@@ -226,12 +224,12 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons
 	LIBSSH2_SFTP *sftp = NULL;
 	LIBSSH2_SFTP_HANDLE *handle;
 	php_stream *stream;
-	int resource_id = 0, sftp_rsrcid = 0;
+	zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
 	php_url *resource;
 	unsigned long flags;
 	long perms = 0644;
 
-	resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
+	resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
 	if (!resource || !session || !sftp) {
 		return NULL;
 	}
@@ -242,20 +240,18 @@ static php_stream *php_ssh2_sftp_stream_opener(php_stream_wrapper *wrapper, cons
 	if (!handle) {
 		php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename);
 		php_url_free(resource);
-		//TODO Sean-Der
-		//zend_list_delete(sftp_rsrcid);
+		zend_list_delete(sftp_rsrc);
 		return NULL;
 	}
 
 	data = emalloc(sizeof(php_ssh2_sftp_handle_data));
 	data->handle = handle;
-	data->sftp_rsrcid = sftp_rsrcid;
+	data->sftp_rsrc = sftp_rsrc;
 
 	stream = php_stream_alloc(&php_ssh2_sftp_stream_ops, data, 0, mode);
 	if (!stream) {
 		libssh2_sftp_close(handle);
-		// TODO Sean-Der
-		//zend_list_delete(sftp_rsrcid);
+		zend_list_delete(sftp_rsrc);
 		efree(data);
 	}
 	php_url_free(resource);
@@ -303,8 +299,7 @@ static int php_ssh2_sftp_dirstream_close(php_stream *stream, int close_handle)
 	php_ssh2_sftp_handle_data *data = (php_ssh2_sftp_handle_data*)stream->abstract;
 
 	libssh2_sftp_close(data->handle);
-	//TODO Sean_der
-	//zend_list_delete(data->sftp_rsrcid);
+	zend_list_delete(data->sftp_rsrc);
 	efree(data);
 
 	return 0;
@@ -333,10 +328,10 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c
 	LIBSSH2_SFTP *sftp = NULL;
 	LIBSSH2_SFTP_HANDLE *handle;
 	php_stream *stream;
-	int resource_id = 0, sftp_rsrcid = 0;
+	zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
 	php_url *resource;
 
-	resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
+	resource = php_ssh2_fopen_wraper_parse_path(filename, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
 	if (!resource || !session || !sftp) {
 		return NULL;
 	}
@@ -345,20 +340,18 @@ static php_stream *php_ssh2_sftp_dirstream_opener(php_stream_wrapper *wrapper, c
 	if (!handle) {
 		php_error_docref(NULL, E_WARNING, "Unable to open %s on remote host", filename);
 		php_url_free(resource);
-		//TODO Sean-Der
-		//zend_list_delete(sftp_rsrcid);
+		zend_list_delete(sftp_rsrc);
 		return NULL;
 	}
 
 	data = emalloc(sizeof(php_ssh2_sftp_handle_data));
 	data->handle = handle;
-	data->sftp_rsrcid = sftp_rsrcid;
+	data->sftp_rsrc = sftp_rsrc;
 
 	stream = php_stream_alloc(&php_ssh2_sftp_dirstream_ops, data, 0, mode);
 	if (!stream) {
 		libssh2_sftp_close(handle);
-		//TODO Sean-Der
-		//zend_list_delete(sftp_rsrcid);
+		zend_list_delete(sftp_rsrc);
 		efree(data);
 	}
 	php_url_free(resource);
@@ -378,10 +371,10 @@ static int php_ssh2_sftp_urlstat(php_stream_wrapper *wrapper, const char *url, i
 	LIBSSH2_SFTP_ATTRIBUTES attrs;
 	LIBSSH2_SESSION *session = NULL;
 	LIBSSH2_SFTP *sftp = NULL;
-	int resource_id = 0, sftp_rsrcid = 0;
+	zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
 	php_url *resource;
 
-	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
+	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
 	if (!resource || !session || !sftp || !resource->path) {
 		return -1;
 	}
@@ -408,11 +401,11 @@ static int php_ssh2_sftp_unlink(php_stream_wrapper *wrapper, const char *url, in
 {
 	LIBSSH2_SESSION *session = NULL;
 	LIBSSH2_SFTP *sftp = NULL;
-	int resource_id = 0, sftp_rsrcid = 0;
+	zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
 	php_url *resource;
 	int result;
 
-	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
+	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
 	if (!resource || !session || !sftp || !resource->path) {
 		if (resource) {
 			php_url_free(resource);
@@ -436,7 +429,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro
 {
 	LIBSSH2_SESSION *session = NULL;
 	LIBSSH2_SFTP *sftp = NULL;
-	int resource_id = 0, sftp_rsrcid = 0;
+	zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
 	php_url *resource, *resource_to;
 	int result;
 
@@ -453,7 +446,7 @@ static int php_ssh2_sftp_rename(php_stream_wrapper *wrapper, const char *url_fro
 		return 0;
 	}
 
-	resource = php_ssh2_fopen_wraper_parse_path(url_from, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
+	resource = php_ssh2_fopen_wraper_parse_path(url_from, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
 	if (!resource || !session || !sftp || !resource->path) {
 		if (resource) {
 			php_url_free(resource);
@@ -479,11 +472,11 @@ static int php_ssh2_sftp_mkdir(php_stream_wrapper *wrapper, const char *url, int
 {
 	LIBSSH2_SESSION *session = NULL;
 	LIBSSH2_SFTP *sftp = NULL;
-	int resource_id = 0, sftp_rsrcid = 0;
+	zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
 	php_url *resource;
 	int result;
 
-	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
+	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
 	if (!resource || !session || !sftp || !resource->path) {
 		if (resource) {
 			php_url_free(resource);
@@ -515,11 +508,11 @@ static int php_ssh2_sftp_rmdir(php_stream_wrapper *wrapper, const char *url, int
 {
 	LIBSSH2_SESSION *session = NULL;
 	LIBSSH2_SFTP *sftp = NULL;
-	int resource_id = 0, sftp_rsrcid = 0;
+	zend_resource *rsrc = NULL, *sftp_rsrc = NULL;
 	php_url *resource;
 	int result;
 
-	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &resource_id, &sftp, &sftp_rsrcid);
+	resource = php_ssh2_fopen_wraper_parse_path(url, "sftp", context, &session, &rsrc, &sftp, &sftp_rsrc);
 	if (!resource || !session || !sftp || !resource->path) {
 		if (resource) {
 			php_url_free(resource);
@@ -591,7 +584,7 @@ PHP_FUNCTION(ssh2_sftp)
 	data = emalloc(sizeof(php_ssh2_sftp_data));
 	data->session = session;
 	data->sftp = sftp;
-	data->session_rsrcid = Z_RES_P(zsession)->handle;
+	data->session_rsrc = Z_RES_P(zsession);
 	Z_ADDREF_P(zsession);
 
 	RETURN_RES(zend_register_resource(data, le_ssh2_sftp));
