Пример #1
0
static PyObject *
session_channel(SSH2_SessionObj *self)
{
	LIBSSH2_CHANNEL *channel;

	Py_BEGIN_ALLOW_THREADS
	channel = libssh2_channel_open_session(self->session);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_POINTER(channel, self)

	return (PyObject *)SSH2_Channel_New(channel, self);
}
Пример #2
0
static PyObject *
listener_accept(SSH2_ListenerObj *self)
{
	LIBSSH2_CHANNEL *channel;

	Py_BEGIN_ALLOW_THREADS
	channel = libssh2_channel_forward_accept(self->listener);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_POINTER(channel, self->session)

	return (PyObject *)SSH2_Channel_New(channel, self->session);
}
Пример #3
0
static void x11_callback(LIBSSH2_SESSION *session, LIBSSH2_CHANNEL *channel,
                         const char *host, int port, void **abstract) {
	SSH2_SessionObj *session_obj = (SSH2_SessionObj *) *abstract;
	SSH2_ChannelObj *channel_obj = SSH2_Channel_New(channel, session_obj);
	PyObject *rv;
	PyGILState_STATE gstate = PyGILState_Ensure();

	rv = PyObject_CallFunction(session_obj->cb_x11, "Osi", channel_obj, host, port);
	if (rv == NULL)
		PyErr_WriteUnraisable(session_obj->cb_x11);
	else
		Py_DECREF(rv);

	Py_DECREF(channel_obj);
	PyGILState_Release(gstate);
}
Пример #4
0
static PyObject *
session_scp_recv(SSH2_SessionObj *self, PyObject *args)
{
	char *path;
	LIBSSH2_CHANNEL *channel;

	if (!PyArg_ParseTuple(args, "s:scp_recv", &path))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	channel = libssh2_scp_recv(self->session, path, NULL); // &sb
	Py_END_ALLOW_THREADS

	CHECK_RETURN_POINTER(channel, self)

	return (PyObject *)SSH2_Channel_New(channel, self);
}
Пример #5
0
static PyObject *
session_direct_tcpip(SSH2_SessionObj *self, PyObject *args)
{
	char *host;
	char *shost = "127.0.0.1";
	int port;
	int sport = 22;
	LIBSSH2_CHANNEL *channel;

	if (!PyArg_ParseTuple(args, "si|si:direct_tcpip", &host, &port, &shost, &sport))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	channel = libssh2_channel_direct_tcpip_ex(self->session, host, port, shost, sport);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_POINTER(channel, self)

	return (PyObject *)SSH2_Channel_New(channel, self);
}
Пример #6
0
static PyObject *
session_scp_send(SSH2_SessionObj *self, PyObject *args)
{
	char *path;
	int mode;
	unsigned long filesize;
	long mtime = 0;
	long atime = 0;
	LIBSSH2_CHANNEL *channel;

	if (!PyArg_ParseTuple(args, "sik|ll:scp_send", &path, &mode, &filesize, &mtime, &atime))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	channel = libssh2_scp_send_ex(self->session, path, mode, filesize, mtime, atime);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_POINTER(channel, self)

	return (PyObject *)SSH2_Channel_New(channel, self);
}
Пример #7
0
static PyObject *
session_scp_recv(SSH2_SessionObj *self, PyObject *args, PyObject *kwds)
{
	char *path;
	LIBSSH2_CHANNEL *channel;
	struct stat sb;
	PyObject* get_stat = NULL;
	int get_stat_is_true = 0;
	PyObject* chan;
	static char *kwlist[] = {"path", "get_stat", NULL};

	if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|O:scp_recv", kwlist,
	                                 &path, &get_stat))
		return NULL;
	if (get_stat && (get_stat_is_true = PyObject_IsTrue(get_stat)) < 0)
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	channel = libssh2_scp_recv(self->session, path,
	                           get_stat_is_true ? &sb : 0);
	Py_END_ALLOW_THREADS

	CHECK_RETURN_POINTER(channel, self)

	/* Return a tuple of the channel and (size, mode, mtime, atime)
	 * of the remote file if the get_stat argument is true else return
	 * a tuple of the channel and None. */
	chan = (PyObject *)SSH2_Channel_New(channel, self);
	if (!get_stat_is_true)
		return Py_BuildValue("(OO)", chan, Py_None);

	return Py_BuildValue("(O(LlLL))", chan,
	                     (PY_LONG_LONG)sb.st_size,
	                     (long)sb.st_mode,
	                     (PY_LONG_LONG)sb.st_mtime,
	                     (PY_LONG_LONG)sb.st_atime);
}